Skip to content
File

Blob: src/client/lib/emoji/picker-data.ts

typescript42 lines
1import { emojis as tiptapEmojis, type EmojiItem } from "@tiptap/extension-emoji";
2import { normalizeEmoji } from "@/shared/emoji/shared";
3import { EMOJI_GROUP_OVERRIDES } from "./generated/emoji-group-overrides";
4 
5export interface PickerEmojiItem extends EmojiItem {
6 rawEmoji?: string;
7}
8 
9export const PICKER_GROUP_ORDER = [
10 "smileys & emotion",
11 "people & body",
12 "animals & nature",
13 "food & drink",
14 "travel & places",
15 "activities",
16 "objects",
17 "symbols",
18 "flags",
19] as const;
20 
21const emojiGroupOverrides = EMOJI_GROUP_OVERRIDES as Record<string, string>;
22 
23function createPickerEmojiItem(item: EmojiItem): PickerEmojiItem {
24 if (!item.emoji) {
25 return item;
26 }
27 
28 const normalizedEmoji = normalizeEmoji(item.emoji);
29 return {
30 ...item,
31 emoji: normalizedEmoji,
32 rawEmoji: item.emoji,
33 group: item.group || emojiGroupOverrides[normalizedEmoji] || "",
34 };
35}
36 
37function isPickerEmojiItem(item: PickerEmojiItem): item is PickerEmojiItem & { emoji: string; group: string } {
38 return Boolean(item.emoji && item.group && item.group !== "components");
39}
40 
41export const PICKER_EMOJI_ITEMS = tiptapEmojis.map(createPickerEmojiItem).filter(isPickerEmojiItem);