@schwitzerskills/emojipicker 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1755 @@
1
+ /**
2
+ * EmojiPicker.js โ€” Flexible JavaScript Emoji Picker Library
3
+ *
4
+ * Usage:
5
+ * const picker = new EmojiPicker({ container: '#btn', theme: 'auto' })
6
+ * picker.on('emojiClick', (emoji) => console.log(emoji.char))
7
+ *
8
+ * Events: emojiClick, emojiHover, pickerOpen, pickerClose, categoryChange, search
9
+ * Methods: open(), close(), toggle(), destroy(), setTheme(theme)
10
+ * Static: EmojiPicker.attachToInput(selector, opts)
11
+ */
12
+
13
+ // NACHHER (UMD โ€” Browser + CommonJS + AMD)
14
+ (function(root, factory) {
15
+ if (typeof module !== 'undefined' && module.exports) {
16
+ // CommonJS / Node.js / npm
17
+ module.exports = factory();
18
+ } else if (typeof define === 'function' && define.amd) {
19
+ // AMD (RequireJS)
20
+ define([], factory);
21
+ } else {
22
+ // Browser global
23
+ root.EmojiPicker = factory();
24
+ }
25
+ }(typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this, function() {
26
+ 'use strict';
27
+
28
+
29
+ /* ===========================
30
+ EMOJI DATA
31
+ =========================== */
32
+ const EMOJI_DATA = {
33
+ "Smileys & Emotion": [
34
+ { char:"๐Ÿ˜€", name:"grinning_face", kw:["happy","smile","grin"] },
35
+ { char:"๐Ÿ˜ƒ", name:"grinning_face_big_eyes", kw:["happy","smile"] },
36
+ { char:"๐Ÿ˜„", name:"grinning_face_smiling_eyes", kw:["happy","laugh"] },
37
+ { char:"๐Ÿ˜", name:"beaming_face", kw:["smile","grin","happy"] },
38
+ { char:"๐Ÿ˜†", name:"grinning_squinting_face", kw:["laugh","lol","haha"] },
39
+ { char:"๐Ÿ˜…", name:"grinning_face_sweat", kw:["sweat","nervous","relief"] },
40
+ { char:"๐Ÿคฃ", name:"rolling_on_floor_laughing", kw:["rofl","laugh","lol","haha"] },
41
+ { char:"๐Ÿ˜‚", name:"face_with_tears_of_joy", kw:["lol","laugh","haha","joy","tears"] },
42
+ { char:"๐Ÿ™‚", name:"slightly_smiling_face", kw:["smile","happy"] },
43
+ { char:"๐Ÿ™ƒ", name:"upside_down_face", kw:["silly","sarcasm","flip"] },
44
+ { char:"๐Ÿ˜‰", name:"winking_face", kw:["wink","flirt"] },
45
+ { char:"๐Ÿ˜Š", name:"smiling_face_with_smiling_eyes", kw:["blush","happy","sweet"] },
46
+ { char:"๐Ÿ˜‡", name:"smiling_face_with_halo", kw:["angel","innocent","halo"] },
47
+ { char:"๐Ÿฅฐ", name:"smiling_face_hearts", kw:["love","hearts","adore"] },
48
+ { char:"๐Ÿ˜", name:"smiling_face_heart_eyes", kw:["love","heart","adore","crush"] },
49
+ { char:"๐Ÿคฉ", name:"star_struck", kw:["wow","excited","star","amazing"] },
50
+ { char:"๐Ÿ˜˜", name:"face_blowing_a_kiss", kw:["kiss","love","mwah"] },
51
+ { char:"๐Ÿ˜—", name:"kissing_face", kw:["kiss"] },
52
+ { char:"๐Ÿ˜š", name:"kissing_face_closed_eyes", kw:["kiss","love"] },
53
+ { char:"๐Ÿ˜™", name:"kissing_face_smiling_eyes", kw:["kiss","smile"] },
54
+ { char:"๐Ÿฅฒ", name:"smiling_face_with_tear", kw:["cry","happy","bittersweet"] },
55
+ { char:"๐Ÿ˜‹", name:"face_savoring_food", kw:["yum","food","delicious"] },
56
+ { char:"๐Ÿ˜›", name:"face_with_tongue", kw:["tongue","playful"] },
57
+ { char:"๐Ÿ˜œ", name:"winking_face_tongue", kw:["tongue","wink","playful"] },
58
+ { char:"๐Ÿคช", name:"zany_face", kw:["crazy","silly","wild"] },
59
+ { char:"๐Ÿ˜", name:"squinting_face_tongue", kw:["tongue","playful"] },
60
+ { char:"๐Ÿค‘", name:"money_mouth_face", kw:["money","rich","cash"] },
61
+ { char:"๐Ÿค—", name:"hugging_face", kw:["hug","warm","hug"] },
62
+ { char:"๐Ÿคญ", name:"face_with_hand_over_mouth", kw:["oops","secret","giggle"] },
63
+ { char:"๐Ÿคซ", name:"shushing_face", kw:["quiet","secret","shush"] },
64
+ { char:"๐Ÿค”", name:"thinking_face", kw:["think","hmm","wondering"] },
65
+ { char:"๐Ÿค", name:"zipper_mouth_face", kw:["secret","zip","quiet"] },
66
+ { char:"๐Ÿคจ", name:"face_raised_eyebrow", kw:["doubt","skeptical","suspicious"] },
67
+ { char:"๐Ÿ˜", name:"neutral_face", kw:["neutral","meh","blank"] },
68
+ { char:"๐Ÿ˜‘", name:"expressionless_face", kw:["blank","neutral","meh"] },
69
+ { char:"๐Ÿ˜ถ", name:"face_without_mouth", kw:["silent","quiet","no_mouth"] },
70
+ { char:"๐Ÿ˜", name:"smirking_face", kw:["smirk","smug","flirt"] },
71
+ { char:"๐Ÿ˜’", name:"unamused_face", kw:["meh","unimpressed","bored"] },
72
+ { char:"๐Ÿ™„", name:"face_rolling_eyes", kw:["eyeroll","whatever","bored"] },
73
+ { char:"๐Ÿ˜ฌ", name:"grimacing_face", kw:["grimace","awkward","oops"] },
74
+ { char:"๐Ÿคฅ", name:"lying_face", kw:["lie","pinocchio","liar"] },
75
+ { char:"๐Ÿ˜Œ", name:"relieved_face", kw:["relief","calm","peaceful"] },
76
+ { char:"๐Ÿ˜”", name:"pensive_face", kw:["sad","pensive","thoughtful"] },
77
+ { char:"๐Ÿ˜ช", name:"sleepy_face", kw:["sleepy","tired","drool"] },
78
+ { char:"๐Ÿคค", name:"drooling_face", kw:["drool","food","delicious"] },
79
+ { char:"๐Ÿ˜ด", name:"sleeping_face", kw:["sleep","zzz","tired"] },
80
+ { char:"๐Ÿ˜ท", name:"face_with_medical_mask", kw:["sick","mask","ill","covid"] },
81
+ { char:"๐Ÿค’", name:"face_with_thermometer", kw:["sick","ill","fever"] },
82
+ { char:"๐Ÿค•", name:"face_with_head_bandage", kw:["hurt","injured","bandage"] },
83
+ { char:"๐Ÿคข", name:"nauseated_face", kw:["sick","nausea","gross"] },
84
+ { char:"๐Ÿคฎ", name:"face_vomiting", kw:["vomit","sick","gross","disgusting"] },
85
+ { char:"๐Ÿคง", name:"sneezing_face", kw:["sneeze","sick","cold","gesundheit"] },
86
+ { char:"๐Ÿฅต", name:"hot_face", kw:["hot","heat","fire","sweating"] },
87
+ { char:"๐Ÿฅถ", name:"cold_face", kw:["cold","freezing","ice","brr"] },
88
+ { char:"๐Ÿฅด", name:"woozy_face", kw:["drunk","dizzy","woozy"] },
89
+ { char:"๐Ÿ˜ต", name:"dizzy_face", kw:["dizzy","spiral","confused"] },
90
+ { char:"๐Ÿคฏ", name:"exploding_head", kw:["mindblown","wow","explode","shocked"] },
91
+ { char:"๐Ÿ˜Ž", name:"smiling_face_with_sunglasses", kw:["cool","sunglasses","awesome"] },
92
+ { char:"๐Ÿฅธ", name:"disguised_face", kw:["disguise","fake","incognito"] },
93
+ { char:"๐Ÿค“", name:"nerd_face", kw:["nerd","glasses","geek"] },
94
+ { char:"๐Ÿง", name:"face_with_monocle", kw:["monocle","fancy","inspect"] },
95
+ { char:"๐Ÿ˜•", name:"confused_face", kw:["confused","puzzled","what"] },
96
+ { char:"๐Ÿ˜Ÿ", name:"worried_face", kw:["worried","concerned","sad"] },
97
+ { char:"๐Ÿ™", name:"slightly_frowning_face", kw:["sad","frown","unhappy"] },
98
+ { char:"๐Ÿ˜ฎ", name:"face_open_mouth", kw:["surprised","wow","shocked"] },
99
+ { char:"๐Ÿ˜ฏ", name:"hushed_face", kw:["surprised","speechless","hushed"] },
100
+ { char:"๐Ÿ˜ฒ", name:"astonished_face", kw:["astonished","shocked","wow"] },
101
+ { char:"๐Ÿ˜ณ", name:"flushed_face", kw:["flushed","embarrassed","blush"] },
102
+ { char:"๐Ÿฅบ", name:"pleading_face", kw:["pleading","puppy","eyes","please"] },
103
+ { char:"๐Ÿ˜ฆ", name:"frowning_face_open_mouth", kw:["frown","surprised","concern"] },
104
+ { char:"๐Ÿ˜ง", name:"anguished_face", kw:["anguish","hurt","pain"] },
105
+ { char:"๐Ÿ˜จ", name:"fearful_face", kw:["fear","scared","fearful"] },
106
+ { char:"๐Ÿ˜ฐ", name:"anxious_face_sweat", kw:["anxious","worried","stress"] },
107
+ { char:"๐Ÿ˜ฅ", name:"sad_but_relieved_face", kw:["sad","relieved","whew"] },
108
+ { char:"๐Ÿ˜ข", name:"crying_face", kw:["cry","sad","tears"] },
109
+ { char:"๐Ÿ˜ญ", name:"loudly_crying_face", kw:["crying","sob","tears","sad"] },
110
+ { char:"๐Ÿ˜ฑ", name:"face_screaming_in_fear", kw:["scream","scared","horror","munch"] },
111
+ { char:"๐Ÿ˜–", name:"confounded_face", kw:["confounded","groan","frustrated"] },
112
+ { char:"๐Ÿ˜ฃ", name:"persevering_face", kw:["persevere","struggle","fight"] },
113
+ { char:"๐Ÿ˜ž", name:"disappointed_face", kw:["disappointed","sad","letdown"] },
114
+ { char:"๐Ÿ˜“", name:"downcast_face_sweat", kw:["sweat","hard_work","sigh"] },
115
+ { char:"๐Ÿ˜ฉ", name:"weary_face", kw:["weary","tired","frustrated"] },
116
+ { char:"๐Ÿ˜ซ", name:"tired_face", kw:["tired","exhausted","weary"] },
117
+ { char:"๐Ÿฅฑ", name:"yawning_face", kw:["yawn","tired","bored"] },
118
+ { char:"๐Ÿ˜ค", name:"face_with_steam", kw:["triumph","steam","anger","frustrated"] },
119
+ { char:"๐Ÿ˜ก", name:"pouting_face", kw:["angry","mad","furious","rage"] },
120
+ { char:"๐Ÿ˜ ", name:"angry_face", kw:["angry","mad","grumpy"] },
121
+ { char:"๐Ÿคฌ", name:"face_symbols_mouth", kw:["cursing","angry","swear"] },
122
+ { char:"๐Ÿ˜ˆ", name:"smiling_face_with_horns", kw:["devil","evil","mischief"] },
123
+ { char:"๐Ÿ‘ฟ", name:"angry_face_with_horns", kw:["devil","angry","evil"] },
124
+ { char:"๐Ÿ’€", name:"skull", kw:["skull","death","dead","skeleton"] },
125
+ { char:"โ˜ ๏ธ", name:"skull_crossbones", kw:["skull","death","poison"] },
126
+ { char:"๐Ÿ’ฉ", name:"pile_of_poo", kw:["poop","crap","shit","poo"] },
127
+ { char:"๐Ÿคก", name:"clown_face", kw:["clown","circus","silly"] },
128
+ { char:"๐Ÿ‘น", name:"ogre", kw:["monster","ogre","devil"] },
129
+ { char:"๐Ÿ‘บ", name:"goblin", kw:["goblin","demon","evil"] },
130
+ { char:"๐Ÿ‘ป", name:"ghost", kw:["ghost","spooky","halloween","boo"] },
131
+ { char:"๐Ÿ‘ฝ", name:"alien", kw:["alien","ufo","extraterrestrial"] },
132
+ { char:"๐Ÿ‘พ", name:"alien_monster", kw:["alien","monster","game","pixel"] },
133
+ { char:"๐Ÿค–", name:"robot", kw:["robot","bot","ai","machine"] },
134
+ { char:"๐Ÿ˜บ", name:"grinning_cat", kw:["cat","smile","happy"] },
135
+ { char:"๐Ÿ˜ธ", name:"grinning_cat_smiling_eyes", kw:["cat","happy","smile"] },
136
+ { char:"๐Ÿ˜น", name:"cat_joy", kw:["cat","lol","laugh"] },
137
+ { char:"๐Ÿ˜ป", name:"smiling_cat_heart_eyes", kw:["cat","love","heart"] },
138
+ { char:"๐Ÿ˜ผ", name:"cat_wry_smile", kw:["cat","smirk"] },
139
+ { char:"๐Ÿ˜ฝ", name:"kissing_cat", kw:["cat","kiss"] },
140
+ { char:"๐Ÿ™€", name:"weary_cat", kw:["cat","shocked","weary"] },
141
+ { char:"๐Ÿ˜ฟ", name:"crying_cat", kw:["cat","sad","cry"] },
142
+ { char:"๐Ÿ˜พ", name:"pouting_cat", kw:["cat","angry","grumpy"] },
143
+ { char:"๐Ÿ’‹", name:"kiss_mark", kw:["kiss","lips","love"] },
144
+ { char:"๐Ÿ’Œ", name:"love_letter", kw:["love","letter","heart","mail"] },
145
+ { char:"๐Ÿ’”", name:"broken_heart", kw:["broken","heart","sad","love"] },
146
+ { char:"โค๏ธ", name:"red_heart", kw:["heart","love","red"] },
147
+ { char:"๐Ÿงก", name:"orange_heart", kw:["heart","orange","love"] },
148
+ { char:"๐Ÿ’›", name:"yellow_heart", kw:["heart","yellow","love"] },
149
+ { char:"๐Ÿ’š", name:"green_heart", kw:["heart","green","love","nature"] },
150
+ { char:"๐Ÿ’™", name:"blue_heart", kw:["heart","blue","love"] },
151
+ { char:"๐Ÿ’œ", name:"purple_heart", kw:["heart","purple","love"] },
152
+ { char:"๐Ÿ–ค", name:"black_heart", kw:["heart","black","dark"] },
153
+ { char:"๐Ÿค", name:"white_heart", kw:["heart","white","pure"] },
154
+ { char:"๐ŸคŽ", name:"brown_heart", kw:["heart","brown"] },
155
+ { char:"๐Ÿ’ฏ", name:"hundred_points", kw:["100","perfect","score","hundred"] },
156
+ { char:"๐Ÿ’ข", name:"anger_symbol", kw:["anger","mad","comic"] },
157
+ { char:"๐Ÿ’ฅ", name:"collision", kw:["boom","explosion","impact"] },
158
+ { char:"๐Ÿ’ซ", name:"dizzy", kw:["star","dizzy","spin"] },
159
+ { char:"๐Ÿ’ฆ", name:"sweat_droplets", kw:["sweat","water","drops"] },
160
+ { char:"๐Ÿ’จ", name:"dashing_away", kw:["wind","fast","run"] },
161
+ { char:"๐Ÿ•ณ๏ธ", name:"hole", kw:["hole","dark","empty"] },
162
+ { char:"๐Ÿ’ฌ", name:"speech_balloon", kw:["chat","speech","talk","message"] },
163
+ { char:"๐Ÿ’ญ", name:"thought_balloon", kw:["thought","think","cloud"] },
164
+ { char:"๐Ÿ—จ๏ธ", name:"left_speech_bubble", kw:["speech","chat","dialog"] },
165
+ { char:"๐Ÿ’ค", name:"zzz", kw:["sleep","tired","zzz"] }
166
+ ],
167
+ "People & Body": [
168
+ { char:"๐Ÿ‘‹", name:"waving_hand", kw:["wave","hello","hi","bye"], skinnable:true },
169
+ { char:"๐Ÿคš", name:"raised_back_of_hand", kw:["hand","raise","stop"], skinnable:true },
170
+ { char:"๐Ÿ–๏ธ", name:"hand_fingers_splayed", kw:["hand","five","fingers"], skinnable:true },
171
+ { char:"โœ‹", name:"raised_hand", kw:["hand","stop","high_five"], skinnable:true },
172
+ { char:"๐Ÿ––", name:"vulcan_salute", kw:["spock","live_long","prosper","star_trek"], skinnable:true },
173
+ { char:"๐Ÿ‘Œ", name:"ok_hand", kw:["ok","agree","perfect","finger"], skinnable:true },
174
+ { char:"๐ŸคŒ", name:"pinched_fingers", kw:["italian","gesture","mamma_mia"], skinnable:true },
175
+ { char:"โœŒ๏ธ", name:"victory_hand", kw:["peace","victory","two","scissors"], skinnable:true },
176
+ { char:"๐Ÿคž", name:"crossed_fingers", kw:["luck","wish","hope","fingers_crossed"], skinnable:true },
177
+ { char:"๐ŸคŸ", name:"love_you_gesture", kw:["love","hand","sign","ily"], skinnable:true },
178
+ { char:"๐Ÿค˜", name:"sign_of_the_horns", kw:["rock","metal","horns","devil"], skinnable:true },
179
+ { char:"๐Ÿค™", name:"call_me_hand", kw:["call","phone","hang_loose","shaka"], skinnable:true },
180
+ { char:"๐Ÿ‘ˆ", name:"backhand_index_pointing_left", kw:["point","left","this"], skinnable:true },
181
+ { char:"๐Ÿ‘‰", name:"backhand_index_pointing_right", kw:["point","right","this"], skinnable:true },
182
+ { char:"๐Ÿ‘†", name:"backhand_index_pointing_up", kw:["point","up","above"], skinnable:true },
183
+ { char:"๐Ÿ–•", name:"middle_finger", kw:["middle_finger","rude","flip"], skinnable:true },
184
+ { char:"๐Ÿ‘‡", name:"backhand_index_pointing_down", kw:["point","down","below"], skinnable:true },
185
+ { char:"โ˜๏ธ", name:"index_pointing_up", kw:["point","up","one"], skinnable:true },
186
+ { char:"๐Ÿ‘", name:"thumbs_up", kw:["thumbs_up","like","approve","good","yes"], skinnable:true },
187
+ { char:"๐Ÿ‘Ž", name:"thumbs_down", kw:["thumbs_down","dislike","bad","no"], skinnable:true },
188
+ { char:"โœŠ", name:"raised_fist", kw:["fist","power","fight"], skinnable:true },
189
+ { char:"๐Ÿ‘Š", name:"oncoming_fist", kw:["fist","punch","fight"], skinnable:true },
190
+ { char:"๐Ÿค›", name:"left_facing_fist", kw:["fist","left","bump"], skinnable:true },
191
+ { char:"๐Ÿคœ", name:"right_facing_fist", kw:["fist","right","bump"], skinnable:true },
192
+ { char:"๐Ÿ‘", name:"clapping_hands", kw:["clap","applause","congrats","bravo"], skinnable:true },
193
+ { char:"๐Ÿ™Œ", name:"raising_hands", kw:["celebrate","raise","hallelujah","hooray"], skinnable:true },
194
+ { char:"๐Ÿ‘", name:"open_hands", kw:["open","hug","hands"], skinnable:true },
195
+ { char:"๐Ÿคฒ", name:"palms_up_together", kw:["pray","hands","cup"], skinnable:true },
196
+ { char:"๐Ÿค", name:"handshake", kw:["handshake","deal","agree","partner"] },
197
+ { char:"๐Ÿ™", name:"folded_hands", kw:["pray","thanks","please","namaste","hope"], skinnable:true },
198
+ { char:"โœ๏ธ", name:"writing_hand", kw:["write","pen","sign"], skinnable:true },
199
+ { char:"๐Ÿ’…", name:"nail_polish", kw:["nails","beauty","polish","manicure"], skinnable:true },
200
+ { char:"๐Ÿคณ", name:"selfie", kw:["selfie","photo","camera","phone"], skinnable:true },
201
+ { char:"๐Ÿ’ช", name:"flexed_biceps", kw:["muscle","strong","flex","workout","bicep"], skinnable:true },
202
+ { char:"๐Ÿฆพ", name:"mechanical_arm", kw:["robot","arm","prosthetic"] },
203
+ { char:"๐Ÿฆฟ", name:"mechanical_leg", kw:["robot","leg","prosthetic"] },
204
+ { char:"๐Ÿฆต", name:"leg", kw:["leg","kick"], skinnable:true },
205
+ { char:"๐Ÿฆถ", name:"foot", kw:["foot","kick","stomp"], skinnable:true },
206
+ { char:"๐Ÿ‘‚", name:"ear", kw:["ear","listen","hear"], skinnable:true },
207
+ { char:"๐Ÿฆป", name:"ear_with_hearing_aid", kw:["ear","deaf","hearing"], skinnable:true },
208
+ { char:"๐Ÿ‘ƒ", name:"nose", kw:["nose","smell"], skinnable:true },
209
+ { char:"๐Ÿง ", name:"brain", kw:["brain","smart","think","mind"] },
210
+ { char:"๐Ÿฆท", name:"tooth", kw:["tooth","dentist","teeth"] },
211
+ { char:"๐Ÿฆด", name:"bone", kw:["bone","dog","skeleton"] },
212
+ { char:"๐Ÿ‘€", name:"eyes", kw:["eyes","look","see","watch"] },
213
+ { char:"๐Ÿ‘๏ธ", name:"eye", kw:["eye","see","look"] },
214
+ { char:"๐Ÿ‘…", name:"tongue", kw:["tongue","taste","lick"] },
215
+ { char:"๐Ÿ‘„", name:"mouth", kw:["mouth","lips","speak"] },
216
+ { char:"๐Ÿซ€", name:"anatomical_heart", kw:["heart","organ","health"] },
217
+ { char:"๐Ÿซ", name:"lungs", kw:["lungs","breath","organ"] },
218
+ { char:"๐Ÿ‘ถ", name:"baby", kw:["baby","infant","child"], skinnable:true },
219
+ { char:"๐Ÿง’", name:"child", kw:["child","kid","young"], skinnable:true },
220
+ { char:"๐Ÿ‘ฆ", name:"boy", kw:["boy","kid","male"], skinnable:true },
221
+ { char:"๐Ÿ‘ง", name:"girl", kw:["girl","kid","female"], skinnable:true },
222
+ { char:"๐Ÿง‘", name:"person", kw:["person","human","adult"], skinnable:true },
223
+ { char:"๐Ÿ‘ฑ", name:"person_blond_hair", kw:["blonde","person","fair"], skinnable:true },
224
+ { char:"๐Ÿ‘จ", name:"man", kw:["man","male","adult"], skinnable:true },
225
+ { char:"๐Ÿง”", name:"person_beard", kw:["beard","man","facial_hair"], skinnable:true },
226
+ { char:"๐Ÿ‘ฉ", name:"woman", kw:["woman","female","adult"], skinnable:true },
227
+ { char:"๐Ÿง“", name:"older_person", kw:["old","elderly","senior"], skinnable:true },
228
+ { char:"๐Ÿ‘ด", name:"old_man", kw:["old","man","elderly","grandfather"], skinnable:true },
229
+ { char:"๐Ÿ‘ต", name:"old_woman", kw:["old","woman","elderly","grandmother"], skinnable:true },
230
+ { char:"๐Ÿ™", name:"person_frowning", kw:["frown","unhappy","person"], skinnable:true },
231
+ { char:"๐Ÿ™Ž", name:"person_pouting", kw:["pout","unhappy","person"], skinnable:true },
232
+ { char:"๐Ÿ™…", name:"person_gesturing_no", kw:["no","stop","deny","person"], skinnable:true },
233
+ { char:"๐Ÿ™†", name:"person_gesturing_ok", kw:["ok","yes","agree","person"], skinnable:true },
234
+ { char:"๐Ÿ’", name:"person_tipping_hand", kw:["info","tip","sassy","person"], skinnable:true },
235
+ { char:"๐Ÿ™‹", name:"person_raising_hand", kw:["raise","hand","question","volunteer"], skinnable:true },
236
+ { char:"๐Ÿง", name:"deaf_person", kw:["deaf","hearing","sign"], skinnable:true },
237
+ { char:"๐Ÿ™‡", name:"person_bowing", kw:["bow","sorry","humble","thank"], skinnable:true },
238
+ { char:"๐Ÿคฆ", name:"person_facepalming", kw:["facepalm","doh","seriously","smh"], skinnable:true },
239
+ { char:"๐Ÿคท", name:"person_shrugging", kw:["shrug","idk","whatever","dunno"], skinnable:true },
240
+ { char:"๐Ÿ’†", name:"person_getting_massage", kw:["massage","relax","spa"], skinnable:true },
241
+ { char:"๐Ÿ’‡", name:"person_getting_haircut", kw:["haircut","salon","barber"], skinnable:true },
242
+ { char:"๐Ÿšถ", name:"person_walking", kw:["walk","person","pedestrian"], skinnable:true },
243
+ { char:"๐Ÿง", name:"person_standing", kw:["stand","person","upright"], skinnable:true },
244
+ { char:"๐ŸงŽ", name:"person_kneeling", kw:["kneel","down","person"], skinnable:true },
245
+ { char:"๐Ÿƒ", name:"person_running", kw:["run","jog","sprint","fast"], skinnable:true },
246
+ { char:"๐Ÿ’ƒ", name:"woman_dancing", kw:["dance","woman","flamenco"], skinnable:true },
247
+ { char:"๐Ÿ•บ", name:"man_dancing", kw:["dance","man","disco"], skinnable:true },
248
+ { char:"๐Ÿ•ด๏ธ", name:"person_levitating", kw:["levitate","fly","business","ska"], skinnable:true },
249
+ { char:"๐Ÿง–", name:"person_in_steamy_room", kw:["sauna","steam","relax","spa"], skinnable:true },
250
+ { char:"๐Ÿง˜", name:"person_in_lotus_position", kw:["meditation","yoga","lotus","zen"], skinnable:true },
251
+ { char:"๐Ÿ›€", name:"person_taking_bath", kw:["bath","bathtub","relax","wash"], skinnable:true },
252
+ { char:"๐Ÿ›Œ", name:"person_in_bed", kw:["sleep","bed","night","rest"], skinnable:true },
253
+ { char:"๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘", name:"people_holding_hands", kw:["hold_hands","couple","together","friend"] },
254
+ { char:"๐Ÿ‘ซ", name:"woman_and_man_holding_hands", kw:["couple","hold_hands","love"] },
255
+ { char:"๐Ÿ‘ฌ", name:"men_holding_hands", kw:["couple","men","love","gay"] },
256
+ { char:"๐Ÿ‘ญ", name:"women_holding_hands", kw:["couple","women","love","lesbian"] },
257
+ { char:"๐Ÿ’‘", name:"couple_with_heart", kw:["couple","love","heart","romance"] },
258
+ { char:"๐Ÿ’", name:"kiss", kw:["kiss","couple","love","romance"] },
259
+ { char:"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", name:"family_man_woman_boy", kw:["family","parents","child"] },
260
+ { char:"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", name:"family_man_woman_girl", kw:["family","parents","child"] },
261
+ { char:"๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", name:"family_man_woman_girl_boy", kw:["family","parents","children"] }
262
+ ],
263
+ "Animals & Nature": [
264
+ { char:"๐Ÿถ", name:"dog_face", kw:["dog","puppy","pet","woof"] },
265
+ { char:"๐Ÿฑ", name:"cat_face", kw:["cat","kitten","pet","meow"] },
266
+ { char:"๐Ÿญ", name:"mouse_face", kw:["mouse","rodent","small"] },
267
+ { char:"๐Ÿน", name:"hamster", kw:["hamster","pet","cute"] },
268
+ { char:"๐Ÿฐ", name:"rabbit_face", kw:["rabbit","bunny","easter","hop"] },
269
+ { char:"๐ŸฆŠ", name:"fox", kw:["fox","clever","orange"] },
270
+ { char:"๐Ÿป", name:"bear", kw:["bear","teddy","strong"] },
271
+ { char:"๐Ÿผ", name:"panda", kw:["panda","china","bamboo","cute"] },
272
+ { char:"๐Ÿปโ€โ„๏ธ", name:"polar_bear", kw:["polar_bear","white","arctic","snow"] },
273
+ { char:"๐Ÿจ", name:"koala", kw:["koala","australia","marsupial","cute"] },
274
+ { char:"๐Ÿฏ", name:"tiger_face", kw:["tiger","stripe","wild","fierce"] },
275
+ { char:"๐Ÿฆ", name:"lion", kw:["lion","king","roar","brave"] },
276
+ { char:"๐Ÿฎ", name:"cow_face", kw:["cow","moo","milk","farm"] },
277
+ { char:"๐Ÿท", name:"pig_face", kw:["pig","oink","farm","bacon"] },
278
+ { char:"๐Ÿธ", name:"frog", kw:["frog","toad","leap","green"] },
279
+ { char:"๐Ÿต", name:"monkey_face", kw:["monkey","primate","banana","see"] },
280
+ { char:"๐Ÿ™ˆ", name:"see_no_evil_monkey", kw:["monkey","see","evil","cover"] },
281
+ { char:"๐Ÿ™‰", name:"hear_no_evil_monkey", kw:["monkey","hear","evil"] },
282
+ { char:"๐Ÿ™Š", name:"speak_no_evil_monkey", kw:["monkey","speak","evil"] },
283
+ { char:"๐Ÿ’", name:"monkey", kw:["monkey","primate","animal"] },
284
+ { char:"๐Ÿฆ†", name:"duck", kw:["duck","bird","quack","water"] },
285
+ { char:"๐Ÿฆ…", name:"eagle", kw:["eagle","bird","freedom","fly","majestic"] },
286
+ { char:"๐Ÿฆ‰", name:"owl", kw:["owl","wise","night","bird"] },
287
+ { char:"๐Ÿฆ‡", name:"bat", kw:["bat","night","vampire","halloween"] },
288
+ { char:"๐Ÿ", name:"honeybee", kw:["bee","honey","sting","flower"] },
289
+ { char:"๐Ÿ›", name:"bug", kw:["bug","caterpillar","insect"] },
290
+ { char:"๐Ÿฆ‹", name:"butterfly", kw:["butterfly","insect","transform","flower"] },
291
+ { char:"๐ŸŒ", name:"snail", kw:["snail","slow","shell","slug"] },
292
+ { char:"๐Ÿž", name:"lady_beetle", kw:["ladybug","beetle","insect","red","lucky"] },
293
+ { char:"๐Ÿœ", name:"ant", kw:["ant","insect","colony","work"] },
294
+ { char:"๐Ÿข", name:"turtle", kw:["turtle","slow","sea","shell"] },
295
+ { char:"๐Ÿ", name:"snake", kw:["snake","reptile","slither","hiss"] },
296
+ { char:"๐Ÿฆ–", name:"t_rex", kw:["t_rex","dinosaur","roar","extinct","jurassic"] },
297
+ { char:"๐Ÿฆ•", name:"sauropod", kw:["dinosaur","long_neck","extinct","sauropod"] },
298
+ { char:"๐ŸŠ", name:"crocodile", kw:["crocodile","gator","reptile","bite"] },
299
+ { char:"๐Ÿธ", name:"frog_face", kw:["frog","green","leap","pond"] },
300
+ { char:"๐Ÿณ", name:"spouting_whale", kw:["whale","ocean","big","sea"] },
301
+ { char:"๐Ÿฌ", name:"dolphin", kw:["dolphin","smart","ocean","flipper"] },
302
+ { char:"๐Ÿฆˆ", name:"shark", kw:["shark","ocean","bite","scary","jaws"] },
303
+ { char:"๐ŸŸ", name:"fish", kw:["fish","sea","ocean","swim"] },
304
+ { char:"๐Ÿ ", name:"tropical_fish", kw:["tropical","fish","colorful","coral"] },
305
+ { char:"๐Ÿฆž", name:"lobster", kw:["lobster","seafood","red","claws"] },
306
+ { char:"๐Ÿฆ€", name:"crab", kw:["crab","seafood","sideways","claws"] },
307
+ { char:"๐Ÿ™", name:"octopus", kw:["octopus","tentacles","ocean","ink"] },
308
+ { char:"๐Ÿฆ‘", name:"squid", kw:["squid","tentacles","ocean","ink"] },
309
+ { char:"๐ŸŒธ", name:"cherry_blossom", kw:["cherry_blossom","japan","spring","flower","pink"] },
310
+ { char:"๐ŸŒบ", name:"hibiscus", kw:["hibiscus","flower","tropical","hawaii"] },
311
+ { char:"๐ŸŒป", name:"sunflower", kw:["sunflower","sun","flower","yellow"] },
312
+ { char:"๐ŸŒน", name:"rose", kw:["rose","flower","love","red","romantic"] },
313
+ { char:"๐Ÿฅ€", name:"wilted_flower", kw:["wilted","dead","flower","sad"] },
314
+ { char:"๐ŸŒท", name:"tulip", kw:["tulip","flower","spring","pink"] },
315
+ { char:"๐ŸŒฑ", name:"seedling", kw:["seedling","plant","grow","green","nature"] },
316
+ { char:"๐ŸŒฟ", name:"herb", kw:["herb","plant","leaf","nature"] },
317
+ { char:"โ˜˜๏ธ", name:"shamrock", kw:["shamrock","ireland","lucky","green","clover"] },
318
+ { char:"๐Ÿ€", name:"four_leaf_clover", kw:["clover","lucky","four_leaf","green"] },
319
+ { char:"๐Ÿ", name:"maple_leaf", kw:["maple","leaf","fall","canada","autumn"] },
320
+ { char:"๐Ÿ‚", name:"fallen_leaf", kw:["leaf","fall","autumn","nature"] },
321
+ { char:"๐Ÿƒ", name:"leaf_fluttering_in_wind", kw:["leaf","wind","nature","flutter"] },
322
+ { char:"๐ŸŒพ", name:"sheaf_of_rice", kw:["rice","wheat","grain","farm","autumn"] },
323
+ { char:"๐ŸŒต", name:"cactus", kw:["cactus","desert","prickly","plant"] },
324
+ { char:"๐ŸŒด", name:"palm_tree", kw:["palm","tropical","beach","coconut"] },
325
+ { char:"๐ŸŒณ", name:"deciduous_tree", kw:["tree","nature","green","forest"] },
326
+ { char:"๐ŸŒฒ", name:"evergreen_tree", kw:["tree","pine","christmas","forest","green"] },
327
+ { char:"๐ŸŒ‹", name:"volcano", kw:["volcano","eruption","fire","lava","mountain"] },
328
+ { char:"๐ŸŒŠ", name:"water_wave", kw:["wave","ocean","surf","tsunami","sea"] },
329
+ { char:"๐ŸŒˆ", name:"rainbow", kw:["rainbow","colorful","lgbt","rain","sunshine"] },
330
+ { char:"โญ", name:"star", kw:["star","night","sky","shine"] },
331
+ { char:"๐ŸŒŸ", name:"glowing_star", kw:["star","glow","shine","gold"] },
332
+ { char:"โœจ", name:"sparkles", kw:["sparkle","shine","magic","stars","glitter"] },
333
+ { char:"โ„๏ธ", name:"snowflake", kw:["snow","cold","winter","ice","flake"] },
334
+ { char:"๐ŸŒ™", name:"crescent_moon", kw:["moon","night","sleep","crescent"] },
335
+ { char:"โ˜€๏ธ", name:"sun", kw:["sun","sunny","hot","bright","day"] },
336
+ { char:"โ›…", name:"sun_behind_cloud", kw:["cloudy","partly_sunny","weather"] },
337
+ { char:"๐ŸŒค๏ธ", name:"sun_small_cloud", kw:["mostly_sunny","weather","clear"] },
338
+ { char:"โ›ˆ๏ธ", name:"cloud_lightning_rain", kw:["storm","thunder","lightning","rain"] },
339
+ { char:"๐ŸŒฉ๏ธ", name:"cloud_with_lightning", kw:["lightning","thunder","storm","electric"] },
340
+ { char:"๐ŸŒง๏ธ", name:"cloud_with_rain", kw:["rain","cloudy","wet","umbrella"] },
341
+ { char:"โค๏ธโ€๐Ÿ”ฅ", name:"heart_on_fire", kw:["passion","love","fire","intense"] },
342
+ { char:"๐Ÿ•", name:"dog", kw:["dog","pet","bark","woof","good_boy"] },
343
+ { char:"๐Ÿˆ", name:"cat", kw:["cat","pet","meow","kitty"] },
344
+ { char:"๐Ÿ“", name:"rooster", kw:["rooster","farm","morning","cock","bird"] },
345
+ { char:"๐Ÿฆš", name:"peacock", kw:["peacock","colorful","bird","feathers","proud"] },
346
+ { char:"๐Ÿฆœ", name:"parrot", kw:["parrot","talk","colorful","tropical","bird"] },
347
+ { char:"๐Ÿฆฉ", name:"flamingo", kw:["flamingo","pink","bird","elegant","stand"] },
348
+ { char:"๐Ÿฆข", name:"swan", kw:["swan","elegant","white","lake","bird"] },
349
+ { char:"๐Ÿฆฆ", name:"otter", kw:["otter","water","cute","hold","float"] },
350
+ { char:"๐Ÿฆฅ", name:"sloth", kw:["sloth","slow","hang","tree","lazy"] },
351
+ { char:"๐Ÿฆ”", name:"hedgehog", kw:["hedgehog","spiky","cute","forest","small"] },
352
+ { char:"๐Ÿฆ˜", name:"kangaroo", kw:["kangaroo","australia","hop","pouchy","jump"] },
353
+ { char:"๐Ÿฆ™", name:"llama", kw:["llama","alpaca","spit","fluffy","south_america"] },
354
+ { char:"๐Ÿฆฌ", name:"bison", kw:["bison","buffalo","strong","plain","bull"] },
355
+ { char:"๐Ÿƒ", name:"water_buffalo", kw:["buffalo","water","horns","strong"] },
356
+ { char:"๐Ÿ‚", name:"ox", kw:["ox","bull","horns","farm","strong"] },
357
+ { char:"๐Ÿฆ", name:"rhinoceros", kw:["rhino","horn","big","africa","endangered"] },
358
+ { char:"๐Ÿฆ›", name:"hippopotamus", kw:["hippo","river","big","africa","mouth"] },
359
+ { char:"๐Ÿ˜", name:"elephant", kw:["elephant","trunk","big","africa","memory"] },
360
+ { char:"๐Ÿฆ’", name:"giraffe", kw:["giraffe","tall","neck","africa","spots"] },
361
+ { char:"๐Ÿฆ“", name:"zebra", kw:["zebra","stripes","africa","horse"] },
362
+ { char:"๐ŸฆŒ", name:"deer", kw:["deer","antlers","forest","bambi","gentle"] },
363
+ { char:"๐ŸŽ", name:"horse", kw:["horse","gallop","ride","stable","neigh"] },
364
+ { char:"๐Ÿ–", name:"pig", kw:["pig","farm","oink","mud","bacon"] },
365
+ { char:"๐Ÿ", name:"ram", kw:["ram","sheep","horns","wool","farm"] },
366
+ { char:"๐Ÿ‘", name:"ewe", kw:["sheep","wool","farm","baa","lamb"] },
367
+ { char:"๐Ÿ", name:"goat", kw:["goat","horns","mountain","farm","billy"] },
368
+ { char:"๐Ÿฆ™", name:"alpaca", kw:["alpaca","llama","fluffy","peru","herd"] }
369
+ ],
370
+ "Food & Drink": [
371
+ { char:"๐Ÿ", name:"green_apple", kw:["apple","green","fruit","healthy"] },
372
+ { char:"๐ŸŽ", name:"red_apple", kw:["apple","red","fruit","teacher"] },
373
+ { char:"๐Ÿ", name:"pear", kw:["pear","green","fruit","juicy"] },
374
+ { char:"๐ŸŠ", name:"tangerine", kw:["orange","tangerine","fruit","citrus"] },
375
+ { char:"๐Ÿ‹", name:"lemon", kw:["lemon","sour","citrus","yellow","fruit"] },
376
+ { char:"๐ŸŒ", name:"banana", kw:["banana","yellow","fruit","monkey","slip"] },
377
+ { char:"๐Ÿ‰", name:"watermelon", kw:["watermelon","summer","fruit","green","red"] },
378
+ { char:"๐Ÿ‡", name:"grapes", kw:["grapes","wine","fruit","purple","cluster"] },
379
+ { char:"๐Ÿ“", name:"strawberry", kw:["strawberry","red","fruit","sweet","summer"] },
380
+ { char:"๐Ÿซ", name:"blueberries", kw:["blueberry","fruit","blue","antioxidant"] },
381
+ { char:"๐Ÿˆ", name:"melon", kw:["melon","cantaloupe","fruit","green","sweet"] },
382
+ { char:"๐Ÿ’", name:"cherries", kw:["cherry","red","fruit","sweet","pair"] },
383
+ { char:"๐Ÿ‘", name:"peach", kw:["peach","fruit","soft","fuzzy","butt"] },
384
+ { char:"๐Ÿฅญ", name:"mango", kw:["mango","tropical","fruit","orange","sweet"] },
385
+ { char:"๐Ÿ", name:"pineapple", kw:["pineapple","tropical","fruit","yellow","spiky"] },
386
+ { char:"๐Ÿฅฅ", name:"coconut", kw:["coconut","tropical","milk","palm","white"] },
387
+ { char:"๐Ÿฅ", name:"kiwi_fruit", kw:["kiwi","green","fruit","new_zealand","exotic"] },
388
+ { char:"๐Ÿ…", name:"tomato", kw:["tomato","red","fruit","salad","sauce"] },
389
+ { char:"๐Ÿซ’", name:"olive", kw:["olive","green","mediterranean","oil","tree"] },
390
+ { char:"๐Ÿฅ‘", name:"avocado", kw:["avocado","green","toast","guacamole","millennial"] },
391
+ { char:"๐Ÿ†", name:"eggplant", kw:["eggplant","purple","vegetable","aubergine"] },
392
+ { char:"๐Ÿฅ”", name:"potato", kw:["potato","starch","vegetable","tuber","fries"] },
393
+ { char:"๐Ÿฅ•", name:"carrot", kw:["carrot","orange","vegetable","rabbit","healthy"] },
394
+ { char:"๐ŸŒฝ", name:"ear_of_corn", kw:["corn","maize","yellow","vegetable","popcorn"] },
395
+ { char:"๐ŸŒถ๏ธ", name:"hot_pepper", kw:["pepper","spicy","hot","chili","red"] },
396
+ { char:"๐Ÿซ‘", name:"bell_pepper", kw:["pepper","vegetable","colorful","capsicum"] },
397
+ { char:"๐Ÿฅ’", name:"cucumber", kw:["cucumber","green","cool","vegetable","fresh"] },
398
+ { char:"๐Ÿฅฌ", name:"leafy_green", kw:["lettuce","leafy","green","salad","healthy"] },
399
+ { char:"๐Ÿฅฆ", name:"broccoli", kw:["broccoli","green","healthy","tree","vegetable"] },
400
+ { char:"๐Ÿง„", name:"garlic", kw:["garlic","smelly","vampire","flavor","Italian"] },
401
+ { char:"๐Ÿง…", name:"onion", kw:["onion","cry","flavor","cooking","layer"] },
402
+ { char:"๐Ÿ„", name:"mushroom", kw:["mushroom","fungus","mario","forest","magic"] },
403
+ { char:"๐Ÿฅœ", name:"peanuts", kw:["peanut","nut","allergy","butter","snack"] },
404
+ { char:"๐ŸŒฐ", name:"chestnut", kw:["chestnut","nut","autumn","brown","roasted"] },
405
+ { char:"๐Ÿž", name:"bread", kw:["bread","loaf","bakery","toast","wheat"] },
406
+ { char:"๐Ÿฅ", name:"croissant", kw:["croissant","french","pastry","breakfast","flaky"] },
407
+ { char:"๐Ÿฅ–", name:"baguette_bread", kw:["baguette","french","bread","bakery"] },
408
+ { char:"๐Ÿซ“", name:"flatbread", kw:["flatbread","pita","naan","bread"] },
409
+ { char:"๐Ÿฅจ", name:"pretzel", kw:["pretzel","twisted","german","snack","salty"] },
410
+ { char:"๐Ÿฅฏ", name:"bagel", kw:["bagel","bread","breakfast","round","jewish"] },
411
+ { char:"๐Ÿง€", name:"cheese_wedge", kw:["cheese","yellow","dairy","mouse","pizza"] },
412
+ { char:"๐Ÿฅš", name:"egg", kw:["egg","breakfast","chicken","oval","protein"] },
413
+ { char:"๐Ÿณ", name:"cooking", kw:["fried_egg","cooking","breakfast","pan","sunny_side"] },
414
+ { char:"๐Ÿฅž", name:"pancakes", kw:["pancakes","breakfast","syrup","stack","fluffy"] },
415
+ { char:"๐Ÿง‡", name:"waffle", kw:["waffle","breakfast","syrup","grid","crispy"] },
416
+ { char:"๐Ÿฅ“", name:"bacon", kw:["bacon","crispy","breakfast","pork","yum"] },
417
+ { char:"๐Ÿฅฉ", name:"cut_of_meat", kw:["steak","meat","protein","beefy","dinner"] },
418
+ { char:"๐Ÿ—", name:"poultry_leg", kw:["chicken","turkey","leg","fried","dinner"] },
419
+ { char:"๐Ÿ–", name:"meat_on_bone", kw:["meat","bone","dinosaur","roasted"] },
420
+ { char:"๐ŸŒญ", name:"hot_dog", kw:["hotdog","sausage","bun","street_food","summer"] },
421
+ { char:"๐Ÿ”", name:"hamburger", kw:["burger","hamburger","fast_food","beef","bun"] },
422
+ { char:"๐ŸŸ", name:"french_fries", kw:["fries","potatoes","mcdonalds","salty","yum"] },
423
+ { char:"๐Ÿ•", name:"pizza", kw:["pizza","italian","cheese","slice","delivery"] },
424
+ { char:"๐Ÿซ”", name:"tamale", kw:["tamale","mexican","corn","wrapped","traditional"] },
425
+ { char:"๐ŸŒฎ", name:"taco", kw:["taco","mexican","shell","tuesday","wrap"] },
426
+ { char:"๐ŸŒฏ", name:"burrito", kw:["burrito","wrap","mexican","beans","tortilla"] },
427
+ { char:"๐Ÿฅ™", name:"stuffed_flatbread", kw:["shawarma","pita","flatbread","falafel","wrap"] },
428
+ { char:"๐Ÿง†", name:"falafel", kw:["falafel","middle_eastern","vegetarian","chickpea"] },
429
+ { char:"๐Ÿฅ—", name:"green_salad", kw:["salad","healthy","green","lettuce","vegetable"] },
430
+ { char:"๐Ÿฅ˜", name:"shallow_pan_of_food", kw:["paella","casserole","rice","dish","stew"] },
431
+ { char:"๐Ÿซ•", name:"fondue", kw:["fondue","cheese","chocolate","dipping","swiss"] },
432
+ { char:"๐Ÿฒ", name:"pot_of_food", kw:["stew","soup","pot","hotpot","cook"] },
433
+ { char:"๐Ÿ›", name:"curry_rice", kw:["curry","indian","rice","spicy","orange"] },
434
+ { char:"๐Ÿœ", name:"steaming_bowl", kw:["ramen","noodles","soup","asian","japan"] },
435
+ { char:"๐Ÿ", name:"spaghetti", kw:["pasta","spaghetti","italian","noodles","tomato"] },
436
+ { char:"๐Ÿ ", name:"roasted_sweet_potato", kw:["sweet_potato","roasted","japanese","yam","healthy"] },
437
+ { char:"๐Ÿข", name:"oden", kw:["oden","japanese","skewer","broth","stew"] },
438
+ { char:"๐Ÿฃ", name:"sushi", kw:["sushi","japanese","fish","rice","raw"] },
439
+ { char:"๐Ÿค", name:"fried_shrimp", kw:["shrimp","fried","seafood","tempura","crispy"] },
440
+ { char:"๐Ÿฅ", name:"fish_cake_with_swirl", kw:["narutomaki","fish_cake","japanese","swirl"] },
441
+ { char:"๐Ÿฅฎ", name:"moon_cake", kw:["mooncake","chinese","festival","moon"] },
442
+ { char:"๐Ÿก", name:"dango", kw:["dango","japanese","sweet","skewer","mochi"] },
443
+ { char:"๐ŸฅŸ", name:"dumpling", kw:["dumpling","gyoza","potsticker","dim_sum","chinese"] },
444
+ { char:"๐Ÿฅ ", name:"fortune_cookie", kw:["fortune","cookie","chinese","prediction","lucky"] },
445
+ { char:"๐Ÿฆ", name:"soft_ice_cream", kw:["ice_cream","soft","vanilla","swirl","summer"] },
446
+ { char:"๐Ÿง", name:"shaved_ice", kw:["shaved_ice","cool","cold","summer","sweet"] },
447
+ { char:"๐Ÿจ", name:"ice_cream", kw:["ice_cream","cold","scoop","bowl","sweet"] },
448
+ { char:"๐Ÿฉ", name:"doughnut", kw:["donut","doughnut","glazed","round","hole"] },
449
+ { char:"๐Ÿช", name:"cookie", kw:["cookie","chocolate_chip","sweet","bake","yum"] },
450
+ { char:"๐ŸŽ‚", name:"birthday_cake", kw:["birthday","cake","candles","celebrate","party"] },
451
+ { char:"๐Ÿฐ", name:"shortcake", kw:["cake","slice","strawberry","dessert","sweet"] },
452
+ { char:"๐Ÿง", name:"cupcake", kw:["cupcake","frosting","sweet","bake","party"] },
453
+ { char:"๐Ÿฅง", name:"pie", kw:["pie","crust","apple","dessert","bake"] },
454
+ { char:"๐Ÿซ", name:"chocolate_bar", kw:["chocolate","candy","bar","sweet","cocoa"] },
455
+ { char:"๐Ÿฌ", name:"candy", kw:["candy","sweet","sugar","lollipop","kids"] },
456
+ { char:"๐Ÿญ", name:"lollipop", kw:["lollipop","candy","swirl","sweet","kids"] },
457
+ { char:"๐Ÿฎ", name:"custard", kw:["custard","flan","pudding","caramel","dessert"] },
458
+ { char:"๐Ÿฏ", name:"honey_pot", kw:["honey","pot","bee","golden","sweet"] },
459
+ { char:"โ˜•", name:"hot_beverage", kw:["coffee","tea","hot","beverage","morning"] },
460
+ { char:"๐Ÿซ–", name:"teapot", kw:["tea","teapot","brew","herbal","cozy"] },
461
+ { char:"๐Ÿต", name:"teacup_without_handle", kw:["tea","green_tea","japanese","cup","cozy"] },
462
+ { char:"๐Ÿงƒ", name:"beverage_box", kw:["juice","box","drink","straw","kids"] },
463
+ { char:"๐Ÿฅค", name:"cup_with_straw", kw:["drink","soda","straw","cup","fast_food"] },
464
+ { char:"๐Ÿง‹", name:"bubble_tea", kw:["boba","bubble_tea","taiwan","tapioca","milktea"] },
465
+ { char:"๐Ÿบ", name:"beer_mug", kw:["beer","mug","cold","cheers","pub"] },
466
+ { char:"๐Ÿป", name:"clinking_beer_mugs", kw:["beer","cheers","toast","pub","celebrate"] },
467
+ { char:"๐Ÿฅ‚", name:"clinking_glasses", kw:["champagne","toast","celebrate","cheers","sparkling"] },
468
+ { char:"๐Ÿท", name:"wine_glass", kw:["wine","red","glass","drink","elegant"] },
469
+ { char:"๐Ÿฅƒ", name:"tumbler_glass", kw:["whiskey","bourbon","glass","drink","ice"] },
470
+ { char:"๐Ÿธ", name:"cocktail_glass", kw:["cocktail","martini","glass","bar","mix"] },
471
+ { char:"๐Ÿน", name:"tropical_drink", kw:["tropical","cocktail","umbrella","vacation","fun"] },
472
+ { char:"๐Ÿง‰", name:"mate", kw:["mate","south_american","herbal","gourd","drink"] },
473
+ { char:"๐Ÿพ", name:"bottle_with_popping_cork", kw:["champagne","celebrate","cork","pop","party"] },
474
+ { char:"๐ŸงŠ", name:"ice", kw:["ice","cold","cube","freeze","chill"] }
475
+ ],
476
+ "Activities": [
477
+ { char:"โšฝ", name:"soccer_ball", kw:["soccer","football","ball","sport","kick"] },
478
+ { char:"๐Ÿ€", name:"basketball", kw:["basketball","nba","ball","sport","hoop"] },
479
+ { char:"๐Ÿˆ", name:"american_football", kw:["football","nfl","sport","touchdown","america"] },
480
+ { char:"โšพ", name:"baseball", kw:["baseball","mlb","sport","pitcher","bat"] },
481
+ { char:"๐ŸฅŽ", name:"softball", kw:["softball","sport","ball","pitch"] },
482
+ { char:"๐Ÿ", name:"volleyball", kw:["volleyball","sport","net","beach","spike"] },
483
+ { char:"๐Ÿ‰", name:"rugby_football", kw:["rugby","football","sport","oval","tackle"] },
484
+ { char:"๐ŸŽพ", name:"tennis", kw:["tennis","ball","sport","racket","wimbledon"] },
485
+ { char:"๐Ÿธ", name:"badminton", kw:["badminton","shuttlecock","racket","sport"] },
486
+ { char:"๐Ÿ’", name:"ice_hockey", kw:["hockey","ice","puck","nhl","sport"] },
487
+ { char:"๐Ÿ“", name:"ping_pong", kw:["ping_pong","table_tennis","sport","paddle"] },
488
+ { char:"๐ŸฅŠ", name:"boxing_glove", kw:["boxing","fight","punch","sport","glove"] },
489
+ { char:"๐Ÿฅ‹", name:"martial_arts_uniform", kw:["martial_arts","karate","judo","uniform","sport"] },
490
+ { char:"โ›ณ", name:"flag_in_hole", kw:["golf","hole","sport","course","putt"] },
491
+ { char:"๐Ÿน", name:"bow_and_arrow", kw:["archery","bow","arrow","sport","shoot"] },
492
+ { char:"๐ŸŽฃ", name:"fishing_pole", kw:["fishing","fish","sport","pole","rod"] },
493
+ { char:"๐Ÿคฟ", name:"diving_mask", kw:["diving","snorkel","ocean","mask","underwater"] },
494
+ { char:"๐ŸŽฝ", name:"running_shirt", kw:["running","sport","shirt","race","marathon"] },
495
+ { char:"๐ŸŽฟ", name:"skis", kw:["ski","winter","snow","sport","mountain"] },
496
+ { char:"๐Ÿ›ท", name:"sled", kw:["sled","snow","winter","slide","christmas"] },
497
+ { char:"๐ŸฅŒ", name:"curling_stone", kw:["curling","sport","stone","ice","canada"] },
498
+ { char:"๐ŸŽฏ", name:"direct_hit", kw:["dart","bullseye","target","aim","hit"] },
499
+ { char:"๐Ÿชƒ", name:"boomerang", kw:["boomerang","throw","australia","curved","return"] },
500
+ { char:"๐Ÿช", name:"slingshot", kw:["slingshot","aim","throw","catapult","david"] },
501
+ { char:"๐ŸŽฑ", name:"pool_8_ball", kw:["billiards","pool","8_ball","cue","shot"] },
502
+ { char:"๐Ÿ”ฎ", name:"crystal_ball", kw:["crystal_ball","fortune","predict","psychic","magic"] },
503
+ { char:"๐ŸŽฎ", name:"video_game", kw:["gaming","controller","play","videogame","console"] },
504
+ { char:"๐Ÿ•น๏ธ", name:"joystick", kw:["joystick","game","arcade","play","control"] },
505
+ { char:"๐ŸŽฒ", name:"game_die", kw:["dice","game","random","d6","roll"] },
506
+ { char:"โ™Ÿ๏ธ", name:"chess_pawn", kw:["chess","pawn","game","strategy","black"] },
507
+ { char:"๐Ÿงฉ", name:"puzzle_piece", kw:["puzzle","jigsaw","piece","solve","fit"] },
508
+ { char:"๐Ÿช†", name:"nesting_dolls", kw:["matryoshka","russian","dolls","nest","set"] },
509
+ { char:"๐Ÿงธ", name:"teddy_bear", kw:["teddy","bear","plush","soft","toy","comfort"] },
510
+ { char:"๐Ÿช…", name:"pinata", kw:["pinata","party","birthday","candy","mexican"] },
511
+ { char:"๐ŸŽญ", name:"performing_arts", kw:["theater","drama","mask","comedy","tragedy"] },
512
+ { char:"๐ŸŽจ", name:"artist_palette", kw:["art","paint","palette","creative","artist"] },
513
+ { char:"๐Ÿ–ผ๏ธ", name:"framed_picture", kw:["art","picture","frame","museum","gallery"] },
514
+ { char:"๐ŸŽช", name:"circus_tent", kw:["circus","tent","carnival","fair","performance"] },
515
+ { char:"๐ŸŽค", name:"microphone", kw:["mic","sing","karaoke","music","performance"] },
516
+ { char:"๐ŸŽง", name:"headphone", kw:["headphones","music","audio","listen","bass"] },
517
+ { char:"๐ŸŽผ", name:"musical_score", kw:["music","score","notes","sheet","compose"] },
518
+ { char:"๐ŸŽน", name:"musical_keyboard", kw:["piano","keyboard","music","keys","classical"] },
519
+ { char:"๐Ÿช˜", name:"long_drum", kw:["drum","percussion","music","beat","rhythm"] },
520
+ { char:"๐Ÿฅ", name:"drum", kw:["drum","beat","music","percussion","rock"] },
521
+ { char:"๐ŸŽท", name:"saxophone", kw:["saxophone","sax","jazz","music","brass"] },
522
+ { char:"๐ŸŽบ", name:"trumpet", kw:["trumpet","jazz","music","brass","fanfare"] },
523
+ { char:"๐ŸŽธ", name:"guitar", kw:["guitar","music","rock","string","strum"] },
524
+ { char:"๐Ÿช•", name:"banjo", kw:["banjo","country","music","string","folk"] },
525
+ { char:"๐ŸŽป", name:"violin", kw:["violin","classical","music","string","bow"] },
526
+ { char:"๐Ÿช—", name:"accordion", kw:["accordion","music","folk","squeeze","polka"] },
527
+ { char:"๐ŸŽฌ", name:"clapper_board", kw:["movie","film","action","director","cinema"] },
528
+ { char:"๐ŸŽฅ", name:"movie_camera", kw:["camera","film","movie","recording","cinema"] },
529
+ { char:"๐Ÿ“ฝ๏ธ", name:"film_projector", kw:["projector","film","movie","cinema","vintage"] },
530
+ { char:"๐ŸŽž๏ธ", name:"film_frames", kw:["film","movie","strip","cinema","photo"] },
531
+ { char:"๐Ÿ“บ", name:"television", kw:["tv","television","watch","screen","channel"] },
532
+ { char:"๐Ÿ“ป", name:"radio", kw:["radio","music","broadcast","listen","vintage"] },
533
+ { char:"๐ŸŽ™๏ธ", name:"studio_microphone", kw:["podcast","mic","record","broadcast","studio"] },
534
+ { char:"๐ŸŽš๏ธ", name:"level_slider", kw:["slider","level","audio","mix","volume"] },
535
+ { char:"๐ŸŽ›๏ธ", name:"control_knobs", kw:["knobs","dj","audio","control","mix"] },
536
+ { char:"๐ŸŽŠ", name:"confetti_ball", kw:["confetti","party","celebrate","pop","fun"] },
537
+ { char:"๐ŸŽ‰", name:"party_popper", kw:["party","celebrate","tada","confetti","fun"] },
538
+ { char:"๐ŸŽˆ", name:"balloon", kw:["balloon","party","birthday","float","red"] },
539
+ { char:"๐ŸŽ", name:"wrapped_gift", kw:["gift","present","birthday","christmas","box"] },
540
+ { char:"๐Ÿ†", name:"trophy", kw:["trophy","winner","gold","first","champion"] },
541
+ { char:"๐Ÿฅ‡", name:"1st_place_medal", kw:["gold","medal","first","winner","olympic"] },
542
+ { char:"๐Ÿฅˆ", name:"2nd_place_medal", kw:["silver","medal","second","olympic"] },
543
+ { char:"๐Ÿฅ‰", name:"3rd_place_medal", kw:["bronze","medal","third","olympic"] },
544
+ { char:"๐ŸŽ–๏ธ", name:"military_medal", kw:["medal","military","award","honor","ribbon"] },
545
+ { char:"๐Ÿ…", name:"sports_medal", kw:["medal","sport","award","gold","win"] },
546
+ { char:"๐ŸŽ—๏ธ", name:"reminder_ribbon", kw:["ribbon","awareness","cause","reminder"] },
547
+ { char:"๐ŸŽŸ๏ธ", name:"admission_tickets", kw:["ticket","event","cinema","show","enter"] },
548
+ { char:"๐ŸŽซ", name:"ticket", kw:["ticket","event","concert","movie","admit"] }
549
+ ],
550
+ "Travel & Places": [
551
+ { char:"๐Ÿš—", name:"automobile", kw:["car","drive","road","vehicle","red"] },
552
+ { char:"๐Ÿš•", name:"taxi", kw:["taxi","cab","yellow","ride","city"] },
553
+ { char:"๐Ÿš™", name:"sport_utility_vehicle", kw:["suv","car","drive","off_road"] },
554
+ { char:"๐ŸšŒ", name:"bus", kw:["bus","public","transport","city","route"] },
555
+ { char:"๐ŸšŽ", name:"trolleybus", kw:["trolley","bus","electric","city","transport"] },
556
+ { char:"๐ŸŽ๏ธ", name:"racing_car", kw:["racing","formula1","car","fast","sport"] },
557
+ { char:"๐Ÿš“", name:"police_car", kw:["police","cop","law","blue","sirens"] },
558
+ { char:"๐Ÿš‘", name:"ambulance", kw:["ambulance","medical","emergency","hospital","health"] },
559
+ { char:"๐Ÿš’", name:"fire_engine", kw:["fire","truck","engine","emergency","red"] },
560
+ { char:"๐Ÿš", name:"minibus", kw:["minibus","van","transport","shuttle"] },
561
+ { char:"๐Ÿšš", name:"delivery_truck", kw:["delivery","truck","shipping","package","amazon"] },
562
+ { char:"๐Ÿš›", name:"articulated_lorry", kw:["lorry","truck","semi","transport","road"] },
563
+ { char:"๐Ÿšœ", name:"tractor", kw:["tractor","farm","agriculture","rural","field"] },
564
+ { char:"๐Ÿฆฏ", name:"white_cane", kw:["cane","blind","accessibility","white"] },
565
+ { char:"๐Ÿฆฝ", name:"manual_wheelchair", kw:["wheelchair","disability","accessible","mobility"] },
566
+ { char:"๐Ÿฆผ", name:"motorized_wheelchair", kw:["wheelchair","electric","disability","accessible"] },
567
+ { char:"๐Ÿ›ต", name:"motor_scooter", kw:["scooter","moped","ride","motor","city"] },
568
+ { char:"๐Ÿ๏ธ", name:"motorcycle", kw:["motorcycle","bike","ride","fast","biker"] },
569
+ { char:"๐Ÿ›บ", name:"auto_rickshaw", kw:["tuk_tuk","rickshaw","asia","transport","three_wheel"] },
570
+ { char:"๐Ÿšฒ", name:"bicycle", kw:["bike","bicycle","ride","eco","pedal"] },
571
+ { char:"๐Ÿ›ด", name:"kick_scooter", kw:["scooter","kick","electric","ride","lime"] },
572
+ { char:"๐Ÿ›น", name:"skateboard", kw:["skateboard","skate","trick","sport","cool"] },
573
+ { char:"๐Ÿ›ผ", name:"roller_skate", kw:["rollerskate","skate","retro","wheel","fun"] },
574
+ { char:"๐Ÿš", name:"bus_stop", kw:["bus","stop","sign","transport","wait"] },
575
+ { char:"๐Ÿ›ฃ๏ธ", name:"motorway", kw:["highway","motorway","road","drive","travel"] },
576
+ { char:"๐Ÿ›ค๏ธ", name:"railway_track", kw:["railway","track","train","railroad"] },
577
+ { char:"๐Ÿ›ž", name:"wheel", kw:["wheel","tire","car","circle","spin"] },
578
+ { char:"โ›ฝ", name:"fuel_pump", kw:["gas","fuel","petrol","station","fill"] },
579
+ { char:"๐Ÿšจ", name:"police_car_light", kw:["siren","police","emergency","red","blue"] },
580
+ { char:"๐Ÿšฅ", name:"horizontal_traffic_light", kw:["traffic","light","signal","road","stop"] },
581
+ { char:"๐Ÿšฆ", name:"vertical_traffic_light", kw:["traffic","light","green","signal","go"] },
582
+ { char:"๐Ÿ›‘", name:"stop_sign", kw:["stop","sign","red","octagon","road"] },
583
+ { char:"๐Ÿšง", name:"construction", kw:["construction","building","caution","road","work"] },
584
+ { char:"โš“", name:"anchor", kw:["anchor","boat","ship","ocean","dock"] },
585
+ { char:"๐Ÿ›Ÿ", name:"ring_buoy", kw:["life_preserver","ring","buoy","safe","rescue"] },
586
+ { char:"โ›ต", name:"sailboat", kw:["sailboat","sail","wind","ocean","boat"] },
587
+ { char:"๐Ÿšค", name:"speedboat", kw:["speedboat","boat","fast","water","motor"] },
588
+ { char:"๐Ÿ›ฅ๏ธ", name:"motor_boat", kw:["motorboat","boat","water","travel","cruise"] },
589
+ { char:"๐Ÿ›ณ๏ธ", name:"passenger_ship", kw:["cruise","ship","ocean","voyage","liner"] },
590
+ { char:"โ›ด๏ธ", name:"ferry", kw:["ferry","boat","cross","water","transport"] },
591
+ { char:"๐Ÿšข", name:"ship", kw:["ship","cruise","ocean","travel","big"] },
592
+ { char:"โœˆ๏ธ", name:"airplane", kw:["plane","airplane","fly","travel","jet"] },
593
+ { char:"๐Ÿ›ฉ๏ธ", name:"small_airplane", kw:["plane","small","private","fly","propeller"] },
594
+ { char:"๐Ÿš", name:"helicopter", kw:["helicopter","fly","rotor","rescue","hover"] },
595
+ { char:"๐Ÿ›ธ", name:"flying_saucer", kw:["ufo","alien","space","fly","sci_fi"] },
596
+ { char:"๐Ÿš€", name:"rocket", kw:["rocket","space","launch","nasa","star"] },
597
+ { char:"๐Ÿ›ฐ๏ธ", name:"satellite", kw:["satellite","space","orbit","signal","communication"] },
598
+ { char:"๐Ÿ’บ", name:"seat", kw:["seat","chair","airplane","sit","reserve"] },
599
+ { char:"๐Ÿช‚", name:"parachute", kw:["parachute","skydive","jump","fall","military"] },
600
+ { char:"๐Ÿ–๏ธ", name:"beach_with_umbrella", kw:["beach","vacation","summer","ocean","umbrella"] },
601
+ { char:"๐Ÿ๏ธ", name:"desert_island", kw:["island","tropical","deserted","ocean","palm"] },
602
+ { char:"๐Ÿ”๏ธ", name:"snow_capped_mountain", kw:["mountain","snow","peak","hike","alps"] },
603
+ { char:"โ›ฐ๏ธ", name:"mountain", kw:["mountain","peak","hike","cliff","altitude"] },
604
+ { char:"๐Ÿ—ป", name:"mount_fuji", kw:["fuji","japan","mountain","snow","iconic"] },
605
+ { char:"๐Ÿ•๏ธ", name:"camping", kw:["camping","tent","nature","outdoor","forest"] },
606
+ { char:"๐Ÿœ๏ธ", name:"desert", kw:["desert","sand","hot","cactus","sahara"] },
607
+ { char:"๐Ÿž๏ธ", name:"national_park", kw:["park","nature","lake","forest","scenic"] },
608
+ { char:"๐ŸŸ๏ธ", name:"stadium", kw:["stadium","sport","crowd","arena","game"] },
609
+ { char:"๐Ÿ›๏ธ", name:"classical_building", kw:["greek","roman","columns","ancient","architecture"] },
610
+ { char:"๐Ÿ—๏ธ", name:"building_construction", kw:["construction","building","crane","work","develop"] },
611
+ { char:"๐Ÿงฑ", name:"brick", kw:["brick","wall","build","red","construction"] },
612
+ { char:"๐ŸชŸ", name:"window", kw:["window","glass","house","view","open"] },
613
+ { char:"๐Ÿ ", name:"house", kw:["house","home","building","family","live"] },
614
+ { char:"๐Ÿก", name:"house_with_garden", kw:["house","home","garden","yard","family"] },
615
+ { char:"๐Ÿข", name:"office_building", kw:["office","building","work","business","city"] },
616
+ { char:"๐Ÿฃ", name:"japanese_post_office", kw:["post_office","japan","mail","building"] },
617
+ { char:"๐Ÿค", name:"post_office", kw:["post_office","mail","building","europe"] },
618
+ { char:"๐Ÿฅ", name:"hospital", kw:["hospital","medical","health","emergency","cross"] },
619
+ { char:"๐Ÿฆ", name:"bank", kw:["bank","money","finance","building","vault"] },
620
+ { char:"๐Ÿจ", name:"hotel", kw:["hotel","travel","stay","room","bell"] },
621
+ { char:"๐Ÿช", name:"convenience_store", kw:["store","shop","convenience","7_eleven","retail"] },
622
+ { char:"๐Ÿซ", name:"school", kw:["school","education","learn","building","student"] },
623
+ { char:"๐Ÿฌ", name:"department_store", kw:["department_store","shopping","retail","mall"] },
624
+ { char:"๐Ÿญ", name:"factory", kw:["factory","industrial","production","work","chimney"] },
625
+ { char:"๐Ÿฏ", name:"japanese_castle", kw:["castle","japan","historic","pagoda","fortress"] },
626
+ { char:"๐Ÿฐ", name:"european_castle", kw:["castle","medieval","europe","princess","tower"] },
627
+ { char:"๐Ÿ’’", name:"wedding", kw:["wedding","church","marry","chapel","love"] },
628
+ { char:"๐Ÿ—ผ", name:"tokyo_tower", kw:["tokyo","tower","japan","landmark","red"] },
629
+ { char:"๐Ÿ—ฝ", name:"statue_of_liberty", kw:["liberty","usa","statue","new_york","freedom"] },
630
+ { char:"โ›ช", name:"church", kw:["church","pray","cross","christian","worship"] },
631
+ { char:"๐Ÿ•Œ", name:"mosque", kw:["mosque","islam","pray","minaret","crescent"] },
632
+ { char:"๐Ÿ›•", name:"hindu_temple", kw:["temple","hindu","pray","worship","india"] },
633
+ { char:"๐Ÿ•", name:"synagogue", kw:["synagogue","jewish","pray","star_of_david"] },
634
+ { char:"โ›ฉ๏ธ", name:"shinto_shrine", kw:["shrine","japan","torii","gate","shinto"] },
635
+ { char:"๐Ÿ•‹", name:"kaaba", kw:["kaaba","mecca","islam","holy","haj"] },
636
+ { char:"โ›ฒ", name:"fountain", kw:["fountain","water","park","statue","city"] },
637
+ { char:"โ›บ", name:"tent", kw:["tent","camping","outdoor","nature","sleep"] },
638
+ { char:"๐ŸŒ", name:"foggy", kw:["fog","foggy","city","morning","bridge"] },
639
+ { char:"๐ŸŒƒ", name:"night_with_stars", kw:["night","stars","city","dark","sky"] },
640
+ { char:"๐Ÿ™๏ธ", name:"cityscape", kw:["city","skyline","buildings","urban","night"] },
641
+ { char:"๐ŸŒ„", name:"sunrise_over_mountains", kw:["sunrise","mountain","morning","dawn","sky"] },
642
+ { char:"๐ŸŒ…", name:"sunrise", kw:["sunrise","morning","sky","orange","sea"] },
643
+ { char:"๐ŸŒ†", name:"cityscape_at_dusk", kw:["dusk","city","sunset","evening","buildings"] },
644
+ { char:"๐ŸŒ‡", name:"sunset", kw:["sunset","city","evening","sky","golden"] },
645
+ { char:"๐ŸŒ‰", name:"bridge_at_night", kw:["bridge","night","city","golden_gate","lights"] },
646
+ { char:"๐ŸŒŒ", name:"milky_way", kw:["milky_way","galaxy","space","stars","night"] },
647
+ { char:"๐ŸŒ ", name:"shooting_star", kw:["shooting_star","wish","meteor","night","sky"] },
648
+ { char:"๐ŸŽ‡", name:"sparkler", kw:["fireworks","sparkler","new_year","celebrate","light"] },
649
+ { char:"๐ŸŽ†", name:"fireworks", kw:["fireworks","celebrate","explosion","new_year","colorful"] }
650
+ ],
651
+ "Objects": [
652
+ { char:"โŒš", name:"watch", kw:["watch","time","clock","wrist","tick"] },
653
+ { char:"๐Ÿ“ฑ", name:"mobile_phone", kw:["phone","mobile","smartphone","iphone","android"] },
654
+ { char:"๐Ÿ“ฒ", name:"mobile_phone_with_arrow", kw:["phone","call","download","mobile","receive"] },
655
+ { char:"๐Ÿ’ป", name:"laptop", kw:["laptop","computer","coding","work","screen"] },
656
+ { char:"โŒจ๏ธ", name:"keyboard", kw:["keyboard","type","computer","input"] },
657
+ { char:"๐Ÿ–ฅ๏ธ", name:"desktop_computer", kw:["desktop","computer","monitor","screen","work"] },
658
+ { char:"๐Ÿ–จ๏ธ", name:"printer", kw:["printer","print","paper","office","document"] },
659
+ { char:"๐Ÿ–ฑ๏ธ", name:"computer_mouse", kw:["mouse","cursor","click","computer","input"] },
660
+ { char:"๐Ÿ–ฒ๏ธ", name:"trackball", kw:["trackball","mouse","cursor","input","computer"] },
661
+ { char:"๐Ÿ’ฝ", name:"computer_disk", kw:["disk","floppy","storage","computer","data"] },
662
+ { char:"๐Ÿ’พ", name:"floppy_disk", kw:["floppy","save","disk","data","retro"] },
663
+ { char:"๐Ÿ’ฟ", name:"optical_disk", kw:["cd","dvd","disk","music","data"] },
664
+ { char:"๐Ÿ“€", name:"dvd", kw:["dvd","disk","movie","data","video"] },
665
+ { char:"๐Ÿงฎ", name:"abacus", kw:["abacus","math","count","calculate","beads"] },
666
+ { char:"๐Ÿ“ท", name:"camera", kw:["camera","photo","picture","snap","instagram"] },
667
+ { char:"๐Ÿ“ธ", name:"camera_with_flash", kw:["camera","photo","flash","snap","picture"] },
668
+ { char:"๐Ÿ“น", name:"video_camera", kw:["video","camera","record","film","movie"] },
669
+ { char:"๐Ÿ“ผ", name:"videocassette", kw:["vhs","tape","retro","record","video"] },
670
+ { char:"๐Ÿ”", name:"magnifying_glass_tilted_left", kw:["search","magnify","find","zoom","look"] },
671
+ { char:"๐Ÿ”Ž", name:"magnifying_glass_tilted_right", kw:["search","magnify","find","zoom","look"] },
672
+ { char:"๐Ÿ•ฏ๏ธ", name:"candle", kw:["candle","light","flame","romance","birthday"] },
673
+ { char:"๐Ÿ’ก", name:"light_bulb", kw:["bulb","idea","light","bright","innovation"] },
674
+ { char:"๐Ÿ”ฆ", name:"flashlight", kw:["flashlight","torch","light","beam","dark"] },
675
+ { char:"๐Ÿฎ", name:"red_paper_lantern", kw:["lantern","paper","red","chinese","light"] },
676
+ { char:"๐Ÿช”", name:"diya_lamp", kw:["diya","lamp","diwali","flame","india"] },
677
+ { char:"๐Ÿ“š", name:"books", kw:["books","library","read","study","knowledge"] },
678
+ { char:"๐Ÿ“–", name:"open_book", kw:["book","read","open","study","library"] },
679
+ { char:"๐Ÿ“", name:"memo", kw:["memo","note","write","pencil","list"] },
680
+ { char:"๐Ÿ“„", name:"page_facing_up", kw:["document","page","paper","file","text"] },
681
+ { char:"๐Ÿ“ƒ", name:"page_with_curl", kw:["document","curl","paper","note","list"] },
682
+ { char:"๐Ÿ“‘", name:"bookmark_tabs", kw:["tabs","bookmark","document","organize"] },
683
+ { char:"๐Ÿ“Š", name:"bar_chart", kw:["chart","graph","data","stats","bar"] },
684
+ { char:"๐Ÿ“ˆ", name:"chart_increasing", kw:["chart","growth","stock","up","trend"] },
685
+ { char:"๐Ÿ“‰", name:"chart_decreasing", kw:["chart","decline","down","stock","trend"] },
686
+ { char:"๐Ÿ—’๏ธ", name:"spiral_notepad", kw:["notepad","spiral","note","write","list"] },
687
+ { char:"๐Ÿ—“๏ธ", name:"spiral_calendar", kw:["calendar","date","schedule","plan","month"] },
688
+ { char:"๐Ÿ“…", name:"calendar", kw:["calendar","date","month","schedule","event"] },
689
+ { char:"๐Ÿ“†", name:"tear_off_calendar", kw:["calendar","tear","date","day","month"] },
690
+ { char:"๐Ÿ—‘๏ธ", name:"wastebasket", kw:["trash","delete","bin","garbage","recycle"] },
691
+ { char:"๐Ÿ“", name:"file_folder", kw:["folder","file","organize","directory"] },
692
+ { char:"๐Ÿ“‚", name:"open_file_folder", kw:["folder","file","open","organize"] },
693
+ { char:"๐Ÿ—‚๏ธ", name:"card_index_dividers", kw:["dividers","organize","cards","file","tabs"] },
694
+ { char:"๐Ÿ—ƒ๏ธ", name:"card_file_box", kw:["file","box","organize","archive","cards"] },
695
+ { char:"๐Ÿ—„๏ธ", name:"file_cabinet", kw:["cabinet","file","drawer","office","organize"] },
696
+ { char:"๐Ÿ“ฆ", name:"package", kw:["box","package","shipping","parcel","gift"] },
697
+ { char:"๐Ÿ“ซ", name:"closed_mailbox_raised_flag", kw:["mailbox","mail","letter","flag","post"] },
698
+ { char:"๐Ÿ“ฌ", name:"open_mailbox_raised_flag", kw:["mailbox","mail","open","letter","post"] },
699
+ { char:"๐Ÿ“ฎ", name:"postbox", kw:["postbox","mail","post","red","letter"] },
700
+ { char:"๐Ÿ—ณ๏ธ", name:"ballot_box_with_ballot", kw:["vote","ballot","election","democracy","box"] },
701
+ { char:"โœ๏ธ", name:"pencil", kw:["pencil","write","draw","edit","sketch"] },
702
+ { char:"โœ’๏ธ", name:"black_nib", kw:["pen","nib","write","ink","calligraphy"] },
703
+ { char:"๐Ÿ–‹๏ธ", name:"fountain_pen", kw:["pen","fountain","write","ink","elegant"] },
704
+ { char:"๐Ÿ–Š๏ธ", name:"pen", kw:["pen","write","ballpoint","sign","ink"] },
705
+ { char:"๐Ÿ–Œ๏ธ", name:"paintbrush", kw:["brush","paint","art","stroke","artist"] },
706
+ { char:"๐Ÿ–๏ธ", name:"crayon", kw:["crayon","color","draw","kids","art"] },
707
+ { char:"๐Ÿ“Œ", name:"pushpin", kw:["pushpin","pin","red","map","stuck"] },
708
+ { char:"๐Ÿ“", name:"round_pushpin", kw:["pin","pushpin","location","map","marked"] },
709
+ { char:"๐Ÿ“Ž", name:"paperclip", kw:["paperclip","attach","clip","document"] },
710
+ { char:"๐Ÿ–‡๏ธ", name:"linked_paperclips", kw:["paperclip","linked","attach","chain","connect"] },
711
+ { char:"๐Ÿ“", name:"straight_ruler", kw:["ruler","measure","line","straight","draw"] },
712
+ { char:"๐Ÿ“", name:"triangular_ruler", kw:["ruler","triangle","measure","drawing","angle"] },
713
+ { char:"โœ‚๏ธ", name:"scissors", kw:["scissors","cut","snip","craft","school"] },
714
+ { char:"๐Ÿ—ƒ๏ธ", name:"card_index", kw:["card","index","catalog","organize","file"] },
715
+ { char:"๐Ÿ”’", name:"locked", kw:["lock","secure","private","password","closed"] },
716
+ { char:"๐Ÿ”“", name:"unlocked", kw:["unlock","open","secure","key","free"] },
717
+ { char:"๐Ÿ”", name:"locked_with_pen", kw:["lock","pen","edit","sign","private"] },
718
+ { char:"๐Ÿ”", name:"locked_with_key", kw:["lock","key","secure","password","safety"] },
719
+ { char:"๐Ÿ”‘", name:"key", kw:["key","lock","open","access","security"] },
720
+ { char:"๐Ÿ—๏ธ", name:"old_key", kw:["key","old","vintage","antique","lock"] },
721
+ { char:"๐Ÿ”จ", name:"hammer", kw:["hammer","tool","build","fix","nail"] },
722
+ { char:"๐Ÿช“", name:"axe", kw:["axe","chop","wood","cut","viking"] },
723
+ { char:"โ›๏ธ", name:"pick", kw:["pick","mine","dig","tool","minecraft"] },
724
+ { char:"โš’๏ธ", name:"hammer_and_pick", kw:["tools","hammer","pick","work","craft"] },
725
+ { char:"๐Ÿ› ๏ธ", name:"hammer_and_wrench", kw:["tools","fix","build","repair","maintenance"] },
726
+ { char:"๐Ÿ—ก๏ธ", name:"dagger", kw:["dagger","blade","weapon","stab","knife"] },
727
+ { char:"โš”๏ธ", name:"crossed_swords", kw:["swords","fight","battle","war","crossed"] },
728
+ { char:"๐Ÿ›ก๏ธ", name:"shield", kw:["shield","protect","defense","armor","block"] },
729
+ { char:"๐Ÿ”ง", name:"wrench", kw:["wrench","tool","fix","repair","plumber"] },
730
+ { char:"๐Ÿช›", name:"screwdriver", kw:["screwdriver","tool","fix","repair","assemble"] },
731
+ { char:"๐Ÿ”ฉ", name:"nut_and_bolt", kw:["bolt","nut","screw","tool","fix"] },
732
+ { char:"โš™๏ธ", name:"gear", kw:["gear","settings","cog","machine","mechanic"] },
733
+ { char:"๐Ÿ—œ๏ธ", name:"clamp", kw:["clamp","tool","grip","hold","press"] },
734
+ { char:"โš–๏ธ", name:"balance_scale", kw:["scale","balance","justice","law","fair"] },
735
+ { char:"๐Ÿฆฏ", name:"probing_cane", kw:["cane","blind","navigate","probe","accessibility"] },
736
+ { char:"๐Ÿ”—", name:"link", kw:["link","chain","connect","url","hyperlink"] },
737
+ { char:"โ›“๏ธ", name:"chains", kw:["chains","link","connect","prisoner","strong"] },
738
+ { char:"๐Ÿช", name:"hook", kw:["hook","fishing","hang","catch","curved"] },
739
+ { char:"๐Ÿงฒ", name:"magnet", kw:["magnet","attract","magnetic","pull","horseshoe"] },
740
+ { char:"๐Ÿชœ", name:"ladder", kw:["ladder","climb","step","rung","rise"] },
741
+ { char:"๐Ÿงฐ", name:"toolbox", kw:["toolbox","tools","repair","fix","maintain"] },
742
+ { char:"๐Ÿงฒ", name:"horseshoe_magnet", kw:["magnet","attract","stick","pull","iron"] },
743
+ { char:"๐Ÿ’Š", name:"pill", kw:["pill","medicine","tablet","drug","health"] },
744
+ { char:"๐Ÿ’‰", name:"syringe", kw:["syringe","inject","medical","vaccine","blood"] },
745
+ { char:"๐Ÿฉบ", name:"stethoscope", kw:["stethoscope","doctor","medical","heart","listen"] },
746
+ { char:"๐Ÿฉป", name:"x_ray", kw:["x_ray","scan","medical","bone","skeleton"] },
747
+ { char:"๐Ÿงฌ", name:"dna", kw:["dna","genetics","science","biology","helix"] },
748
+ { char:"๐Ÿ”ฌ", name:"microscope", kw:["microscope","science","biology","lab","research"] },
749
+ { char:"๐Ÿ”ญ", name:"telescope", kw:["telescope","space","astronomy","star","observe"] },
750
+ { char:"๐ŸŒก๏ธ", name:"thermometer", kw:["thermometer","temperature","heat","cold","fever"] },
751
+ { char:"๐Ÿชฃ", name:"bucket", kw:["bucket","water","carry","mop","clean"] },
752
+ { char:"๐Ÿงด", name:"lotion_bottle", kw:["lotion","bottle","cream","skin","moisturizer"] },
753
+ { char:"๐Ÿงท", name:"safety_pin", kw:["safety_pin","pin","secure","sewing","sharp"] },
754
+ { char:"๐Ÿงน", name:"broom", kw:["broom","sweep","clean","witch","fly"] },
755
+ { char:"๐Ÿงบ", name:"basket", kw:["basket","laundry","storage","weave","carry"] },
756
+ { char:"๐Ÿงป", name:"roll_of_paper", kw:["toilet_paper","tissue","roll","paper","wipe"] },
757
+ { char:"๐Ÿชฃ", name:"plunger", kw:["plunger","toilet","clog","plumber","fix"] },
758
+ { char:"๐Ÿช ", name:"plunger_v2", kw:["plunger","drain","fix","toilet","clog"] },
759
+ { char:"๐Ÿงน", name:"cleaning_broom", kw:["broom","clean","sweep","dust","witch"] },
760
+ { char:"๐Ÿšฟ", name:"shower", kw:["shower","clean","bath","water","refresh"] },
761
+ { char:"๐Ÿ›", name:"bathtub", kw:["bathtub","bath","relax","soak","clean"] },
762
+ { char:"๐Ÿ›’", name:"shopping_cart", kw:["cart","shopping","grocery","buy","wheel"] },
763
+ { char:"๐Ÿšช", name:"door", kw:["door","open","close","enter","knock"] },
764
+ { char:"๐Ÿช‘", name:"chair", kw:["chair","sit","furniture","seat","stool"] },
765
+ { char:"๐Ÿชž", name:"mirror", kw:["mirror","reflect","look","beauty","vanity"] },
766
+ { char:"๐Ÿ›‹๏ธ", name:"couch_and_lamp", kw:["couch","sofa","lamp","living_room","relax"] },
767
+ { char:"๐Ÿ›๏ธ", name:"bed", kw:["bed","sleep","night","rest","furniture"] },
768
+ { char:"๐Ÿงธ", name:"plush_teddy", kw:["teddy","plush","toy","soft","bear"] },
769
+ { char:"๐Ÿ“ฟ", name:"prayer_beads", kw:["beads","prayer","rosary","meditation","religion"] },
770
+ { char:"๐Ÿ’Ž", name:"gem_stone", kw:["diamond","gem","ruby","jewel","precious"] },
771
+ { char:"๐Ÿ‘‘", name:"crown", kw:["crown","king","queen","royal","winner"] },
772
+ { char:"๐Ÿ’", name:"ring", kw:["ring","marriage","proposal","engagement","diamond"] },
773
+ { char:"๐Ÿ‘›", name:"purse", kw:["purse","bag","money","fashion","wallet"] },
774
+ { char:"๐Ÿ‘œ", name:"handbag", kw:["handbag","bag","fashion","purse","accessories"] },
775
+ { char:"๐Ÿ’ผ", name:"briefcase", kw:["briefcase","work","business","office","bag"] },
776
+ { char:"๐ŸŽ’", name:"backpack", kw:["backpack","school","travel","bag","hike"] },
777
+ { char:"๐Ÿ‘“", name:"glasses", kw:["glasses","eyeglasses","see","vision","nerd"] },
778
+ { char:"๐Ÿ•ถ๏ธ", name:"sunglasses", kw:["sunglasses","cool","sun","shade","celebrity"] },
779
+ { char:"๐Ÿฅฝ", name:"goggles", kw:["goggles","eye","protect","dive","ski"] },
780
+ { char:"๐ŸŒ‚", name:"closed_umbrella", kw:["umbrella","rain","closed","weather"] },
781
+ { char:"โ˜‚๏ธ", name:"umbrella", kw:["umbrella","rain","open","wet","cover"] },
782
+ { char:"๐ŸŽƒ", name:"jack_o_lantern", kw:["pumpkin","halloween","spooky","october","carve"] },
783
+ { char:"๐ŸŽ„", name:"christmas_tree", kw:["christmas","tree","holiday","xmas","december"] },
784
+ { char:"๐ŸŽ‹", name:"tanabata_tree", kw:["bamboo","tanabata","japan","summer","wish"] },
785
+ { char:"๐ŸŽ", name:"pine_decoration", kw:["pine","kadomatsu","japan","new_year","decoration"] },
786
+ { char:"๐ŸŽŽ", name:"japanese_dolls", kw:["dolls","hina_matsuri","japan","festival","pair"] },
787
+ { char:"๐Ÿงง", name:"red_envelope", kw:["red_envelope","hongbao","lucky","money","chinese_new_year"] },
788
+ { char:"๐ŸŽ", name:"wind_chime", kw:["wind_chime","summer","japan","breeze","clink"] },
789
+ { char:"๐ŸŽ‘", name:"moon_viewing_ceremony", kw:["moon","tsukimi","japan","autumn","celebration"] },
790
+ { char:"๐Ÿงจ", name:"firecracker", kw:["firecracker","bang","celebrate","red","new_year"] }
791
+ ],
792
+ "Symbols": [
793
+ { char:"โค๏ธ", name:"heart", kw:["love","heart","red","like","passion"] },
794
+ { char:"๐Ÿงก", name:"orange_heart", kw:["love","heart","orange","warm"] },
795
+ { char:"๐Ÿ’›", name:"yellow_heart", kw:["love","heart","yellow","happy"] },
796
+ { char:"๐Ÿ’š", name:"green_heart", kw:["love","heart","green","nature"] },
797
+ { char:"๐Ÿ’™", name:"blue_heart", kw:["love","heart","blue","calm"] },
798
+ { char:"๐Ÿ’œ", name:"purple_heart", kw:["love","heart","purple","military"] },
799
+ { char:"๐Ÿ–ค", name:"black_heart", kw:["love","heart","black","dark","emo"] },
800
+ { char:"๐Ÿค", name:"white_heart", kw:["love","heart","white","pure","innocent"] },
801
+ { char:"๐ŸคŽ", name:"brown_heart", kw:["love","heart","brown","warm"] },
802
+ { char:"โฃ๏ธ", name:"heart_exclamation", kw:["heart","exclamation","love","point"] },
803
+ { char:"โค๏ธโ€๐Ÿ”ฅ", name:"heart_on_fire", kw:["passion","love","fire","intense","burn"] },
804
+ { char:"โค๏ธโ€๐Ÿฉน", name:"mending_heart", kw:["heal","heart","mend","repair","broken"] },
805
+ { char:"๐Ÿ’•", name:"two_hearts", kw:["love","hearts","two","couple","romantic"] },
806
+ { char:"๐Ÿ’ž", name:"revolving_hearts", kw:["hearts","spinning","love","couple","romantic"] },
807
+ { char:"๐Ÿ’“", name:"beating_heart", kw:["heart","beat","love","pulse","throb"] },
808
+ { char:"๐Ÿ’—", name:"growing_heart", kw:["heart","grow","love","pink","getting_bigger"] },
809
+ { char:"๐Ÿ’–", name:"sparkling_heart", kw:["heart","sparkle","love","pink","shine"] },
810
+ { char:"๐Ÿ’˜", name:"heart_with_arrow", kw:["heart","arrow","love","cupid","valentines"] },
811
+ { char:"๐Ÿ’", name:"heart_with_ribbon", kw:["heart","ribbon","gift","love","valentines"] },
812
+ { char:"โ™พ๏ธ", name:"infinity", kw:["infinity","infinite","loop","forever","math"] },
813
+ { char:"โœณ๏ธ", name:"eight_spoked_asterisk", kw:["asterisk","star","sparkle","eight_pointed"] },
814
+ { char:"โœด๏ธ", name:"eight_pointed_star", kw:["star","sparkle","eight","orange"] },
815
+ { char:"โ‡๏ธ", name:"sparkle", kw:["sparkle","shine","star","glint"] },
816
+ { char:"๐Ÿ”ฐ", name:"japanese_symbol_for_beginner", kw:["beginner","japan","newbie","green","symbol"] },
817
+ { char:"โ™ป๏ธ", name:"recycling_symbol", kw:["recycle","green","eco","loop","environment"] },
818
+ { char:"โœ…", name:"check_mark_button", kw:["check","done","tick","yes","green","ok"] },
819
+ { char:"โ˜‘๏ธ", name:"check_box_with_check", kw:["checkbox","check","tick","done","mark"] },
820
+ { char:"๐Ÿ”˜", name:"radio_button", kw:["radio","button","select","circle","ui"] },
821
+ { char:"๐Ÿ”ฒ", name:"black_square_button", kw:["square","button","black","ui"] },
822
+ { char:"๐Ÿ”ณ", name:"white_square_button", kw:["square","button","white","ui"] },
823
+ { char:"โฌ›", name:"black_large_square", kw:["square","black","block"] },
824
+ { char:"โฌœ", name:"white_large_square", kw:["square","white","block"] },
825
+ { char:"โ—ผ๏ธ", name:"black_medium_square", kw:["square","black","medium"] },
826
+ { char:"โ—ป๏ธ", name:"white_medium_square", kw:["square","white","medium"] },
827
+ { char:"โ—พ", name:"black_medium_small_square", kw:["square","black","small"] },
828
+ { char:"โ—ฝ", name:"white_medium_small_square", kw:["square","white","small"] },
829
+ { char:"โ–ช๏ธ", name:"black_small_square", kw:["square","black","tiny"] },
830
+ { char:"โ–ซ๏ธ", name:"white_small_square", kw:["square","white","tiny"] },
831
+ { char:"๐Ÿ”ถ", name:"large_orange_diamond", kw:["orange","diamond","shape","large"] },
832
+ { char:"๐Ÿ”ท", name:"large_blue_diamond", kw:["blue","diamond","shape","large"] },
833
+ { char:"๐Ÿ”ธ", name:"small_orange_diamond", kw:["orange","diamond","small","shape"] },
834
+ { char:"๐Ÿ”น", name:"small_blue_diamond", kw:["blue","diamond","small","shape"] },
835
+ { char:"๐Ÿ”บ", name:"red_triangle_up", kw:["triangle","red","up","warning"] },
836
+ { char:"๐Ÿ”ป", name:"red_triangle_down", kw:["triangle","red","down","inverse"] },
837
+ { char:"๐Ÿ’ ", name:"diamond_with_a_dot", kw:["diamond","blue","dot","shape","rhombus"] },
838
+ { char:"๐Ÿ”ท", name:"blue_diamond_large", kw:["diamond","blue","big","shape"] },
839
+ { char:"๐Ÿ”ต", name:"blue_circle", kw:["blue","circle","dot","bubble"] },
840
+ { char:"๐ŸŸค", name:"brown_circle", kw:["brown","circle","dot","chocolate"] },
841
+ { char:"โšซ", name:"black_circle", kw:["black","circle","dot","empty"] },
842
+ { char:"โšช", name:"white_circle", kw:["white","circle","dot","blank"] },
843
+ { char:"๐ŸŸฃ", name:"purple_circle", kw:["purple","circle","dot","violet"] },
844
+ { char:"๐Ÿ”ด", name:"red_circle", kw:["red","circle","dot","stop","record"] },
845
+ { char:"๐ŸŸ ", name:"orange_circle", kw:["orange","circle","dot","warm"] },
846
+ { char:"๐ŸŸก", name:"yellow_circle", kw:["yellow","circle","dot","sun","happy"] },
847
+ { char:"๐ŸŸข", name:"green_circle", kw:["green","circle","dot","go","online"] },
848
+ { char:"๐Ÿ”ž", name:"no_one_under_eighteen", kw:["adult","18+","prohibited","mature"] },
849
+ { char:"โŒ", name:"cross_mark", kw:["x","cross","no","wrong","error","cancel"] },
850
+ { char:"โญ•", name:"hollow_red_circle", kw:["circle","o","correct","japan","hollow"] },
851
+ { char:"๐Ÿ›‘", name:"stop_sign_symbol", kw:["stop","sign","octagon","red","warning"] },
852
+ { char:"โ›”", name:"no_entry", kw:["no","entry","prohibited","stop","circle"] },
853
+ { char:"๐Ÿ“›", name:"name_badge", kw:["name","badge","tag","id","hello"] },
854
+ { char:"๐Ÿšซ", name:"prohibited", kw:["no","prohibited","banned","circle","forbidden"] },
855
+ { char:"๐Ÿ’ฏ", name:"hundred_points_symbol", kw:["100","perfect","score","all","full"] },
856
+ { char:"๐Ÿ’ข", name:"anger_symbol", kw:["anger","mad","comic","red","symbol"] },
857
+ { char:"โ™จ๏ธ", name:"hot_springs", kw:["hot","spring","steam","onsen","japan"] },
858
+ { char:"๐Ÿšท", name:"no_pedestrians", kw:["no","pedestrian","prohibited","sign","walk"] },
859
+ { char:"๐Ÿ”ž", name:"no_under_18", kw:["adult","prohibited","mature","18+","age"] },
860
+ { char:"๐Ÿ”•", name:"bell_with_slash", kw:["mute","silent","no_bell","off","quiet"] },
861
+ { char:"๐ŸŽต", name:"musical_note", kw:["music","note","song","tune","melody"] },
862
+ { char:"๐ŸŽถ", name:"musical_notes", kw:["music","notes","song","tune","melody"] },
863
+ { char:"๐ŸŽผ", name:"musical_score_symbol", kw:["music","score","sheet","notes","staff"] },
864
+ { char:"๐Ÿ“ฃ", name:"megaphone", kw:["megaphone","loud","announce","shout","amplify"] },
865
+ { char:"๐Ÿ“ข", name:"loudspeaker", kw:["speaker","loud","announce","broadcast","public"] },
866
+ { char:"๐Ÿ””", name:"bell", kw:["bell","ring","notification","alert","sound"] },
867
+ { char:"๐Ÿ”•", name:"bell_off", kw:["bell","silent","mute","no_sound","quiet"] },
868
+ { char:"๐Ÿ“ฏ", name:"postal_horn", kw:["horn","bugle","post","announce","ancient"] },
869
+ { char:"๐Ÿƒ", name:"joker", kw:["joker","card","wild","clown","playing"] },
870
+ { char:"๐Ÿ€„", name:"mahjong_red_dragon", kw:["mahjong","game","tile","chinese","dragon"] },
871
+ { char:"๐ŸŽด", name:"flower_playing_cards", kw:["cards","flower","hanafuda","japanese","game"] },
872
+ { char:"๐Ÿ”‡", name:"muted_speaker", kw:["mute","speaker","silent","off","quiet"] },
873
+ { char:"๐Ÿ”ˆ", name:"speaker_low_volume", kw:["speaker","low","quiet","audio","sound"] },
874
+ { char:"๐Ÿ”‰", name:"speaker_medium_volume", kw:["speaker","medium","audio","sound","volume"] },
875
+ { char:"๐Ÿ”Š", name:"speaker_high_volume", kw:["speaker","loud","audio","sound","blast"] },
876
+ { char:"๐Ÿ“ก", name:"satellite_antenna", kw:["satellite","antenna","signal","receive","broadcast"] },
877
+ { char:"๐Ÿ”‹", name:"battery", kw:["battery","charge","power","energy","electric"] },
878
+ { char:"๐Ÿชซ", name:"low_battery", kw:["battery","low","empty","dying","drain"] },
879
+ { char:"๐Ÿ”Œ", name:"electric_plug", kw:["plug","electric","power","charge","socket"] },
880
+ { char:"๐Ÿ’ก", name:"light_bulb_symbol", kw:["idea","bulb","light","bright","smart"] },
881
+ { char:"๐Ÿ”ฆ", name:"torch", kw:["flashlight","torch","beam","light","dark"] },
882
+ { char:"๐Ÿ•ฏ๏ธ", name:"candle_symbol", kw:["candle","flame","wax","light","romance"] },
883
+ { char:"๐Ÿงญ", name:"compass", kw:["compass","navigate","direction","north","explore"] },
884
+ { char:"โฐ", name:"alarm_clock", kw:["alarm","clock","wake","morning","ring"] },
885
+ { char:"โŒ›", name:"hourglass_done", kw:["hourglass","time","sand","done","wait"] },
886
+ { char:"โณ", name:"hourglass_not_done", kw:["hourglass","time","sand","loading","wait"] },
887
+ { char:"โŒš", name:"watch_symbol", kw:["watch","time","wrist","clock","hours"] },
888
+ { char:"๐Ÿ•ฐ๏ธ", name:"mantelpiece_clock", kw:["clock","mantle","old","time","antique"] },
889
+ { char:"๐ŸŒ", name:"globe_with_meridians", kw:["globe","world","internet","web","global"] },
890
+ { char:"๐Ÿ—บ๏ธ", name:"world_map", kw:["map","world","globe","geography","travel"] },
891
+ { char:"๐Ÿงฟ", name:"nazar_amulet", kw:["evil_eye","nazar","protection","amulet","bead","blue"] },
892
+ { char:"๐Ÿชฌ", name:"hamsa", kw:["hamsa","hand","protection","evil_eye","amulet"] },
893
+ { char:"โ™ ๏ธ", name:"spade_suit", kw:["spade","card","suit","black","poker"] },
894
+ { char:"โ™ฃ๏ธ", name:"club_suit", kw:["club","card","suit","black","poker"] },
895
+ { char:"โ™ฅ๏ธ", name:"heart_suit", kw:["heart","card","suit","red","poker"] },
896
+ { char:"โ™ฆ๏ธ", name:"diamond_suit", kw:["diamond","card","suit","red","poker"] },
897
+ { char:"๐Ÿƒ", name:"playing_card_joker", kw:["joker","card","wild","clown","poker"] },
898
+ { char:"โ™Ÿ๏ธ", name:"chess_piece", kw:["chess","pawn","game","strategy","board"] },
899
+ { char:"๐ŸŽฐ", name:"slot_machine", kw:["slots","casino","jackpot","luck","gamble"] }
900
+ ],
901
+ "Flags": [
902
+ { char:"๐Ÿณ๏ธ", name:"white_flag", kw:["white","flag","surrender","peace","blank"] },
903
+ { char:"๐Ÿด", name:"black_flag", kw:["black","flag","pirate","surrender","dark"] },
904
+ { char:"๐Ÿ", name:"chequered_flag", kw:["race","finish","flag","chequered","checkered","win"] },
905
+ { char:"๐Ÿšฉ", name:"triangular_flag", kw:["red","flag","warning","alert","triangle"] },
906
+ { char:"๐Ÿดโ€โ˜ ๏ธ", name:"pirate_flag", kw:["pirate","skull","flag","jolly_roger","crossbones"] },
907
+ { char:"๐Ÿณ๏ธโ€๐ŸŒˆ", name:"rainbow_flag", kw:["pride","rainbow","lgbt","gay","equality","flag"] },
908
+ { char:"๐Ÿณ๏ธโ€โšง๏ธ", name:"transgender_flag", kw:["transgender","pride","flag","trans","equality"] },
909
+ { char:"๐Ÿ‡บ๐Ÿ‡ธ", name:"flag_united_states", kw:["usa","america","flag","stars","stripes"] },
910
+ { char:"๐Ÿ‡ฌ๐Ÿ‡ง", name:"flag_united_kingdom", kw:["uk","britain","england","flag","union_jack"] },
911
+ { char:"๐Ÿ‡จ๐Ÿ‡ฆ", name:"flag_canada", kw:["canada","maple","flag","red","white"] },
912
+ { char:"๐Ÿ‡ฆ๐Ÿ‡บ", name:"flag_australia", kw:["australia","flag","southern_cross","down_under"] },
913
+ { char:"๐Ÿ‡ฉ๐Ÿ‡ช", name:"flag_germany", kw:["germany","deutschland","flag","black_red_gold"] },
914
+ { char:"๐Ÿ‡ซ๐Ÿ‡ท", name:"flag_france", kw:["france","french","flag","tricolore","blue_white_red"] },
915
+ { char:"๐Ÿ‡ฏ๐Ÿ‡ต", name:"flag_japan", kw:["japan","japanese","flag","red_circle","rising_sun"] },
916
+ { char:"๐Ÿ‡จ๐Ÿ‡ณ", name:"flag_china", kw:["china","chinese","flag","red_star","prc"] },
917
+ { char:"๐Ÿ‡ง๐Ÿ‡ท", name:"flag_brazil", kw:["brazil","brasil","flag","green_yellow","samba"] },
918
+ { char:"๐Ÿ‡ฎ๐Ÿ‡ณ", name:"flag_india", kw:["india","indian","flag","tricolor","chakra"] },
919
+ { char:"๐Ÿ‡ฎ๐Ÿ‡น", name:"flag_italy", kw:["italy","italian","flag","green_white_red","boot"] },
920
+ { char:"๐Ÿ‡ช๐Ÿ‡ธ", name:"flag_spain", kw:["spain","spanish","flag","red_yellow","bull"] },
921
+ { char:"๐Ÿ‡ฒ๐Ÿ‡ฝ", name:"flag_mexico", kw:["mexico","mexican","flag","eagle","green_white_red"] },
922
+ { char:"๐Ÿ‡ท๐Ÿ‡บ", name:"flag_russia", kw:["russia","russian","flag","tricolor","bear"] },
923
+ { char:"๐Ÿ‡ฐ๐Ÿ‡ท", name:"flag_south_korea", kw:["korea","korean","flag","taegukgi","kpop"] },
924
+ { char:"๐Ÿ‡ฟ๐Ÿ‡ฆ", name:"flag_south_africa", kw:["south_africa","flag","rainbow","mandela","colorful"] },
925
+ { char:"๐Ÿ‡ณ๐Ÿ‡ฌ", name:"flag_nigeria", kw:["nigeria","nigerian","flag","green_white","africa"] },
926
+ { char:"๐Ÿ‡ฆ๐Ÿ‡ท", name:"flag_argentina", kw:["argentina","argentinian","flag","blue_white","sun"] },
927
+ { char:"๐Ÿ‡ต๐Ÿ‡น", name:"flag_portugal", kw:["portugal","portuguese","flag","green_red","armillary"] },
928
+ { char:"๐Ÿ‡ฌ๐Ÿ‡ท", name:"flag_greece", kw:["greece","greek","flag","blue_white","cross","sea"] },
929
+ { char:"๐Ÿ‡ธ๐Ÿ‡ช", name:"flag_sweden", kw:["sweden","swedish","flag","blue_yellow","nordic"] },
930
+ { char:"๐Ÿ‡ณ๐Ÿ‡ด", name:"flag_norway", kw:["norway","norwegian","flag","blue_red_white","nordic"] },
931
+ { char:"๐Ÿ‡ฎ๐Ÿ‡ช", name:"flag_ireland", kw:["ireland","irish","flag","green_white_orange","shamrock"] },
932
+ { char:"๐Ÿ‡จ๐Ÿ‡ญ", name:"flag_switzerland", kw:["switzerland","swiss","flag","red_white","cross","neutral"] },
933
+ { char:"๐Ÿ‡ณ๐Ÿ‡ฑ", name:"flag_netherlands", kw:["netherlands","dutch","flag","red_white_blue","orange"] },
934
+ { char:"๐Ÿ‡ง๐Ÿ‡ช", name:"flag_belgium", kw:["belgium","belgian","flag","black_yellow_red","chocolate"] },
935
+ { char:"๐Ÿ‡ฆ๐Ÿ‡น", name:"flag_austria", kw:["austria","austrian","flag","red_white_red","mountains"] },
936
+ { char:"๐Ÿ‡ต๐Ÿ‡ฑ", name:"flag_poland", kw:["poland","polish","flag","white_red","eagle"] },
937
+ { char:"๐Ÿ‡บ๐Ÿ‡ฆ", name:"flag_ukraine", kw:["ukraine","ukrainian","flag","blue_yellow","sunflower","peace"] },
938
+ { char:"๐Ÿ‡น๐Ÿ‡ท", name:"flag_turkey", kw:["turkey","turkish","flag","red","crescent","star"] },
939
+ { char:"๐Ÿ‡ธ๐Ÿ‡ฆ", name:"flag_saudi_arabia", kw:["saudi","arabia","flag","green","sword","shahada"] },
940
+ { char:"๐Ÿ‡ฎ๐Ÿ‡ฑ", name:"flag_israel", kw:["israel","flag","blue_white","star_of_david","magen"] },
941
+ { char:"๐Ÿ‡ช๐Ÿ‡ฌ", name:"flag_egypt", kw:["egypt","egyptian","flag","red_white_black","eagle","pharaoh"] },
942
+ { char:"๐Ÿ‡ต๐Ÿ‡ญ", name:"flag_philippines", kw:["philippines","filipino","flag","blue_red_white","sun","stars"] },
943
+ { char:"๐Ÿ‡ป๐Ÿ‡ณ", name:"flag_vietnam", kw:["vietnam","vietnamese","flag","red_star","pho"] },
944
+ { char:"๐Ÿ‡ฎ๐Ÿ‡ฉ", name:"flag_indonesia", kw:["indonesia","indonesian","flag","red_white","bendera"] },
945
+ { char:"๐Ÿ‡ฒ๐Ÿ‡พ", name:"flag_malaysia", kw:["malaysia","malaysian","flag","red_white","moon","star"] },
946
+ { char:"๐Ÿ‡น๐Ÿ‡ญ", name:"flag_thailand", kw:["thailand","thai","flag","red_white_blue","elephant"] },
947
+ { char:"๐Ÿ‡ต๐Ÿ‡ฐ", name:"flag_pakistan", kw:["pakistan","pakistani","flag","green_white","crescent","star"] },
948
+ { char:"๐Ÿ‡ง๐Ÿ‡ฉ", name:"flag_bangladesh", kw:["bangladesh","bangladeshi","flag","green_red_circle"] },
949
+ { char:"๐Ÿ‡ช๐Ÿ‡น", name:"flag_ethiopia", kw:["ethiopia","ethiopian","flag","green_yellow_red","star"] },
950
+ { char:"๐Ÿ‡จ๐Ÿ‡ด", name:"flag_colombia", kw:["colombia","colombian","flag","yellow_blue_red","coffee"] },
951
+ { char:"๐Ÿ‡จ๐Ÿ‡ฑ", name:"flag_chile", kw:["chile","chilean","flag","red_white_blue","star"] },
952
+ { char:"๐Ÿ‡ต๐Ÿ‡ช", name:"flag_peru", kw:["peru","peruvian","flag","red_white","machu_picchu"] }
953
+ ]
954
+ };
955
+
956
+ /* Flatten for search */
957
+ const FLAT_EMOJIS = [];
958
+ for (const [category, emojis] of Object.entries(EMOJI_DATA)) {
959
+ for (const e of emojis) {
960
+ FLAT_EMOJIS.push({ ...e, category });
961
+ }
962
+ }
963
+
964
+ /* Skin tone modifier map */
965
+ const SKIN_TONES = [
966
+ { name: 'default', modifier: '', label: '๐Ÿ–๏ธ' },
967
+ { name: 'light', modifier: '\u{1F3FB}', label: '๐Ÿ–๐Ÿป' },
968
+ { name: 'medium-light', modifier: '\u{1F3FC}', label: '๐Ÿ–๐Ÿผ' },
969
+ { name: 'medium', modifier: '\u{1F3FD}', label: '๐Ÿ–๐Ÿฝ' },
970
+ { name: 'medium-dark', modifier: '\u{1F3FE}', label: '๐Ÿ–๐Ÿพ' },
971
+ { name: 'dark', modifier: '\u{1F3FF}', label: '๐Ÿ–๐Ÿฟ' }
972
+ ];
973
+
974
+ /* =======================
975
+ EVENT EMITTER
976
+ ======================= */
977
+ class EventEmitter {
978
+ constructor() { this._events = {}; }
979
+ on(event, handler) {
980
+ (this._events[event] = this._events[event] || []).push(handler);
981
+ return this;
982
+ }
983
+ off(event, handler) {
984
+ if (this._events[event]) this._events[event] = this._events[event].filter(h => h !== handler);
985
+ return this;
986
+ }
987
+ emit(event, ...args) {
988
+ (this._events[event] || []).forEach(h => h(...args));
989
+ return this;
990
+ }
991
+ }
992
+
993
+ /* =======================
994
+ EMOJI PICKER CLASS
995
+ ======================= */
996
+ class EmojiPicker extends EventEmitter {
997
+
998
+ static _instances = [];
999
+ static _defaultOptions = {
1000
+ theme: 'auto',
1001
+ mode: 'dropdown',
1002
+ search: true,
1003
+ recentEmojis: true,
1004
+ maxRecent: 24,
1005
+ skinTone: 'default',
1006
+ customEmojis: [],
1007
+ container: null,
1008
+ locale: 'en',
1009
+ perRow: 8,
1010
+ emojiSize: 28,
1011
+ showVariants: true,
1012
+ autoClose: true,
1013
+ };
1014
+
1015
+ constructor(opts = {}) {
1016
+ super();
1017
+ this.options = { ...EmojiPicker._defaultOptions, ...opts };
1018
+ this._open = false;
1019
+ this._currentCategory = 'recent';
1020
+ this._searchQuery = '';
1021
+ this._currentSkinTone = SKIN_TONES.find(s => s.name === this.options.skinTone) || SKIN_TONES[0];
1022
+ this._triggerEl = null;
1023
+ this._pickerEl = null;
1024
+ this._focusedIndex = -1;
1025
+ this._init();
1026
+ EmojiPicker._instances.push(this);
1027
+ }
1028
+
1029
+ /* ---- Internal Init ---- */
1030
+ _init() {
1031
+ if (this.options.container) {
1032
+ const el = typeof this.options.container === 'string'
1033
+ ? document.querySelector(this.options.container)
1034
+ : this.options.container;
1035
+ if (el) {
1036
+ this._triggerEl = el;
1037
+ el.addEventListener('click', (e) => { e.stopPropagation(); this.toggle(); });
1038
+ }
1039
+ }
1040
+
1041
+ // Global click to close dropdown
1042
+ document.addEventListener('click', (e) => {
1043
+ if (this._open && this._pickerEl && !this._pickerEl.contains(e.target)) {
1044
+ if (!this._triggerEl || !this._triggerEl.contains(e.target)) this.close();
1045
+ }
1046
+ });
1047
+
1048
+ // Keyboard
1049
+ document.addEventListener('keydown', (e) => {
1050
+ if (!this._open) return;
1051
+ if (e.key === 'Escape') { this.close(); return; }
1052
+ });
1053
+
1054
+ if (this.options.mode === 'inline') {
1055
+ this._renderPicker();
1056
+ this._open = true;
1057
+ }
1058
+ }
1059
+
1060
+ /* ---- Render Picker ---- */
1061
+ _renderPicker() {
1062
+ if (this._pickerEl) this._pickerEl.remove();
1063
+
1064
+ const isDark = this.options.theme === 'dark' ||
1065
+ (this.options.theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);
1066
+
1067
+ const el = document.createElement('div');
1068
+ el.className = 'ep-picker' + (isDark ? ' ep-dark' : ' ep-light');
1069
+ el.setAttribute('role', 'dialog');
1070
+ el.setAttribute('aria-label', 'Emoji Picker');
1071
+ el.addEventListener('click', e => e.stopPropagation());
1072
+
1073
+ if (this.options.mode === 'inline') {
1074
+ el.classList.add('ep-inline');
1075
+ const container = typeof this.options.container === 'string'
1076
+ ? document.querySelector(this.options.container)
1077
+ : this.options.container;
1078
+ if (container) { container.appendChild(el); }
1079
+ else { document.body.appendChild(el); }
1080
+ } else {
1081
+ el.classList.add('ep-floating');
1082
+ document.body.appendChild(el);
1083
+ }
1084
+
1085
+ el.innerHTML = this._buildPickerHTML();
1086
+ this._pickerEl = el;
1087
+ this._attachPickerEvents();
1088
+ this._loadCategory(this._currentCategory);
1089
+ this._positionPicker();
1090
+ }
1091
+
1092
+ _buildPickerHTML() {
1093
+ const categories = ['recent', ...Object.keys(EMOJI_DATA)];
1094
+ const catIcons = {
1095
+ recent: '๐Ÿ•', 'Smileys & Emotion': '๐Ÿ˜Š', 'People & Body': '๐Ÿ‘‹',
1096
+ 'Animals & Nature': '๐Ÿถ', 'Food & Drink': '๐Ÿ•', 'Activities': 'โšฝ',
1097
+ 'Travel & Places': 'โœˆ๏ธ', 'Objects': '๐Ÿ’ก', 'Symbols': 'โค๏ธ', 'Flags': '๐Ÿณ๏ธ'
1098
+ };
1099
+
1100
+ const hasCustom = this.options.customEmojis && this.options.customEmojis.length;
1101
+ if (hasCustom) categories.push('custom');
1102
+
1103
+ const catTabs = categories.map((cat, i) => `
1104
+ <button class="ep-cat-tab ${i === 0 ? 'ep-active' : ''}"
1105
+ data-category="${cat}"
1106
+ aria-label="${cat}"
1107
+ title="${cat}"
1108
+ tabindex="0">
1109
+ ${catIcons[cat] || 'โœจ'}
1110
+ </button>
1111
+ `).join('');
1112
+
1113
+ const skinToneBtns = SKIN_TONES.map(t => `
1114
+ <button class="ep-skin-btn ${t.name === this._currentSkinTone.name ? 'ep-active' : ''}"
1115
+ data-skin="${t.name}" title="${t.name}" aria-label="Skin tone: ${t.name}">
1116
+ <span style="font-size:16px">${t.label}</span>
1117
+ </button>
1118
+ `).join('');
1119
+
1120
+ return `
1121
+ <div class="ep-inner">
1122
+ ${this.options.search ? `
1123
+ <div class="ep-search-row">
1124
+ <div class="ep-search-wrap">
1125
+ <svg class="ep-search-icon" viewBox="0 0 20 20" fill="none">
1126
+ <circle cx="9" cy="9" r="6" stroke="currentColor" stroke-width="1.5"/>
1127
+ <path d="M14 14l3 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
1128
+ </svg>
1129
+ <input type="text" class="ep-search" placeholder="Search emoji..."
1130
+ aria-label="Search emoji" autocomplete="off" spellcheck="false">
1131
+ <button class="ep-search-clear" aria-label="Clear search" style="display:none">โœ•</button>
1132
+ </div>
1133
+ </div>
1134
+ ` : ''}
1135
+ <div class="ep-cats" role="tablist" aria-label="Emoji categories">${catTabs}</div>
1136
+ <div class="ep-category-label"></div>
1137
+ <div class="ep-grid-wrap">
1138
+ <div class="ep-grid" role="grid" aria-label="Emoji grid"></div>
1139
+ </div>
1140
+ <div class="ep-footer">
1141
+ <div class="ep-skin-tones" aria-label="Select skin tone">
1142
+ ${skinToneBtns}
1143
+ </div>
1144
+ <div class="ep-preview" aria-live="polite">
1145
+ <span class="ep-preview-char"></span>
1146
+ <span class="ep-preview-name"></span>
1147
+ </div>
1148
+ </div>
1149
+ </div>
1150
+ `;
1151
+ }
1152
+
1153
+ _attachPickerEvents() {
1154
+ const el = this._pickerEl;
1155
+
1156
+ // Search
1157
+ if (this.options.search) {
1158
+ const searchInput = el.querySelector('.ep-search');
1159
+ const clearBtn = el.querySelector('.ep-search-clear');
1160
+ if (searchInput) {
1161
+ searchInput.addEventListener('input', (e) => {
1162
+ this._searchQuery = e.target.value.trim();
1163
+ if (clearBtn) clearBtn.style.display = this._searchQuery ? 'flex' : 'none';
1164
+ if (this._searchQuery) {
1165
+ this._loadSearch(this._searchQuery);
1166
+ this.emit('search', { query: this._searchQuery });
1167
+ } else {
1168
+ this._loadCategory(this._currentCategory);
1169
+ }
1170
+ });
1171
+ }
1172
+ if (clearBtn) {
1173
+ clearBtn.addEventListener('click', () => {
1174
+ searchInput.value = '';
1175
+ this._searchQuery = '';
1176
+ clearBtn.style.display = 'none';
1177
+ this._loadCategory(this._currentCategory);
1178
+ searchInput.focus();
1179
+ });
1180
+ }
1181
+ }
1182
+
1183
+ // Category tabs
1184
+ el.querySelectorAll('.ep-cat-tab').forEach(tab => {
1185
+ tab.addEventListener('click', () => {
1186
+ const cat = tab.dataset.category;
1187
+ this._setActiveTab(cat);
1188
+ this._currentCategory = cat;
1189
+ if (this.options.search) {
1190
+ const searchInput = el.querySelector('.ep-search');
1191
+ if (searchInput) searchInput.value = '';
1192
+ const clearBtn = el.querySelector('.ep-search-clear');
1193
+ if (clearBtn) clearBtn.style.display = 'none';
1194
+ this._searchQuery = '';
1195
+ }
1196
+ this._loadCategory(cat);
1197
+ this.emit('categoryChange', { category: cat });
1198
+ });
1199
+ });
1200
+
1201
+ // Skin tones
1202
+ el.querySelectorAll('.ep-skin-btn').forEach(btn => {
1203
+ btn.addEventListener('click', () => {
1204
+ const skinName = btn.dataset.skin;
1205
+ this._currentSkinTone = SKIN_TONES.find(s => s.name === skinName) || SKIN_TONES[0];
1206
+ el.querySelectorAll('.ep-skin-btn').forEach(b => b.classList.remove('ep-active'));
1207
+ btn.classList.add('ep-active');
1208
+ this._loadCategory(this._currentCategory);
1209
+ });
1210
+ });
1211
+
1212
+ // Emoji grid events (delegated)
1213
+ const grid = el.querySelector('.ep-grid');
1214
+ if (grid) {
1215
+ grid.addEventListener('click', (e) => {
1216
+ const cell = e.target.closest('.ep-emoji-btn');
1217
+ if (!cell) return;
1218
+ const emojiData = JSON.parse(cell.dataset.emoji);
1219
+ this._handleEmojiClick(emojiData, e);
1220
+ });
1221
+
1222
+ grid.addEventListener('mouseover', (e) => {
1223
+ const cell = e.target.closest('.ep-emoji-btn');
1224
+ if (!cell) return;
1225
+ const emojiData = JSON.parse(cell.dataset.emoji);
1226
+ const previewChar = el.querySelector('.ep-preview-char');
1227
+ const previewName = el.querySelector('.ep-preview-name');
1228
+ if (previewChar) previewChar.textContent = emojiData.char;
1229
+ if (previewName) previewName.textContent = emojiData.name.replace(/_/g, ' ');
1230
+ this.emit('emojiHover', emojiData, e);
1231
+ });
1232
+
1233
+ grid.addEventListener('mouseout', () => {
1234
+ const previewChar = el.querySelector('.ep-preview-char');
1235
+ const previewName = el.querySelector('.ep-preview-name');
1236
+ if (previewChar) previewChar.textContent = '';
1237
+ if (previewName) previewName.textContent = '';
1238
+ });
1239
+ }
1240
+ }
1241
+
1242
+ _handleEmojiClick(emojiData, event) {
1243
+ this._addToRecent(emojiData);
1244
+ // animate
1245
+ const cell = this._pickerEl && this._pickerEl.querySelector(`[data-emoji='${JSON.stringify(emojiData).replace(/'/g, "\\'")}']`);
1246
+ if (cell) {
1247
+ cell.classList.add('ep-pop');
1248
+ setTimeout(() => cell.classList.remove('ep-pop'), 300);
1249
+ }
1250
+ this.emit('emojiClick', emojiData, event);
1251
+ if (this.options.autoClose && this.options.mode !== 'inline') {
1252
+ this.close();
1253
+ }
1254
+ }
1255
+
1256
+ _loadCategory(cat) {
1257
+ const grid = this._pickerEl && this._pickerEl.querySelector('.ep-grid');
1258
+ const label = this._pickerEl && this._pickerEl.querySelector('.ep-category-label');
1259
+ if (!grid) return;
1260
+
1261
+ let emojis = [];
1262
+ if (cat === 'recent') {
1263
+ emojis = this._getRecentEmojis();
1264
+ if (label) label.textContent = emojis.length ? 'Recently Used' : 'No recent emojis yet';
1265
+ } else if (cat === 'custom') {
1266
+ emojis = (this.options.customEmojis || []).map(c => ({
1267
+ char: null, name: c.name, category: 'custom', unicode: null, isCustom: true, url: c.url
1268
+ }));
1269
+ if (label) label.textContent = 'Custom';
1270
+ } else {
1271
+ emojis = (EMOJI_DATA[cat] || []).map(e => ({
1272
+ ...e, category: cat,
1273
+ char: this._applySkinTone(e)
1274
+ }));
1275
+ if (label) label.textContent = cat;
1276
+ }
1277
+
1278
+ grid.innerHTML = '';
1279
+ if (emojis.length === 0) {
1280
+ grid.innerHTML = '<div class="ep-empty">No emojis found</div>';
1281
+ return;
1282
+ }
1283
+ grid.appendChild(this._buildEmojiFragment(emojis));
1284
+ }
1285
+
1286
+ _loadSearch(query) {
1287
+ const grid = this._pickerEl && this._pickerEl.querySelector('.ep-grid');
1288
+ const label = this._pickerEl && this._pickerEl.querySelector('.ep-category-label');
1289
+ if (!grid) return;
1290
+
1291
+ const q = query.toLowerCase();
1292
+ const results = FLAT_EMOJIS.filter(e =>
1293
+ e.name.toLowerCase().includes(q) ||
1294
+ e.name.replace(/_/g,' ').toLowerCase().includes(q) ||
1295
+ (e.kw && e.kw.some(k => k.toLowerCase().includes(q)))
1296
+ ).slice(0, 60).map(e => ({
1297
+ ...e,
1298
+ char: this._applySkinTone(e)
1299
+ }));
1300
+
1301
+ if (label) label.textContent = `Results for "${query}"`;
1302
+ grid.innerHTML = '';
1303
+ if (!results.length) {
1304
+ grid.innerHTML = `<div class="ep-empty">No results for "${query}"</div>`;
1305
+ return;
1306
+ }
1307
+ grid.appendChild(this._buildEmojiFragment(results));
1308
+ }
1309
+
1310
+ _buildEmojiFragment(emojis) {
1311
+ const frag = document.createDocumentFragment();
1312
+ for (const e of emojis) {
1313
+ const btn = document.createElement('button');
1314
+ btn.className = 'ep-emoji-btn';
1315
+ btn.setAttribute('role', 'gridcell');
1316
+ btn.setAttribute('aria-label', e.name.replace(/_/g,' '));
1317
+ btn.setAttribute('title', e.name.replace(/_/g,' '));
1318
+ const dataObj = {
1319
+ char: e.char,
1320
+ name: e.name,
1321
+ category: e.category,
1322
+ unicode: e.unicode || (e.char ? e.char.codePointAt(0).toString(16).toUpperCase() : null),
1323
+ skinTone: this._currentSkinTone.name === 'default' ? null : this._currentSkinTone.name,
1324
+ isCustom: e.isCustom || false
1325
+ };
1326
+ btn.dataset.emoji = JSON.stringify(dataObj);
1327
+ if (e.isCustom) {
1328
+ const img = document.createElement('img');
1329
+ img.src = e.url;
1330
+ img.alt = e.name;
1331
+ img.style.cssText = 'width:var(--ep-size,28px);height:var(--ep-size,28px);object-fit:contain';
1332
+ btn.appendChild(img);
1333
+ } else {
1334
+ btn.textContent = e.char;
1335
+ }
1336
+ frag.appendChild(btn);
1337
+ }
1338
+ return frag;
1339
+ }
1340
+
1341
+ _applySkinTone(e) {
1342
+ if (!e.skinnable || this._currentSkinTone.name === 'default') return e.char;
1343
+ const modifier = this._currentSkinTone.modifier;
1344
+ // Insert modifier after base emoji (before ZWJ or variation selector if present)
1345
+ const base = e.char;
1346
+ // Handle ZWJ sequences โ€“ just prepend modifier after first codepoint
1347
+ const cp = [...base];
1348
+ if (cp.length > 0) return cp[0] + modifier + cp.slice(1).join('');
1349
+ return base;
1350
+ }
1351
+
1352
+ _setActiveTab(cat) {
1353
+ if (!this._pickerEl) return;
1354
+ this._pickerEl.querySelectorAll('.ep-cat-tab').forEach(t => {
1355
+ t.classList.toggle('ep-active', t.dataset.category === cat);
1356
+ });
1357
+ }
1358
+
1359
+ _positionPicker() {
1360
+ if (!this._pickerEl || this.options.mode === 'inline') return;
1361
+ const el = this._pickerEl;
1362
+
1363
+ if (!this._triggerEl) {
1364
+ el.style.cssText += ';position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)';
1365
+ return;
1366
+ }
1367
+
1368
+ const rect = this._triggerEl.getBoundingClientRect();
1369
+ const ph = el.offsetHeight || 440;
1370
+ const pw = el.offsetWidth || 340;
1371
+ const vw = window.innerWidth, vh = window.innerHeight;
1372
+
1373
+ let top = rect.bottom + 8;
1374
+ let left = rect.left;
1375
+
1376
+ if (top + ph > vh) top = rect.top - ph - 8;
1377
+ if (left + pw > vw) left = vw - pw - 8;
1378
+ if (left < 8) left = 8;
1379
+ if (top < 8) top = 8;
1380
+
1381
+ el.style.cssText += `;position:fixed;top:${top}px;left:${left}px`;
1382
+ }
1383
+
1384
+ /* ---- Recent Emojis ---- */
1385
+ _getRecentEmojis() {
1386
+ if (!this.options.recentEmojis) return [];
1387
+ try {
1388
+ const stored = localStorage.getItem('ep_recent');
1389
+ return stored ? JSON.parse(stored) : [];
1390
+ } catch { return []; }
1391
+ }
1392
+
1393
+ _addToRecent(emojiData) {
1394
+ if (!this.options.recentEmojis || emojiData.isCustom) return;
1395
+ try {
1396
+ let recent = this._getRecentEmojis();
1397
+ recent = [emojiData, ...recent.filter(e => e.name !== emojiData.name)];
1398
+ recent = recent.slice(0, this.options.maxRecent);
1399
+ localStorage.setItem('ep_recent', JSON.stringify(recent));
1400
+ } catch {}
1401
+ }
1402
+
1403
+ /* ---- Public API ---- */
1404
+ open() {
1405
+ if (this._open) return this;
1406
+ this._open = true;
1407
+ if (!this._pickerEl) this._renderPicker();
1408
+ this._pickerEl.classList.add('ep-visible');
1409
+ this._pickerEl.style.display = '';
1410
+ // Load recent or first category
1411
+ if (this._getRecentEmojis().length > 0) {
1412
+ this._currentCategory = 'recent';
1413
+ } else {
1414
+ this._currentCategory = 'Smileys & Emotion';
1415
+ this._setActiveTab(this._currentCategory);
1416
+ }
1417
+ this._loadCategory(this._currentCategory);
1418
+ this._positionPicker();
1419
+ this.emit('pickerOpen');
1420
+ // Focus search if available
1421
+ if (this.options.search) {
1422
+ setTimeout(() => {
1423
+ const s = this._pickerEl && this._pickerEl.querySelector('.ep-search');
1424
+ if (s) s.focus();
1425
+ }, 50);
1426
+ }
1427
+ return this;
1428
+ }
1429
+
1430
+ close() {
1431
+ if (!this._open) return this;
1432
+ this._open = false;
1433
+ if (this._pickerEl) {
1434
+ this._pickerEl.classList.remove('ep-visible');
1435
+ }
1436
+ this.emit('pickerClose');
1437
+ return this;
1438
+ }
1439
+
1440
+ toggle() {
1441
+ return this._open ? this.close() : this.open();
1442
+ }
1443
+
1444
+ destroy() {
1445
+ if (this._pickerEl) { this._pickerEl.remove(); this._pickerEl = null; }
1446
+ this._events = {};
1447
+ const idx = EmojiPicker._instances.indexOf(this);
1448
+ if (idx > -1) EmojiPicker._instances.splice(idx, 1);
1449
+ }
1450
+
1451
+ setTheme(theme) {
1452
+ this.options.theme = theme;
1453
+ if (this._pickerEl) {
1454
+ this._pickerEl.classList.remove('ep-dark', 'ep-light');
1455
+ const isDark = theme === 'dark' || (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);
1456
+ this._pickerEl.classList.add(isDark ? 'ep-dark' : 'ep-light');
1457
+ }
1458
+ return this;
1459
+ }
1460
+
1461
+ /* ---- Static Helper ---- */
1462
+ static attachToInput(selector, opts = {}) {
1463
+ const input = typeof selector === 'string' ? document.querySelector(selector) : selector;
1464
+ if (!input) return null;
1465
+ const wrapper = document.createElement('span');
1466
+ wrapper.style.cssText = 'position:relative;display:inline-flex;align-items:center';
1467
+ input.parentNode.insertBefore(wrapper, input);
1468
+ wrapper.appendChild(input);
1469
+
1470
+ const triggerBtn = document.createElement('button');
1471
+ triggerBtn.textContent = '๐Ÿ˜Š';
1472
+ triggerBtn.style.cssText = 'background:none;border:none;cursor:pointer;font-size:22px;padding:4px;line-height:1;border-radius:6px;transition:transform 0.15s;';
1473
+ triggerBtn.onmouseenter = () => triggerBtn.style.transform = 'scale(1.2)';
1474
+ triggerBtn.onmouseleave = () => triggerBtn.style.transform = 'scale(1)';
1475
+ wrapper.appendChild(triggerBtn);
1476
+
1477
+ const picker = new EmojiPicker({ container: triggerBtn, mode: 'dropdown', ...opts });
1478
+ picker.on('emojiClick', (emoji) => {
1479
+ const pos = input.selectionStart || input.value.length;
1480
+ const before = input.value.substring(0, pos);
1481
+ const after = input.value.substring(input.selectionEnd || pos);
1482
+ input.value = before + emoji.char + after;
1483
+ const newPos = pos + emoji.char.length;
1484
+ input.setSelectionRange(newPos, newPos);
1485
+ input.focus();
1486
+ input.dispatchEvent(new Event('input', { bubbles: true }));
1487
+ });
1488
+ return picker;
1489
+ }
1490
+ }
1491
+
1492
+ /* =======================
1493
+ PICKER STYLES
1494
+ ======================= */
1495
+ const STYLES = `
1496
+ .ep-picker {
1497
+ --ep-bg: #1a1d2e;
1498
+ --ep-surface: #21253a;
1499
+ --ep-surface2: #2a2f47;
1500
+ --ep-border: rgba(255,255,255,0.08);
1501
+ --ep-text: #e4e7f3;
1502
+ --ep-text-dim: #6b738f;
1503
+ --ep-accent: #6c63ff;
1504
+ --ep-accent-glow: rgba(108,99,255,0.2);
1505
+ --ep-hover: rgba(108,99,255,0.12);
1506
+ --ep-active-tab: rgba(108,99,255,0.2);
1507
+ --ep-size: 28px;
1508
+ --ep-radius: 16px;
1509
+ --ep-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.06);
1510
+ --ep-search-bg: rgba(255,255,255,0.05);
1511
+ }
1512
+ .ep-picker.ep-light {
1513
+ --ep-bg: #ffffff;
1514
+ --ep-surface: #f5f6fa;
1515
+ --ep-surface2: #edeef5;
1516
+ --ep-border: rgba(0,0,0,0.08);
1517
+ --ep-text: #1a1d2e;
1518
+ --ep-text-dim: #8891ab;
1519
+ --ep-accent: #5b52f0;
1520
+ --ep-accent-glow: rgba(91,82,240,0.15);
1521
+ --ep-hover: rgba(91,82,240,0.08);
1522
+ --ep-active-tab: rgba(91,82,240,0.12);
1523
+ --ep-search-bg: rgba(0,0,0,0.04);
1524
+ --ep-shadow: 0 20px 60px rgba(0,0,0,0.15), 0 0 0 1px rgba(0,0,0,0.06);
1525
+ }
1526
+ .ep-picker.ep-floating {
1527
+ position: fixed;
1528
+ z-index: 99999;
1529
+ width: 350px;
1530
+ display: none;
1531
+ opacity: 0;
1532
+ transform: translateY(6px) scale(0.97);
1533
+ transition: opacity 0.18s, transform 0.18s;
1534
+ will-change: transform, opacity;
1535
+ }
1536
+ .ep-picker.ep-floating.ep-visible {
1537
+ display: block;
1538
+ opacity: 1;
1539
+ transform: translateY(0) scale(1);
1540
+ }
1541
+ .ep-picker.ep-inline {
1542
+ position: relative;
1543
+ width: 100%;
1544
+ }
1545
+ .ep-inner {
1546
+ background: var(--ep-bg);
1547
+ border-radius: var(--ep-radius);
1548
+ box-shadow: var(--ep-shadow);
1549
+ border: 1px solid var(--ep-border);
1550
+ overflow: hidden;
1551
+ display: flex;
1552
+ flex-direction: column;
1553
+ }
1554
+ .ep-search-row {
1555
+ padding: 12px 12px 8px;
1556
+ }
1557
+ .ep-search-wrap {
1558
+ position: relative;
1559
+ display: flex;
1560
+ align-items: center;
1561
+ }
1562
+ .ep-search-icon {
1563
+ position: absolute;
1564
+ left: 10px;
1565
+ width: 15px;
1566
+ height: 15px;
1567
+ color: var(--ep-text-dim);
1568
+ pointer-events: none;
1569
+ }
1570
+ .ep-search {
1571
+ width: 100%;
1572
+ background: var(--ep-search-bg);
1573
+ border: 1px solid var(--ep-border);
1574
+ border-radius: 10px;
1575
+ color: var(--ep-text);
1576
+ font-size: 13px;
1577
+ font-family: inherit;
1578
+ padding: 8px 32px 8px 32px;
1579
+ outline: none;
1580
+ transition: border-color 0.15s, background 0.15s;
1581
+ }
1582
+ .ep-search:focus {
1583
+ border-color: var(--ep-accent);
1584
+ background: var(--ep-hover);
1585
+ }
1586
+ .ep-search::placeholder { color: var(--ep-text-dim); }
1587
+ .ep-search-clear {
1588
+ position: absolute;
1589
+ right: 8px;
1590
+ background: none;
1591
+ border: none;
1592
+ color: var(--ep-text-dim);
1593
+ cursor: pointer;
1594
+ font-size: 12px;
1595
+ padding: 2px 5px;
1596
+ border-radius: 4px;
1597
+ display: flex;
1598
+ align-items: center;
1599
+ transition: color 0.15s;
1600
+ }
1601
+ .ep-search-clear:hover { color: var(--ep-text); }
1602
+
1603
+ .ep-cats {
1604
+ display: flex;
1605
+ padding: 0 8px;
1606
+ gap: 2px;
1607
+ border-bottom: 1px solid var(--ep-border);
1608
+ overflow-x: auto;
1609
+ scrollbar-width: none;
1610
+ }
1611
+ .ep-cats::-webkit-scrollbar { display: none; }
1612
+ .ep-cat-tab {
1613
+ flex: none;
1614
+ background: none;
1615
+ border: none;
1616
+ cursor: pointer;
1617
+ font-size: 18px;
1618
+ padding: 8px 9px;
1619
+ border-radius: 8px;
1620
+ transition: background 0.12s, transform 0.1s;
1621
+ line-height: 1;
1622
+ position: relative;
1623
+ outline: none;
1624
+ }
1625
+ .ep-cat-tab:hover { background: var(--ep-hover); transform: scale(1.1); }
1626
+ .ep-cat-tab.ep-active {
1627
+ background: var(--ep-active-tab);
1628
+ }
1629
+ .ep-cat-tab.ep-active::after {
1630
+ content: '';
1631
+ position: absolute;
1632
+ bottom: 2px; left: 50%;
1633
+ transform: translateX(-50%);
1634
+ width: 4px; height: 4px;
1635
+ border-radius: 2px;
1636
+ background: var(--ep-accent);
1637
+ }
1638
+
1639
+ .ep-category-label {
1640
+ font-size: 10.5px;
1641
+ font-weight: 600;
1642
+ letter-spacing: 0.06em;
1643
+ text-transform: uppercase;
1644
+ color: var(--ep-text-dim);
1645
+ padding: 8px 14px 4px;
1646
+ }
1647
+
1648
+ .ep-grid-wrap {
1649
+ height: 260px;
1650
+ overflow-y: auto;
1651
+ padding: 4px 8px 8px;
1652
+ scrollbar-width: thin;
1653
+ scrollbar-color: var(--ep-border) transparent;
1654
+ }
1655
+ .ep-grid-wrap::-webkit-scrollbar { width: 4px; }
1656
+ .ep-grid-wrap::-webkit-scrollbar-thumb {
1657
+ background: var(--ep-border);
1658
+ border-radius: 2px;
1659
+ }
1660
+ .ep-grid {
1661
+ display: grid;
1662
+ grid-template-columns: repeat(8, 1fr);
1663
+ gap: 2px;
1664
+ }
1665
+ .ep-emoji-btn {
1666
+ background: none;
1667
+ border: none;
1668
+ cursor: pointer;
1669
+ font-size: var(--ep-size);
1670
+ line-height: 1;
1671
+ padding: 5px;
1672
+ border-radius: 8px;
1673
+ transition: background 0.1s, transform 0.1s;
1674
+ display: flex;
1675
+ align-items: center;
1676
+ justify-content: center;
1677
+ user-select: none;
1678
+ outline: none;
1679
+ aspect-ratio: 1;
1680
+ }
1681
+ .ep-emoji-btn:hover {
1682
+ background: var(--ep-hover);
1683
+ transform: scale(1.2);
1684
+ }
1685
+ .ep-emoji-btn:active { transform: scale(0.9); }
1686
+ .ep-emoji-btn.ep-pop {
1687
+ animation: ep-pop 0.25s ease;
1688
+ }
1689
+ @keyframes ep-pop {
1690
+ 0% { transform: scale(1); }
1691
+ 40% { transform: scale(1.4); }
1692
+ 70% { transform: scale(0.85); }
1693
+ 100% { transform: scale(1); }
1694
+ }
1695
+ .ep-empty {
1696
+ grid-column: 1 / -1;
1697
+ padding: 30px 12px;
1698
+ text-align: center;
1699
+ color: var(--ep-text-dim);
1700
+ font-size: 13px;
1701
+ }
1702
+
1703
+ .ep-footer {
1704
+ border-top: 1px solid var(--ep-border);
1705
+ padding: 8px 10px;
1706
+ display: flex;
1707
+ align-items: center;
1708
+ justify-content: space-between;
1709
+ gap: 8px;
1710
+ }
1711
+ .ep-skin-tones {
1712
+ display: flex;
1713
+ gap: 4px;
1714
+ }
1715
+ .ep-skin-btn {
1716
+ background: none;
1717
+ border: 2px solid transparent;
1718
+ cursor: pointer;
1719
+ padding: 2px;
1720
+ border-radius: 50%;
1721
+ line-height: 1;
1722
+ transition: border-color 0.12s, transform 0.1s;
1723
+ outline: none;
1724
+ }
1725
+ .ep-skin-btn:hover { transform: scale(1.15); border-color: var(--ep-border); }
1726
+ .ep-skin-btn.ep-active { border-color: var(--ep-accent); }
1727
+ .ep-preview {
1728
+ display: flex;
1729
+ align-items: center;
1730
+ gap: 6px;
1731
+ flex: 1;
1732
+ justify-content: flex-end;
1733
+ min-height: 24px;
1734
+ }
1735
+ .ep-preview-char {
1736
+ font-size: 22px;
1737
+ line-height: 1;
1738
+ }
1739
+ .ep-preview-name {
1740
+ font-size: 11px;
1741
+ color: var(--ep-text-dim);
1742
+ max-width: 140px;
1743
+ overflow: hidden;
1744
+ text-overflow: ellipsis;
1745
+ white-space: nowrap;
1746
+ text-align: right;
1747
+ }
1748
+ `;
1749
+
1750
+ const styleEl = document.createElement('style');
1751
+ styleEl.textContent = STYLES;
1752
+ document.head.appendChild(styleEl);
1753
+
1754
+ return EmojiPicker;
1755
+ }));