Skip to content
Components

Emoji Picker

BetaBeta — the props contract is close to final, but small breaking changes can still land.

Searchable, virtualized emoji grid with skin-aware cells, an active emoji footer, and an emoji-or-icon tabbed variant.

Examples

Chat reactions

Pick a common reaction or expand the same popover to search all emoji. The app owns reaction counts and recent emoji.

Emoji or icon

Emoji and icon selection in one popover with an animated height between panels.

Composition

Popover emoji picker

  • <EmojiPicker>
    • <EmojiPickerSearch />
    • <EmojiPickerCategories />
    • <EmojiPickerContent>
      • <EmojiPickerRecent />
      </EmojiPickerContent>
    • <EmojiPickerFooter />
    </EmojiPicker>

Quick reactions

EmojiPickerReactions works without an EmojiPicker root. The app supplies emoji labels and handles selection.

  • <PopoverViewport>
    • <EmojiPickerReactions />
    </PopoverViewport>

Emoji or icon

Place inside PopoverContent. Each panel owns its selection callback; the host stores the selected symbol and closes the popover.

  • <EmojiIconPicker>
    • <EmojiIconPickerTabs />
    • <EmojiIconPickerEmoji>
      • <EmojiPickerSearch />
      • <EmojiPickerContent />
      </EmojiIconPickerEmoji>
    • <EmojiIconPickerIcons>
      • <IconPickerSearch />
      • <IconPickerContent />
      </EmojiIconPickerIcons>
    </EmojiIconPicker>

Installation

The Control UI source installs this primitive from src/registry/sources/control-ui/ui/emoji-picker.tsx.

Registry command
See registry manifest

Dependencies

Raw code

Primary installed source

src/registry/sources/control-ui/ui/emoji-picker.tsx

Knobs

Typed custom properties the recipe paints with. Set one on the root — style, a utility class, or a skin — and every slot inherits it.

--cui-emoji-picker-* · 7 knobsHow the cascade resolves
--cui-emoji-picker-cell-size<length-percentage>calc(var(--spacing) * 10)
--cui-emoji-picker-height<length-percentage>22rem
--cui-emoji-picker-cell-radius<length-percentage>var(--radius-control)
--cui-emoji-picker-glyph-size<length-percentage>1.25rem
--cui-emoji-picker-active-background<color>var(--accent)
--cui-emoji-picker-header-background<color>var(--popover)
--cui-emoji-picker-header-foreground<color>var(--muted-foreground)