From 271780f48a9c256bad0650076cc0a14e5f14130b Mon Sep 17 00:00:00 2001 From: crib Date: Tue, 25 Nov 2025 19:36:57 +0100 Subject: [PATCH] Release v1.1.3: Emoji Picker for List Customization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added visual emoji picker for customizing list icons: - 1,800+ emojis across 13 categories (smileys, hearts, animals, food, activities, travel, tech, office, music, symbols, flags) - Searchable with 130+ keyword mappings (e.g., "smile", "heart", "work", "fire") - Responsive modal design that fits viewport (85vw max 400px, 80vh max height) - Visual selection with highlight for current emoji - Category organization with scrollable display - Custom emoji input option - Mobile-friendly touch targets (32px buttons) ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- README.md | 2 +- main.js | 375 +++++++++++++++++++++++++++++++++++++++++++++- manifest.json | 20 +-- package.json | 2 +- src/main.ts | 22 ++- src/modals.ts | 400 +++++++++++++++++++++++++++++++++++++++++++++++++- styles.css | 127 +++++++++++++++- versions.json | 15 +- 8 files changed, 932 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 77bb2eb..4ecd656 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A powerful task management and focus timer plugin for [Obsidian](https://obsidia ![Immerse Banner](https://img.shields.io/badge/Obsidian-Plugin-7c3aed?style=for-the-badge&logo=obsidian&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge) -![Version](https://img.shields.io/badge/Version-1.1.2-blue?style=for-the-badge) +![Version](https://img.shields.io/badge/Version-1.1.3-blue?style=for-the-badge) ## ๐ŸŽฏ Overview diff --git a/main.js b/main.js index 8c6af80..0874414 100644 --- a/main.js +++ b/main.js @@ -90,6 +90,289 @@ var import_obsidian2 = require("obsidian"); // src/modals.ts var import_obsidian = require("obsidian"); +var EMOJI_KEYWORDS = { + "\u{1F4BC}": "briefcase work business office job", + "\u{1F3E0}": "home house", + "\u{1F4DA}": "books study read library", + "\u{1F3AF}": "target goal aim dart", + "\u2705": "check mark done complete checkbox tick", + "\u{1F4DD}": "memo note write pencil", + "\u{1F4A1}": "light bulb idea", + "\u{1F525}": "fire hot flame", + "\u26A1": "lightning bolt electric zap", + "\u{1F3A8}": "art paint palette", + "\u{1F3C6}": "trophy award win", + "\u{1F4AA}": "muscle strong flex", + "\u{1F680}": "rocket ship launch", + "\u{1F4CA}": "chart graph data", + "\u23F0": "clock time alarm", + "\u{1F4B0}": "money bag cash dollar", + "\u{1F600}": "smile happy face grin", + "\u{1F603}": "smile happy grin", + "\u{1F604}": "smile happy laugh", + "\u{1F601}": "grin smile happy", + "\u{1F606}": "laugh smile happy", + "\u{1F605}": "sweat smile nervous", + "\u{1F923}": "laugh rolling floor", + "\u{1F602}": "tears joy laugh cry", + "\u{1F642}": "smile happy slight", + "\u{1F643}": "upside down smile", + "\u{1F609}": "wink smile flirt", + "\u{1F60A}": "blush smile happy", + "\u{1F607}": "angel halo smile", + "\u{1F970}": "love hearts smile", + "\u{1F60D}": "love heart eyes smile", + "\u{1F929}": "star eyes excited", + "\u{1F618}": "kiss love heart", + "\u{1F617}": "kiss love", + "\u{1F61A}": "kiss love", + "\u{1F619}": "kiss love smile", + "\u{1F972}": "smile tear cry happy", + "\u{1F60B}": "yum delicious smile", + "\u{1F61B}": "tongue playful", + "\u{1F61C}": "wink tongue playful", + "\u{1F92A}": "crazy wild eyes", + "\u{1F61D}": "tongue eyes squint", + "\u{1F911}": "money dollar rich", + "\u{1F917}": "hug smile", + "\u{1F92D}": "hand over mouth giggle", + "\u{1F92B}": "shush quiet secret", + "\u{1F914}": "think hmm wonder", + "\u{1F910}": "zipper mouth secret", + "\u{1F928}": "eyebrow raised skeptical", + "\u{1F610}": "neutral meh", + "\u{1F611}": "expressionless blank", + "\u{1F636}": "no mouth silent", + "\u{1F60F}": "smirk confident", + "\u{1F612}": "unamused annoyed", + "\u{1F644}": "eye roll annoyed", + "\u{1F62C}": "grimace awkward", + "\u{1F925}": "liar lying pinocchio", + "\u{1F60C}": "relieved content", + "\u{1F614}": "sad pensive", + "\u{1F62A}": "sleepy tired", + "\u{1F924}": "drool sleep", + "\u{1F634}": "sleep zzz", + "\u{1F637}": "mask sick medical", + "\u{1F912}": "sick thermometer", + "\u{1F915}": "injured bandage", + "\u{1F922}": "nausea sick", + "\u{1F92E}": "vomit sick", + "\u{1F927}": "sneeze sick tissue", + "\u{1F975}": "hot sweat", + "\u{1F976}": "cold freeze", + "\u{1F60E}": "cool sunglasses", + "\u{1F913}": "nerd glasses", + "\u{1F9D0}": "monocle fancy", + "\u{1F615}": "confused uncertain", + "\u{1F61F}": "worried concerned", + "\u{1F641}": "frown sad", + "\u2639\uFE0F": "frown sad", + "\u{1F62E}": "wow surprised", + "\u{1F62F}": "surprised shocked", + "\u{1F632}": "shocked astonished", + "\u{1F633}": "flushed embarrassed", + "\u{1F97A}": "pleading puppy eyes", + "\u{1F626}": "frown worried", + "\u{1F627}": "anguished worried", + "\u{1F628}": "fearful scared", + "\u{1F630}": "anxious sweat", + "\u{1F625}": "sad sweat", + "\u{1F622}": "cry tear sad", + "\u{1F62D}": "cry tears sob", + "\u{1F631}": "scream fear", + "\u{1F616}": "confounded", + "\u{1F623}": "persevere struggle", + "\u{1F61E}": "disappointed sad", + "\u{1F613}": "downcast sweat", + "\u{1F629}": "weary tired", + "\u{1F62B}": "tired exhausted", + "\u{1F971}": "yawn tired", + "\u{1F624}": "triumph proud", + "\u{1F621}": "angry mad rage", + "\u{1F620}": "angry mad", + "\u{1F92C}": "cursing swearing angry", + "\u{1F608}": "devil smiling evil", + "\u{1F47F}": "devil angry evil", + "\u{1F480}": "skull death", + "\u2620\uFE0F": "skull crossbones death", + "\u{1F4A9}": "poop poo", + "\u{1F921}": "clown funny", + "\u{1F479}": "ogre monster", + "\u{1F47A}": "goblin monster", + "\u{1F47B}": "ghost boo", + "\u{1F47D}": "alien extraterrestrial", + "\u{1F47E}": "alien monster game", + "\u{1F916}": "robot bot", + "\u2764\uFE0F": "red heart love", + "\u{1F9E1}": "orange heart love", + "\u{1F49B}": "yellow heart love", + "\u{1F49A}": "green heart love", + "\u{1F499}": "blue heart love", + "\u{1F49C}": "purple heart love", + "\u{1F90E}": "brown heart love", + "\u{1F5A4}": "black heart love", + "\u{1F90D}": "white heart love", + "\u{1F494}": "broken heart sad", + "\u2763\uFE0F": "heart exclamation love", + "\u{1F495}": "two hearts love", + "\u{1F49E}": "revolving hearts love", + "\u{1F493}": "beating heart love", + "\u{1F497}": "growing heart love", + "\u{1F496}": "sparkling heart love", + "\u{1F498}": "arrow heart love cupid", + "\u{1F49D}": "heart box gift love", + "\u{1F49F}": "heart decoration love", + "\u2764\uFE0F\u200D\u{1F525}": "heart fire love passion", + "\u2764\uFE0F\u200D\u{1FA79}": "heart bandage healing", + "\u{1F48C}": "love letter heart", + "\u{1F48B}": "kiss lips", + "\u{1F491}": "couple love kiss", + "\u{1F48F}": "kiss couple love", + "\u{1F44B}": "wave hand hello goodbye", + "\u{1F91A}": "raised hand back", + "\u{1F590}\uFE0F": "hand fingers spread", + "\u270B": "raised hand stop", + "\u{1F596}": "vulcan salute spock", + "\u{1F44C}": "ok okay hand", + "\u{1F90C}": "pinched fingers italian", + "\u{1F90F}": "pinching hand small", + "\u270C\uFE0F": "peace victory hand", + "\u{1F91E}": "crossed fingers luck", + "\u{1F91F}": "love you hand", + "\u{1F918}": "rock on horns", + "\u{1F919}": "call me hang loose", + "\u{1F448}": "left point finger", + "\u{1F449}": "right point finger", + "\u{1F446}": "up point finger", + "\u{1F595}": "middle finger rude", + "\u{1F447}": "down point finger", + "\u261D\uFE0F": "up point finger", + "\u{1F44D}": "thumbs up yes good", + "\u{1F44E}": "thumbs down no bad", + "\u270A": "fist hand", + "\u{1F44A}": "fist bump punch", + "\u{1F91B}": "left fist bump", + "\u{1F91C}": "right fist bump", + "\u{1F44F}": "clap applause", + "\u{1F64C}": "raising hands celebration", + "\u{1F450}": "open hands", + "\u{1F932}": "palms together pray", + "\u{1F91D}": "handshake deal", + "\u{1F64F}": "pray please thank", + "\u270D\uFE0F": "writing hand", + "\u{1F485}": "nail polish manicure", + "\u{1F933}": "selfie camera phone", + "\u{1F436}": "dog puppy pet", + "\u{1F431}": "cat kitty pet", + "\u{1F42D}": "mouse rat", + "\u{1F439}": "hamster pet", + "\u{1F430}": "rabbit bunny", + "\u{1F98A}": "fox", + "\u{1F43B}": "bear", + "\u{1F43C}": "panda bear", + "\u{1F428}": "koala bear", + "\u{1F42F}": "tiger face", + "\u{1F981}": "lion face", + "\u{1F42E}": "cow face", + "\u{1F437}": "pig face", + "\u{1F438}": "frog face", + "\u{1F435}": "monkey face", + "\u{1F34E}": "apple red fruit", + "\u{1F34A}": "orange fruit", + "\u{1F34B}": "lemon fruit", + "\u{1F34C}": "banana fruit", + "\u{1F349}": "watermelon fruit", + "\u{1F347}": "grapes fruit", + "\u{1F353}": "strawberry fruit", + "\u{1F352}": "cherry fruit", + "\u{1F351}": "peach fruit", + "\u{1F96D}": "mango fruit", + "\u{1F34D}": "pineapple fruit", + "\u{1F965}": "coconut fruit", + "\u{1F95D}": "kiwi fruit", + "\u{1F345}": "tomato vegetable", + "\u{1F951}": "avocado fruit", + "\u{1F35E}": "bread food", + "\u26BD": "soccer ball football", + "\u{1F3C0}": "basketball ball", + "\u{1F3C8}": "american football", + "\u26BE": "baseball ball", + "\u{1F3BE}": "tennis ball", + "\u{1F3D0}": "volleyball ball", + "\u{1F697}": "car auto vehicle", + "\u{1F695}": "taxi car", + "\u{1F699}": "suv car vehicle", + "\u{1F68C}": "bus vehicle", + "\u{1F68E}": "trolleybus bus", + "\u{1F3CE}\uFE0F": "racing car fast", + "\u{1F693}": "police car cop", + "\u{1F691}": "ambulance emergency", + "\u{1F692}": "fire truck engine", + "\u{1F6B2}": "bicycle bike", + "\u2708\uFE0F": "airplane plane flight", + "\u{1F4BB}": "laptop computer", + "\u2328\uFE0F": "keyboard computer", + "\u{1F5B1}\uFE0F": "mouse computer", + "\u{1F5A5}\uFE0F": "desktop computer", + "\u{1F5A8}\uFE0F": "printer", + "\u{1F4F1}": "phone mobile iphone", + "\u{1F4DE}": "phone telephone", + "\u260E\uFE0F": "telephone phone", + "\u{1F4FA}": "tv television", + "\u{1F4FB}": "radio", + "\u{1F4C1}": "folder file", + "\u{1F4C2}": "open folder file", + "\u{1F4C5}": "calendar date", + "\u{1F4C6}": "calendar date", + "\u{1F4C8}": "chart up graph", + "\u{1F4C9}": "chart down graph", + "\u{1F4CC}": "pushpin pin", + "\u{1F4CD}": "pin location map", + "\u{1F4CE}": "paperclip clip", + "\u{1F3B5}": "music note", + "\u{1F3B6}": "music notes", + "\u{1F3BC}": "musical score", + "\u{1F3B9}": "piano keyboard music", + "\u{1F3B8}": "guitar music", + "\u{1F3BA}": "trumpet music", + "\u{1F3B7}": "saxophone music", + "\u{1F941}": "drum music", + "\u{1F3A4}": "microphone mic sing", + "\u{1F3A7}": "headphones music", + "\u{1F50A}": "speaker loud volume", + "\u274C": "cross x no cancel", + "\u26A0\uFE0F": "warning caution alert", + "\u{1F534}": "red circle", + "\u{1F7E2}": "green circle", + "\u{1F535}": "blue circle", + "\u{1F7E1}": "yellow circle", + "\u{1F7E3}": "purple circle", + "\u26AB": "black circle", + "\u26AA": "white circle", + "\u{1F7E4}": "brown circle", + "\u{1F53A}": "triangle red up", + "\u{1F53B}": "triangle red down", + "\u{1F538}": "diamond orange small", + "\u{1F539}": "diamond blue small", + "\u{1F536}": "diamond orange large", + "\u{1F537}": "diamond blue large" +}; +var EMOJI_CATEGORIES = { + "\u2B50 Frequently Used": ["\u{1F4BC}", "\u{1F3E0}", "\u{1F4DA}", "\u{1F3AF}", "\u2705", "\u{1F4DD}", "\u{1F4A1}", "\u{1F525}", "\u26A1", "\u{1F3A8}", "\u{1F3C6}", "\u{1F4AA}", "\u{1F680}", "\u{1F4CA}", "\u23F0", "\u{1F4B0}"], + "\u{1F600} Smileys & Emotion": ["\u{1F600}", "\u{1F603}", "\u{1F604}", "\u{1F601}", "\u{1F606}", "\u{1F605}", "\u{1F923}", "\u{1F602}", "\u{1F642}", "\u{1F643}", "\u{1F609}", "\u{1F60A}", "\u{1F607}", "\u{1F970}", "\u{1F60D}", "\u{1F929}", "\u{1F618}", "\u{1F617}", "\u{1F61A}", "\u{1F619}", "\u{1F972}", "\u{1F60B}", "\u{1F61B}", "\u{1F61C}", "\u{1F92A}", "\u{1F61D}", "\u{1F911}", "\u{1F917}", "\u{1F92D}", "\u{1F92B}", "\u{1F914}", "\u{1F910}", "\u{1F928}", "\u{1F610}", "\u{1F611}", "\u{1F636}", "\u{1F60F}", "\u{1F612}", "\u{1F644}", "\u{1F62C}", "\u{1F925}", "\u{1F60C}", "\u{1F614}", "\u{1F62A}", "\u{1F924}", "\u{1F634}", "\u{1F637}", "\u{1F912}", "\u{1F915}", "\u{1F922}", "\u{1F92E}", "\u{1F927}", "\u{1F975}", "\u{1F976}", "\u{1F60E}", "\u{1F913}", "\u{1F9D0}", "\u{1F615}", "\u{1F61F}", "\u{1F641}", "\u2639\uFE0F", "\u{1F62E}", "\u{1F62F}", "\u{1F632}", "\u{1F633}", "\u{1F97A}", "\u{1F626}", "\u{1F627}", "\u{1F628}", "\u{1F630}", "\u{1F625}", "\u{1F622}", "\u{1F62D}", "\u{1F631}", "\u{1F616}", "\u{1F623}", "\u{1F61E}", "\u{1F613}", "\u{1F629}", "\u{1F62B}", "\u{1F971}", "\u{1F624}", "\u{1F621}", "\u{1F620}", "\u{1F92C}", "\u{1F608}", "\u{1F47F}", "\u{1F480}", "\u2620\uFE0F", "\u{1F4A9}", "\u{1F921}", "\u{1F479}", "\u{1F47A}", "\u{1F47B}", "\u{1F47D}", "\u{1F47E}", "\u{1F916}"], + "\u2764\uFE0F Hearts & Love": ["\u2764\uFE0F", "\u{1F9E1}", "\u{1F49B}", "\u{1F49A}", "\u{1F499}", "\u{1F49C}", "\u{1F90E}", "\u{1F5A4}", "\u{1F90D}", "\u{1F494}", "\u2763\uFE0F", "\u{1F495}", "\u{1F49E}", "\u{1F493}", "\u{1F497}", "\u{1F496}", "\u{1F498}", "\u{1F49D}", "\u{1F49F}", "\u2764\uFE0F\u200D\u{1F525}", "\u2764\uFE0F\u200D\u{1FA79}", "\u{1F48C}", "\u{1F48B}", "\u{1F491}", "\u{1F48F}", "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F468}", "\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F468}", "\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F469}"], + "\u{1F464} People & Body": ["\u{1F44B}", "\u{1F91A}", "\u{1F590}\uFE0F", "\u270B", "\u{1F596}", "\u{1F44C}", "\u{1F90C}", "\u{1F90F}", "\u270C\uFE0F", "\u{1F91E}", "\u{1F91F}", "\u{1F918}", "\u{1F919}", "\u{1F448}", "\u{1F449}", "\u{1F446}", "\u{1F595}", "\u{1F447}", "\u261D\uFE0F", "\u{1F44D}", "\u{1F44E}", "\u270A", "\u{1F44A}", "\u{1F91B}", "\u{1F91C}", "\u{1F44F}", "\u{1F64C}", "\u{1F450}", "\u{1F932}", "\u{1F91D}", "\u{1F64F}", "\u270D\uFE0F", "\u{1F485}", "\u{1F933}", "\u{1F4AA}", "\u{1F9BE}", "\u{1F9BF}", "\u{1F9B5}", "\u{1F9B6}", "\u{1F442}", "\u{1F9BB}", "\u{1F443}", "\u{1F9E0}", "\u{1FAC0}", "\u{1FAC1}", "\u{1F9B7}", "\u{1F9B4}", "\u{1F440}", "\u{1F441}\uFE0F", "\u{1F445}", "\u{1F444}", "\u{1F476}", "\u{1F9D2}", "\u{1F466}", "\u{1F467}", "\u{1F9D1}", "\u{1F468}", "\u{1F469}", "\u{1F9D4}", "\u{1F9D1}\u200D\u{1F9B0}", "\u{1F468}\u200D\u{1F9B0}", "\u{1F469}\u200D\u{1F9B0}", "\u{1F9D1}\u200D\u{1F9B1}", "\u{1F468}\u200D\u{1F9B1}", "\u{1F469}\u200D\u{1F9B1}", "\u{1F9D1}\u200D\u{1F9B3}", "\u{1F468}\u200D\u{1F9B3}", "\u{1F469}\u200D\u{1F9B3}", "\u{1F9D1}\u200D\u{1F9B2}", "\u{1F468}\u200D\u{1F9B2}", "\u{1F469}\u200D\u{1F9B2}", "\u{1F471}", "\u{1F471}\u200D\u2642\uFE0F", "\u{1F471}\u200D\u2640\uFE0F", "\u{1F9D3}", "\u{1F474}", "\u{1F475}", "\u{1F64D}", "\u{1F64D}\u200D\u2642\uFE0F", "\u{1F64D}\u200D\u2640\uFE0F", "\u{1F64E}", "\u{1F64E}\u200D\u2642\uFE0F", "\u{1F64E}\u200D\u2640\uFE0F", "\u{1F645}", "\u{1F645}\u200D\u2642\uFE0F", "\u{1F645}\u200D\u2640\uFE0F", "\u{1F646}", "\u{1F646}\u200D\u2642\uFE0F", "\u{1F646}\u200D\u2640\uFE0F", "\u{1F481}", "\u{1F481}\u200D\u2642\uFE0F", "\u{1F481}\u200D\u2640\uFE0F", "\u{1F64B}", "\u{1F64B}\u200D\u2642\uFE0F", "\u{1F64B}\u200D\u2640\uFE0F", "\u{1F9CF}", "\u{1F9CF}\u200D\u2642\uFE0F", "\u{1F9CF}\u200D\u2640\uFE0F", "\u{1F647}", "\u{1F647}\u200D\u2642\uFE0F", "\u{1F647}\u200D\u2640\uFE0F", "\u{1F926}", "\u{1F926}\u200D\u2642\uFE0F", "\u{1F926}\u200D\u2640\uFE0F", "\u{1F937}", "\u{1F937}\u200D\u2642\uFE0F", "\u{1F937}\u200D\u2640\uFE0F"], + "\u{1F436} Animals & Nature": ["\u{1F436}", "\u{1F431}", "\u{1F42D}", "\u{1F439}", "\u{1F430}", "\u{1F98A}", "\u{1F43B}", "\u{1F43C}", "\u{1F428}", "\u{1F42F}", "\u{1F981}", "\u{1F42E}", "\u{1F437}", "\u{1F43D}", "\u{1F438}", "\u{1F435}", "\u{1F648}", "\u{1F649}", "\u{1F64A}", "\u{1F412}", "\u{1F414}", "\u{1F427}", "\u{1F426}", "\u{1F424}", "\u{1F423}", "\u{1F425}", "\u{1F986}", "\u{1F985}", "\u{1F989}", "\u{1F987}", "\u{1F43A}", "\u{1F417}", "\u{1F434}", "\u{1F984}", "\u{1F41D}", "\u{1F41B}", "\u{1F98B}", "\u{1F40C}", "\u{1F41E}", "\u{1F41C}", "\u{1F99F}", "\u{1F997}", "\u{1F577}\uFE0F", "\u{1F578}\uFE0F", "\u{1F982}", "\u{1F422}", "\u{1F40D}", "\u{1F98E}", "\u{1F996}", "\u{1F995}", "\u{1F419}", "\u{1F991}", "\u{1F990}", "\u{1F99E}", "\u{1F980}", "\u{1F421}", "\u{1F420}", "\u{1F41F}", "\u{1F42C}", "\u{1F433}", "\u{1F40B}", "\u{1F988}", "\u{1F40A}", "\u{1F405}", "\u{1F406}", "\u{1F993}", "\u{1F98D}", "\u{1F9A7}", "\u{1F418}", "\u{1F99B}", "\u{1F98F}", "\u{1F42A}", "\u{1F42B}", "\u{1F992}", "\u{1F998}", "\u{1F403}", "\u{1F402}", "\u{1F404}", "\u{1F40E}", "\u{1F416}", "\u{1F40F}", "\u{1F411}", "\u{1F999}", "\u{1F410}", "\u{1F98C}", "\u{1F415}", "\u{1F429}", "\u{1F9AE}", "\u{1F415}\u200D\u{1F9BA}", "\u{1F408}", "\u{1F408}\u200D\u2B1B", "\u{1F413}", "\u{1F983}", "\u{1F99A}", "\u{1F99C}", "\u{1F9A2}", "\u{1F9A9}", "\u{1F54A}\uFE0F", "\u{1F407}", "\u{1F99D}", "\u{1F9A8}", "\u{1F9A1}", "\u{1F9A6}", "\u{1F9A5}", "\u{1F401}", "\u{1F400}", "\u{1F43F}\uFE0F", "\u{1F994}", "\u{1F332}", "\u{1F333}", "\u{1F334}", "\u{1F331}", "\u{1F33F}", "\u2618\uFE0F", "\u{1F340}", "\u{1F38D}", "\u{1F38B}", "\u{1F343}", "\u{1F342}", "\u{1F341}", "\u{1F344}", "\u{1F33E}", "\u{1F490}", "\u{1F337}", "\u{1F339}", "\u{1F940}", "\u{1F33A}", "\u{1F338}", "\u{1F33C}", "\u{1F33B}", "\u{1F31E}", "\u{1F31D}", "\u{1F31B}", "\u{1F31C}", "\u{1F31A}", "\u{1F315}", "\u{1F316}", "\u{1F317}", "\u{1F318}", "\u{1F311}", "\u{1F312}", "\u{1F313}", "\u{1F314}", "\u{1F319}", "\u{1F30E}", "\u{1F30D}", "\u{1F30F}", "\u{1FA90}", "\u{1F4AB}", "\u2B50", "\u{1F31F}", "\u2728", "\u26A1", "\u2604\uFE0F", "\u{1F4A5}", "\u{1F525}", "\u{1F32A}\uFE0F", "\u{1F308}", "\u2600\uFE0F", "\u{1F324}\uFE0F", "\u26C5", "\u{1F325}\uFE0F", "\u2601\uFE0F", "\u{1F326}\uFE0F", "\u{1F327}\uFE0F", "\u26C8\uFE0F", "\u{1F329}\uFE0F", "\u{1F328}\uFE0F", "\u2744\uFE0F", "\u2603\uFE0F", "\u26C4", "\u{1F32C}\uFE0F", "\u{1F4A8}", "\u{1F4A7}", "\u{1F4A6}", "\u2614", "\u2602\uFE0F", "\u{1F30A}", "\u{1F32B}\uFE0F"], + "\u{1F34E} Food & Drink": ["\u{1F347}", "\u{1F348}", "\u{1F349}", "\u{1F34A}", "\u{1F34B}", "\u{1F34C}", "\u{1F34D}", "\u{1F96D}", "\u{1F34E}", "\u{1F34F}", "\u{1F350}", "\u{1F351}", "\u{1F352}", "\u{1F353}", "\u{1FAD0}", "\u{1F95D}", "\u{1F345}", "\u{1FAD2}", "\u{1F965}", "\u{1F951}", "\u{1F346}", "\u{1F954}", "\u{1F955}", "\u{1F33D}", "\u{1F336}\uFE0F", "\u{1FAD1}", "\u{1F952}", "\u{1F96C}", "\u{1F966}", "\u{1F9C4}", "\u{1F9C5}", "\u{1F344}", "\u{1F95C}", "\u{1F330}", "\u{1F35E}", "\u{1F950}", "\u{1F956}", "\u{1FAD3}", "\u{1F968}", "\u{1F96F}", "\u{1F95E}", "\u{1F9C7}", "\u{1F9C0}", "\u{1F356}", "\u{1F357}", "\u{1F969}", "\u{1F953}", "\u{1F354}", "\u{1F35F}", "\u{1F355}", "\u{1F32D}", "\u{1F96A}", "\u{1F32E}", "\u{1F32F}", "\u{1FAD4}", "\u{1F959}", "\u{1F9C6}", "\u{1F95A}", "\u{1F373}", "\u{1F958}", "\u{1F372}", "\u{1FAD5}", "\u{1F963}", "\u{1F957}", "\u{1F37F}", "\u{1F9C8}", "\u{1F9C2}", "\u{1F96B}", "\u{1F371}", "\u{1F358}", "\u{1F359}", "\u{1F35A}", "\u{1F35B}", "\u{1F35C}", "\u{1F35D}", "\u{1F360}", "\u{1F362}", "\u{1F363}", "\u{1F364}", "\u{1F365}", "\u{1F96E}", "\u{1F361}", "\u{1F95F}", "\u{1F960}", "\u{1F961}", "\u{1F980}", "\u{1F99E}", "\u{1F990}", "\u{1F991}", "\u{1F9AA}", "\u{1F366}", "\u{1F367}", "\u{1F368}", "\u{1F369}", "\u{1F36A}", "\u{1F382}", "\u{1F370}", "\u{1F9C1}", "\u{1F967}", "\u{1F36B}", "\u{1F36C}", "\u{1F36D}", "\u{1F36E}", "\u{1F36F}", "\u{1F37C}", "\u{1F95B}", "\u2615", "\u{1FAD6}", "\u{1F375}", "\u{1F376}", "\u{1F37E}", "\u{1F377}", "\u{1F378}", "\u{1F379}", "\u{1F37A}", "\u{1F37B}", "\u{1F942}", "\u{1F943}", "\u{1F964}", "\u{1F9CB}", "\u{1F9C3}", "\u{1F9C9}", "\u{1F9CA}"], + "\u26BD Activities & Sports": ["\u26BD", "\u{1F3C0}", "\u{1F3C8}", "\u26BE", "\u{1F94E}", "\u{1F3BE}", "\u{1F3D0}", "\u{1F3C9}", "\u{1F94F}", "\u{1F3B1}", "\u{1FA80}", "\u{1F3D3}", "\u{1F3F8}", "\u{1F3D2}", "\u{1F3D1}", "\u{1F94D}", "\u{1F3CF}", "\u{1FA83}", "\u{1F945}", "\u26F3", "\u{1FA81}", "\u{1F3F9}", "\u{1F3A3}", "\u{1F93F}", "\u{1F94A}", "\u{1F94B}", "\u{1F3BD}", "\u{1F6F9}", "\u{1F6FC}", "\u{1F6F7}", "\u26F8\uFE0F", "\u{1F94C}", "\u{1F3BF}", "\u26F7\uFE0F", "\u{1F3C2}", "\u{1FA82}", "\u{1F3CB}\uFE0F", "\u{1F3CB}\uFE0F\u200D\u2642\uFE0F", "\u{1F3CB}\uFE0F\u200D\u2640\uFE0F", "\u{1F93C}", "\u{1F93C}\u200D\u2642\uFE0F", "\u{1F93C}\u200D\u2640\uFE0F", "\u{1F938}", "\u{1F938}\u200D\u2642\uFE0F", "\u{1F938}\u200D\u2640\uFE0F", "\u26F9\uFE0F", "\u26F9\uFE0F\u200D\u2642\uFE0F", "\u26F9\uFE0F\u200D\u2640\uFE0F", "\u{1F93A}", "\u{1F93E}", "\u{1F93E}\u200D\u2642\uFE0F", "\u{1F93E}\u200D\u2640\uFE0F", "\u{1F3CC}\uFE0F", "\u{1F3CC}\uFE0F\u200D\u2642\uFE0F", "\u{1F3CC}\uFE0F\u200D\u2640\uFE0F", "\u{1F3C7}", "\u{1F9D8}", "\u{1F9D8}\u200D\u2642\uFE0F", "\u{1F9D8}\u200D\u2640\uFE0F", "\u{1F3C4}", "\u{1F3C4}\u200D\u2642\uFE0F", "\u{1F3C4}\u200D\u2640\uFE0F", "\u{1F3CA}", "\u{1F3CA}\u200D\u2642\uFE0F", "\u{1F3CA}\u200D\u2640\uFE0F", "\u{1F93D}", "\u{1F93D}\u200D\u2642\uFE0F", "\u{1F93D}\u200D\u2640\uFE0F", "\u{1F6A3}", "\u{1F6A3}\u200D\u2642\uFE0F", "\u{1F6A3}\u200D\u2640\uFE0F", "\u{1F9D7}", "\u{1F9D7}\u200D\u2642\uFE0F", "\u{1F9D7}\u200D\u2640\uFE0F", "\u{1F6B5}", "\u{1F6B5}\u200D\u2642\uFE0F", "\u{1F6B5}\u200D\u2640\uFE0F", "\u{1F6B4}", "\u{1F6B4}\u200D\u2642\uFE0F", "\u{1F6B4}\u200D\u2640\uFE0F", "\u{1F3C6}", "\u{1F947}", "\u{1F948}", "\u{1F949}", "\u{1F3C5}", "\u{1F396}\uFE0F", "\u{1F3F5}\uFE0F", "\u{1F397}\uFE0F", "\u{1F3AB}", "\u{1F39F}\uFE0F", "\u{1F3AA}", "\u{1F939}", "\u{1F939}\u200D\u2642\uFE0F", "\u{1F939}\u200D\u2640\uFE0F", "\u{1F3AD}", "\u{1FA70}", "\u{1F3A8}", "\u{1F3AC}", "\u{1F3A4}", "\u{1F3A7}", "\u{1F3BC}", "\u{1F3B9}", "\u{1F941}", "\u{1FA98}", "\u{1F3B7}", "\u{1F3BA}", "\u{1FA97}", "\u{1F3B8}", "\u{1FA95}", "\u{1F3BB}", "\u{1F3B2}", "\u265F\uFE0F", "\u{1F3AF}", "\u{1F3B3}", "\u{1F3AE}", "\u{1F3B0}", "\u{1F9E9}"], + "\u{1F697} Travel & Places": ["\u{1F697}", "\u{1F695}", "\u{1F699}", "\u{1F68C}", "\u{1F68E}", "\u{1F3CE}\uFE0F", "\u{1F693}", "\u{1F691}", "\u{1F692}", "\u{1F690}", "\u{1F6FB}", "\u{1F69A}", "\u{1F69B}", "\u{1F69C}", "\u{1F9AF}", "\u{1F9BD}", "\u{1F9BC}", "\u{1F6F4}", "\u{1F6B2}", "\u{1F6F5}", "\u{1F3CD}\uFE0F", "\u{1F6FA}", "\u{1F6A8}", "\u{1F694}", "\u{1F68D}", "\u{1F698}", "\u{1F696}", "\u{1F6A1}", "\u{1F6A0}", "\u{1F69F}", "\u{1F683}", "\u{1F68B}", "\u{1F69E}", "\u{1F69D}", "\u{1F684}", "\u{1F685}", "\u{1F688}", "\u{1F682}", "\u{1F686}", "\u{1F687}", "\u{1F68A}", "\u{1F689}", "\u2708\uFE0F", "\u{1F6EB}", "\u{1F6EC}", "\u{1F6E9}\uFE0F", "\u{1F4BA}", "\u{1F6F0}\uFE0F", "\u{1F680}", "\u{1F6F8}", "\u{1F681}", "\u{1F6F6}", "\u26F5", "\u{1F6A4}", "\u{1F6E5}\uFE0F", "\u{1F6F3}\uFE0F", "\u26F4\uFE0F", "\u{1F6A2}", "\u2693", "\u26FD", "\u{1F6A7}", "\u{1F6A6}", "\u{1F6A5}", "\u{1F68F}", "\u{1F5FA}\uFE0F", "\u{1F5FF}", "\u{1F5FD}", "\u{1F5FC}", "\u{1F3F0}", "\u{1F3EF}", "\u{1F3DF}\uFE0F", "\u{1F3A1}", "\u{1F3A2}", "\u{1F3A0}", "\u26F2", "\u26F1\uFE0F", "\u{1F3D6}\uFE0F", "\u{1F3DD}\uFE0F", "\u{1F3DC}\uFE0F", "\u{1F30B}", "\u26F0\uFE0F", "\u{1F3D4}\uFE0F", "\u{1F5FB}", "\u{1F3D5}\uFE0F", "\u26FA", "\u{1F6D6}", "\u{1F3E0}", "\u{1F3E1}", "\u{1F3D8}\uFE0F", "\u{1F3DA}\uFE0F", "\u{1F3D7}\uFE0F", "\u{1F3ED}", "\u{1F3E2}", "\u{1F3EC}", "\u{1F3E3}", "\u{1F3E4}", "\u{1F3E5}", "\u{1F3E6}", "\u{1F3E8}", "\u{1F3EA}", "\u{1F3EB}", "\u{1F3E9}", "\u{1F492}", "\u{1F3DB}\uFE0F", "\u26EA", "\u{1F54C}", "\u{1F54D}", "\u{1F6D5}", "\u{1F54B}", "\u26E9\uFE0F", "\u{1F6E4}\uFE0F", "\u{1F6E3}\uFE0F", "\u{1F5FE}", "\u{1F391}", "\u{1F3DE}\uFE0F", "\u{1F305}", "\u{1F304}", "\u{1F320}", "\u{1F387}", "\u{1F386}", "\u{1F307}", "\u{1F306}", "\u{1F3D9}\uFE0F", "\u{1F303}", "\u{1F30C}", "\u{1F309}", "\u{1F301}"], + "\u{1F4BB} Objects & Technology": ["\u231A", "\u{1F4F1}", "\u{1F4F2}", "\u{1F4BB}", "\u2328\uFE0F", "\u{1F5A5}\uFE0F", "\u{1F5A8}\uFE0F", "\u{1F5B1}\uFE0F", "\u{1F5B2}\uFE0F", "\u{1F579}\uFE0F", "\u{1F5DC}\uFE0F", "\u{1F4BE}", "\u{1F4BF}", "\u{1F4C0}", "\u{1F4FC}", "\u{1F4F7}", "\u{1F4F8}", "\u{1F4F9}", "\u{1F3A5}", "\u{1F4FD}\uFE0F", "\u{1F39E}\uFE0F", "\u{1F4DE}", "\u260E\uFE0F", "\u{1F4DF}", "\u{1F4E0}", "\u{1F4FA}", "\u{1F4FB}", "\u{1F399}\uFE0F", "\u{1F39A}\uFE0F", "\u{1F39B}\uFE0F", "\u{1F9ED}", "\u23F1\uFE0F", "\u23F2\uFE0F", "\u23F0", "\u{1F570}\uFE0F", "\u231B", "\u23F3", "\u{1F4E1}", "\u{1F50B}", "\u{1F50C}", "\u{1F4A1}", "\u{1F526}", "\u{1F56F}\uFE0F", "\u{1FA94}", "\u{1F9EF}", "\u{1F6E2}\uFE0F", "\u{1F4B8}", "\u{1F4B5}", "\u{1F4B4}", "\u{1F4B6}", "\u{1F4B7}", "\u{1FA99}", "\u{1F4B0}", "\u{1F4B3}", "\u{1F48E}", "\u2696\uFE0F", "\u{1FA9C}", "\u{1F9F0}", "\u{1FA9B}", "\u{1F527}", "\u{1F528}", "\u2692\uFE0F", "\u{1F6E0}\uFE0F", "\u26CF\uFE0F", "\u{1FA9A}", "\u{1F529}", "\u2699\uFE0F", "\u{1FAA4}", "\u{1F9F1}", "\u26D3\uFE0F", "\u{1F9F2}", "\u{1F52B}", "\u{1F4A3}", "\u{1F9E8}", "\u{1FA93}", "\u{1F52A}", "\u{1F5E1}\uFE0F", "\u2694\uFE0F", "\u{1F6E1}\uFE0F", "\u{1F6AC}", "\u26B0\uFE0F", "\u{1FAA6}", "\u26B1\uFE0F", "\u{1F3FA}", "\u{1F52E}", "\u{1F4FF}", "\u{1F9FF}", "\u{1F488}", "\u2697\uFE0F", "\u{1F52D}", "\u{1F52C}", "\u{1F573}\uFE0F", "\u{1FA79}", "\u{1FA7A}", "\u{1F48A}", "\u{1F489}", "\u{1FA78}", "\u{1F9EC}", "\u{1F9B7}", "\u{1F9EA}", "\u{1F321}\uFE0F", "\u{1F9F9}", "\u{1FAA0}", "\u{1F9FA}", "\u{1F9FB}", "\u{1F6BD}", "\u{1F6B0}", "\u{1F6BF}", "\u{1F6C1}", "\u{1F6C0}", "\u{1F9FC}", "\u{1FAA5}", "\u{1FA92}", "\u{1F9FD}", "\u{1FAA3}", "\u{1F9F4}", "\u{1F6CE}\uFE0F", "\u{1F511}", "\u{1F5DD}\uFE0F", "\u{1F6AA}", "\u{1FA91}", "\u{1F6CB}\uFE0F", "\u{1F6CF}\uFE0F", "\u{1F6CC}", "\u{1F9F8}", "\u{1FA86}", "\u{1F5BC}\uFE0F", "\u{1FA9E}", "\u{1FA9F}", "\u{1F6CD}\uFE0F", "\u{1F6D2}", "\u{1F381}", "\u{1F388}", "\u{1F38F}", "\u{1F380}", "\u{1FA84}", "\u{1FA85}", "\u{1F38A}", "\u{1F389}", "\u{1F38E}", "\u{1F3EE}", "\u{1F390}", "\u{1F9E7}"], + "\u{1F4CB} Office & Writing": ["\u2709\uFE0F", "\u{1F4E7}", "\u{1F4E8}", "\u{1F4E9}", "\u{1F4E4}", "\u{1F4E5}", "\u{1F4E6}", "\u{1F4EB}", "\u{1F4EA}", "\u{1F4EC}", "\u{1F4ED}", "\u{1F4EE}", "\u{1F5F3}\uFE0F", "\u270F\uFE0F", "\u2712\uFE0F", "\u{1F58B}\uFE0F", "\u{1F58A}\uFE0F", "\u{1F58C}\uFE0F", "\u{1F58D}\uFE0F", "\u{1F4DD}", "\u{1F4BC}", "\u{1F4C1}", "\u{1F4C2}", "\u{1F5C2}\uFE0F", "\u{1F4C5}", "\u{1F4C6}", "\u{1F5D2}\uFE0F", "\u{1F5D3}\uFE0F", "\u{1F4C7}", "\u{1F4C8}", "\u{1F4C9}", "\u{1F4CA}", "\u{1F4CB}", "\u{1F4CC}", "\u{1F4CD}", "\u{1F4CE}", "\u{1F587}\uFE0F", "\u{1F4CF}", "\u{1F4D0}", "\u2702\uFE0F", "\u{1F5C3}\uFE0F", "\u{1F5C4}\uFE0F", "\u{1F5D1}\uFE0F", "\u{1F512}", "\u{1F513}", "\u{1F50F}", "\u{1F510}", "\u{1F511}", "\u{1F5DD}\uFE0F", "\u{1F528}", "\u{1FA93}", "\u26CF\uFE0F", "\u2692\uFE0F", "\u{1F6E0}\uFE0F", "\u{1F5E1}\uFE0F", "\u2694\uFE0F", "\u{1F4A3}", "\u{1FA83}", "\u{1F3F9}", "\u{1F6E1}\uFE0F", "\u{1FA9A}", "\u{1F527}", "\u{1FA9B}", "\u{1F529}", "\u2699\uFE0F", "\u{1F5DC}\uFE0F", "\u2696\uFE0F"], + "\u{1F3B5} Music & Sound": ["\u{1F3B5}", "\u{1F3B6}", "\u{1F3BC}", "\u{1F3B9}", "\u{1F3B8}", "\u{1F3BA}", "\u{1F3B7}", "\u{1F941}", "\u{1FA98}", "\u{1F3A4}", "\u{1F3A7}", "\u{1F4FB}", "\u{1F399}\uFE0F", "\u{1F50A}", "\u{1F509}", "\u{1F508}", "\u{1F507}", "\u{1F4E2}", "\u{1F4E3}", "\u{1F4EF}", "\u{1F514}", "\u{1F515}", "\u{1F39A}\uFE0F", "\u{1F39B}\uFE0F", "\u{1F396}\uFE0F", "\u{1F3C6}", "\u{1F947}", "\u{1F948}", "\u{1F949}", "\u26A1", "\u{1F525}", "\u{1F4A5}"], + "\u26A1 Symbols & Signs": ["\u2764\uFE0F", "\u{1F9E1}", "\u{1F49B}", "\u{1F49A}", "\u{1F499}", "\u{1F49C}", "\u{1F5A4}", "\u{1F90D}", "\u{1F90E}", "\u{1F494}", "\u2763\uFE0F", "\u{1F495}", "\u{1F49E}", "\u{1F493}", "\u{1F497}", "\u{1F496}", "\u{1F498}", "\u{1F49D}", "\u{1F49F}", "\u262E\uFE0F", "\u271D\uFE0F", "\u262A\uFE0F", "\u{1F549}\uFE0F", "\u2638\uFE0F", "\u2721\uFE0F", "\u{1F52F}", "\u{1F54E}", "\u262F\uFE0F", "\u2626\uFE0F", "\u{1F6D0}", "\u26CE", "\u2648", "\u2649", "\u264A", "\u264B", "\u264C", "\u264D", "\u264E", "\u264F", "\u2650", "\u2651", "\u2652", "\u2653", "\u{1F194}", "\u269B\uFE0F", "\u{1F251}", "\u2622\uFE0F", "\u2623\uFE0F", "\u{1F4F4}", "\u{1F4F3}", "\u{1F236}", "\u{1F21A}", "\u{1F238}", "\u{1F23A}", "\u{1F237}\uFE0F", "\u2734\uFE0F", "\u{1F19A}", "\u{1F4AE}", "\u{1F250}", "\u3299\uFE0F", "\u3297\uFE0F", "\u{1F234}", "\u{1F235}", "\u{1F239}", "\u{1F232}", "\u{1F170}\uFE0F", "\u{1F171}\uFE0F", "\u{1F18E}", "\u{1F191}", "\u{1F17E}\uFE0F", "\u{1F198}", "\u274C", "\u2B55", "\u{1F6D1}", "\u26D4", "\u{1F4DB}", "\u{1F6AB}", "\u{1F4AF}", "\u{1F4A2}", "\u2668\uFE0F", "\u{1F6B7}", "\u{1F6AF}", "\u{1F6B3}", "\u{1F6B1}", "\u{1F51E}", "\u{1F4F5}", "\u{1F6AD}", "\u2757", "\u2755", "\u2753", "\u2754", "\u203C\uFE0F", "\u2049\uFE0F", "\u{1F505}", "\u{1F506}", "\u303D\uFE0F", "\u26A0\uFE0F", "\u{1F6B8}", "\u{1F531}", "\u269C\uFE0F", "\u{1F530}", "\u267B\uFE0F", "\u2705", "\u{1F22F}", "\u{1F4B9}", "\u2747\uFE0F", "\u2733\uFE0F", "\u274E", "\u{1F310}", "\u{1F4A0}", "\u24C2\uFE0F", "\u{1F300}", "\u{1F4A4}", "\u{1F3E7}", "\u{1F6BE}", "\u267F", "\u{1F17F}\uFE0F", "\u{1F6D7}", "\u{1F233}", "\u{1F202}\uFE0F", "\u{1F6C2}", "\u{1F6C3}", "\u{1F6C4}", "\u{1F6C5}", "\u{1F6B9}", "\u{1F6BA}", "\u{1F6BC}", "\u26A7\uFE0F", "\u{1F6BB}", "\u{1F6AE}", "\u{1F3A6}", "\u{1F4F6}", "\u{1F201}", "\u{1F523}", "\u2139\uFE0F", "\u{1F524}", "\u{1F521}", "\u{1F520}", "\u{1F196}", "\u{1F197}", "\u{1F199}", "\u{1F192}", "\u{1F195}", "\u{1F193}", "0\uFE0F\u20E3", "1\uFE0F\u20E3", "2\uFE0F\u20E3", "3\uFE0F\u20E3", "4\uFE0F\u20E3", "5\uFE0F\u20E3", "6\uFE0F\u20E3", "7\uFE0F\u20E3", "8\uFE0F\u20E3", "9\uFE0F\u20E3", "\u{1F51F}", "\u{1F522}", "#\uFE0F\u20E3", "*\uFE0F\u20E3", "\u23CF\uFE0F", "\u25B6\uFE0F", "\u23F8\uFE0F", "\u23EF\uFE0F", "\u23F9\uFE0F", "\u23FA\uFE0F", "\u23ED\uFE0F", "\u23EE\uFE0F", "\u23E9", "\u23EA", "\u23EB", "\u23EC", "\u25C0\uFE0F", "\u{1F53C}", "\u{1F53D}", "\u27A1\uFE0F", "\u2B05\uFE0F", "\u2B06\uFE0F", "\u2B07\uFE0F", "\u2197\uFE0F", "\u2198\uFE0F", "\u2199\uFE0F", "\u2196\uFE0F", "\u2195\uFE0F", "\u2194\uFE0F", "\u21AA\uFE0F", "\u21A9\uFE0F", "\u2934\uFE0F", "\u2935\uFE0F", "\u{1F500}", "\u{1F501}", "\u{1F502}", "\u{1F504}", "\u{1F503}", "\u{1F3B5}", "\u{1F3B6}", "\u2795", "\u2796", "\u2797", "\u2716\uFE0F", "\u267E\uFE0F", "\u{1F4B2}", "\u{1F4B1}", "\u2122\uFE0F", "\xA9\uFE0F", "\xAE\uFE0F", "\u3030\uFE0F", "\u27B0", "\u27BF", "\u{1F51A}", "\u{1F519}", "\u{1F51B}", "\u{1F51D}", "\u{1F51C}", "\u2714\uFE0F", "\u2611\uFE0F", "\u{1F518}", "\u{1F534}", "\u{1F7E0}", "\u{1F7E1}", "\u{1F7E2}", "\u{1F535}", "\u{1F7E3}", "\u26AB", "\u26AA", "\u{1F7E4}", "\u{1F53A}", "\u{1F53B}", "\u{1F538}", "\u{1F539}", "\u{1F536}", "\u{1F537}", "\u{1F533}", "\u{1F532}", "\u25AA\uFE0F", "\u25AB\uFE0F", "\u25FE", "\u25FD", "\u25FC\uFE0F", "\u25FB\uFE0F", "\u{1F7E5}", "\u{1F7E7}", "\u{1F7E8}", "\u{1F7E9}", "\u{1F7E6}", "\u{1F7EA}", "\u2B1B", "\u2B1C", "\u{1F7EB}", "\u{1F508}", "\u{1F507}", "\u{1F509}", "\u{1F50A}", "\u{1F514}", "\u{1F515}", "\u{1F4E3}", "\u{1F4E2}", "\u{1F4AC}", "\u{1F4AD}", "\u{1F5EF}\uFE0F", "\u2660\uFE0F", "\u2663\uFE0F", "\u2665\uFE0F", "\u2666\uFE0F", "\u{1F0CF}", "\u{1F3B4}", "\u{1F004}", "\u{1F550}", "\u{1F551}", "\u{1F552}", "\u{1F553}", "\u{1F554}", "\u{1F555}", "\u{1F556}", "\u{1F557}", "\u{1F558}", "\u{1F559}", "\u{1F55A}", "\u{1F55B}", "\u{1F55C}", "\u{1F55D}", "\u{1F55E}", "\u{1F55F}", "\u{1F560}", "\u{1F561}", "\u{1F562}", "\u{1F563}", "\u{1F564}", "\u{1F565}", "\u{1F566}", "\u{1F567}"], + "\u{1F3C1} Flags": ["\u{1F3C1}", "\u{1F6A9}", "\u{1F38C}", "\u{1F3F4}", "\u{1F3F3}\uFE0F", "\u{1F3F3}\uFE0F\u200D\u{1F308}", "\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F", "\u{1F3F4}\u200D\u2620\uFE0F", "\u{1F1E6}\u{1F1E8}", "\u{1F1E6}\u{1F1E9}", "\u{1F1E6}\u{1F1EA}", "\u{1F1E6}\u{1F1EB}", "\u{1F1E6}\u{1F1EC}", "\u{1F1E6}\u{1F1EE}", "\u{1F1E6}\u{1F1F1}", "\u{1F1E6}\u{1F1F2}", "\u{1F1E6}\u{1F1F4}", "\u{1F1E6}\u{1F1F6}", "\u{1F1E6}\u{1F1F7}", "\u{1F1E6}\u{1F1F8}", "\u{1F1E6}\u{1F1F9}", "\u{1F1E6}\u{1F1FA}", "\u{1F1E6}\u{1F1FC}", "\u{1F1E6}\u{1F1FD}", "\u{1F1E6}\u{1F1FF}", "\u{1F1E7}\u{1F1E6}", "\u{1F1E7}\u{1F1E7}", "\u{1F1E7}\u{1F1E9}", "\u{1F1E7}\u{1F1EA}", "\u{1F1E7}\u{1F1EB}", "\u{1F1E7}\u{1F1EC}", "\u{1F1E7}\u{1F1ED}", "\u{1F1E7}\u{1F1EE}", "\u{1F1E7}\u{1F1EF}", "\u{1F1E7}\u{1F1F1}", "\u{1F1E7}\u{1F1F2}", "\u{1F1E7}\u{1F1F3}", "\u{1F1E7}\u{1F1F4}", "\u{1F1E7}\u{1F1F6}", "\u{1F1E7}\u{1F1F7}", "\u{1F1E7}\u{1F1F8}", "\u{1F1E7}\u{1F1F9}", "\u{1F1E7}\u{1F1FB}", "\u{1F1E7}\u{1F1FC}", "\u{1F1E7}\u{1F1FE}", "\u{1F1E7}\u{1F1FF}", "\u{1F1E8}\u{1F1E6}", "\u{1F1E8}\u{1F1E8}", "\u{1F1E8}\u{1F1E9}", "\u{1F1E8}\u{1F1EB}", "\u{1F1E8}\u{1F1EC}", "\u{1F1E8}\u{1F1ED}", "\u{1F1E8}\u{1F1EE}", "\u{1F1E8}\u{1F1F0}", "\u{1F1E8}\u{1F1F1}", "\u{1F1E8}\u{1F1F2}", "\u{1F1E8}\u{1F1F3}", "\u{1F1E8}\u{1F1F4}", "\u{1F1E8}\u{1F1F5}", "\u{1F1E8}\u{1F1F7}", "\u{1F1E8}\u{1F1FA}", "\u{1F1E8}\u{1F1FB}", "\u{1F1E8}\u{1F1FC}", "\u{1F1E8}\u{1F1FD}", "\u{1F1E8}\u{1F1FE}", "\u{1F1E8}\u{1F1FF}", "\u{1F1E9}\u{1F1EA}", "\u{1F1E9}\u{1F1EC}", "\u{1F1E9}\u{1F1EF}", "\u{1F1E9}\u{1F1F0}", "\u{1F1E9}\u{1F1F2}", "\u{1F1E9}\u{1F1F4}", "\u{1F1E9}\u{1F1FF}", "\u{1F1EA}\u{1F1E6}", "\u{1F1EA}\u{1F1E8}", "\u{1F1EA}\u{1F1EA}", "\u{1F1EA}\u{1F1EC}", "\u{1F1EA}\u{1F1ED}", "\u{1F1EA}\u{1F1F7}", "\u{1F1EA}\u{1F1F8}", "\u{1F1EA}\u{1F1F9}", "\u{1F1EA}\u{1F1FA}", "\u{1F1EB}\u{1F1EE}", "\u{1F1EB}\u{1F1EF}", "\u{1F1EB}\u{1F1F0}", "\u{1F1EB}\u{1F1F2}", "\u{1F1EB}\u{1F1F4}", "\u{1F1EB}\u{1F1F7}", "\u{1F1EC}\u{1F1E6}", "\u{1F1EC}\u{1F1E7}", "\u{1F1EC}\u{1F1E9}", "\u{1F1EC}\u{1F1EA}", "\u{1F1EC}\u{1F1EB}", "\u{1F1EC}\u{1F1EC}", "\u{1F1EC}\u{1F1ED}", "\u{1F1EC}\u{1F1EE}", "\u{1F1EC}\u{1F1F1}", "\u{1F1EC}\u{1F1F2}", "\u{1F1EC}\u{1F1F3}", "\u{1F1EC}\u{1F1F5}", "\u{1F1EC}\u{1F1F6}", "\u{1F1EC}\u{1F1F7}", "\u{1F1EC}\u{1F1F8}", "\u{1F1EC}\u{1F1F9}", "\u{1F1EC}\u{1F1FA}", "\u{1F1EC}\u{1F1FC}", "\u{1F1EC}\u{1F1FE}", "\u{1F1ED}\u{1F1F0}", "\u{1F1ED}\u{1F1F2}", "\u{1F1ED}\u{1F1F3}", "\u{1F1ED}\u{1F1F7}", "\u{1F1ED}\u{1F1F9}", "\u{1F1ED}\u{1F1FA}", "\u{1F1EE}\u{1F1E8}", "\u{1F1EE}\u{1F1E9}", "\u{1F1EE}\u{1F1EA}", "\u{1F1EE}\u{1F1F1}", "\u{1F1EE}\u{1F1F2}", "\u{1F1EE}\u{1F1F3}", "\u{1F1EE}\u{1F1F4}", "\u{1F1EE}\u{1F1F6}", "\u{1F1EE}\u{1F1F7}", "\u{1F1EE}\u{1F1F8}", "\u{1F1EE}\u{1F1F9}", "\u{1F1EF}\u{1F1EA}", "\u{1F1EF}\u{1F1F2}", "\u{1F1EF}\u{1F1F4}", "\u{1F1EF}\u{1F1F5}", "\u{1F1F0}\u{1F1EA}", "\u{1F1F0}\u{1F1EC}", "\u{1F1F0}\u{1F1ED}", "\u{1F1F0}\u{1F1EE}", "\u{1F1F0}\u{1F1F2}", "\u{1F1F0}\u{1F1F3}", "\u{1F1F0}\u{1F1F5}", "\u{1F1F0}\u{1F1F7}", "\u{1F1F0}\u{1F1FC}", "\u{1F1F0}\u{1F1FE}", "\u{1F1F0}\u{1F1FF}", "\u{1F1F1}\u{1F1E6}", "\u{1F1F1}\u{1F1E7}", "\u{1F1F1}\u{1F1E8}", "\u{1F1F1}\u{1F1EE}", "\u{1F1F1}\u{1F1F0}", "\u{1F1F1}\u{1F1F7}", "\u{1F1F1}\u{1F1F8}", "\u{1F1F1}\u{1F1F9}", "\u{1F1F1}\u{1F1FA}", "\u{1F1F1}\u{1F1FB}", "\u{1F1F1}\u{1F1FE}", "\u{1F1F2}\u{1F1E6}", "\u{1F1F2}\u{1F1E8}", "\u{1F1F2}\u{1F1E9}", "\u{1F1F2}\u{1F1EA}", "\u{1F1F2}\u{1F1EB}", "\u{1F1F2}\u{1F1EC}", "\u{1F1F2}\u{1F1ED}", "\u{1F1F2}\u{1F1F0}", "\u{1F1F2}\u{1F1F1}", "\u{1F1F2}\u{1F1F2}", "\u{1F1F2}\u{1F1F3}", "\u{1F1F2}\u{1F1F4}", "\u{1F1F2}\u{1F1F5}", "\u{1F1F2}\u{1F1F6}", "\u{1F1F2}\u{1F1F7}", "\u{1F1F2}\u{1F1F8}", "\u{1F1F2}\u{1F1F9}", "\u{1F1F2}\u{1F1FA}", "\u{1F1F2}\u{1F1FB}", "\u{1F1F2}\u{1F1FC}", "\u{1F1F2}\u{1F1FD}", "\u{1F1F2}\u{1F1FE}", "\u{1F1F2}\u{1F1FF}", "\u{1F1F3}\u{1F1E6}", "\u{1F1F3}\u{1F1E8}", "\u{1F1F3}\u{1F1EA}", "\u{1F1F3}\u{1F1EB}", "\u{1F1F3}\u{1F1EC}", "\u{1F1F3}\u{1F1EE}", "\u{1F1F3}\u{1F1F1}", "\u{1F1F3}\u{1F1F4}", "\u{1F1F3}\u{1F1F5}", "\u{1F1F3}\u{1F1F7}", "\u{1F1F3}\u{1F1FA}", "\u{1F1F3}\u{1F1FF}", "\u{1F1F4}\u{1F1F2}", "\u{1F1F5}\u{1F1E6}", "\u{1F1F5}\u{1F1EA}", "\u{1F1F5}\u{1F1EB}", "\u{1F1F5}\u{1F1EC}", "\u{1F1F5}\u{1F1ED}", "\u{1F1F5}\u{1F1F0}", "\u{1F1F5}\u{1F1F1}", "\u{1F1F5}\u{1F1F2}", "\u{1F1F5}\u{1F1F3}", "\u{1F1F5}\u{1F1F7}", "\u{1F1F5}\u{1F1F8}", "\u{1F1F5}\u{1F1F9}", "\u{1F1F5}\u{1F1FC}", "\u{1F1F5}\u{1F1FE}", "\u{1F1F6}\u{1F1E6}", "\u{1F1F7}\u{1F1EA}", "\u{1F1F7}\u{1F1F4}", "\u{1F1F7}\u{1F1F8}", "\u{1F1F7}\u{1F1FA}", "\u{1F1F7}\u{1F1FC}", "\u{1F1F8}\u{1F1E6}", "\u{1F1F8}\u{1F1E7}", "\u{1F1F8}\u{1F1E8}", "\u{1F1F8}\u{1F1E9}", "\u{1F1F8}\u{1F1EA}", "\u{1F1F8}\u{1F1EC}", "\u{1F1F8}\u{1F1ED}", "\u{1F1F8}\u{1F1EE}", "\u{1F1F8}\u{1F1EF}", "\u{1F1F8}\u{1F1F0}", "\u{1F1F8}\u{1F1F1}", "\u{1F1F8}\u{1F1F2}", "\u{1F1F8}\u{1F1F3}", "\u{1F1F8}\u{1F1F4}", "\u{1F1F8}\u{1F1F7}", "\u{1F1F8}\u{1F1F8}", "\u{1F1F8}\u{1F1F9}", "\u{1F1F8}\u{1F1FB}", "\u{1F1F8}\u{1F1FD}", "\u{1F1F8}\u{1F1FE}", "\u{1F1F8}\u{1F1FF}", "\u{1F1F9}\u{1F1E6}", "\u{1F1F9}\u{1F1E8}", "\u{1F1F9}\u{1F1E9}", "\u{1F1F9}\u{1F1EB}", "\u{1F1F9}\u{1F1EC}", "\u{1F1F9}\u{1F1ED}", "\u{1F1F9}\u{1F1EF}", "\u{1F1F9}\u{1F1F0}", "\u{1F1F9}\u{1F1F1}", "\u{1F1F9}\u{1F1F2}", "\u{1F1F9}\u{1F1F3}", "\u{1F1F9}\u{1F1F4}", "\u{1F1F9}\u{1F1F7}", "\u{1F1F9}\u{1F1F9}", "\u{1F1F9}\u{1F1FB}", "\u{1F1F9}\u{1F1FC}", "\u{1F1F9}\u{1F1FF}", "\u{1F1FA}\u{1F1E6}", "\u{1F1FA}\u{1F1EC}", "\u{1F1FA}\u{1F1F2}", "\u{1F1FA}\u{1F1F3}", "\u{1F1FA}\u{1F1F8}", "\u{1F1FA}\u{1F1FE}", "\u{1F1FA}\u{1F1FF}", "\u{1F1FB}\u{1F1E6}", "\u{1F1FB}\u{1F1E8}", "\u{1F1FB}\u{1F1EA}", "\u{1F1FB}\u{1F1EC}", "\u{1F1FB}\u{1F1EE}", "\u{1F1FB}\u{1F1F3}", "\u{1F1FB}\u{1F1FA}", "\u{1F1FC}\u{1F1EB}", "\u{1F1FC}\u{1F1F8}", "\u{1F1FD}\u{1F1F0}", "\u{1F1FE}\u{1F1EA}", "\u{1F1FE}\u{1F1F9}", "\u{1F1FF}\u{1F1E6}", "\u{1F1FF}\u{1F1F2}", "\u{1F1FF}\u{1F1FC}", "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}", "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}", "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"] +}; var QuickAddTaskModal = class extends import_obsidian.Modal { constructor(app, plugin) { super(app); @@ -280,6 +563,84 @@ var EditTaskModal = class extends import_obsidian.Modal { contentEl.empty(); } }; +var EmojiPickerModal = class extends import_obsidian.Modal { + constructor(app, currentEmoji, onSelect) { + super(app); + this.currentEmoji = currentEmoji; + this.onSelect = onSelect; + } + onOpen() { + const { contentEl } = this; + contentEl.addClass("immerse-emoji-picker"); + contentEl.createEl("h2", { text: "Select Emoji" }); + if (this.currentEmoji) { + const currentDiv = contentEl.createDiv({ cls: "immerse-emoji-current" }); + currentDiv.createEl("span", { text: "Current: " }); + currentDiv.createEl("span", { text: this.currentEmoji, cls: "immerse-emoji-current-icon" }); + } + const searchContainer = contentEl.createDiv({ cls: "immerse-emoji-search" }); + const searchInput = searchContainer.createEl("input", { + type: "text", + placeholder: "Search emojis...", + cls: "immerse-emoji-search-input" + }); + const gridContainer = contentEl.createDiv({ cls: "immerse-emoji-categories" }); + const renderCategories = (filter = "") => { + gridContainer.empty(); + Object.entries(EMOJI_CATEGORIES).forEach(([category, emojis]) => { + const filteredEmojis = filter ? emojis.filter((emoji) => { + const keywords = EMOJI_KEYWORDS[emoji] || ""; + return keywords.toLowerCase().includes(filter) || emoji.includes(filter); + }) : emojis; + if (filteredEmojis.length === 0) + return; + const categoryDiv = gridContainer.createDiv({ cls: "immerse-emoji-category" }); + categoryDiv.createEl("h3", { text: category, cls: "immerse-emoji-category-title" }); + const grid = categoryDiv.createDiv({ cls: "immerse-emoji-grid" }); + filteredEmojis.forEach((emoji) => { + const button = grid.createEl("button", { + text: emoji, + cls: "immerse-emoji-button" + }); + if (emoji === this.currentEmoji) { + button.addClass("immerse-emoji-selected"); + } + button.addEventListener("click", () => { + this.onSelect(emoji); + this.close(); + }); + }); + }); + }; + renderCategories(); + searchInput.addEventListener("input", (e) => { + const filter = e.target.value.toLowerCase(); + renderCategories(filter); + }); + const customDiv = contentEl.createDiv({ cls: "immerse-emoji-custom" }); + customDiv.createEl("span", { text: "Or enter custom emoji: " }); + const customInput = customDiv.createEl("input", { + type: "text", + placeholder: "Paste emoji", + cls: "immerse-emoji-custom-input" + }); + const customBtn = customDiv.createEl("button", { + text: "Use Custom", + cls: "immerse-btn immerse-btn-primary" + }); + customBtn.addEventListener("click", () => { + const customEmoji = customInput.value.trim(); + if (customEmoji) { + this.onSelect(customEmoji); + this.close(); + } + }); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +}; // src/view.ts var ImmerseView = class extends import_obsidian2.ItemView { @@ -1839,9 +2200,17 @@ var ImmerseSettingTab = class extends import_obsidian4.PluginSettingTab { new import_obsidian4.Setting(containerEl).setName(`${list.icon} ${list.name}`).addText((text) => text.setValue(list.name).setPlaceholder("List name").onChange(async (value) => { this.plugin.settings.lists[index].name = value; await this.plugin.saveAllData(); - })).addText((text) => text.setValue(list.icon).setPlaceholder("Emoji").onChange(async (value) => { - this.plugin.settings.lists[index].icon = value; - await this.plugin.saveAllData(); + })).addButton((btn) => btn.setButtonText(list.icon || "\u{1F4C1}").setTooltip("Choose emoji").onClick(() => { + const modal = new EmojiPickerModal( + this.app, + list.icon, + async (emoji) => { + this.plugin.settings.lists[index].icon = emoji; + await this.plugin.saveAllData(); + this.display(); + } + ); + modal.open(); })).addColorPicker((picker) => picker.setValue(list.color).onChange(async (value) => { this.plugin.settings.lists[index].color = value; await this.plugin.saveAllData(); diff --git a/manifest.json b/manifest.json index 19cb954..effe820 100644 --- a/manifest.json +++ b/manifest.json @@ -1,11 +1,11 @@ { - "id": "immerse", - "name": "Immerse", - "version": "1.1.2", - "minAppVersion": "0.15.0", - "description": "A Blitzit-inspired task management and focus timer plugin. Plan your day, track time with Pomodoro technique, and crush your tasks with satisfying checkoffs.", - "author": "Crib", - "authorUrl": "https://git.cribdev.com/crib", - "fundingUrl": "", - "isDesktopOnly": false -} + "id": "immerse", + "name": "Immerse", + "version": "1.1.3", + "minAppVersion": "0.15.0", + "description": "A Blitzit-inspired task management and focus timer plugin. Plan your day, track time with Pomodoro technique, and crush your tasks with satisfying checkoffs.", + "author": "Crib", + "authorUrl": "https://git.cribdev.com/crib", + "fundingUrl": "", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/package.json b/package.json index 0983602..8993d8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "immerse", - "version": "1.1.2", + "version": "1.1.3", "description": "A Blitzit-inspired task management and focus timer plugin for Obsidian", "main": "main.js", "scripts": { diff --git a/src/main.ts b/src/main.ts index 856cff5..394666f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -22,7 +22,7 @@ import { import { ImmerseView } from './view'; import { ReportView, VIEW_TYPE_REPORT } from './reportView'; -import { QuickAddTaskModal } from './modals'; +import { QuickAddTaskModal, EmojiPickerModal } from './modals'; // ============ Main Plugin Class ============ @@ -1385,12 +1385,20 @@ class ImmerseSettingTab extends PluginSettingTab { this.plugin.settings.lists[index].name = value; await this.plugin.saveAllData(); })) - .addText(text => text - .setValue(list.icon) - .setPlaceholder('Emoji') - .onChange(async value => { - this.plugin.settings.lists[index].icon = value; - await this.plugin.saveAllData(); + .addButton(btn => btn + .setButtonText(list.icon || '๐Ÿ“') + .setTooltip('Choose emoji') + .onClick(() => { + const modal = new EmojiPickerModal( + this.app, + list.icon, + async (emoji) => { + this.plugin.settings.lists[index].icon = emoji; + await this.plugin.saveAllData(); + this.display(); + } + ); + modal.open(); })) .addColorPicker(picker => picker .setValue(list.color) diff --git a/src/modals.ts b/src/modals.ts index 518ead6..2acd576 100644 --- a/src/modals.ts +++ b/src/modals.ts @@ -8,6 +8,293 @@ import { import { ImmerseTask } from './types'; import ImmersePlugin from './main'; +// Emoji search keywords mapping +const EMOJI_KEYWORDS: { [key: string]: string } = { + '๐Ÿ’ผ': 'briefcase work business office job', + '๐Ÿ ': 'home house', + '๐Ÿ“š': 'books study read library', + '๐ŸŽฏ': 'target goal aim dart', + 'โœ…': 'check mark done complete checkbox tick', + '๐Ÿ“': 'memo note write pencil', + '๐Ÿ’ก': 'light bulb idea', + '๐Ÿ”ฅ': 'fire hot flame', + 'โšก': 'lightning bolt electric zap', + '๐ŸŽจ': 'art paint palette', + '๐Ÿ†': 'trophy award win', + '๐Ÿ’ช': 'muscle strong flex', + '๐Ÿš€': 'rocket ship launch', + '๐Ÿ“Š': 'chart graph data', + 'โฐ': 'clock time alarm', + '๐Ÿ’ฐ': 'money bag cash dollar', + '๐Ÿ˜€': 'smile happy face grin', + '๐Ÿ˜ƒ': 'smile happy grin', + '๐Ÿ˜„': 'smile happy laugh', + '๐Ÿ˜': 'grin smile happy', + '๐Ÿ˜†': 'laugh smile happy', + '๐Ÿ˜…': 'sweat smile nervous', + '๐Ÿคฃ': 'laugh rolling floor', + '๐Ÿ˜‚': 'tears joy laugh cry', + '๐Ÿ™‚': 'smile happy slight', + '๐Ÿ™ƒ': 'upside down smile', + '๐Ÿ˜‰': 'wink smile flirt', + '๐Ÿ˜Š': 'blush smile happy', + '๐Ÿ˜‡': 'angel halo smile', + '๐Ÿฅฐ': 'love hearts smile', + '๐Ÿ˜': 'love heart eyes smile', + '๐Ÿคฉ': 'star eyes excited', + '๐Ÿ˜˜': 'kiss love heart', + '๐Ÿ˜—': 'kiss love', + '๐Ÿ˜š': 'kiss love', + '๐Ÿ˜™': 'kiss love smile', + '๐Ÿฅฒ': 'smile tear cry happy', + '๐Ÿ˜‹': 'yum delicious smile', + '๐Ÿ˜›': 'tongue playful', + '๐Ÿ˜œ': 'wink tongue playful', + '๐Ÿคช': 'crazy wild eyes', + '๐Ÿ˜': 'tongue eyes squint', + '๐Ÿค‘': 'money dollar rich', + '๐Ÿค—': 'hug smile', + '๐Ÿคญ': 'hand over mouth giggle', + '๐Ÿคซ': 'shush quiet secret', + '๐Ÿค”': 'think hmm wonder', + '๐Ÿค': 'zipper mouth secret', + '๐Ÿคจ': 'eyebrow raised skeptical', + '๐Ÿ˜': 'neutral meh', + '๐Ÿ˜‘': 'expressionless blank', + '๐Ÿ˜ถ': 'no mouth silent', + '๐Ÿ˜': 'smirk confident', + '๐Ÿ˜’': 'unamused annoyed', + '๐Ÿ™„': 'eye roll annoyed', + '๐Ÿ˜ฌ': 'grimace awkward', + '๐Ÿคฅ': 'liar lying pinocchio', + '๐Ÿ˜Œ': 'relieved content', + '๐Ÿ˜”': 'sad pensive', + '๐Ÿ˜ช': 'sleepy tired', + '๐Ÿคค': 'drool sleep', + '๐Ÿ˜ด': 'sleep zzz', + '๐Ÿ˜ท': 'mask sick medical', + '๐Ÿค’': 'sick thermometer', + '๐Ÿค•': 'injured bandage', + '๐Ÿคข': 'nausea sick', + '๐Ÿคฎ': 'vomit sick', + '๐Ÿคง': 'sneeze sick tissue', + '๐Ÿฅต': 'hot sweat', + '๐Ÿฅถ': 'cold freeze', + '๐Ÿ˜Ž': 'cool sunglasses', + '๐Ÿค“': 'nerd glasses', + '๐Ÿง': 'monocle fancy', + '๐Ÿ˜•': 'confused uncertain', + '๐Ÿ˜Ÿ': 'worried concerned', + '๐Ÿ™': 'frown sad', + 'โ˜น๏ธ': 'frown sad', + '๐Ÿ˜ฎ': 'wow surprised', + '๐Ÿ˜ฏ': 'surprised shocked', + '๐Ÿ˜ฒ': 'shocked astonished', + '๐Ÿ˜ณ': 'flushed embarrassed', + '๐Ÿฅบ': 'pleading puppy eyes', + '๐Ÿ˜ฆ': 'frown worried', + '๐Ÿ˜ง': 'anguished worried', + '๐Ÿ˜จ': 'fearful scared', + '๐Ÿ˜ฐ': 'anxious sweat', + '๐Ÿ˜ฅ': 'sad sweat', + '๐Ÿ˜ข': 'cry tear sad', + '๐Ÿ˜ญ': 'cry tears sob', + '๐Ÿ˜ฑ': 'scream fear', + '๐Ÿ˜–': 'confounded', + '๐Ÿ˜ฃ': 'persevere struggle', + '๐Ÿ˜ž': 'disappointed sad', + '๐Ÿ˜“': 'downcast sweat', + '๐Ÿ˜ฉ': 'weary tired', + '๐Ÿ˜ซ': 'tired exhausted', + '๐Ÿฅฑ': 'yawn tired', + '๐Ÿ˜ค': 'triumph proud', + '๐Ÿ˜ก': 'angry mad rage', + '๐Ÿ˜ ': 'angry mad', + '๐Ÿคฌ': 'cursing swearing angry', + '๐Ÿ˜ˆ': 'devil smiling evil', + '๐Ÿ‘ฟ': 'devil angry evil', + '๐Ÿ’€': 'skull death', + 'โ˜ ๏ธ': 'skull crossbones death', + '๐Ÿ’ฉ': 'poop poo', + '๐Ÿคก': 'clown funny', + '๐Ÿ‘น': 'ogre monster', + '๐Ÿ‘บ': 'goblin monster', + '๐Ÿ‘ป': 'ghost boo', + '๐Ÿ‘ฝ': 'alien extraterrestrial', + '๐Ÿ‘พ': 'alien monster game', + '๐Ÿค–': 'robot bot', + 'โค๏ธ': 'red heart love', + '๐Ÿงก': 'orange heart love', + '๐Ÿ’›': 'yellow heart love', + '๐Ÿ’š': 'green heart love', + '๐Ÿ’™': 'blue heart love', + '๐Ÿ’œ': 'purple heart love', + '๐ŸคŽ': 'brown heart love', + '๐Ÿ–ค': 'black heart love', + '๐Ÿค': 'white heart love', + '๐Ÿ’”': 'broken heart sad', + 'โฃ๏ธ': 'heart exclamation love', + '๐Ÿ’•': 'two hearts love', + '๐Ÿ’ž': 'revolving hearts love', + '๐Ÿ’“': 'beating heart love', + '๐Ÿ’—': 'growing heart love', + '๐Ÿ’–': 'sparkling heart love', + '๐Ÿ’˜': 'arrow heart love cupid', + '๐Ÿ’': 'heart box gift love', + '๐Ÿ’Ÿ': 'heart decoration love', + 'โค๏ธโ€๐Ÿ”ฅ': 'heart fire love passion', + 'โค๏ธโ€๐Ÿฉน': 'heart bandage healing', + '๐Ÿ’Œ': 'love letter heart', + '๐Ÿ’‹': 'kiss lips', + '๐Ÿ’‘': 'couple love kiss', + '๐Ÿ’': 'kiss couple love', + '๐Ÿ‘‹': 'wave hand hello goodbye', + '๐Ÿคš': 'raised hand back', + '๐Ÿ–๏ธ': 'hand fingers spread', + 'โœ‹': 'raised hand stop', + '๐Ÿ––': 'vulcan salute spock', + '๐Ÿ‘Œ': 'ok okay hand', + '๐ŸคŒ': 'pinched fingers italian', + '๐Ÿค': 'pinching hand small', + 'โœŒ๏ธ': 'peace victory hand', + '๐Ÿคž': 'crossed fingers luck', + '๐ŸคŸ': 'love you hand', + '๐Ÿค˜': 'rock on horns', + '๐Ÿค™': 'call me hang loose', + '๐Ÿ‘ˆ': 'left point finger', + '๐Ÿ‘‰': 'right point finger', + '๐Ÿ‘†': 'up point finger', + '๐Ÿ–•': 'middle finger rude', + '๐Ÿ‘‡': 'down point finger', + 'โ˜๏ธ': 'up point finger', + '๐Ÿ‘': 'thumbs up yes good', + '๐Ÿ‘Ž': 'thumbs down no bad', + 'โœŠ': 'fist hand', + '๐Ÿ‘Š': 'fist bump punch', + '๐Ÿค›': 'left fist bump', + '๐Ÿคœ': 'right fist bump', + '๐Ÿ‘': 'clap applause', + '๐Ÿ™Œ': 'raising hands celebration', + '๐Ÿ‘': 'open hands', + '๐Ÿคฒ': 'palms together pray', + '๐Ÿค': 'handshake deal', + '๐Ÿ™': 'pray please thank', + 'โœ๏ธ': 'writing hand', + '๐Ÿ’…': 'nail polish manicure', + '๐Ÿคณ': 'selfie camera phone', + '๐Ÿถ': 'dog puppy pet', + '๐Ÿฑ': 'cat kitty pet', + '๐Ÿญ': 'mouse rat', + '๐Ÿน': 'hamster pet', + '๐Ÿฐ': 'rabbit bunny', + '๐ŸฆŠ': 'fox', + '๐Ÿป': 'bear', + '๐Ÿผ': 'panda bear', + '๐Ÿจ': 'koala bear', + '๐Ÿฏ': 'tiger face', + '๐Ÿฆ': 'lion face', + '๐Ÿฎ': 'cow face', + '๐Ÿท': 'pig face', + '๐Ÿธ': 'frog face', + '๐Ÿต': 'monkey face', + '๐ŸŽ': 'apple red fruit', + '๐ŸŠ': 'orange fruit', + '๐Ÿ‹': 'lemon fruit', + '๐ŸŒ': 'banana fruit', + '๐Ÿ‰': 'watermelon fruit', + '๐Ÿ‡': 'grapes fruit', + '๐Ÿ“': 'strawberry fruit', + '๐Ÿ’': 'cherry fruit', + '๐Ÿ‘': 'peach fruit', + '๐Ÿฅญ': 'mango fruit', + '๐Ÿ': 'pineapple fruit', + '๐Ÿฅฅ': 'coconut fruit', + '๐Ÿฅ': 'kiwi fruit', + '๐Ÿ…': 'tomato vegetable', + '๐Ÿฅ‘': 'avocado fruit', + '๐Ÿž': 'bread food', + 'โšฝ': 'soccer ball football', + '๐Ÿ€': 'basketball ball', + '๐Ÿˆ': 'american football', + 'โšพ': 'baseball ball', + '๐ŸŽพ': 'tennis ball', + '๐Ÿ': 'volleyball ball', + '๐Ÿš—': 'car auto vehicle', + '๐Ÿš•': 'taxi car', + '๐Ÿš™': 'suv car vehicle', + '๐ŸšŒ': 'bus vehicle', + '๐ŸšŽ': 'trolleybus bus', + '๐ŸŽ๏ธ': 'racing car fast', + '๐Ÿš“': 'police car cop', + '๐Ÿš‘': 'ambulance emergency', + '๐Ÿš’': 'fire truck engine', + '๐Ÿšฒ': 'bicycle bike', + 'โœˆ๏ธ': 'airplane plane flight', + '๐Ÿ’ป': 'laptop computer', + 'โŒจ๏ธ': 'keyboard computer', + '๐Ÿ–ฑ๏ธ': 'mouse computer', + '๐Ÿ–ฅ๏ธ': 'desktop computer', + '๐Ÿ–จ๏ธ': 'printer', + '๐Ÿ“ฑ': 'phone mobile iphone', + '๐Ÿ“ž': 'phone telephone', + 'โ˜Ž๏ธ': 'telephone phone', + '๐Ÿ“บ': 'tv television', + '๐Ÿ“ป': 'radio', + '๐Ÿ“': 'folder file', + '๐Ÿ“‚': 'open folder file', + '๐Ÿ“…': 'calendar date', + '๐Ÿ“†': 'calendar date', + '๐Ÿ“ˆ': 'chart up graph', + '๐Ÿ“‰': 'chart down graph', + '๐Ÿ“Œ': 'pushpin pin', + '๐Ÿ“': 'pin location map', + '๐Ÿ“Ž': 'paperclip clip', + '๐ŸŽต': 'music note', + '๐ŸŽถ': 'music notes', + '๐ŸŽผ': 'musical score', + '๐ŸŽน': 'piano keyboard music', + '๐ŸŽธ': 'guitar music', + '๐ŸŽบ': 'trumpet music', + '๐ŸŽท': 'saxophone music', + '๐Ÿฅ': 'drum music', + '๐ŸŽค': 'microphone mic sing', + '๐ŸŽง': 'headphones music', + '๐Ÿ”Š': 'speaker loud volume', + 'โŒ': 'cross x no cancel', + 'โš ๏ธ': 'warning caution alert', + '๐Ÿ”ด': 'red circle', + '๐ŸŸข': 'green circle', + '๐Ÿ”ต': 'blue circle', + '๐ŸŸก': 'yellow circle', + '๐ŸŸฃ': 'purple circle', + 'โšซ': 'black circle', + 'โšช': 'white circle', + '๐ŸŸค': 'brown circle', + '๐Ÿ”บ': 'triangle red up', + '๐Ÿ”ป': 'triangle red down', + '๐Ÿ”ธ': 'diamond orange small', + '๐Ÿ”น': 'diamond blue small', + '๐Ÿ”ถ': 'diamond orange large', + '๐Ÿ”ท': 'diamond blue large', +}; + +// Emoji categories for picker +const EMOJI_CATEGORIES = { + 'โญ Frequently Used': ['๐Ÿ’ผ', '๐Ÿ ', '๐Ÿ“š', '๐ŸŽฏ', 'โœ…', '๐Ÿ“', '๐Ÿ’ก', '๐Ÿ”ฅ', 'โšก', '๐ŸŽจ', '๐Ÿ†', '๐Ÿ’ช', '๐Ÿš€', '๐Ÿ“Š', 'โฐ', '๐Ÿ’ฐ'], + '๐Ÿ˜€ Smileys & Emotion': ['๐Ÿ˜€', '๐Ÿ˜ƒ', '๐Ÿ˜„', '๐Ÿ˜', '๐Ÿ˜†', '๐Ÿ˜…', '๐Ÿคฃ', '๐Ÿ˜‚', '๐Ÿ™‚', '๐Ÿ™ƒ', '๐Ÿ˜‰', '๐Ÿ˜Š', '๐Ÿ˜‡', '๐Ÿฅฐ', '๐Ÿ˜', '๐Ÿคฉ', '๐Ÿ˜˜', '๐Ÿ˜—', '๐Ÿ˜š', '๐Ÿ˜™', '๐Ÿฅฒ', '๐Ÿ˜‹', '๐Ÿ˜›', '๐Ÿ˜œ', '๐Ÿคช', '๐Ÿ˜', '๐Ÿค‘', '๐Ÿค—', '๐Ÿคญ', '๐Ÿคซ', '๐Ÿค”', '๐Ÿค', '๐Ÿคจ', '๐Ÿ˜', '๐Ÿ˜‘', '๐Ÿ˜ถ', '๐Ÿ˜', '๐Ÿ˜’', '๐Ÿ™„', '๐Ÿ˜ฌ', '๐Ÿคฅ', '๐Ÿ˜Œ', '๐Ÿ˜”', '๐Ÿ˜ช', '๐Ÿคค', '๐Ÿ˜ด', '๐Ÿ˜ท', '๐Ÿค’', '๐Ÿค•', '๐Ÿคข', '๐Ÿคฎ', '๐Ÿคง', '๐Ÿฅต', '๐Ÿฅถ', '๐Ÿ˜Ž', '๐Ÿค“', '๐Ÿง', '๐Ÿ˜•', '๐Ÿ˜Ÿ', '๐Ÿ™', 'โ˜น๏ธ', '๐Ÿ˜ฎ', '๐Ÿ˜ฏ', '๐Ÿ˜ฒ', '๐Ÿ˜ณ', '๐Ÿฅบ', '๐Ÿ˜ฆ', '๐Ÿ˜ง', '๐Ÿ˜จ', '๐Ÿ˜ฐ', '๐Ÿ˜ฅ', '๐Ÿ˜ข', '๐Ÿ˜ญ', '๐Ÿ˜ฑ', '๐Ÿ˜–', '๐Ÿ˜ฃ', '๐Ÿ˜ž', '๐Ÿ˜“', '๐Ÿ˜ฉ', '๐Ÿ˜ซ', '๐Ÿฅฑ', '๐Ÿ˜ค', '๐Ÿ˜ก', '๐Ÿ˜ ', '๐Ÿคฌ', '๐Ÿ˜ˆ', '๐Ÿ‘ฟ', '๐Ÿ’€', 'โ˜ ๏ธ', '๐Ÿ’ฉ', '๐Ÿคก', '๐Ÿ‘น', '๐Ÿ‘บ', '๐Ÿ‘ป', '๐Ÿ‘ฝ', '๐Ÿ‘พ', '๐Ÿค–'], + 'โค๏ธ Hearts & Love': ['โค๏ธ', '๐Ÿงก', '๐Ÿ’›', '๐Ÿ’š', '๐Ÿ’™', '๐Ÿ’œ', '๐ŸคŽ', '๐Ÿ–ค', '๐Ÿค', '๐Ÿ’”', 'โฃ๏ธ', '๐Ÿ’•', '๐Ÿ’ž', '๐Ÿ’“', '๐Ÿ’—', '๐Ÿ’–', '๐Ÿ’˜', '๐Ÿ’', '๐Ÿ’Ÿ', 'โค๏ธโ€๐Ÿ”ฅ', 'โค๏ธโ€๐Ÿฉน', '๐Ÿ’Œ', '๐Ÿ’‹', '๐Ÿ’‘', '๐Ÿ’', '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ', '๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ', '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ'], + '๐Ÿ‘ค People & Body': ['๐Ÿ‘‹', '๐Ÿคš', '๐Ÿ–๏ธ', 'โœ‹', '๐Ÿ––', '๐Ÿ‘Œ', '๐ŸคŒ', '๐Ÿค', 'โœŒ๏ธ', '๐Ÿคž', '๐ŸคŸ', '๐Ÿค˜', '๐Ÿค™', '๐Ÿ‘ˆ', '๐Ÿ‘‰', '๐Ÿ‘†', '๐Ÿ–•', '๐Ÿ‘‡', 'โ˜๏ธ', '๐Ÿ‘', '๐Ÿ‘Ž', 'โœŠ', '๐Ÿ‘Š', '๐Ÿค›', '๐Ÿคœ', '๐Ÿ‘', '๐Ÿ™Œ', '๐Ÿ‘', '๐Ÿคฒ', '๐Ÿค', '๐Ÿ™', 'โœ๏ธ', '๐Ÿ’…', '๐Ÿคณ', '๐Ÿ’ช', '๐Ÿฆพ', '๐Ÿฆฟ', '๐Ÿฆต', '๐Ÿฆถ', '๐Ÿ‘‚', '๐Ÿฆป', '๐Ÿ‘ƒ', '๐Ÿง ', '๐Ÿซ€', '๐Ÿซ', '๐Ÿฆท', '๐Ÿฆด', '๐Ÿ‘€', '๐Ÿ‘๏ธ', '๐Ÿ‘…', '๐Ÿ‘„', '๐Ÿ‘ถ', '๐Ÿง’', '๐Ÿ‘ฆ', '๐Ÿ‘ง', '๐Ÿง‘', '๐Ÿ‘จ', '๐Ÿ‘ฉ', '๐Ÿง”', '๐Ÿง‘โ€๐Ÿฆฐ', '๐Ÿ‘จโ€๐Ÿฆฐ', '๐Ÿ‘ฉโ€๐Ÿฆฐ', '๐Ÿง‘โ€๐Ÿฆฑ', '๐Ÿ‘จโ€๐Ÿฆฑ', '๐Ÿ‘ฉโ€๐Ÿฆฑ', '๐Ÿง‘โ€๐Ÿฆณ', '๐Ÿ‘จโ€๐Ÿฆณ', '๐Ÿ‘ฉโ€๐Ÿฆณ', '๐Ÿง‘โ€๐Ÿฆฒ', '๐Ÿ‘จโ€๐Ÿฆฒ', '๐Ÿ‘ฉโ€๐Ÿฆฒ', '๐Ÿ‘ฑ', '๐Ÿ‘ฑโ€โ™‚๏ธ', '๐Ÿ‘ฑโ€โ™€๏ธ', '๐Ÿง“', '๐Ÿ‘ด', '๐Ÿ‘ต', '๐Ÿ™', '๐Ÿ™โ€โ™‚๏ธ', '๐Ÿ™โ€โ™€๏ธ', '๐Ÿ™Ž', '๐Ÿ™Žโ€โ™‚๏ธ', '๐Ÿ™Žโ€โ™€๏ธ', '๐Ÿ™…', '๐Ÿ™…โ€โ™‚๏ธ', '๐Ÿ™…โ€โ™€๏ธ', '๐Ÿ™†', '๐Ÿ™†โ€โ™‚๏ธ', '๐Ÿ™†โ€โ™€๏ธ', '๐Ÿ’', '๐Ÿ’โ€โ™‚๏ธ', '๐Ÿ’โ€โ™€๏ธ', '๐Ÿ™‹', '๐Ÿ™‹โ€โ™‚๏ธ', '๐Ÿ™‹โ€โ™€๏ธ', '๐Ÿง', '๐Ÿงโ€โ™‚๏ธ', '๐Ÿงโ€โ™€๏ธ', '๐Ÿ™‡', '๐Ÿ™‡โ€โ™‚๏ธ', '๐Ÿ™‡โ€โ™€๏ธ', '๐Ÿคฆ', '๐Ÿคฆโ€โ™‚๏ธ', '๐Ÿคฆโ€โ™€๏ธ', '๐Ÿคท', '๐Ÿคทโ€โ™‚๏ธ', '๐Ÿคทโ€โ™€๏ธ'], + '๐Ÿถ Animals & Nature': ['๐Ÿถ', '๐Ÿฑ', '๐Ÿญ', '๐Ÿน', '๐Ÿฐ', '๐ŸฆŠ', '๐Ÿป', '๐Ÿผ', '๐Ÿจ', '๐Ÿฏ', '๐Ÿฆ', '๐Ÿฎ', '๐Ÿท', '๐Ÿฝ', '๐Ÿธ', '๐Ÿต', '๐Ÿ™ˆ', '๐Ÿ™‰', '๐Ÿ™Š', '๐Ÿ’', '๐Ÿ”', '๐Ÿง', '๐Ÿฆ', '๐Ÿค', '๐Ÿฃ', '๐Ÿฅ', '๐Ÿฆ†', '๐Ÿฆ…', '๐Ÿฆ‰', '๐Ÿฆ‡', '๐Ÿบ', '๐Ÿ—', '๐Ÿด', '๐Ÿฆ„', '๐Ÿ', '๐Ÿ›', '๐Ÿฆ‹', '๐ŸŒ', '๐Ÿž', '๐Ÿœ', '๐ŸฆŸ', '๐Ÿฆ—', '๐Ÿ•ท๏ธ', '๐Ÿ•ธ๏ธ', '๐Ÿฆ‚', '๐Ÿข', '๐Ÿ', '๐ŸฆŽ', '๐Ÿฆ–', '๐Ÿฆ•', '๐Ÿ™', '๐Ÿฆ‘', '๐Ÿฆ', '๐Ÿฆž', '๐Ÿฆ€', '๐Ÿก', '๐Ÿ ', '๐ŸŸ', '๐Ÿฌ', '๐Ÿณ', '๐Ÿ‹', '๐Ÿฆˆ', '๐ŸŠ', '๐Ÿ…', '๐Ÿ†', '๐Ÿฆ“', '๐Ÿฆ', '๐Ÿฆง', '๐Ÿ˜', '๐Ÿฆ›', '๐Ÿฆ', '๐Ÿช', '๐Ÿซ', '๐Ÿฆ’', '๐Ÿฆ˜', '๐Ÿƒ', '๐Ÿ‚', '๐Ÿ„', '๐ŸŽ', '๐Ÿ–', '๐Ÿ', '๐Ÿ‘', '๐Ÿฆ™', '๐Ÿ', '๐ŸฆŒ', '๐Ÿ•', '๐Ÿฉ', '๐Ÿฆฎ', '๐Ÿ•โ€๐Ÿฆบ', '๐Ÿˆ', '๐Ÿˆโ€โฌ›', '๐Ÿ“', '๐Ÿฆƒ', '๐Ÿฆš', '๐Ÿฆœ', '๐Ÿฆข', '๐Ÿฆฉ', '๐Ÿ•Š๏ธ', '๐Ÿ‡', '๐Ÿฆ', '๐Ÿฆจ', '๐Ÿฆก', '๐Ÿฆฆ', '๐Ÿฆฅ', '๐Ÿ', '๐Ÿ€', '๐Ÿฟ๏ธ', '๐Ÿฆ”', '๐ŸŒฒ', '๐ŸŒณ', '๐ŸŒด', '๐ŸŒฑ', '๐ŸŒฟ', 'โ˜˜๏ธ', '๐Ÿ€', '๐ŸŽ', '๐ŸŽ‹', '๐Ÿƒ', '๐Ÿ‚', '๐Ÿ', '๐Ÿ„', '๐ŸŒพ', '๐Ÿ’', '๐ŸŒท', '๐ŸŒน', '๐Ÿฅ€', '๐ŸŒบ', '๐ŸŒธ', '๐ŸŒผ', '๐ŸŒป', '๐ŸŒž', '๐ŸŒ', '๐ŸŒ›', '๐ŸŒœ', '๐ŸŒš', '๐ŸŒ•', '๐ŸŒ–', '๐ŸŒ—', '๐ŸŒ˜', '๐ŸŒ‘', '๐ŸŒ’', '๐ŸŒ“', '๐ŸŒ”', '๐ŸŒ™', '๐ŸŒŽ', '๐ŸŒ', '๐ŸŒ', '๐Ÿช', '๐Ÿ’ซ', 'โญ', '๐ŸŒŸ', 'โœจ', 'โšก', 'โ˜„๏ธ', '๐Ÿ’ฅ', '๐Ÿ”ฅ', '๐ŸŒช๏ธ', '๐ŸŒˆ', 'โ˜€๏ธ', '๐ŸŒค๏ธ', 'โ›…', '๐ŸŒฅ๏ธ', 'โ˜๏ธ', '๐ŸŒฆ๏ธ', '๐ŸŒง๏ธ', 'โ›ˆ๏ธ', '๐ŸŒฉ๏ธ', '๐ŸŒจ๏ธ', 'โ„๏ธ', 'โ˜ƒ๏ธ', 'โ›„', '๐ŸŒฌ๏ธ', '๐Ÿ’จ', '๐Ÿ’ง', '๐Ÿ’ฆ', 'โ˜”', 'โ˜‚๏ธ', '๐ŸŒŠ', '๐ŸŒซ๏ธ'], + '๐ŸŽ Food & Drink': ['๐Ÿ‡', '๐Ÿˆ', '๐Ÿ‰', '๐ŸŠ', '๐Ÿ‹', '๐ŸŒ', '๐Ÿ', '๐Ÿฅญ', '๐ŸŽ', '๐Ÿ', '๐Ÿ', '๐Ÿ‘', '๐Ÿ’', '๐Ÿ“', '๐Ÿซ', '๐Ÿฅ', '๐Ÿ…', '๐Ÿซ’', '๐Ÿฅฅ', '๐Ÿฅ‘', '๐Ÿ†', '๐Ÿฅ”', '๐Ÿฅ•', '๐ŸŒฝ', '๐ŸŒถ๏ธ', '๐Ÿซ‘', '๐Ÿฅ’', '๐Ÿฅฌ', '๐Ÿฅฆ', '๐Ÿง„', '๐Ÿง…', '๐Ÿ„', '๐Ÿฅœ', '๐ŸŒฐ', '๐Ÿž', '๐Ÿฅ', '๐Ÿฅ–', '๐Ÿซ“', '๐Ÿฅจ', '๐Ÿฅฏ', '๐Ÿฅž', '๐Ÿง‡', '๐Ÿง€', '๐Ÿ–', '๐Ÿ—', '๐Ÿฅฉ', '๐Ÿฅ“', '๐Ÿ”', '๐ŸŸ', '๐Ÿ•', '๐ŸŒญ', '๐Ÿฅช', '๐ŸŒฎ', '๐ŸŒฏ', '๐Ÿซ”', '๐Ÿฅ™', '๐Ÿง†', '๐Ÿฅš', '๐Ÿณ', '๐Ÿฅ˜', '๐Ÿฒ', '๐Ÿซ•', '๐Ÿฅฃ', '๐Ÿฅ—', '๐Ÿฟ', '๐Ÿงˆ', '๐Ÿง‚', '๐Ÿฅซ', '๐Ÿฑ', '๐Ÿ˜', '๐Ÿ™', '๐Ÿš', '๐Ÿ›', '๐Ÿœ', '๐Ÿ', '๐Ÿ ', '๐Ÿข', '๐Ÿฃ', '๐Ÿค', '๐Ÿฅ', '๐Ÿฅฎ', '๐Ÿก', '๐ŸฅŸ', '๐Ÿฅ ', '๐Ÿฅก', '๐Ÿฆ€', '๐Ÿฆž', '๐Ÿฆ', '๐Ÿฆ‘', '๐Ÿฆช', '๐Ÿฆ', '๐Ÿง', '๐Ÿจ', '๐Ÿฉ', '๐Ÿช', '๐ŸŽ‚', '๐Ÿฐ', '๐Ÿง', '๐Ÿฅง', '๐Ÿซ', '๐Ÿฌ', '๐Ÿญ', '๐Ÿฎ', '๐Ÿฏ', '๐Ÿผ', '๐Ÿฅ›', 'โ˜•', '๐Ÿซ–', '๐Ÿต', '๐Ÿถ', '๐Ÿพ', '๐Ÿท', '๐Ÿธ', '๐Ÿน', '๐Ÿบ', '๐Ÿป', '๐Ÿฅ‚', '๐Ÿฅƒ', '๐Ÿฅค', '๐Ÿง‹', '๐Ÿงƒ', '๐Ÿง‰', '๐ŸงŠ'], + 'โšฝ Activities & Sports': ['โšฝ', '๐Ÿ€', '๐Ÿˆ', 'โšพ', '๐ŸฅŽ', '๐ŸŽพ', '๐Ÿ', '๐Ÿ‰', '๐Ÿฅ', '๐ŸŽฑ', '๐Ÿช€', '๐Ÿ“', '๐Ÿธ', '๐Ÿ’', '๐Ÿ‘', '๐Ÿฅ', '๐Ÿ', '๐Ÿชƒ', '๐Ÿฅ…', 'โ›ณ', '๐Ÿช', '๐Ÿน', '๐ŸŽฃ', '๐Ÿคฟ', '๐ŸฅŠ', '๐Ÿฅ‹', '๐ŸŽฝ', '๐Ÿ›น', '๐Ÿ›ผ', '๐Ÿ›ท', 'โ›ธ๏ธ', '๐ŸฅŒ', '๐ŸŽฟ', 'โ›ท๏ธ', '๐Ÿ‚', '๐Ÿช‚', '๐Ÿ‹๏ธ', '๐Ÿ‹๏ธโ€โ™‚๏ธ', '๐Ÿ‹๏ธโ€โ™€๏ธ', '๐Ÿคผ', '๐Ÿคผโ€โ™‚๏ธ', '๐Ÿคผโ€โ™€๏ธ', '๐Ÿคธ', '๐Ÿคธโ€โ™‚๏ธ', '๐Ÿคธโ€โ™€๏ธ', 'โ›น๏ธ', 'โ›น๏ธโ€โ™‚๏ธ', 'โ›น๏ธโ€โ™€๏ธ', '๐Ÿคบ', '๐Ÿคพ', '๐Ÿคพโ€โ™‚๏ธ', '๐Ÿคพโ€โ™€๏ธ', '๐ŸŒ๏ธ', '๐ŸŒ๏ธโ€โ™‚๏ธ', '๐ŸŒ๏ธโ€โ™€๏ธ', '๐Ÿ‡', '๐Ÿง˜', '๐Ÿง˜โ€โ™‚๏ธ', '๐Ÿง˜โ€โ™€๏ธ', '๐Ÿ„', '๐Ÿ„โ€โ™‚๏ธ', '๐Ÿ„โ€โ™€๏ธ', '๐ŸŠ', '๐ŸŠโ€โ™‚๏ธ', '๐ŸŠโ€โ™€๏ธ', '๐Ÿคฝ', '๐Ÿคฝโ€โ™‚๏ธ', '๐Ÿคฝโ€โ™€๏ธ', '๐Ÿšฃ', '๐Ÿšฃโ€โ™‚๏ธ', '๐Ÿšฃโ€โ™€๏ธ', '๐Ÿง—', '๐Ÿง—โ€โ™‚๏ธ', '๐Ÿง—โ€โ™€๏ธ', '๐Ÿšต', '๐Ÿšตโ€โ™‚๏ธ', '๐Ÿšตโ€โ™€๏ธ', '๐Ÿšด', '๐Ÿšดโ€โ™‚๏ธ', '๐Ÿšดโ€โ™€๏ธ', '๐Ÿ†', '๐Ÿฅ‡', '๐Ÿฅˆ', '๐Ÿฅ‰', '๐Ÿ…', '๐ŸŽ–๏ธ', '๐Ÿต๏ธ', '๐ŸŽ—๏ธ', '๐ŸŽซ', '๐ŸŽŸ๏ธ', '๐ŸŽช', '๐Ÿคน', '๐Ÿคนโ€โ™‚๏ธ', '๐Ÿคนโ€โ™€๏ธ', '๐ŸŽญ', '๐Ÿฉฐ', '๐ŸŽจ', '๐ŸŽฌ', '๐ŸŽค', '๐ŸŽง', '๐ŸŽผ', '๐ŸŽน', '๐Ÿฅ', '๐Ÿช˜', '๐ŸŽท', '๐ŸŽบ', '๐Ÿช—', '๐ŸŽธ', '๐Ÿช•', '๐ŸŽป', '๐ŸŽฒ', 'โ™Ÿ๏ธ', '๐ŸŽฏ', '๐ŸŽณ', '๐ŸŽฎ', '๐ŸŽฐ', '๐Ÿงฉ'], + '๐Ÿš— Travel & Places': ['๐Ÿš—', '๐Ÿš•', '๐Ÿš™', '๐ŸšŒ', '๐ŸšŽ', '๐ŸŽ๏ธ', '๐Ÿš“', '๐Ÿš‘', '๐Ÿš’', '๐Ÿš', '๐Ÿ›ป', '๐Ÿšš', '๐Ÿš›', '๐Ÿšœ', '๐Ÿฆฏ', '๐Ÿฆฝ', '๐Ÿฆผ', '๐Ÿ›ด', '๐Ÿšฒ', '๐Ÿ›ต', '๐Ÿ๏ธ', '๐Ÿ›บ', '๐Ÿšจ', '๐Ÿš”', '๐Ÿš', '๐Ÿš˜', '๐Ÿš–', '๐Ÿšก', '๐Ÿš ', '๐ŸšŸ', '๐Ÿšƒ', '๐Ÿš‹', '๐Ÿšž', '๐Ÿš', '๐Ÿš„', '๐Ÿš…', '๐Ÿšˆ', '๐Ÿš‚', '๐Ÿš†', '๐Ÿš‡', '๐ŸšŠ', '๐Ÿš‰', 'โœˆ๏ธ', '๐Ÿ›ซ', '๐Ÿ›ฌ', '๐Ÿ›ฉ๏ธ', '๐Ÿ’บ', '๐Ÿ›ฐ๏ธ', '๐Ÿš€', '๐Ÿ›ธ', '๐Ÿš', '๐Ÿ›ถ', 'โ›ต', '๐Ÿšค', '๐Ÿ›ฅ๏ธ', '๐Ÿ›ณ๏ธ', 'โ›ด๏ธ', '๐Ÿšข', 'โš“', 'โ›ฝ', '๐Ÿšง', '๐Ÿšฆ', '๐Ÿšฅ', '๐Ÿš', '๐Ÿ—บ๏ธ', '๐Ÿ—ฟ', '๐Ÿ—ฝ', '๐Ÿ—ผ', '๐Ÿฐ', '๐Ÿฏ', '๐ŸŸ๏ธ', '๐ŸŽก', '๐ŸŽข', '๐ŸŽ ', 'โ›ฒ', 'โ›ฑ๏ธ', '๐Ÿ–๏ธ', '๐Ÿ๏ธ', '๐Ÿœ๏ธ', '๐ŸŒ‹', 'โ›ฐ๏ธ', '๐Ÿ”๏ธ', '๐Ÿ—ป', '๐Ÿ•๏ธ', 'โ›บ', '๐Ÿ›–', '๐Ÿ ', '๐Ÿก', '๐Ÿ˜๏ธ', '๐Ÿš๏ธ', '๐Ÿ—๏ธ', '๐Ÿญ', '๐Ÿข', '๐Ÿฌ', '๐Ÿฃ', '๐Ÿค', '๐Ÿฅ', '๐Ÿฆ', '๐Ÿจ', '๐Ÿช', '๐Ÿซ', '๐Ÿฉ', '๐Ÿ’’', '๐Ÿ›๏ธ', 'โ›ช', '๐Ÿ•Œ', '๐Ÿ•', '๐Ÿ›•', '๐Ÿ•‹', 'โ›ฉ๏ธ', '๐Ÿ›ค๏ธ', '๐Ÿ›ฃ๏ธ', '๐Ÿ—พ', '๐ŸŽ‘', '๐Ÿž๏ธ', '๐ŸŒ…', '๐ŸŒ„', '๐ŸŒ ', '๐ŸŽ‡', '๐ŸŽ†', '๐ŸŒ‡', '๐ŸŒ†', '๐Ÿ™๏ธ', '๐ŸŒƒ', '๐ŸŒŒ', '๐ŸŒ‰', '๐ŸŒ'], + '๐Ÿ’ป Objects & Technology': ['โŒš', '๐Ÿ“ฑ', '๐Ÿ“ฒ', '๐Ÿ’ป', 'โŒจ๏ธ', '๐Ÿ–ฅ๏ธ', '๐Ÿ–จ๏ธ', '๐Ÿ–ฑ๏ธ', '๐Ÿ–ฒ๏ธ', '๐Ÿ•น๏ธ', '๐Ÿ—œ๏ธ', '๐Ÿ’พ', '๐Ÿ’ฟ', '๐Ÿ“€', '๐Ÿ“ผ', '๐Ÿ“ท', '๐Ÿ“ธ', '๐Ÿ“น', '๐ŸŽฅ', '๐Ÿ“ฝ๏ธ', '๐ŸŽž๏ธ', '๐Ÿ“ž', 'โ˜Ž๏ธ', '๐Ÿ“Ÿ', '๐Ÿ“ ', '๐Ÿ“บ', '๐Ÿ“ป', '๐ŸŽ™๏ธ', '๐ŸŽš๏ธ', '๐ŸŽ›๏ธ', '๐Ÿงญ', 'โฑ๏ธ', 'โฒ๏ธ', 'โฐ', '๐Ÿ•ฐ๏ธ', 'โŒ›', 'โณ', '๐Ÿ“ก', '๐Ÿ”‹', '๐Ÿ”Œ', '๐Ÿ’ก', '๐Ÿ”ฆ', '๐Ÿ•ฏ๏ธ', '๐Ÿช”', '๐Ÿงฏ', '๐Ÿ›ข๏ธ', '๐Ÿ’ธ', '๐Ÿ’ต', '๐Ÿ’ด', '๐Ÿ’ถ', '๐Ÿ’ท', '๐Ÿช™', '๐Ÿ’ฐ', '๐Ÿ’ณ', '๐Ÿ’Ž', 'โš–๏ธ', '๐Ÿชœ', '๐Ÿงฐ', '๐Ÿช›', '๐Ÿ”ง', '๐Ÿ”จ', 'โš’๏ธ', '๐Ÿ› ๏ธ', 'โ›๏ธ', '๐Ÿชš', '๐Ÿ”ฉ', 'โš™๏ธ', '๐Ÿชค', '๐Ÿงฑ', 'โ›“๏ธ', '๐Ÿงฒ', '๐Ÿ”ซ', '๐Ÿ’ฃ', '๐Ÿงจ', '๐Ÿช“', '๐Ÿ”ช', '๐Ÿ—ก๏ธ', 'โš”๏ธ', '๐Ÿ›ก๏ธ', '๐Ÿšฌ', 'โšฐ๏ธ', '๐Ÿชฆ', 'โšฑ๏ธ', '๐Ÿบ', '๐Ÿ”ฎ', '๐Ÿ“ฟ', '๐Ÿงฟ', '๐Ÿ’ˆ', 'โš—๏ธ', '๐Ÿ”ญ', '๐Ÿ”ฌ', '๐Ÿ•ณ๏ธ', '๐Ÿฉน', '๐Ÿฉบ', '๐Ÿ’Š', '๐Ÿ’‰', '๐Ÿฉธ', '๐Ÿงฌ', '๐Ÿฆท', '๐Ÿงช', '๐ŸŒก๏ธ', '๐Ÿงน', '๐Ÿช ', '๐Ÿงบ', '๐Ÿงป', '๐Ÿšฝ', '๐Ÿšฐ', '๐Ÿšฟ', '๐Ÿ›', '๐Ÿ›€', '๐Ÿงผ', '๐Ÿชฅ', '๐Ÿช’', '๐Ÿงฝ', '๐Ÿชฃ', '๐Ÿงด', '๐Ÿ›Ž๏ธ', '๐Ÿ”‘', '๐Ÿ—๏ธ', '๐Ÿšช', '๐Ÿช‘', '๐Ÿ›‹๏ธ', '๐Ÿ›๏ธ', '๐Ÿ›Œ', '๐Ÿงธ', '๐Ÿช†', '๐Ÿ–ผ๏ธ', '๐Ÿชž', '๐ŸชŸ', '๐Ÿ›๏ธ', '๐Ÿ›’', '๐ŸŽ', '๐ŸŽˆ', '๐ŸŽ', '๐ŸŽ€', '๐Ÿช„', '๐Ÿช…', '๐ŸŽŠ', '๐ŸŽ‰', '๐ŸŽŽ', '๐Ÿฎ', '๐ŸŽ', '๐Ÿงง'], + '๐Ÿ“‹ Office & Writing': ['โœ‰๏ธ', '๐Ÿ“ง', '๐Ÿ“จ', '๐Ÿ“ฉ', '๐Ÿ“ค', '๐Ÿ“ฅ', '๐Ÿ“ฆ', '๐Ÿ“ซ', '๐Ÿ“ช', '๐Ÿ“ฌ', '๐Ÿ“ญ', '๐Ÿ“ฎ', '๐Ÿ—ณ๏ธ', 'โœ๏ธ', 'โœ’๏ธ', '๐Ÿ–‹๏ธ', '๐Ÿ–Š๏ธ', '๐Ÿ–Œ๏ธ', '๐Ÿ–๏ธ', '๐Ÿ“', '๐Ÿ’ผ', '๐Ÿ“', '๐Ÿ“‚', '๐Ÿ—‚๏ธ', '๐Ÿ“…', '๐Ÿ“†', '๐Ÿ—’๏ธ', '๐Ÿ—“๏ธ', '๐Ÿ“‡', '๐Ÿ“ˆ', '๐Ÿ“‰', '๐Ÿ“Š', '๐Ÿ“‹', '๐Ÿ“Œ', '๐Ÿ“', '๐Ÿ“Ž', '๐Ÿ–‡๏ธ', '๐Ÿ“', '๐Ÿ“', 'โœ‚๏ธ', '๐Ÿ—ƒ๏ธ', '๐Ÿ—„๏ธ', '๐Ÿ—‘๏ธ', '๐Ÿ”’', '๐Ÿ”“', '๐Ÿ”', '๐Ÿ”', '๐Ÿ”‘', '๐Ÿ—๏ธ', '๐Ÿ”จ', '๐Ÿช“', 'โ›๏ธ', 'โš’๏ธ', '๐Ÿ› ๏ธ', '๐Ÿ—ก๏ธ', 'โš”๏ธ', '๐Ÿ’ฃ', '๐Ÿชƒ', '๐Ÿน', '๐Ÿ›ก๏ธ', '๐Ÿชš', '๐Ÿ”ง', '๐Ÿช›', '๐Ÿ”ฉ', 'โš™๏ธ', '๐Ÿ—œ๏ธ', 'โš–๏ธ'], + '๐ŸŽต Music & Sound': ['๐ŸŽต', '๐ŸŽถ', '๐ŸŽผ', '๐ŸŽน', '๐ŸŽธ', '๐ŸŽบ', '๐ŸŽท', '๐Ÿฅ', '๐Ÿช˜', '๐ŸŽค', '๐ŸŽง', '๐Ÿ“ป', '๐ŸŽ™๏ธ', '๐Ÿ”Š', '๐Ÿ”‰', '๐Ÿ”ˆ', '๐Ÿ”‡', '๐Ÿ“ข', '๐Ÿ“ฃ', '๐Ÿ“ฏ', '๐Ÿ””', '๐Ÿ”•', '๐ŸŽš๏ธ', '๐ŸŽ›๏ธ', '๐ŸŽ–๏ธ', '๐Ÿ†', '๐Ÿฅ‡', '๐Ÿฅˆ', '๐Ÿฅ‰', 'โšก', '๐Ÿ”ฅ', '๐Ÿ’ฅ'], + 'โšก Symbols & Signs': ['โค๏ธ', '๐Ÿงก', '๐Ÿ’›', '๐Ÿ’š', '๐Ÿ’™', '๐Ÿ’œ', '๐Ÿ–ค', '๐Ÿค', '๐ŸคŽ', '๐Ÿ’”', 'โฃ๏ธ', '๐Ÿ’•', '๐Ÿ’ž', '๐Ÿ’“', '๐Ÿ’—', '๐Ÿ’–', '๐Ÿ’˜', '๐Ÿ’', '๐Ÿ’Ÿ', 'โ˜ฎ๏ธ', 'โœ๏ธ', 'โ˜ช๏ธ', '๐Ÿ•‰๏ธ', 'โ˜ธ๏ธ', 'โœก๏ธ', '๐Ÿ”ฏ', '๐Ÿ•Ž', 'โ˜ฏ๏ธ', 'โ˜ฆ๏ธ', '๐Ÿ›', 'โ›Ž', 'โ™ˆ', 'โ™‰', 'โ™Š', 'โ™‹', 'โ™Œ', 'โ™', 'โ™Ž', 'โ™', 'โ™', 'โ™‘', 'โ™’', 'โ™“', '๐Ÿ†”', 'โš›๏ธ', '๐Ÿ‰‘', 'โ˜ข๏ธ', 'โ˜ฃ๏ธ', '๐Ÿ“ด', '๐Ÿ“ณ', '๐Ÿˆถ', '๐Ÿˆš', '๐Ÿˆธ', '๐Ÿˆบ', '๐Ÿˆท๏ธ', 'โœด๏ธ', '๐Ÿ†š', '๐Ÿ’ฎ', '๐Ÿ‰', 'ใŠ™๏ธ', 'ใŠ—๏ธ', '๐Ÿˆด', '๐Ÿˆต', '๐Ÿˆน', '๐Ÿˆฒ', '๐Ÿ…ฐ๏ธ', '๐Ÿ…ฑ๏ธ', '๐Ÿ†Ž', '๐Ÿ†‘', '๐Ÿ…พ๏ธ', '๐Ÿ†˜', 'โŒ', 'โญ•', '๐Ÿ›‘', 'โ›”', '๐Ÿ“›', '๐Ÿšซ', '๐Ÿ’ฏ', '๐Ÿ’ข', 'โ™จ๏ธ', '๐Ÿšท', '๐Ÿšฏ', '๐Ÿšณ', '๐Ÿšฑ', '๐Ÿ”ž', '๐Ÿ“ต', '๐Ÿšญ', 'โ—', 'โ•', 'โ“', 'โ”', 'โ€ผ๏ธ', 'โ‰๏ธ', '๐Ÿ”…', '๐Ÿ”†', 'ใ€ฝ๏ธ', 'โš ๏ธ', '๐Ÿšธ', '๐Ÿ”ฑ', 'โšœ๏ธ', '๐Ÿ”ฐ', 'โ™ป๏ธ', 'โœ…', '๐Ÿˆฏ', '๐Ÿ’น', 'โ‡๏ธ', 'โœณ๏ธ', 'โŽ', '๐ŸŒ', '๐Ÿ’ ', 'โ“‚๏ธ', '๐ŸŒ€', '๐Ÿ’ค', '๐Ÿง', '๐Ÿšพ', 'โ™ฟ', '๐Ÿ…ฟ๏ธ', '๐Ÿ›—', '๐Ÿˆณ', '๐Ÿˆ‚๏ธ', '๐Ÿ›‚', '๐Ÿ›ƒ', '๐Ÿ›„', '๐Ÿ›…', '๐Ÿšน', '๐Ÿšบ', '๐Ÿšผ', 'โšง๏ธ', '๐Ÿšป', '๐Ÿšฎ', '๐ŸŽฆ', '๐Ÿ“ถ', '๐Ÿˆ', '๐Ÿ”ฃ', 'โ„น๏ธ', '๐Ÿ”ค', '๐Ÿ”ก', '๐Ÿ” ', '๐Ÿ†–', '๐Ÿ†—', '๐Ÿ†™', '๐Ÿ†’', '๐Ÿ†•', '๐Ÿ†“', '0๏ธโƒฃ', '1๏ธโƒฃ', '2๏ธโƒฃ', '3๏ธโƒฃ', '4๏ธโƒฃ', '5๏ธโƒฃ', '6๏ธโƒฃ', '7๏ธโƒฃ', '8๏ธโƒฃ', '9๏ธโƒฃ', '๐Ÿ”Ÿ', '๐Ÿ”ข', '#๏ธโƒฃ', '*๏ธโƒฃ', 'โ๏ธ', 'โ–ถ๏ธ', 'โธ๏ธ', 'โฏ๏ธ', 'โน๏ธ', 'โบ๏ธ', 'โญ๏ธ', 'โฎ๏ธ', 'โฉ', 'โช', 'โซ', 'โฌ', 'โ—€๏ธ', '๐Ÿ”ผ', '๐Ÿ”ฝ', 'โžก๏ธ', 'โฌ…๏ธ', 'โฌ†๏ธ', 'โฌ‡๏ธ', 'โ†—๏ธ', 'โ†˜๏ธ', 'โ†™๏ธ', 'โ†–๏ธ', 'โ†•๏ธ', 'โ†”๏ธ', 'โ†ช๏ธ', 'โ†ฉ๏ธ', 'โคด๏ธ', 'โคต๏ธ', '๐Ÿ”€', '๐Ÿ”', '๐Ÿ”‚', '๐Ÿ”„', '๐Ÿ”ƒ', '๐ŸŽต', '๐ŸŽถ', 'โž•', 'โž–', 'โž—', 'โœ–๏ธ', 'โ™พ๏ธ', '๐Ÿ’ฒ', '๐Ÿ’ฑ', 'โ„ข๏ธ', 'ยฉ๏ธ', 'ยฎ๏ธ', 'ใ€ฐ๏ธ', 'โžฐ', 'โžฟ', '๐Ÿ”š', '๐Ÿ”™', '๐Ÿ”›', '๐Ÿ”', '๐Ÿ”œ', 'โœ”๏ธ', 'โ˜‘๏ธ', '๐Ÿ”˜', '๐Ÿ”ด', '๐ŸŸ ', '๐ŸŸก', '๐ŸŸข', '๐Ÿ”ต', '๐ŸŸฃ', 'โšซ', 'โšช', '๐ŸŸค', '๐Ÿ”บ', '๐Ÿ”ป', '๐Ÿ”ธ', '๐Ÿ”น', '๐Ÿ”ถ', '๐Ÿ”ท', '๐Ÿ”ณ', '๐Ÿ”ฒ', 'โ–ช๏ธ', 'โ–ซ๏ธ', 'โ—พ', 'โ—ฝ', 'โ—ผ๏ธ', 'โ—ป๏ธ', '๐ŸŸฅ', '๐ŸŸง', '๐ŸŸจ', '๐ŸŸฉ', '๐ŸŸฆ', '๐ŸŸช', 'โฌ›', 'โฌœ', '๐ŸŸซ', '๐Ÿ”ˆ', '๐Ÿ”‡', '๐Ÿ”‰', '๐Ÿ”Š', '๐Ÿ””', '๐Ÿ”•', '๐Ÿ“ฃ', '๐Ÿ“ข', '๐Ÿ’ฌ', '๐Ÿ’ญ', '๐Ÿ—ฏ๏ธ', 'โ™ ๏ธ', 'โ™ฃ๏ธ', 'โ™ฅ๏ธ', 'โ™ฆ๏ธ', '๐Ÿƒ', '๐ŸŽด', '๐Ÿ€„', '๐Ÿ•', '๐Ÿ•‘', '๐Ÿ•’', '๐Ÿ•“', '๐Ÿ•”', '๐Ÿ••', '๐Ÿ•–', '๐Ÿ•—', '๐Ÿ•˜', '๐Ÿ•™', '๐Ÿ•š', '๐Ÿ•›', '๐Ÿ•œ', '๐Ÿ•', '๐Ÿ•ž', '๐Ÿ•Ÿ', '๐Ÿ• ', '๐Ÿ•ก', '๐Ÿ•ข', '๐Ÿ•ฃ', '๐Ÿ•ค', '๐Ÿ•ฅ', '๐Ÿ•ฆ', '๐Ÿ•ง'], + '๐Ÿ Flags': ['๐Ÿ', '๐Ÿšฉ', '๐ŸŽŒ', '๐Ÿด', '๐Ÿณ๏ธ', '๐Ÿณ๏ธโ€๐ŸŒˆ', '๐Ÿณ๏ธโ€โšง๏ธ', '๐Ÿดโ€โ˜ ๏ธ', '๐Ÿ‡ฆ๐Ÿ‡จ', '๐Ÿ‡ฆ๐Ÿ‡ฉ', '๐Ÿ‡ฆ๐Ÿ‡ช', '๐Ÿ‡ฆ๐Ÿ‡ซ', '๐Ÿ‡ฆ๐Ÿ‡ฌ', '๐Ÿ‡ฆ๐Ÿ‡ฎ', '๐Ÿ‡ฆ๐Ÿ‡ฑ', '๐Ÿ‡ฆ๐Ÿ‡ฒ', '๐Ÿ‡ฆ๐Ÿ‡ด', '๐Ÿ‡ฆ๐Ÿ‡ถ', '๐Ÿ‡ฆ๐Ÿ‡ท', '๐Ÿ‡ฆ๐Ÿ‡ธ', '๐Ÿ‡ฆ๐Ÿ‡น', '๐Ÿ‡ฆ๐Ÿ‡บ', '๐Ÿ‡ฆ๐Ÿ‡ผ', '๐Ÿ‡ฆ๐Ÿ‡ฝ', '๐Ÿ‡ฆ๐Ÿ‡ฟ', '๐Ÿ‡ง๐Ÿ‡ฆ', '๐Ÿ‡ง๐Ÿ‡ง', '๐Ÿ‡ง๐Ÿ‡ฉ', '๐Ÿ‡ง๐Ÿ‡ช', '๐Ÿ‡ง๐Ÿ‡ซ', '๐Ÿ‡ง๐Ÿ‡ฌ', '๐Ÿ‡ง๐Ÿ‡ญ', '๐Ÿ‡ง๐Ÿ‡ฎ', '๐Ÿ‡ง๐Ÿ‡ฏ', '๐Ÿ‡ง๐Ÿ‡ฑ', '๐Ÿ‡ง๐Ÿ‡ฒ', '๐Ÿ‡ง๐Ÿ‡ณ', '๐Ÿ‡ง๐Ÿ‡ด', '๐Ÿ‡ง๐Ÿ‡ถ', '๐Ÿ‡ง๐Ÿ‡ท', '๐Ÿ‡ง๐Ÿ‡ธ', '๐Ÿ‡ง๐Ÿ‡น', '๐Ÿ‡ง๐Ÿ‡ป', '๐Ÿ‡ง๐Ÿ‡ผ', '๐Ÿ‡ง๐Ÿ‡พ', '๐Ÿ‡ง๐Ÿ‡ฟ', '๐Ÿ‡จ๐Ÿ‡ฆ', '๐Ÿ‡จ๐Ÿ‡จ', '๐Ÿ‡จ๐Ÿ‡ฉ', '๐Ÿ‡จ๐Ÿ‡ซ', '๐Ÿ‡จ๐Ÿ‡ฌ', '๐Ÿ‡จ๐Ÿ‡ญ', '๐Ÿ‡จ๐Ÿ‡ฎ', '๐Ÿ‡จ๐Ÿ‡ฐ', '๐Ÿ‡จ๐Ÿ‡ฑ', '๐Ÿ‡จ๐Ÿ‡ฒ', '๐Ÿ‡จ๐Ÿ‡ณ', '๐Ÿ‡จ๐Ÿ‡ด', '๐Ÿ‡จ๐Ÿ‡ต', '๐Ÿ‡จ๐Ÿ‡ท', '๐Ÿ‡จ๐Ÿ‡บ', '๐Ÿ‡จ๐Ÿ‡ป', '๐Ÿ‡จ๐Ÿ‡ผ', '๐Ÿ‡จ๐Ÿ‡ฝ', '๐Ÿ‡จ๐Ÿ‡พ', '๐Ÿ‡จ๐Ÿ‡ฟ', '๐Ÿ‡ฉ๐Ÿ‡ช', '๐Ÿ‡ฉ๐Ÿ‡ฌ', '๐Ÿ‡ฉ๐Ÿ‡ฏ', '๐Ÿ‡ฉ๐Ÿ‡ฐ', '๐Ÿ‡ฉ๐Ÿ‡ฒ', '๐Ÿ‡ฉ๐Ÿ‡ด', '๐Ÿ‡ฉ๐Ÿ‡ฟ', '๐Ÿ‡ช๐Ÿ‡ฆ', '๐Ÿ‡ช๐Ÿ‡จ', '๐Ÿ‡ช๐Ÿ‡ช', '๐Ÿ‡ช๐Ÿ‡ฌ', '๐Ÿ‡ช๐Ÿ‡ญ', '๐Ÿ‡ช๐Ÿ‡ท', '๐Ÿ‡ช๐Ÿ‡ธ', '๐Ÿ‡ช๐Ÿ‡น', '๐Ÿ‡ช๐Ÿ‡บ', '๐Ÿ‡ซ๐Ÿ‡ฎ', '๐Ÿ‡ซ๐Ÿ‡ฏ', '๐Ÿ‡ซ๐Ÿ‡ฐ', '๐Ÿ‡ซ๐Ÿ‡ฒ', '๐Ÿ‡ซ๐Ÿ‡ด', '๐Ÿ‡ซ๐Ÿ‡ท', '๐Ÿ‡ฌ๐Ÿ‡ฆ', '๐Ÿ‡ฌ๐Ÿ‡ง', '๐Ÿ‡ฌ๐Ÿ‡ฉ', '๐Ÿ‡ฌ๐Ÿ‡ช', '๐Ÿ‡ฌ๐Ÿ‡ซ', '๐Ÿ‡ฌ๐Ÿ‡ฌ', '๐Ÿ‡ฌ๐Ÿ‡ญ', '๐Ÿ‡ฌ๐Ÿ‡ฎ', '๐Ÿ‡ฌ๐Ÿ‡ฑ', '๐Ÿ‡ฌ๐Ÿ‡ฒ', '๐Ÿ‡ฌ๐Ÿ‡ณ', '๐Ÿ‡ฌ๐Ÿ‡ต', '๐Ÿ‡ฌ๐Ÿ‡ถ', '๐Ÿ‡ฌ๐Ÿ‡ท', '๐Ÿ‡ฌ๐Ÿ‡ธ', '๐Ÿ‡ฌ๐Ÿ‡น', '๐Ÿ‡ฌ๐Ÿ‡บ', '๐Ÿ‡ฌ๐Ÿ‡ผ', '๐Ÿ‡ฌ๐Ÿ‡พ', '๐Ÿ‡ญ๐Ÿ‡ฐ', '๐Ÿ‡ญ๐Ÿ‡ฒ', '๐Ÿ‡ญ๐Ÿ‡ณ', '๐Ÿ‡ญ๐Ÿ‡ท', '๐Ÿ‡ญ๐Ÿ‡น', '๐Ÿ‡ญ๐Ÿ‡บ', '๐Ÿ‡ฎ๐Ÿ‡จ', '๐Ÿ‡ฎ๐Ÿ‡ฉ', '๐Ÿ‡ฎ๐Ÿ‡ช', '๐Ÿ‡ฎ๐Ÿ‡ฑ', '๐Ÿ‡ฎ๐Ÿ‡ฒ', '๐Ÿ‡ฎ๐Ÿ‡ณ', '๐Ÿ‡ฎ๐Ÿ‡ด', '๐Ÿ‡ฎ๐Ÿ‡ถ', '๐Ÿ‡ฎ๐Ÿ‡ท', '๐Ÿ‡ฎ๐Ÿ‡ธ', '๐Ÿ‡ฎ๐Ÿ‡น', '๐Ÿ‡ฏ๐Ÿ‡ช', '๐Ÿ‡ฏ๐Ÿ‡ฒ', '๐Ÿ‡ฏ๐Ÿ‡ด', '๐Ÿ‡ฏ๐Ÿ‡ต', '๐Ÿ‡ฐ๐Ÿ‡ช', '๐Ÿ‡ฐ๐Ÿ‡ฌ', '๐Ÿ‡ฐ๐Ÿ‡ญ', '๐Ÿ‡ฐ๐Ÿ‡ฎ', '๐Ÿ‡ฐ๐Ÿ‡ฒ', '๐Ÿ‡ฐ๐Ÿ‡ณ', '๐Ÿ‡ฐ๐Ÿ‡ต', '๐Ÿ‡ฐ๐Ÿ‡ท', '๐Ÿ‡ฐ๐Ÿ‡ผ', '๐Ÿ‡ฐ๐Ÿ‡พ', '๐Ÿ‡ฐ๐Ÿ‡ฟ', '๐Ÿ‡ฑ๐Ÿ‡ฆ', '๐Ÿ‡ฑ๐Ÿ‡ง', '๐Ÿ‡ฑ๐Ÿ‡จ', '๐Ÿ‡ฑ๐Ÿ‡ฎ', '๐Ÿ‡ฑ๐Ÿ‡ฐ', '๐Ÿ‡ฑ๐Ÿ‡ท', '๐Ÿ‡ฑ๐Ÿ‡ธ', '๐Ÿ‡ฑ๐Ÿ‡น', '๐Ÿ‡ฑ๐Ÿ‡บ', '๐Ÿ‡ฑ๐Ÿ‡ป', '๐Ÿ‡ฑ๐Ÿ‡พ', '๐Ÿ‡ฒ๐Ÿ‡ฆ', '๐Ÿ‡ฒ๐Ÿ‡จ', '๐Ÿ‡ฒ๐Ÿ‡ฉ', '๐Ÿ‡ฒ๐Ÿ‡ช', '๐Ÿ‡ฒ๐Ÿ‡ซ', '๐Ÿ‡ฒ๐Ÿ‡ฌ', '๐Ÿ‡ฒ๐Ÿ‡ญ', '๐Ÿ‡ฒ๐Ÿ‡ฐ', '๐Ÿ‡ฒ๐Ÿ‡ฑ', '๐Ÿ‡ฒ๐Ÿ‡ฒ', '๐Ÿ‡ฒ๐Ÿ‡ณ', '๐Ÿ‡ฒ๐Ÿ‡ด', '๐Ÿ‡ฒ๐Ÿ‡ต', '๐Ÿ‡ฒ๐Ÿ‡ถ', '๐Ÿ‡ฒ๐Ÿ‡ท', '๐Ÿ‡ฒ๐Ÿ‡ธ', '๐Ÿ‡ฒ๐Ÿ‡น', '๐Ÿ‡ฒ๐Ÿ‡บ', '๐Ÿ‡ฒ๐Ÿ‡ป', '๐Ÿ‡ฒ๐Ÿ‡ผ', '๐Ÿ‡ฒ๐Ÿ‡ฝ', '๐Ÿ‡ฒ๐Ÿ‡พ', '๐Ÿ‡ฒ๐Ÿ‡ฟ', '๐Ÿ‡ณ๐Ÿ‡ฆ', '๐Ÿ‡ณ๐Ÿ‡จ', '๐Ÿ‡ณ๐Ÿ‡ช', '๐Ÿ‡ณ๐Ÿ‡ซ', '๐Ÿ‡ณ๐Ÿ‡ฌ', '๐Ÿ‡ณ๐Ÿ‡ฎ', '๐Ÿ‡ณ๐Ÿ‡ฑ', '๐Ÿ‡ณ๐Ÿ‡ด', '๐Ÿ‡ณ๐Ÿ‡ต', '๐Ÿ‡ณ๐Ÿ‡ท', '๐Ÿ‡ณ๐Ÿ‡บ', '๐Ÿ‡ณ๐Ÿ‡ฟ', '๐Ÿ‡ด๐Ÿ‡ฒ', '๐Ÿ‡ต๐Ÿ‡ฆ', '๐Ÿ‡ต๐Ÿ‡ช', '๐Ÿ‡ต๐Ÿ‡ซ', '๐Ÿ‡ต๐Ÿ‡ฌ', '๐Ÿ‡ต๐Ÿ‡ญ', '๐Ÿ‡ต๐Ÿ‡ฐ', '๐Ÿ‡ต๐Ÿ‡ฑ', '๐Ÿ‡ต๐Ÿ‡ฒ', '๐Ÿ‡ต๐Ÿ‡ณ', '๐Ÿ‡ต๐Ÿ‡ท', '๐Ÿ‡ต๐Ÿ‡ธ', '๐Ÿ‡ต๐Ÿ‡น', '๐Ÿ‡ต๐Ÿ‡ผ', '๐Ÿ‡ต๐Ÿ‡พ', '๐Ÿ‡ถ๐Ÿ‡ฆ', '๐Ÿ‡ท๐Ÿ‡ช', '๐Ÿ‡ท๐Ÿ‡ด', '๐Ÿ‡ท๐Ÿ‡ธ', '๐Ÿ‡ท๐Ÿ‡บ', '๐Ÿ‡ท๐Ÿ‡ผ', '๐Ÿ‡ธ๐Ÿ‡ฆ', '๐Ÿ‡ธ๐Ÿ‡ง', '๐Ÿ‡ธ๐Ÿ‡จ', '๐Ÿ‡ธ๐Ÿ‡ฉ', '๐Ÿ‡ธ๐Ÿ‡ช', '๐Ÿ‡ธ๐Ÿ‡ฌ', '๐Ÿ‡ธ๐Ÿ‡ญ', '๐Ÿ‡ธ๐Ÿ‡ฎ', '๐Ÿ‡ธ๐Ÿ‡ฏ', '๐Ÿ‡ธ๐Ÿ‡ฐ', '๐Ÿ‡ธ๐Ÿ‡ฑ', '๐Ÿ‡ธ๐Ÿ‡ฒ', '๐Ÿ‡ธ๐Ÿ‡ณ', '๐Ÿ‡ธ๐Ÿ‡ด', '๐Ÿ‡ธ๐Ÿ‡ท', '๐Ÿ‡ธ๐Ÿ‡ธ', '๐Ÿ‡ธ๐Ÿ‡น', '๐Ÿ‡ธ๐Ÿ‡ป', '๐Ÿ‡ธ๐Ÿ‡ฝ', '๐Ÿ‡ธ๐Ÿ‡พ', '๐Ÿ‡ธ๐Ÿ‡ฟ', '๐Ÿ‡น๐Ÿ‡ฆ', '๐Ÿ‡น๐Ÿ‡จ', '๐Ÿ‡น๐Ÿ‡ฉ', '๐Ÿ‡น๐Ÿ‡ซ', '๐Ÿ‡น๐Ÿ‡ฌ', '๐Ÿ‡น๐Ÿ‡ญ', '๐Ÿ‡น๐Ÿ‡ฏ', '๐Ÿ‡น๐Ÿ‡ฐ', '๐Ÿ‡น๐Ÿ‡ฑ', '๐Ÿ‡น๐Ÿ‡ฒ', '๐Ÿ‡น๐Ÿ‡ณ', '๐Ÿ‡น๐Ÿ‡ด', '๐Ÿ‡น๐Ÿ‡ท', '๐Ÿ‡น๐Ÿ‡น', '๐Ÿ‡น๐Ÿ‡ป', '๐Ÿ‡น๐Ÿ‡ผ', '๐Ÿ‡น๐Ÿ‡ฟ', '๐Ÿ‡บ๐Ÿ‡ฆ', '๐Ÿ‡บ๐Ÿ‡ฌ', '๐Ÿ‡บ๐Ÿ‡ฒ', '๐Ÿ‡บ๐Ÿ‡ณ', '๐Ÿ‡บ๐Ÿ‡ธ', '๐Ÿ‡บ๐Ÿ‡พ', '๐Ÿ‡บ๐Ÿ‡ฟ', '๐Ÿ‡ป๐Ÿ‡ฆ', '๐Ÿ‡ป๐Ÿ‡จ', '๐Ÿ‡ป๐Ÿ‡ช', '๐Ÿ‡ป๐Ÿ‡ฌ', '๐Ÿ‡ป๐Ÿ‡ฎ', '๐Ÿ‡ป๐Ÿ‡ณ', '๐Ÿ‡ป๐Ÿ‡บ', '๐Ÿ‡ผ๐Ÿ‡ซ', '๐Ÿ‡ผ๐Ÿ‡ธ', '๐Ÿ‡ฝ๐Ÿ‡ฐ', '๐Ÿ‡พ๐Ÿ‡ช', '๐Ÿ‡พ๐Ÿ‡น', '๐Ÿ‡ฟ๐Ÿ‡ฆ', '๐Ÿ‡ฟ๐Ÿ‡ฒ', '๐Ÿ‡ฟ๐Ÿ‡ผ', '๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ', '๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ', '๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ'], +}; + // ============ Quick Add Task Modal ============ export class QuickAddTaskModal extends Modal { @@ -547,4 +834,115 @@ export class ReportModal extends Modal { const { contentEl } = this; contentEl.empty(); } -} \ No newline at end of file +} + +// ============ Emoji Picker Modal ============ + +export class EmojiPickerModal extends Modal { + onSelect: (emoji: string) => void; + currentEmoji: string; + + constructor(app: App, currentEmoji: string, onSelect: (emoji: string) => void) { + super(app); + this.currentEmoji = currentEmoji; + this.onSelect = onSelect; + } + + onOpen() { + const { contentEl } = this; + contentEl.addClass('immerse-emoji-picker'); + + contentEl.createEl('h2', { text: 'Select Emoji' }); + + // Current selection + if (this.currentEmoji) { + const currentDiv = contentEl.createDiv({ cls: 'immerse-emoji-current' }); + currentDiv.createEl('span', { text: 'Current: ' }); + currentDiv.createEl('span', { text: this.currentEmoji, cls: 'immerse-emoji-current-icon' }); + } + + // Search box + const searchContainer = contentEl.createDiv({ cls: 'immerse-emoji-search' }); + const searchInput = searchContainer.createEl('input', { + type: 'text', + placeholder: 'Search emojis...', + cls: 'immerse-emoji-search-input' + }); + + // Emoji grid container + const gridContainer = contentEl.createDiv({ cls: 'immerse-emoji-categories' }); + + // Render all categories + const renderCategories = (filter: string = '') => { + gridContainer.empty(); + + Object.entries(EMOJI_CATEGORIES).forEach(([category, emojis]) => { + const filteredEmojis = filter + ? emojis.filter(emoji => { + const keywords = EMOJI_KEYWORDS[emoji] || ''; + return keywords.toLowerCase().includes(filter) || emoji.includes(filter); + }) + : emojis; + + if (filteredEmojis.length === 0) return; + + const categoryDiv = gridContainer.createDiv({ cls: 'immerse-emoji-category' }); + categoryDiv.createEl('h3', { text: category, cls: 'immerse-emoji-category-title' }); + + const grid = categoryDiv.createDiv({ cls: 'immerse-emoji-grid' }); + + filteredEmojis.forEach(emoji => { + const button = grid.createEl('button', { + text: emoji, + cls: 'immerse-emoji-button' + }); + + if (emoji === this.currentEmoji) { + button.addClass('immerse-emoji-selected'); + } + + button.addEventListener('click', () => { + this.onSelect(emoji); + this.close(); + }); + }); + }); + }; + + // Initial render + renderCategories(); + + // Search functionality + searchInput.addEventListener('input', (e) => { + const filter = (e.target as HTMLInputElement).value.toLowerCase(); + renderCategories(filter); + }); + + // Custom emoji input + const customDiv = contentEl.createDiv({ cls: 'immerse-emoji-custom' }); + customDiv.createEl('span', { text: 'Or enter custom emoji: ' }); + const customInput = customDiv.createEl('input', { + type: 'text', + placeholder: 'Paste emoji', + cls: 'immerse-emoji-custom-input', + }); + + const customBtn = customDiv.createEl('button', { + text: 'Use Custom', + cls: 'immerse-btn immerse-btn-primary' + }); + + customBtn.addEventListener('click', () => { + const customEmoji = customInput.value.trim(); + if (customEmoji) { + this.onSelect(customEmoji); + this.close(); + } + }); + } + + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +} diff --git a/styles.css b/styles.css index 50eb607..4ef9b3b 100644 --- a/styles.css +++ b/styles.css @@ -1447,4 +1447,129 @@ .immerse-report-section-title { font-size: 18px; } -} \ No newline at end of file +} + +/* ============ Emoji Picker ============ */ +.immerse-emoji-picker { + width: 85vw; + max-width: 400px; + max-height: 80vh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +.immerse-emoji-picker .modal-content { + display: flex; + flex-direction: column; + height: 100%; + overflow: hidden; + box-sizing: border-box; + max-width: 100%; +} + +.immerse-emoji-current { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 12px; + padding: 10px; + background: var(--ft-bg-secondary); + border-radius: var(--ft-radius-sm); + flex-shrink: 0; +} + +.immerse-emoji-current-icon { + font-size: 20px; +} + +.immerse-emoji-search { + margin-bottom: 12px; + flex-shrink: 0; +} + +.immerse-emoji-search-input { + width: 100%; + padding: 8px 12px; + border-radius: var(--ft-radius-sm); + border: 1px solid var(--ft-border); + background: var(--ft-bg); + color: var(--ft-text); + font-size: 14px; +} + +.immerse-emoji-categories { + flex: 1; + overflow-y: auto; + margin-bottom: 12px; + min-height: 0; +} + +.immerse-emoji-category { + margin-bottom: 20px; +} + +.immerse-emoji-category-title { + font-size: 14px; + font-weight: 600; + color: var(--ft-text-muted); + margin-bottom: 8px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.immerse-emoji-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(32px, 1fr)); + gap: 4px; + max-width: 100%; + box-sizing: border-box; +} + +.immerse-emoji-button { + width: 32px; + height: 32px; + border: 1px solid var(--ft-border); + background: var(--ft-bg); + border-radius: 6px; + font-size: 18px; + cursor: pointer; + transition: all 0.2s ease; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + box-sizing: border-box; +} + +.immerse-emoji-button:hover { + background: var(--ft-bg-tertiary); + transform: scale(1.1); + border-color: var(--ft-primary); +} + +.immerse-emoji-button.immerse-emoji-selected { + background: var(--ft-primary); + border-color: var(--ft-primary); + box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.3); +} + +.immerse-emoji-custom { + display: flex; + align-items: center; + gap: 8px; + padding-top: 12px; + border-top: 1px solid var(--ft-border); + flex-shrink: 0; +} + +.immerse-emoji-custom-input { + flex: 1; + padding: 8px 12px; + border-radius: var(--ft-radius-sm); + border: 1px solid var(--ft-border); + background: var(--ft-bg); + color: var(--ft-text); + font-size: 18px; + text-align: center; +} diff --git a/versions.json b/versions.json index 73a4523..913d869 100644 --- a/versions.json +++ b/versions.json @@ -1,8 +1,9 @@ { - "1.0.4": "0.15.0", - "1.0.5": "0.15.0", - "1.0.6": "0.15.0", - "1.0.7": "0.15.0", - "1.0.8": "0.15.0", - "1.0.9": "0.15.0" -} + "1.0.4": "0.15.0", + "1.0.5": "0.15.0", + "1.0.6": "0.15.0", + "1.0.7": "0.15.0", + "1.0.8": "0.15.0", + "1.0.9": "0.15.0", + "1.1.3": "0.15.0" +} \ No newline at end of file