Emoji picker

A React component in Beamline's Form controls category.

An emoji chosen from a search and a grid. The trigger shows the chosen emoji and opens a search above the emoji by group, with the recently used first. Typing narrows by name and keywords and says how many match, or that none do; arrows move through the grid by row and column, Enter picks and closes, and the chosen emoji stays marked when it opens again. On a phone it opens as a sheet.

Use it for

  • Choosing an emoji for a status, a reaction, a label or a channel icon.
  • Any small picker over a large set of symbols where search beats scrolling.

Not for

  • The quick reaction row under a message (chat-thread's reactions).
  • Choosing an icon from an icon set (an icon picker).

Anatomy

  • trigger: the chosen emoji, named for its use
  • search: names and keywords
  • grid: recently used, then each group, sticky group names
  • nothing found: said, with what to try

States

  • nothing chosen (a plus)
  • chosen (marked when it opens again)
  • recently used first
  • searching: how many match
  • nothing found
  • phone: a sheet
  • right to left: arrows follow the reading direction
  • reduced motion: no hover lift

Keyboard

  • Enter or Space opens; type to search
  • Down from the search moves into the grid; arrows move by row and column; Home and End
  • Enter picks and closes; Escape closes and returns focus to the trigger

Motion

The hovered cell lifts slightly; the layer grows from the trigger.

Props

PropTypeDefaultDescription
label (required)string—What the emoji is for ("Reaction", "Status"); the trigger's name.
valuestring—Controlled selected value; omit to use defaultValue.
defaultValuestring—Initial selection when uncontrolled; omitted by default.
onValueChange((emoji: string) => void)—Reports the selected value after a change; no callback by default.
emojiEmojiEntry[]—The set to offer; a curated English-named set by default.
defaultRecentstring[]—Recently used, newest first; picks are added in front.
defaultOpenboolean—Initial open state when uncontrolled; defaults to false.
disabledboolean—
classNamestring—Classes on the documented visual root; no override by default.
styleCSSProperties—Inline styles on the documented visual root; no overrides by default.
refRef<HTMLButtonElement>—Receives the documented native target or imperative handle; omitted by default.
EmojiPanel.chosenstring—On EmojiPanel: The emoji marked as chosen, where Tab lands first.
EmojiPanel.recentstring[]—On EmojiPanel: Shown first, newest first.
EmojiPanel.onPick (required)(emoji: string) => void—

Built from

Used in

Import

import { EmojiPicker, EmojiPanel } from "@beamline/emoji-picker";

Get it

Emoji picker is part of Beamline UI. Install the parts you need in your React app as compiled packages or editable source. Get Beamline · Connect your agent

More in Form controls

  • Target table: Rows of repeated rounds with typed targets (a load × a count, a count range, a time, a load held for a time), each row drawn as a bar beside its numbers…
  • Color Palette: A wheel of preset colours to pick from: twelve hues around the ring, their tints inward, white at the middle; the chosen swatch lifts and carries a check.
  • Rich text editor: A Notion-grade writing surface: slash menu for every block, a formatting toolbar on selection, drag-to-move blocks, nesting, markdown shortcuts, paste…
  • Allocation editor: Parts of a fixed whole edited as transfers: an ordered strip whose boundaries drag or step between neighbours and a roster of exact amounts where typing…
  • Radio cards: One choice among rich options as cards with optional media, icon, detail and a figure; one selection ring follows the stable choice.
  • Calendar: Month grids for picking a day or a range: a real grid with arrows by day and week, Page keys by month, closed days, today's dot, and a range span that…
  • Availability rule editor: When someone (or something) can be booked: hours for each day of the week, one or more ranges a day, a day turned off, a day's hours copied to the others…
  • Recurrence editor: How something repeats, set in plain controls and said back in a sentence: every N days, weeks, months or years; which weekdays; in a month, on a date or…
  • Signature pad: A pad for a drawn signature whose ink follows a stylus's pressure (and thins with speed under a mouse or finger); undo, replay, PNG or SVG export, and…
  • Image cropper: Frame a picture before it is saved: a fixed window (square, round for avatars, wide for covers, or free with handles) over the picture, which you drag…
  • Input Dissolve: A one-line field whose text breaks into specks and drifts off once it is sent, last letter first; the field is empty and ready again.
  • Password field: A password field with a reveal control, and a strength meter when a password is being created.
  • Card field: A payment card in one field: the number groups as it is typed and names its network, the expiry and security code follow on their own as each part…
  • File drop zone: A generous target for files: drop or choose, each checked against type, size and count with the reason when turned away; uploads show progress and can be…
  • Scrubber: A budget, a timeout or a position on a scale where the neighbourhood matters: the readout says how far under or over the named limit the value is, the…
  • Slider: A value or range on a known scale: the thumb grows under the finger and shows its value while dragged or focused; marks, end icons and a value readout.
  • Rating: A score on a small scale: stars that fill as you point (halves too) and light one after another when chosen, with the word for the score beside them…
  • Date range picker: A reporting range: presets on one side and two months on the other (one on a phone); the trigger names the preset in use, and the footer counts the days…
  • OTP input: A verification code in separate boxes backed by one real field, so paste, SMS autofill and Backspace work; optional groups like 123–456.
  • Segmented control: Two to five views or ranges of the same content (1D / 1W / 1M, List / Board): a radio group whose raised thumb slides to the choice.
  • Stage field: A record's status as its stages in order, editable in place. Stages before the current one read as passed (gone through, never "complete"); only the…
  • Layout picker: Shared record layouts for one page. Each layout says where it's used ("Used on 3 pages: Deals, this page, Forecast") and how many fields it shows, and a…
  • Tooth picker: Teeth and their surfaces for one procedure. The arch by Universal number as you face the patient (upper 1–16, lower 32–17; supernumerary teeth on their…
  • Colour picker: A swatch that opens a picker: saturation-brightness plane, hue strip, HEX/RGB/HSL/OKLCH value to type or copy, the screen eyedropper where available…
  • Chip group: Quick filters as chips: a chosen chip fills and grows a check, counts show what each would return, and extra chips fold behind “+N”.
  • Shortcut recorder: Lets people set their own shortcut: press the keys, see them as keycaps; a clash or a browser-kept shortcut asks first. ShortcutCheatsheet lists every…
  • Mention input: A composer where @people and #channels become single tokens with suggestions at the caret; the value keeps the text and where each mention sits.
  • Tag input: Short free-form values as tags: Enter, comma or Tab adds, a pasted list adds them all, Backspace twice removes the last; duplicates and invalid values…
  • Multi-select: Several values from a known list as removable chips in the field; the list has a search field (for long lists), checkable rows and a count with Clear…
  • Tree select: A field that picks from a tree: departments and teams, categories and subcategories, folders, regions and cities; the list opens as an indented tree…
  • Combobox: One value from a long list found by typing (time zones, countries, customers): ranked matches with the match emphasised, keywords, optional group…
  • Phone input: A phone number with its country: searchable picker with country and dialling codes, “+44…” switches the country, the number groups as typed, and the…
  • Date picker: One date in a form: a field that opens the month grid under it with focus inside, picks and closes; Today and Clear below, optional clear button.
  • Time picker: A time of day as hour and minute segments, typed or stepped, 12- or 24-hour; the clock opens a list of times at the step.
  • Reminder picker: Snooze or remind, at an exact time. Two named actions on one picker: Snooze hides the item until then, Remind me keeps it in view and reminds at that…
  • Number field: A bounded number with − and +: arrows and Page keys step, typing is read in the locale and clamped on leaving, limits can be explained, and the label can…
  • Stock adjust: An on-hand count changed with its reason: received, recounted, damaged, lost or returned; by an amount or to a new count; in the item's unit or in packs…
  • Inline edit: Text, a number or an amount of money that becomes a field in the same place: Enter (or ⌘Enter when multiline) saves, Escape cancels, leaving saves…
  • Search field: The search entry point: magnifier, clear button, Escape to clear, a shortcut hint and an optional live border beam.
  • Switch: A setting that applies at once: a thumb that slides on a spring and stretches under the finger, with an optional label before or after.
  • Form: Validation wiring for react-hook-form (and zod) on the system's own fields: each field already links its label, help and error, so FormField hands over…
  • Select: One choice from a short known list, in the same frame as every text field: label, help, error, option groups and details.
  • Toggle group: Pressable toggles where one or several can be on: alignment, bold and italic, view options; bare for toolbars or framed.
  • Input: A single-line text field with its label, help and error wired for assistive tech, three sizes and adornments. With complete or emailDomains it offers…
  • Checkbox: A yes/no choice with an optional label and help, including the mixed state for select-all; the check draws itself in.
  • Radio group: One choice from a short visible set, each option with an optional description, vertical or in a row.
  • Textarea: Multi-line plain text that grows with what is typed up to a limit, with an optional character count.
  • Label: The text label tied to a form control, with a required marker that screen readers announce.
  • Value grip: A grip on a scale your screen draws (a bar's end, a flag, a markup's edge): drag it, or use the arrows, to a value snapped to its step; the value arrives…
  • Count adjust: A count of whole things against its whole (received of ordered, credits of bought), set by hand: what is on record stays solid, the change is drawn as…

Part of Beamline UI: polished, editable React components and complete screens for custom applications. Build your own style from any look; tokens, fonts, radii, motion; not only colours.