diff --git a/client/src/components/chat/chat-area.tsx b/client/src/components/chat/chat-area.tsx index ccb13c6..ba78c5b 100644 --- a/client/src/components/chat/chat-area.tsx +++ b/client/src/components/chat/chat-area.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useRef, useState } from 'react' -import { Edit, LogOut, Menu, MoreVertical, Send, Trash2 } from 'lucide-react' +import { Edit, LogOut, Menu, MoreVertical, Send, SmilePlus, Trash2 } from 'lucide-react' import type { Message } from '@/lib/types' import { Avatar, AvatarFallback } from '@/components/ui/avatar' import { Badge } from '@/components/ui/badge' @@ -26,6 +26,7 @@ import { DialogTitle, DialogTrigger, } from '@/components/ui/dialog' +import { flatEmojiList, emojiCategories } from './chat-emoji' interface ChatAreaProps { setIsMobileMenuOpen: (open: boolean) => void @@ -56,6 +57,16 @@ export default function ChatArea({ setIsMobileMenuOpen }: ChatAreaProps) { const currentChatMessages = selectedChat ? messages[selectedChat.id] : [] + type EmojiCategory = keyof typeof emojiCategories; + + const [selectedCategory, setSelectedCategory] = useState('all'); + const getFilteredEmojis = () => { + if (selectedCategory === 'all') { + return flatEmojiList; + } + return emojiCategories[selectedCategory] || []; + }; + useEffect(() => { if (chatAreaScrollDown) { scrollToBottom() @@ -280,9 +291,9 @@ export default function ChatArea({ setIsMobileMenuOpen }: ChatAreaProps) { className={cn( 'ml-2 text-xs', participant.role === 'admin' && - 'bg-red-100 text-red-700', + 'bg-red-100 text-red-700', participant.role === 'member' && - 'bg-blue-100 text-blue-700', + 'bg-blue-100 text-blue-700', )} > {participant.role} @@ -361,11 +372,10 @@ export default function ChatArea({ setIsMobileMenuOpen }: ChatAreaProps) { > {message.senderType === 'user' ? (
{!isCurrentUser && selectedChat.isGroup && (
@@ -502,6 +512,56 @@ export default function ChatArea({ setIsMobileMenuOpen }: ChatAreaProps) { onChange={(e) => setMessageText(e.target.value)} className="flex-1 h-10 py-2 px-4 bg-gray-100 rounded-full border-none text-sm md:text-base" /> + + + + + + +
+ + + {Object.keys(emojiCategories).map((category) => ( + + ))} +
+
+ {getFilteredEmojis().map((emoji, i) => ( + setMessageText(messageText + emoji)}> + {emoji} + + ))} +
+ +
+
-
+ ) } diff --git a/client/src/components/chat/chat-emoji.tsx b/client/src/components/chat/chat-emoji.tsx new file mode 100644 index 0000000..8f536a7 --- /dev/null +++ b/client/src/components/chat/chat-emoji.tsx @@ -0,0 +1,103 @@ +export const emojiCategories = { + smileys: [ + "๐Ÿ˜€", "๐Ÿ˜ƒ", "๐Ÿ˜„", "๐Ÿ˜", "๐Ÿ˜†", "๐Ÿ˜…", "๐Ÿ˜‚", "๐Ÿคฃ", "๐Ÿ˜Š", "๐Ÿ˜‡", + "๐Ÿ™‚", "๐Ÿ™ƒ", "๐Ÿ˜‰", "๐Ÿ˜Œ", "๐Ÿ˜", "๐Ÿฅฐ", "๐Ÿ˜˜", "๐Ÿ˜—", "๐Ÿ˜™", "๐Ÿ˜š", + "๐Ÿ˜‹", "๐Ÿ˜›", "๐Ÿ˜œ", "๐Ÿคช", "๐Ÿ˜", "๐Ÿค‘", "๐Ÿค—", "๐Ÿคญ", "๐Ÿคซ", "๐Ÿค”", + "๐Ÿค", "๐Ÿคจ", "๐Ÿ˜", "๐Ÿ˜‘", "๐Ÿ˜ถ", "๐Ÿ˜", "๐Ÿ˜’", "๐Ÿ™„", "๐Ÿ˜ฌ", "๐Ÿ˜ฎโ€๐Ÿ’จ", + "๐Ÿคฅ", "๐Ÿ˜Œ", "๐Ÿ˜”", "๐Ÿ˜ช", "๐Ÿคค", "๐Ÿ˜ด", "๐Ÿ˜ท", "๐Ÿค’", "๐Ÿค•", "๐Ÿคข", + "๐Ÿคฎ", "๐Ÿคง", "๐Ÿฅต", "๐Ÿฅถ", "๐Ÿฅด", "๐Ÿ˜ต", "๐Ÿ˜ตโ€๐Ÿ’ซ", "๐Ÿคฏ", "๐Ÿค ", "๐Ÿฅณ", + "๐Ÿ˜Ž", "๐Ÿค“", "๐Ÿง", "๐Ÿ˜•", "๐Ÿ˜Ÿ", "๐Ÿ™", "โ˜น๏ธ", "๐Ÿ˜ฎ", "๐Ÿ˜ฏ", "๐Ÿ˜ฒ", + "๐Ÿ˜ณ", "๐Ÿฅบ", "๐Ÿ˜ฆ", "๐Ÿ˜ง", "๐Ÿ˜จ", "๐Ÿ˜ฐ", "๐Ÿ˜ฅ", "๐Ÿ˜ข", "๐Ÿ˜ญ", "๐Ÿ˜ฑ", + "๐Ÿ˜–", "๐Ÿ˜ฃ", "๐Ÿ˜ž", "๐Ÿ˜“", "๐Ÿ˜ฉ", "๐Ÿ˜ซ", "๐Ÿฅฑ", "๐Ÿ˜ค", "๐Ÿ˜ก", "๐Ÿ˜ ", + "๐Ÿคฌ", "๐Ÿ˜ˆ", "๐Ÿ‘ฟ", "๐Ÿ’€", "โ˜ ๏ธ", "๐Ÿ’ฉ", "๐Ÿคก", "๐Ÿ‘น", "๐Ÿ‘บ", "๐Ÿ‘ป" + ], + love: [ + "๐Ÿ˜", "๐Ÿฅฐ", "๐Ÿ˜˜", "๐Ÿ˜—", "๐Ÿ˜™", "๐Ÿ˜š", "โค๏ธ", "๐Ÿงก", "๐Ÿ’›", "๐Ÿ’š", + "๐Ÿ’™", "๐Ÿ’œ", "๐ŸคŽ", "๐Ÿค", "๐Ÿ’•", "๐Ÿ’ž", "๐Ÿ’“", "๐Ÿ’—", "๐Ÿ’–", "๐Ÿ’˜", + "๐Ÿ’", "๐Ÿ’Ÿ", "๐Ÿ’Œ", "๐Ÿ’‹", "โฃ๏ธ", "๐Ÿ’”", "๐Ÿ’", "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ", "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + "๐Ÿ’‘", "๐Ÿ’", "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", "๐Ÿซ‚", "๐Ÿค—", "๐Ÿฅฒ", "๐Ÿ˜ป", "๐Ÿ˜ฝ", + "๐Ÿ˜š", "๐Ÿ˜™", "๐Ÿ˜ฝ", "๐Ÿ˜—", "๐Ÿซถ", "๐Ÿค", "๐Ÿซฐ", "๐Ÿ™", "๐Ÿ‘ผ", "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", "๐Ÿ‘ฉโ€๐Ÿ‘ง", "๐Ÿ‘ฉโ€๐Ÿ‘ฆ", "๐Ÿ‘จโ€๐Ÿ‘ง", "๐Ÿ‘จโ€๐Ÿ‘ฆ", "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", "๐Ÿงธ", "๐ŸŒน", + "๐ŸŒบ", "๐ŸŒท", "๐ŸŒธ", "๐Ÿ’", "๐ŸŽ", "๐ŸŽ€", "๐ŸŽŠ", "๐ŸŽ‰", "๐Ÿ’ƒ", "๐Ÿ•บ", + "๐Ÿ’‡", "๐Ÿ’†", "๐Ÿ‘—", "๐Ÿ‘ ", "๐Ÿ‘’", "๐Ÿ‘‘", "๐Ÿ‘›", "๐Ÿ‘œ", "๐Ÿ‘", "๐Ÿ’ผ", + "๐Ÿ’„", "๐Ÿ’Ž", "๐Ÿงด", "๐Ÿงผ", "๐Ÿ›", "๐Ÿ›€", "๐Ÿง–", "๐Ÿง–โ€โ™€๏ธ", "๐Ÿง–โ€โ™‚๏ธ", "๐Ÿซง", + "๐Ÿซ€", "๐Ÿซถ", "๐Ÿค", "๐Ÿ’˜", "๐Ÿ’“", "๐Ÿ’—", "๐Ÿ’ž", "๐Ÿ’–", "โฃ๏ธ", "๐Ÿ’" + ], + reactions: [ + "๐Ÿ˜€", "๐Ÿ˜ƒ", "๐Ÿ˜„", "๐Ÿ˜", "๐Ÿ˜†", "๐Ÿ˜…", "๐Ÿ˜‚", "๐Ÿคฃ", "๐Ÿฅฒ", "๐Ÿ˜Š", + "๐Ÿ˜‡", "๐Ÿ™‚", "๐Ÿ™ƒ", "๐Ÿ˜‰", "๐Ÿ˜Œ", "๐Ÿ˜", "๐Ÿฅฐ", "๐Ÿ˜˜", "๐Ÿ˜—", "๐Ÿ˜™", + "๐Ÿ˜š", "๐Ÿ˜‹", "๐Ÿ˜›", "๐Ÿ˜", "๐Ÿ˜œ", "๐Ÿคช", "๐Ÿคจ", "๐Ÿง", "๐Ÿค“", "๐Ÿ˜Ž", + "๐Ÿฅธ", "๐Ÿคฉ", "๐Ÿฅณ", "๐Ÿ˜", "๐Ÿ˜’", "๐Ÿ˜ž", "๐Ÿ˜”", "๐Ÿ˜Ÿ", "๐Ÿ˜•", "๐Ÿ™", + "โ˜น๏ธ", "๐Ÿ˜ฃ", "๐Ÿ˜–", "๐Ÿ˜ซ", "๐Ÿ˜ฉ", "๐Ÿฅบ", "๐Ÿ˜ข", "๐Ÿ˜ญ", "๐Ÿ˜ค", "๐Ÿ˜ ", + "๐Ÿ˜ก", "๐Ÿคฌ", "๐Ÿคฏ", "๐Ÿ˜ณ", "๐Ÿฅต", "๐Ÿฅถ", "๐Ÿ˜ฑ", "๐Ÿ˜จ", "๐Ÿ˜ฐ", "๐Ÿ˜ฅ", + "๐Ÿ˜“", "๐Ÿค—", "๐Ÿค”", "๐Ÿซข", "๐Ÿคญ", "๐Ÿซฃ", "๐Ÿคซ", "๐Ÿคฅ", "๐Ÿ˜ถ", "๐Ÿ˜", + "๐Ÿ˜‘", "๐Ÿ˜ฌ", "๐Ÿ™„", "๐Ÿ˜ฏ", "๐Ÿ˜ฆ", "๐Ÿ˜ง", "๐Ÿ˜ฎ", "๐Ÿ˜ฒ", "๐Ÿฅฑ", "๐Ÿ˜ด", + "๐Ÿคค", "๐Ÿ˜ช", "๐Ÿ˜ต", "๐Ÿ˜ตโ€๐Ÿ’ซ", "๐Ÿค", "๐Ÿค‘", "๐Ÿค ", "๐Ÿ˜ˆ", "๐Ÿ‘ฟ", "๐Ÿ‘ป", + "๐Ÿ’€", "โ˜ ๏ธ", "๐Ÿ‘ฝ", "๐Ÿค–", "๐Ÿ’ฉ", "๐Ÿ™ˆ", "๐Ÿ™‰", "๐Ÿ™Š", "๐Ÿ’ค", "๐Ÿ‘‹" + ], + animals: [ + "๐Ÿถ", "๐Ÿฑ", "๐Ÿญ", "๐Ÿน", "๐Ÿฐ", "๐ŸฆŠ", "๐Ÿป", "๐Ÿผ", "๐Ÿปโ€โ„๏ธ", "๐Ÿจ", + "๐Ÿฏ", "๐Ÿฆ", "๐Ÿฎ", "๐Ÿท", "๐Ÿฝ", "๐Ÿธ", "๐Ÿต", "๐Ÿ™ˆ", "๐Ÿ™‰", "๐Ÿ™Š", + "๐Ÿ”", "๐Ÿค", "๐Ÿฃ", "๐Ÿฅ", "๐Ÿฆ†", "๐Ÿฆ…", "๐Ÿฆ‰", "๐Ÿฆ‡", "๐Ÿง", "๐Ÿฆ", + "๐Ÿ•Š๏ธ", "๐Ÿฆข", "๐Ÿฆœ", "๐Ÿฆš", "๐Ÿฆฉ", "๐Ÿฆค", "๐Ÿชฟ", "๐Ÿฆ", "๐Ÿฆก", "๐Ÿ—", + "๐Ÿด", "๐Ÿซ", "๐Ÿฆ„", "๐Ÿ", "๐Ÿ›", "๐Ÿฆ‹", "๐ŸŒ", "๐Ÿž", "๐Ÿœ", "๐Ÿชฒ", + "๐Ÿชณ", "๐Ÿ•ท๏ธ", "๐Ÿ•ธ๏ธ", "๐Ÿฆ‚", "๐Ÿข", "๐Ÿ", "๐ŸฆŽ", "๐Ÿฆ–", "๐Ÿฆ•", "๐Ÿ™", + "๐Ÿฆ‘", "๐Ÿฆ", "๐Ÿฆž", "๐Ÿฆ€", "๐Ÿก", "๐Ÿ ", "๐ŸŸ", "๐Ÿฌ", "๐Ÿณ", "๐Ÿ‹", + "๐Ÿฆˆ", "๐ŸŠ", "๐Ÿ…", "๐Ÿ†", "๐Ÿฆ“", "๐Ÿฆ", "๐Ÿฆง", "๐Ÿ˜", "๐Ÿฆ›", "๐Ÿฆ", + "๐Ÿฆฃ", "๐Ÿซ", "๐Ÿช", "๐Ÿฆ™", "๐Ÿฆ’", "๐Ÿฆ˜", "๐Ÿฆฌ", "๐Ÿƒ", "๐Ÿ‚", "๐Ÿ„", + "๐ŸŽ", "๐Ÿ–", "๐Ÿ", "๐Ÿ‘", "๐ŸฆŒ", "๐ŸซŽ", "๐Ÿซ", "๐Ÿ", "๐Ÿฆฎ", "๐Ÿ•โ€๐Ÿฆบ" + ], + food: [ + "๐Ÿ", "๐ŸŽ", "๐Ÿ", "๐ŸŠ", "๐Ÿ‹", "๐ŸŒ", "๐Ÿ‰", "๐Ÿ‡", "๐Ÿ“", "๐Ÿซ", + "๐Ÿˆ", "๐Ÿ’", "๐Ÿ‘", "๐Ÿฅญ", "๐Ÿ", "๐Ÿฅฅ", "๐Ÿฅ", "๐Ÿ…", "๐Ÿ†", "๐Ÿฅ‘", + "๐Ÿฅฆ", "๐Ÿฅฌ", "๐Ÿฅ’", "๐ŸŒถ๏ธ", "๐Ÿซ‘", "๐ŸŒฝ", "๐Ÿฅ•", "๐Ÿซ’", "๐Ÿง„", "๐Ÿง…", + "๐Ÿฅ”", "๐Ÿ ", "๐Ÿฅ", "๐Ÿฅฏ", "๐Ÿž", "๐Ÿฅ–", "๐Ÿซ“", "๐Ÿฅจ", "๐Ÿฅž", "๐Ÿง‡", + "๐Ÿง€", "๐Ÿ–", "๐Ÿ—", "๐Ÿฅฉ", "๐Ÿฅ“", "๐Ÿ”", "๐ŸŸ", "๐Ÿ•", "๐ŸŒญ", "๐Ÿฅช", + "๐ŸŒฎ", "๐ŸŒฏ", "๐Ÿซ”", "๐Ÿฅ™", "๐Ÿง†", "๐Ÿฅš", "๐Ÿณ", "๐Ÿฅ˜", "๐Ÿฒ", "๐Ÿซ•", + "๐Ÿ", "๐Ÿœ", "๐Ÿ›", "๐Ÿš", "๐Ÿ™", "๐Ÿ˜", "๐Ÿฅ", "๐Ÿฅ ", "๐Ÿฅก", "๐Ÿฆช", + "๐Ÿข", "๐Ÿก", "๐Ÿง", "๐Ÿจ", "๐Ÿฆ", "๐Ÿฅง", "๐Ÿง", "๐Ÿฐ", "๐ŸŽ‚", "๐Ÿฎ", + "๐Ÿญ", "๐Ÿฌ", "๐Ÿซ", "๐Ÿฟ", "๐Ÿง‚", "๐Ÿฅค", "๐Ÿงƒ", "๐Ÿง‰", "๐ŸงŠ", "๐Ÿฅ›", + "๐Ÿผ", "โ˜•", "๐Ÿต", "๐Ÿซ–", "๐Ÿถ", "๐Ÿบ", "๐Ÿป", "๐Ÿฅ‚", "๐Ÿท", "๐Ÿฅƒ" + ], + objects: [ + "โŒš", "๐Ÿ“ฑ", "๐Ÿ“ฒ", "๐Ÿ’ป", "๐Ÿ–ฅ๏ธ", "๐Ÿ–จ๏ธ", "๐Ÿ–ฑ๏ธ", "๐Ÿ–ฒ๏ธ", "๐Ÿ•น๏ธ", "๐Ÿ—œ๏ธ", + "๐Ÿ’ฝ", "๐Ÿ’พ", "๐Ÿ’ฟ", "๐Ÿ“€", "๐Ÿ“ผ", "๐Ÿ“ท", "๐Ÿ“ธ", "๐Ÿ“น", "๐ŸŽฅ", "๐Ÿ“ž", + "โ˜Ž๏ธ", "๐Ÿ“Ÿ", "๐Ÿ“ ", "๐Ÿ“บ", "๐Ÿ“ป", "๐Ÿงญ", "โฑ๏ธ", "โฒ๏ธ", "โฐ", "๐Ÿ•ฐ๏ธ", + "๐Ÿ”‹", "๐Ÿ”Œ", "๐Ÿ’ก", "๐Ÿ”ฆ", "๐Ÿ•ฏ๏ธ", "๐Ÿงฏ", "๐Ÿ›ข๏ธ", "๐Ÿ’ธ", "๐Ÿ’ต", "๐Ÿ’ด", + "๐Ÿ’ถ", "๐Ÿ’ท", "๐Ÿ’ฐ", "๐Ÿ’ณ", "๐Ÿงพ", "๐Ÿ’Ž", "โš–๏ธ", "๐Ÿ”ง", "๐Ÿ”จ", "โš’๏ธ", + "๐Ÿ› ๏ธ", "โ›๏ธ", "๐Ÿ”ฉ", "โš™๏ธ", "๐Ÿ—œ๏ธ", "๐Ÿงฑ", "๐Ÿชš", "๐Ÿช›", "๐Ÿช“", "๐Ÿ”ซ", + "๐Ÿชƒ", "๐Ÿ›ก๏ธ", "๐Ÿช–", "๐Ÿ”—", "โ›“๏ธ", "๐Ÿงฐ", "๐Ÿชค", "๐Ÿงฒ", "๐Ÿชœ", "๐Ÿ›๏ธ", + "๐Ÿ›‹๏ธ", "๐Ÿช‘", "๐Ÿšช", "๐Ÿชž", "๐ŸชŸ", "๐Ÿงด", "๐Ÿ›", "๐Ÿ›€", "๐Ÿšฟ", "๐Ÿช ", + "๐Ÿงผ", "๐Ÿชฅ", "๐Ÿงป", "๐Ÿšฝ", "๐Ÿช’", "๐Ÿงฝ", "๐Ÿชฃ", "๐Ÿงบ", "๐Ÿงท", "๐Ÿงต", + "๐Ÿชก", "๐Ÿงถ", "๐Ÿงณ", "๐ŸŒ‚", "โ˜‚๏ธ", "๐Ÿง‚", "๐ŸงŠ", "๐Ÿช†", "๐ŸŽ", "๐Ÿ“ฆ" + ], + nature: [ + "๐ŸŒต", "๐ŸŽ„", "๐ŸŒฒ", "๐ŸŒณ", "๐ŸŒด", "๐ŸŒฑ", "๐ŸŒฟ", "โ˜˜๏ธ", "๐Ÿ€", "๐ŸŽ", + "๐Ÿชด", "๐ŸŽ‹", "๐Ÿƒ", "๐Ÿ‚", "๐Ÿ", "๐Ÿ„", "๐ŸŒพ", "๐Ÿ’", "๐ŸŒท", "๐ŸŒน", + "๐Ÿฅ€", "๐ŸŒบ", "๐ŸŒธ", "๐ŸŒผ", "๐ŸŒป", "๐ŸŒž", "๐ŸŒ", "๐ŸŒ›", "๐ŸŒœ", "๐ŸŒš", + "๐ŸŒ•", "๐ŸŒ–", "๐ŸŒ—", "๐ŸŒ˜", "๐ŸŒ‘", "๐ŸŒ’", "๐ŸŒ“", "๐ŸŒ”", "๐ŸŒ™", "๐ŸŒŽ", + "๐ŸŒ", "๐ŸŒ", "๐Ÿ’ซ", "โญ", "๐ŸŒŸ", "โœจ", "โšก", "โ˜„๏ธ", "๐Ÿ’ฅ", "๐Ÿ”ฅ", + "๐ŸŒช๏ธ", "๐ŸŒˆ", "โ˜€๏ธ", "๐ŸŒค๏ธ", "โ›…", "๐ŸŒฅ๏ธ", "โ˜๏ธ", "๐ŸŒฆ๏ธ", "๐ŸŒง๏ธ", "โ›ˆ๏ธ", + "๐ŸŒฉ๏ธ", "๐ŸŒจ๏ธ", "โ„๏ธ", "โ˜ƒ๏ธ", "โ›„", "๐ŸŒฌ๏ธ", "๐Ÿ’จ", "๐ŸŒ€", "๐ŸŒซ๏ธ", "๐ŸŒŠ", + "๐ŸŒซ", "๐ŸŒ‹", "๐Ÿ”๏ธ", "โ›ฐ๏ธ", "๐Ÿ—ป", "๐Ÿ•๏ธ", "๐Ÿ–๏ธ", "๐Ÿœ๏ธ", "๐Ÿ๏ธ", "๐Ÿž๏ธ", + "๐ŸŒŒ", "๐ŸŒ ", "๐ŸŽ‡", "๐ŸŽ†", "๐ŸŒ‰", "๐ŸŒ", "๐Ÿ›ค๏ธ", "๐ŸŒ…", "๐ŸŒ„", "๐ŸŒ‡", + "๐ŸŒ†", "๐Ÿ™๏ธ", "๐ŸŒƒ", "๐ŸŒ‰", "๐Ÿชจ", "๐Ÿชต", "๐Ÿ›ถ", "๐Ÿž", "๐Ÿชบ", "๐Ÿฆ‹" + ], + sports: [ + "โšฝ", "๐Ÿ€", "๐Ÿˆ", "โšพ", "๐ŸŽพ", "๐Ÿ", "๐Ÿ‰", "๐Ÿฅ", "๐Ÿ“", "๐Ÿธ", + "๐Ÿฅ‡", "๐Ÿฅˆ", "๐Ÿฅ‰", "๐Ÿ…", "๐ŸŽฏ", "๐ŸŽฎ", "๐Ÿšด", "๐ŸŒ๏ธ", "๐Ÿ‹๏ธโ€โ™‚๏ธ", "๐Ÿคพ", "๐Ÿšฃโ€โ™‚๏ธ", + "๐Ÿคธโ€โ™€๏ธ", "โ›ท๏ธ", "๐Ÿ‚", "โ›ธ๏ธ", "๐Ÿ’", "๐Ÿฅ‹", "๐ŸฅŠ", "๐ŸŽฟ", "๐Ÿ‡", "๐Ÿ๏ธ", "๐Ÿคบ" + ], + travel: [ + "โœˆ๏ธ", "๐Ÿš—", "๐Ÿš•", "๐Ÿš™", "๐ŸšŒ", "๐ŸšŽ", "๐ŸŽ๏ธ", "๐Ÿš“", "๐Ÿš‘", "๐Ÿš’", + "๐Ÿš", "๐Ÿšš", "๐Ÿšœ", "๐Ÿ๏ธ", "๐Ÿ›ต", "๐Ÿšฒ", "๐Ÿš‚", "๐Ÿš€", "๐Ÿ›ธ", "โ›ต", "๐Ÿšข", + "๐Ÿšค", "๐Ÿ›ฅ๏ธ", "๐Ÿ›ถ", "โ›ด๏ธ", "๐Ÿš˜", "๐ŸšŸ", "๐Ÿš ", "๐Ÿšก", "๐Ÿšƒ", "๐Ÿš", "๐Ÿš‹" + ], + flags: [ + "๐Ÿ‡บ๐Ÿ‡ธ", "๐Ÿ‡ฌ๐Ÿ‡ง", "๐Ÿ‡จ๐Ÿ‡ฆ", "๐Ÿ‡ฆ๐Ÿ‡บ", "๐Ÿ‡ฎ๐Ÿ‡ณ", "๐Ÿ‡ฏ๐Ÿ‡ต", "๐Ÿ‡จ๐Ÿ‡ณ", "๐Ÿ‡ซ๐Ÿ‡ท", "๐Ÿ‡ฉ๐Ÿ‡ช", "๐Ÿ‡ฎ๐Ÿ‡น", + "๐Ÿ‡ช๐Ÿ‡ธ", "๐Ÿ‡ท๐Ÿ‡บ", "๐Ÿ‡ฐ๐Ÿ‡ท", "๐Ÿ‡ฒ๐Ÿ‡ฝ", "๐Ÿ‡ง๐Ÿ‡ท", "๐Ÿ‡ฟ๐Ÿ‡ฆ", "๐Ÿ‡ท๐Ÿ‡ด", "๐Ÿ‡ต๐Ÿ‡ฑ", "๐Ÿ‡บ๐Ÿ‡ฆ", "๐Ÿ‡ฒ๐Ÿ‡พ", + "๐Ÿ‡ฎ๐Ÿ‡ฉ", "๐Ÿ‡ต๐Ÿ‡ญ", "๐Ÿ‡ป๐Ÿ‡ณ", "๐Ÿ‡ฐ๐Ÿ‡ช", "๐Ÿ‡ฟ๐Ÿ‡ผ", "๐Ÿ‡ธ๐Ÿ‡ฌ", "๐Ÿ‡ฎ๐Ÿ‡ท", "๐Ÿ‡ต๐Ÿ‡ฐ", "๐Ÿ‡ฟ๐Ÿ‡ฒ", "๐Ÿ‡ธ๐Ÿ‡ฑ" + ] +}; + +export const flatEmojiList = Object.values(emojiCategories).flat();