'use client'; import { useMemo, useState } from 'react'; import { Search } from 'lucide-react'; import { Input } from '@/components/ui/input'; import { EMOJI_CATEGORIES, EMOJI_DEFINITIONS, searchEmojis, type EmojiCategoryId } from '@/lib/emoji-catalog'; import { emojiIdToNative } from '@/lib/emoji-native-map'; import { cn } from '@/lib/utils'; interface EmojiPickerProps { onSelect: (nativeEmoji: string) => void; className?: string; } export function EmojiPicker({ onSelect, className }: EmojiPickerProps) { const [category, setCategory] = useState('smileys'); const [query, setQuery] = useState(''); const items = useMemo(() => { const filtered = searchEmojis(query); if (query.trim()) return filtered; return filtered.filter((item) => item.category === category); }, [category, query]); return (
setQuery(event.target.value)} placeholder="Поиск смайликов" className="rounded-xl pl-9" />
{!query.trim() ? (
{EMOJI_CATEGORIES.map((item) => { const native = emojiIdToNative(item.icon) ?? '✨'; return ( ); })}
) : null}
{items.map((item) => { const native = emojiIdToNative(item.id) ?? '✨'; return ( ); })} {!items.length ?

Ничего не найдено

: null}
{!query.trim() ? (

{EMOJI_CATEGORIES.find((item) => item.id === category)?.label} · {EMOJI_DEFINITIONS.filter((item) => item.category === category).length}{' '} смайликов

) : null}
); }