export type EmojiCategoryId = 'smileys' | 'gestures' | 'hearts' | 'animals' | 'food' | 'travel' | 'objects' | 'symbols'; export interface EmojiDefinition { id: string; category: EmojiCategoryId; keywords: string[]; label: string; } export const EMOJI_CATEGORIES: Array<{ id: EmojiCategoryId; label: string; icon: string }> = [ { id: 'smileys', label: 'Смайлы', icon: 'e-grinning' }, { id: 'gestures', label: 'Жесты', icon: 'e-thumbs-up' }, { id: 'hearts', label: 'Сердца', icon: 'e-red-heart' }, { id: 'animals', label: 'Животные', icon: 'e-dog' }, { id: 'food', label: 'Еда', icon: 'e-pizza' }, { id: 'travel', label: 'Путешествия', icon: 'e-car' }, { id: 'objects', label: 'Предметы', icon: 'e-bulb' }, { id: 'symbols', label: 'Символы', icon: 'e-check' } ]; export const EMOJI_DEFINITIONS: EmojiDefinition[] = [ { id: 'e-grinning', category: 'smileys', label: 'Улыбка', keywords: ['радость', 'смех', 'улыбка'] }, { id: 'e-smile', category: 'smileys', label: 'Улыбка глаза', keywords: ['улыбка', 'радость'] }, { id: 'e-laugh', category: 'smileys', label: 'Смех', keywords: ['смех', 'lol', 'ха'] }, { id: 'e-rofl', category: 'smileys', label: 'Катаюсь', keywords: ['ржу', 'смех'] }, { id: 'e-wink', category: 'smileys', label: 'Подмигивание', keywords: ['подмигнуть'] }, { id: 'e-blush', category: 'smileys', label: 'Смущение', keywords: ['румянец', 'мило'] }, { id: 'e-innocent', category: 'smileys', label: 'Невинность', keywords: ['ангел', 'невинный'] }, { id: 'e-slight-smile', category: 'smileys', label: 'Лёгкая улыбка', keywords: ['улыбка'] }, { id: 'e-thinking', category: 'smileys', label: 'Думаю', keywords: ['думаю', 'хм'] }, { id: 'e-neutral', category: 'smileys', label: 'Нейтрально', keywords: ['нейтрально'] }, { id: 'e-expressionless', category: 'smileys', label: 'Без эмоций', keywords: ['пусто'] }, { id: 'e-sleeping', category: 'smileys', label: 'Сплю', keywords: ['сон', 'спать', 'zzz'] }, { id: 'e-tired', category: 'smileys', label: 'Устал', keywords: ['усталость'] }, { id: 'e-cry', category: 'smileys', label: 'Плач', keywords: ['грусть', 'слёзы'] }, { id: 'e-sob', category: 'smileys', label: 'Рыдаю', keywords: ['слёзы', 'грусть'] }, { id: 'e-angry', category: 'smileys', label: 'Злость', keywords: ['злой', 'гнев'] }, { id: 'e-rage', category: 'smileys', label: 'Ярость', keywords: ['злость'] }, { id: 'e-shock', category: 'smileys', label: 'Шок', keywords: ['удивление', 'шок'] }, { id: 'e-fear', category: 'smileys', label: 'Страх', keywords: ['страх', 'испуг'] }, { id: 'e-cool', category: 'smileys', label: 'Круто', keywords: ['крутой', 'очки'] }, { id: 'e-nerd', category: 'smileys', label: 'Ботан', keywords: ['очки', 'умный'] }, { id: 'e-sick', category: 'smileys', label: 'Болею', keywords: ['больной', 'маска'] }, { id: 'e-mask', category: 'smileys', label: 'Маска', keywords: ['маска', 'больной'] }, { id: 'e-party', category: 'smileys', label: 'Праздник', keywords: ['вечеринка', 'шапка'] }, { id: 'e-star-eyes', category: 'smileys', label: 'Звёзды', keywords: ['восторг', 'звёзды'] }, { id: 'e-heart-eyes', category: 'smileys', label: 'Влюблён', keywords: ['любовь', 'сердце'] }, { id: 'e-kiss', category: 'smileys', label: 'Поцелуй', keywords: ['поцелуй'] }, { id: 'e-tongue', category: 'smileys', label: 'Язык', keywords: ['шутка', 'язык'] }, { id: 'e-sweat', category: 'smileys', label: 'Пот', keywords: ['нервы', 'пот'] }, { id: 'e-dizzy', category: 'smileys', label: 'Головокружение', keywords: ['dizzy'] }, { id: 'e-thumbs-up', category: 'gestures', label: 'Лайк', keywords: ['лайк', 'ok', 'да'] }, { id: 'e-thumbs-down', category: 'gestures', label: 'Дизлайк', keywords: ['нет', 'минус'] }, { id: 'e-clap', category: 'gestures', label: 'Аплодисменты', keywords: ['хлопать', 'браво'] }, { id: 'e-wave', category: 'gestures', label: 'Привет', keywords: ['привет', 'рука'] }, { id: 'e-pray', category: 'gestures', label: 'Молитва', keywords: ['спасибо', 'please'] }, { id: 'e-muscle', category: 'gestures', label: 'Сила', keywords: ['сила', 'качок'] }, { id: 'e-ok-hand', category: 'gestures', label: 'Ок', keywords: ['ok', 'хорошо'] }, { id: 'e-victory', category: 'gestures', label: 'Победа', keywords: ['peace', 'v'] }, { id: 'e-crossed-fingers', category: 'gestures', label: 'Удачи', keywords: ['удача'] }, { id: 'e-point-up', category: 'gestures', label: 'Указать', keywords: ['вверх'] }, { id: 'e-point-down', category: 'gestures', label: 'Вниз', keywords: ['вниз'] }, { id: 'e-raised-hand', category: 'gestures', label: 'Рука', keywords: ['стоп', 'рука'] }, { id: 'e-fist', category: 'gestures', label: 'Кулак', keywords: ['кулак', 'сила'] }, { id: 'e-handshake', category: 'gestures', label: 'Рукопожатие', keywords: ['deal', 'договор'] }, { id: 'e-writing', category: 'gestures', label: 'Пишу', keywords: ['писать'] }, { id: 'e-red-heart', category: 'hearts', label: 'Сердце', keywords: ['любовь', 'сердце'] }, { id: 'e-orange-heart', category: 'hearts', label: 'Оранжевое', keywords: ['сердце'] }, { id: 'e-yellow-heart', category: 'hearts', label: 'Жёлтое', keywords: ['сердце'] }, { id: 'e-green-heart', category: 'hearts', label: 'Зелёное', keywords: ['сердце'] }, { id: 'e-blue-heart', category: 'hearts', label: 'Синее', keywords: ['сердце'] }, { id: 'e-purple-heart', category: 'hearts', label: 'Фиолетовое', keywords: ['сердце'] }, { id: 'e-black-heart', category: 'hearts', label: 'Чёрное', keywords: ['сердце'] }, { id: 'e-white-heart', category: 'hearts', label: 'Белое', keywords: ['сердце'] }, { id: 'e-broken-heart', category: 'hearts', label: 'Разбитое', keywords: ['грусть'] }, { id: 'e-sparkling-heart', category: 'hearts', label: 'Искры', keywords: ['любовь'] }, { id: 'e-two-hearts', category: 'hearts', label: 'Два сердца', keywords: ['любовь'] }, { id: 'e-revolving-hearts', category: 'hearts', label: 'Вращение', keywords: ['любовь'] }, { id: 'e-dog', category: 'animals', label: 'Собака', keywords: ['собака', 'пёс'] }, { id: 'e-cat', category: 'animals', label: 'Кошка', keywords: ['кошка', 'кот'] }, { id: 'e-mouse', category: 'animals', label: 'Мышь', keywords: ['мышь'] }, { id: 'e-rabbit', category: 'animals', label: 'Кролик', keywords: ['кролик'] }, { id: 'e-bear', category: 'animals', label: 'Медведь', keywords: ['медведь'] }, { id: 'e-panda', category: 'animals', label: 'Панда', keywords: ['панда'] }, { id: 'e-lion', category: 'animals', label: 'Лев', keywords: ['лев'] }, { id: 'e-tiger', category: 'animals', label: 'Тигр', keywords: ['тигр'] }, { id: 'e-fox', category: 'animals', label: 'Лиса', keywords: ['лиса'] }, { id: 'e-wolf', category: 'animals', label: 'Волк', keywords: ['волк'] }, { id: 'e-monkey', category: 'animals', label: 'Обезьяна', keywords: ['обезьяна'] }, { id: 'e-chicken', category: 'animals', label: 'Курица', keywords: ['курица'] }, { id: 'e-penguin', category: 'animals', label: 'Пингвин', keywords: ['пингвин'] }, { id: 'e-unicorn', category: 'animals', label: 'Единорог', keywords: ['единорог'] }, { id: 'e-butterfly', category: 'animals', label: 'Бабочка', keywords: ['бабочка'] }, { id: 'e-pizza', category: 'food', label: 'Пицца', keywords: ['пицца', 'еда'] }, { id: 'e-burger', category: 'food', label: 'Бургер', keywords: ['бургер'] }, { id: 'e-fries', category: 'food', label: 'Фри', keywords: ['картошка'] }, { id: 'e-hotdog', category: 'food', label: 'Хот-дог', keywords: ['хотдог'] }, { id: 'e-cake', category: 'food', label: 'Торт', keywords: ['торт', 'день рождения'] }, { id: 'e-cookie', category: 'food', label: 'Печенье', keywords: ['печенье'] }, { id: 'e-coffee', category: 'food', label: 'Кофе', keywords: ['кофе'] }, { id: 'e-beer', category: 'food', label: 'Пиво', keywords: ['пиво'] }, { id: 'e-wine', category: 'food', label: 'Вино', keywords: ['вино'] }, { id: 'e-apple', category: 'food', label: 'Яблоко', keywords: ['яблоко', 'фрукт'] }, { id: 'e-banana', category: 'food', label: 'Банан', keywords: ['банан'] }, { id: 'e-grape', category: 'food', label: 'Виноград', keywords: ['виноград'] }, { id: 'e-watermelon', category: 'food', label: 'Арбуз', keywords: ['арбуз'] }, { id: 'e-egg', category: 'food', label: 'Яйцо', keywords: ['яйцо'] }, { id: 'e-bread', category: 'food', label: 'Хлеб', keywords: ['хлеб'] }, { id: 'e-car', category: 'travel', label: 'Авто', keywords: ['машина', 'авто'] }, { id: 'e-bus', category: 'travel', label: 'Автобус', keywords: ['автобус'] }, { id: 'e-train', category: 'travel', label: 'Поезд', keywords: ['поезд'] }, { id: 'e-airplane', category: 'travel', label: 'Самолёт', keywords: ['самолёт'] }, { id: 'e-rocket', category: 'travel', label: 'Ракета', keywords: ['космос', 'ракета'] }, { id: 'e-ship', category: 'travel', label: 'Корабль', keywords: ['корабль'] }, { id: 'e-bike', category: 'travel', label: 'Велосипед', keywords: ['велосипед'] }, { id: 'e-house', category: 'travel', label: 'Дом', keywords: ['дом'] }, { id: 'e-mountain', category: 'travel', label: 'Гора', keywords: ['гора'] }, { id: 'e-beach', category: 'travel', label: 'Пляж', keywords: ['море', 'пляж'] }, { id: 'e-bulb', category: 'objects', label: 'Лампочка', keywords: ['идея', 'лампа'] }, { id: 'e-phone', category: 'objects', label: 'Телефон', keywords: ['телефон'] }, { id: 'e-laptop', category: 'objects', label: 'Ноутбук', keywords: ['компьютер'] }, { id: 'e-camera', category: 'objects', label: 'Камера', keywords: ['фото'] }, { id: 'e-gift', category: 'objects', label: 'Подарок', keywords: ['подарок'] }, { id: 'e-balloon', category: 'objects', label: 'Шарик', keywords: ['праздник'] }, { id: 'e-book', category: 'objects', label: 'Книга', keywords: ['книга'] }, { id: 'e-key', category: 'objects', label: 'Ключ', keywords: ['ключ'] }, { id: 'e-lock', category: 'objects', label: 'Замок', keywords: ['замок', 'безопасность'] }, { id: 'e-clock', category: 'objects', label: 'Часы', keywords: ['время'] }, { id: 'e-music', category: 'objects', label: 'Музыка', keywords: ['нота', 'музыка'] }, { id: 'e-game', category: 'objects', label: 'Игра', keywords: ['геймпад', 'игра'] }, { id: 'e-check', category: 'symbols', label: 'Галочка', keywords: ['да', 'ok'] }, { id: 'e-cross', category: 'symbols', label: 'Крест', keywords: ['нет', 'ошибка'] }, { id: 'e-exclamation', category: 'symbols', label: 'Внимание', keywords: ['!', 'важно'] }, { id: 'e-question', category: 'symbols', label: 'Вопрос', keywords: ['?', 'вопрос'] }, { id: 'e-fire', category: 'symbols', label: 'Огонь', keywords: ['огонь', 'hot'] }, { id: 'e-star', category: 'symbols', label: 'Звезда', keywords: ['звезда'] }, { id: 'e-sparkles', category: 'symbols', label: 'Искры', keywords: ['блеск', 'новый'] }, { id: 'e-100', category: 'symbols', label: '100', keywords: ['сто', 'идеально'] }, { id: 'e-plus', category: 'symbols', label: 'Плюс', keywords: ['плюс'] }, { id: 'e-minus', category: 'symbols', label: 'Минус', keywords: ['минус'] }, { id: 'e-warning', category: 'symbols', label: 'Предупреждение', keywords: ['warning'] }, { id: 'e-recycle', category: 'symbols', label: 'Recycle', keywords: ['эко'] } ]; export const EMOJI_BY_ID = new Map(EMOJI_DEFINITIONS.map((item) => [item.id, item])); export function isEmojiId(value: string) { return EMOJI_BY_ID.has(value); } export function searchEmojis(query: string) { const normalized = query.trim().toLowerCase(); if (!normalized) return EMOJI_DEFINITIONS; return EMOJI_DEFINITIONS.filter( (item) => item.label.toLowerCase().includes(normalized) || item.id.includes(normalized) || item.keywords.some((keyword) => keyword.includes(normalized)) ); }