saturation/uisaturation/ui
DocsComponentsBlocksPagesEmails
GitHub

Sections

IntroductionComponentsInstallationMCPThemingDesign

Components

Components

General

AvatarBadgeButtonKbdProgressSeparatorSkeletonSpin ResolveSpinnerSync ButtonTypography

Forms & Inputs

Address LookupCalendar PickerCheckboxComboboxDate PickerEmoji PickerFavicon SearchFieldInputInput GroupInput OTPRadio GroupSelectSliderSwitchTextareaToggleToggle Group

Data Display

AccordionAlertCardChartComparison SliderCredit CardData TableEmptyItemSaturation Credit CardTableTree

Navigation

BreadcrumbCommandMenubarNavigation MenuPaginationTabs

Overlays

CollapsibleContext MenuDialogDropdown MenuSheet

Layout

Button GroupFont ProviderWizard Split Layout

Feedback

Sonner

Animation & Effects

Animated GroupAnimated ListAnimated NumberBeamBlur FadeBorder TrailGlow EffectLiquid MetalLoading StateParallaxPixelProgressive BlurRippleSpotlightText EffectText Shimmer

Productivity

Agent ChatAI Chat InputCoding AgentFiltersFull CalendarKanbanNovel Editor
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 @saturation-ui/emoji-picker

Tailwind v4 — Source Scanning

The public shadcn registry installs component source into your project. 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…