saturation/uisaturation/ui
DocsComponentsBlocksPages
GitHub

Sections

IntroductionComponentsInstallationMCPTheming

Components

ComponentsAccordionAI Chat InputAlertAnimated GroupAnimated NumberAvatarBadgeBeamBlur FadeBorder TrailBreadcrumbButtonButton GroupCalendar PickerCardChartCheckboxCollapsibleComboboxCommandComparison SliderContext MenuCredit CardData TableDate PickerDialogDropdown MenuEmoji PickerEmptyFieldFiltersFull CalendarGlow EffectInputInput GroupInput OTPItemKanbanKbdMenubarNavigation MenuNovel EditorPaginationParallaxProgressProgressive BlurRadio GroupRippleSelectSeparatorSheetSkeletonSliderSonnerSpinnerSpotlightSwitchTableTabsText EffectText ShimmerTextareaToggleToggle GroupTreeTypography
Docs/Components/Emoji Picker

Emoji Picker

A composable emoji picker with search, categories, skin tone support, and virtualized rendering.

Loading...

Installation

pnpm dlx shadcn@latest add https://ui.saturation.io/r/emoji-picker.json

Tailwind v4 — Source Scanning

Saturation UI copies component source into your project via the shadcn registry (no npm package). If Tailwind v4 isn't scanning your components directory, add this to your CSS entry file:

@source "../components";

This ensures all utility classes in CVA variants and data attribute selectors are included in your build.

Usage

import {
  EmojiPicker,
  EmojiPickerSearch,
  EmojiPickerContent,
  EmojiPickerFooter,
} from "@/components/ui/emoji-picker"
<EmojiPicker onEmojiSelect={(emoji) => console.log(emoji)}>
  <EmojiPickerSearch placeholder="Search emoji…" />
  <EmojiPickerContent />
  <EmojiPickerFooter />
</EmojiPicker>

Examples

Popover

Loading...
Emoji picker inside a popover trigger.

Skin Tones

Loading...
Custom footer with skin tone selector.

Powered by Frimousse

This component wraps Frimousse — a headless, composable emoji picker by Liveblocks. Emoji data loads asynchronously from the Emojibase CDN.

With Popover

For trigger-based usage, compose with the Popover component — see the Popover example.

API Reference

EmojiPicker

PropTypeDefaultDescription
onEmojiSelect(emoji: Emoji) => void—Callback when an emoji is selected.
localestring"en"Language locale for emoji labels.
skinTone"none" | "light" | "medium-light" | "medium" | "medium-dark" | "dark""none"Skin tone variation for human emojis.
columnsnumber9Number of columns in the emoji grid.
classNamestring—Additional CSS classes.

EmojiPickerSearch

PropTypeDefaultDescription
placeholderstring—Placeholder text for the search input.
classNamestring—Additional CSS classes.

EmojiPickerContent

PropTypeDefaultDescription
classNamestring—Additional CSS classes for the viewport.

EmojiPickerFooter

PropTypeDefaultDescription
classNamestring—Additional CSS classes.

Accessibility

Keyboard Interactions

KeyDescription
ArrowUp/Down/Left/RightNavigate between emojis.
EnterSelect the focused emoji.
TabMove focus between search and emoji grid.
PreviousDropdown MenuNextEmpty

On This Page

  • Installation
  • Usage
  • Examples
  • Popover
  • Skin Tones
  • Powered by Frimousse
  • With Popover
  • API Reference
  • EmojiPicker
  • EmojiPickerSearch
  • EmojiPickerContent
  • EmojiPickerFooter
  • Accessibility
  • Keyboard Interactions
Category
Pick an emoji…
Category
Pick an emoji…