Installation
npm install @kuzenbo/core
Usage
import { EmojiPicker } from "@kuzenbo/core";
function Example() {
const handleEmojiSelect = (emoji: string) => {
console.log("Selected emoji:", emoji);
};
return (
<EmojiPicker onEmojiSelect={handleEmojiSelect}>
<EmojiPicker.Search />
<EmojiPicker.Content>
<EmojiPicker.List />
<EmojiPicker.Loading>Loading emojis...</EmojiPicker.Loading>
<EmojiPicker.Empty>No emojis found</EmojiPicker.Empty>
</EmojiPicker.Content>
<EmojiPicker.ActiveEmojiPreview>
<EmojiPicker.ActiveEmoji />
<EmojiPicker.SkinToneSelector>
<EmojiPicker.SkinTone value="light" />
<EmojiPicker.SkinTone value="mediumLight" />
<EmojiPicker.SkinTone value="medium" />
<EmojiPicker.SkinTone value="mediumDark" />
<EmojiPicker.SkinTone value="dark" />
</EmojiPicker.SkinToneSelector>
</EmojiPicker.ActiveEmojiPreview>
</EmojiPicker>
);
}
Props
EmojiPicker
size
'xs' | 'sm' | 'md' | 'lg' | 'xl'
default:"'md'"
The size of the emoji picker.
Callback when an emoji is selected.
Additional CSS classes to apply.
EmojiPicker.Search
placeholder
string
default:"'Search emojis...'"
Placeholder text for the search input.
Additional CSS classes to apply.
EmojiPicker.List
Additional CSS classes to apply.
EmojiPicker.SkinTone
value
'light' | 'mediumLight' | 'medium' | 'mediumDark' | 'dark'
required
The skin tone variant.
Additional CSS classes to apply.
Examples
Basic Emoji Picker
<EmojiPicker onEmojiSelect={(emoji) => console.log(emoji)}>
<EmojiPicker.Search />
<EmojiPicker.Content>
<EmojiPicker.List />
</EmojiPicker.Content>
</EmojiPicker>
With Popover
import { Popover, Button } from "@kuzenbo/core";
function EmojiPickerPopover() {
const [emoji, setEmoji] = useState("😀");
return (
<Popover>
<Popover.Trigger asChild>
<Button variant="outline" size="lg">
{emoji}
</Button>
</Popover.Trigger>
<Popover.Content className="w-auto p-0">
<EmojiPicker onEmojiSelect={(e) => setEmoji(e)}>
<EmojiPicker.Search />
<EmojiPicker.Content>
<EmojiPicker.List />
</EmojiPicker.Content>
</EmojiPicker>
</Popover.Content>
</Popover>
);
}
Different Sizes
{/* Small */}
<EmojiPicker size="sm" onEmojiSelect={handleSelect}>
{/* ... */}
</EmojiPicker>
{/* Large */}
<EmojiPicker size="lg" onEmojiSelect={handleSelect}>
{/* ... */}
</EmojiPicker>
Custom Empty State
<EmojiPicker onEmojiSelect={handleSelect}>
<EmojiPicker.Search />
<EmojiPicker.Content>
<EmojiPicker.List />
<EmojiPicker.Empty>
<div className="text-center p-4">
<p className="text-muted-foreground">No matching emojis</p>
</div>
</EmojiPicker.Empty>
</EmojiPicker.Content>
</EmojiPicker>