@domternal/extension-emoji 0.2.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.
- package/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/index.cjs +1123 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +211 -0
- package/dist/index.d.ts +211 -0
- package/dist/index.js +1112 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,1112 @@
|
|
|
1
|
+
import { Node, positionFloatingOnce } from '@domternal/core';
|
|
2
|
+
import { InputRule } from '@domternal/pm/inputrules';
|
|
3
|
+
import { PluginKey, Plugin } from '@domternal/pm/state';
|
|
4
|
+
|
|
5
|
+
// src/Emoji.ts
|
|
6
|
+
|
|
7
|
+
// src/emojis.ts
|
|
8
|
+
var emojis = [
|
|
9
|
+
// === Smileys & Emotion ===
|
|
10
|
+
{ emoji: "\u{1F600}", name: "grinning_face", shortcodes: ["grinning"], tags: ["happy", "smile"], group: "Smileys & Emotion" },
|
|
11
|
+
{ emoji: "\u{1F603}", name: "grinning_face_with_big_eyes", shortcodes: ["smiley"], tags: ["happy", "joy"], group: "Smileys & Emotion" },
|
|
12
|
+
{ emoji: "\u{1F604}", name: "grinning_face_with_smiling_eyes", shortcodes: ["smile"], tags: ["happy", "joy"], group: "Smileys & Emotion" },
|
|
13
|
+
{ emoji: "\u{1F601}", name: "beaming_face_with_smiling_eyes", shortcodes: ["grin"], tags: ["happy", "smile"], group: "Smileys & Emotion" },
|
|
14
|
+
{ emoji: "\u{1F606}", name: "grinning_squinting_face", shortcodes: ["laughing", "satisfied"], tags: ["happy", "laugh"], group: "Smileys & Emotion" },
|
|
15
|
+
{ emoji: "\u{1F605}", name: "grinning_face_with_sweat", shortcodes: ["sweat_smile"], tags: ["hot", "relief"], group: "Smileys & Emotion" },
|
|
16
|
+
{ emoji: "\u{1F923}", name: "rolling_on_the_floor_laughing", shortcodes: ["rofl"], tags: ["lol", "laugh"], group: "Smileys & Emotion" },
|
|
17
|
+
{ emoji: "\u{1F602}", name: "face_with_tears_of_joy", shortcodes: ["joy"], tags: ["laugh", "cry"], group: "Smileys & Emotion" },
|
|
18
|
+
{ emoji: "\u{1F642}", name: "slightly_smiling_face", shortcodes: ["slightly_smiling_face"], tags: ["smile"], group: "Smileys & Emotion" },
|
|
19
|
+
{ emoji: "\u{1F609}", name: "winking_face", shortcodes: ["wink"], tags: ["flirt"], group: "Smileys & Emotion" },
|
|
20
|
+
{ emoji: "\u{1F60A}", name: "smiling_face_with_smiling_eyes", shortcodes: ["blush"], tags: ["proud", "shy"], group: "Smileys & Emotion" },
|
|
21
|
+
{ emoji: "\u{1F607}", name: "smiling_face_with_halo", shortcodes: ["innocent"], tags: ["angel"], group: "Smileys & Emotion" },
|
|
22
|
+
{ emoji: "\u{1F970}", name: "smiling_face_with_hearts", shortcodes: ["smiling_face_with_three_hearts"], tags: ["love", "adore"], group: "Smileys & Emotion" },
|
|
23
|
+
{ emoji: "\u{1F60D}", name: "smiling_face_with_heart_eyes", shortcodes: ["heart_eyes"], tags: ["love", "crush"], group: "Smileys & Emotion" },
|
|
24
|
+
{ emoji: "\u{1F929}", name: "star_struck", shortcodes: ["star_struck"], tags: ["eyes", "amazing"], group: "Smileys & Emotion" },
|
|
25
|
+
{ emoji: "\u{1F618}", name: "face_blowing_a_kiss", shortcodes: ["kissing_heart"], tags: ["love", "kiss"], group: "Smileys & Emotion" },
|
|
26
|
+
{ emoji: "\u{1F617}", name: "kissing_face", shortcodes: ["kissing"], tags: ["kiss"], group: "Smileys & Emotion" },
|
|
27
|
+
{ emoji: "\u{1F61A}", name: "kissing_face_with_closed_eyes", shortcodes: ["kissing_closed_eyes"], tags: ["kiss"], group: "Smileys & Emotion" },
|
|
28
|
+
{ emoji: "\u{1F60B}", name: "face_savoring_food", shortcodes: ["yum"], tags: ["delicious", "tongue"], group: "Smileys & Emotion" },
|
|
29
|
+
{ emoji: "\u{1F61B}", name: "face_with_tongue", shortcodes: ["stuck_out_tongue"], tags: ["playful"], group: "Smileys & Emotion" },
|
|
30
|
+
{ emoji: "\u{1F61C}", name: "winking_face_with_tongue", shortcodes: ["stuck_out_tongue_winking_eye"], tags: ["playful", "kidding"], group: "Smileys & Emotion" },
|
|
31
|
+
{ emoji: "\u{1F92A}", name: "zany_face", shortcodes: ["zany_face"], tags: ["crazy", "wild"], group: "Smileys & Emotion" },
|
|
32
|
+
{ emoji: "\u{1F61D}", name: "squinting_face_with_tongue", shortcodes: ["stuck_out_tongue_closed_eyes"], tags: ["playful"], group: "Smileys & Emotion" },
|
|
33
|
+
{ emoji: "\u{1F911}", name: "money_mouth_face", shortcodes: ["money_mouth_face"], tags: ["rich", "dollar"], group: "Smileys & Emotion" },
|
|
34
|
+
{ emoji: "\u{1F917}", name: "smiling_face_with_open_hands", shortcodes: ["hugs"], tags: ["hug"], group: "Smileys & Emotion" },
|
|
35
|
+
{ emoji: "\u{1F92D}", name: "face_with_hand_over_mouth", shortcodes: ["hand_over_mouth"], tags: ["oops", "giggle"], group: "Smileys & Emotion" },
|
|
36
|
+
{ emoji: "\u{1F92B}", name: "shushing_face", shortcodes: ["shushing_face"], tags: ["quiet", "secret"], group: "Smileys & Emotion" },
|
|
37
|
+
{ emoji: "\u{1F914}", name: "thinking_face", shortcodes: ["thinking"], tags: ["hmm", "wonder"], group: "Smileys & Emotion" },
|
|
38
|
+
{ emoji: "\u{1F610}", name: "neutral_face", shortcodes: ["neutral_face"], tags: ["meh", "blank"], group: "Smileys & Emotion" },
|
|
39
|
+
{ emoji: "\u{1F611}", name: "expressionless_face", shortcodes: ["expressionless"], tags: ["blank", "unimpressed"], group: "Smileys & Emotion" },
|
|
40
|
+
{ emoji: "\u{1F636}", name: "face_without_mouth", shortcodes: ["no_mouth"], tags: ["silent", "mute"], group: "Smileys & Emotion" },
|
|
41
|
+
{ emoji: "\u{1F60F}", name: "smirking_face", shortcodes: ["smirk"], tags: ["smug"], group: "Smileys & Emotion" },
|
|
42
|
+
{ emoji: "\u{1F612}", name: "unamused_face", shortcodes: ["unamused"], tags: ["meh", "unimpressed"], group: "Smileys & Emotion" },
|
|
43
|
+
{ emoji: "\u{1F644}", name: "face_with_rolling_eyes", shortcodes: ["roll_eyes"], tags: ["annoyed"], group: "Smileys & Emotion" },
|
|
44
|
+
{ emoji: "\u{1F62C}", name: "grimacing_face", shortcodes: ["grimacing"], tags: ["awkward", "nervous"], group: "Smileys & Emotion" },
|
|
45
|
+
{ emoji: "\u{1F62E}\u200D\u{1F4A8}", name: "face_exhaling", shortcodes: ["face_exhaling"], tags: ["sigh", "relief"], group: "Smileys & Emotion" },
|
|
46
|
+
{ emoji: "\u{1F925}", name: "lying_face", shortcodes: ["lying_face"], tags: ["lie", "pinocchio"], group: "Smileys & Emotion" },
|
|
47
|
+
{ emoji: "\u{1F60C}", name: "relieved_face", shortcodes: ["relieved"], tags: ["relaxed", "calm"], group: "Smileys & Emotion" },
|
|
48
|
+
{ emoji: "\u{1F614}", name: "pensive_face", shortcodes: ["pensive"], tags: ["sad", "thoughtful"], group: "Smileys & Emotion" },
|
|
49
|
+
{ emoji: "\u{1F62A}", name: "sleepy_face", shortcodes: ["sleepy"], tags: ["tired"], group: "Smileys & Emotion" },
|
|
50
|
+
{ emoji: "\u{1F924}", name: "drooling_face", shortcodes: ["drooling_face"], tags: ["drool"], group: "Smileys & Emotion" },
|
|
51
|
+
{ emoji: "\u{1F634}", name: "sleeping_face", shortcodes: ["sleeping"], tags: ["zzz", "tired"], group: "Smileys & Emotion" },
|
|
52
|
+
{ emoji: "\u{1F637}", name: "face_with_medical_mask", shortcodes: ["mask"], tags: ["sick", "covid"], group: "Smileys & Emotion" },
|
|
53
|
+
{ emoji: "\u{1F912}", name: "face_with_thermometer", shortcodes: ["face_with_thermometer"], tags: ["sick", "fever"], group: "Smileys & Emotion" },
|
|
54
|
+
{ emoji: "\u{1F915}", name: "face_with_head_bandage", shortcodes: ["face_with_head_bandage"], tags: ["hurt", "injured"], group: "Smileys & Emotion" },
|
|
55
|
+
{ emoji: "\u{1F922}", name: "nauseated_face", shortcodes: ["nauseated_face"], tags: ["sick", "vomit"], group: "Smileys & Emotion" },
|
|
56
|
+
{ emoji: "\u{1F92E}", name: "face_vomiting", shortcodes: ["vomiting_face"], tags: ["sick", "vomit"], group: "Smileys & Emotion" },
|
|
57
|
+
{ emoji: "\u{1F635}", name: "face_with_crossed_out_eyes", shortcodes: ["dizzy_face"], tags: ["dizzy", "dead"], group: "Smileys & Emotion" },
|
|
58
|
+
{ emoji: "\u{1F974}", name: "woozy_face", shortcodes: ["woozy_face"], tags: ["drunk", "dizzy"], group: "Smileys & Emotion" },
|
|
59
|
+
{ emoji: "\u{1F60E}", name: "smiling_face_with_sunglasses", shortcodes: ["sunglasses"], tags: ["cool"], group: "Smileys & Emotion" },
|
|
60
|
+
{ emoji: "\u{1F913}", name: "nerd_face", shortcodes: ["nerd_face"], tags: ["nerd", "geek"], group: "Smileys & Emotion" },
|
|
61
|
+
{ emoji: "\u{1F615}", name: "confused_face", shortcodes: ["confused"], tags: ["puzzled"], group: "Smileys & Emotion" },
|
|
62
|
+
{ emoji: "\u{1F61F}", name: "worried_face", shortcodes: ["worried"], tags: ["nervous", "concern"], group: "Smileys & Emotion" },
|
|
63
|
+
{ emoji: "\u{1F641}", name: "slightly_frowning_face", shortcodes: ["slightly_frowning_face"], tags: ["sad", "disappointed"], group: "Smileys & Emotion" },
|
|
64
|
+
{ emoji: "\u{1F62E}", name: "face_with_open_mouth", shortcodes: ["open_mouth"], tags: ["surprised", "wow"], group: "Smileys & Emotion" },
|
|
65
|
+
{ emoji: "\u{1F62F}", name: "hushed_face", shortcodes: ["hushed"], tags: ["surprised", "shocked"], group: "Smileys & Emotion" },
|
|
66
|
+
{ emoji: "\u{1F632}", name: "astonished_face", shortcodes: ["astonished"], tags: ["amazed", "shocked"], group: "Smileys & Emotion" },
|
|
67
|
+
{ emoji: "\u{1F633}", name: "flushed_face", shortcodes: ["flushed"], tags: ["embarrassed", "shy"], group: "Smileys & Emotion" },
|
|
68
|
+
{ emoji: "\u{1F97A}", name: "pleading_face", shortcodes: ["pleading_face"], tags: ["puppy", "please"], group: "Smileys & Emotion" },
|
|
69
|
+
{ emoji: "\u{1F622}", name: "crying_face", shortcodes: ["cry"], tags: ["sad", "tear"], group: "Smileys & Emotion" },
|
|
70
|
+
{ emoji: "\u{1F62D}", name: "loudly_crying_face", shortcodes: ["sob"], tags: ["sad", "cry"], group: "Smileys & Emotion" },
|
|
71
|
+
{ emoji: "\u{1F624}", name: "face_with_steam_from_nose", shortcodes: ["triumph"], tags: ["angry", "frustrated"], group: "Smileys & Emotion" },
|
|
72
|
+
{ emoji: "\u{1F620}", name: "angry_face", shortcodes: ["angry"], tags: ["mad", "annoyed"], group: "Smileys & Emotion" },
|
|
73
|
+
{ emoji: "\u{1F621}", name: "pouting_face", shortcodes: ["rage", "pout"], tags: ["angry", "furious"], group: "Smileys & Emotion" },
|
|
74
|
+
{ emoji: "\u{1F92C}", name: "face_with_symbols_on_mouth", shortcodes: ["cursing_face"], tags: ["swearing", "angry"], group: "Smileys & Emotion" },
|
|
75
|
+
{ emoji: "\u{1F608}", name: "smiling_face_with_horns", shortcodes: ["smiling_imp"], tags: ["devil", "evil"], group: "Smileys & Emotion" },
|
|
76
|
+
{ emoji: "\u{1F47F}", name: "angry_face_with_horns", shortcodes: ["imp"], tags: ["devil", "angry"], group: "Smileys & Emotion" },
|
|
77
|
+
{ emoji: "\u{1F480}", name: "skull", shortcodes: ["skull"], tags: ["dead", "death"], group: "Smileys & Emotion" },
|
|
78
|
+
{ emoji: "\u{1F47B}", name: "ghost", shortcodes: ["ghost"], tags: ["halloween", "spooky"], group: "Smileys & Emotion" },
|
|
79
|
+
{ emoji: "\u{1F921}", name: "clown_face", shortcodes: ["clown_face"], tags: ["clown", "joker"], group: "Smileys & Emotion" },
|
|
80
|
+
{ emoji: "\u{1F4A9}", name: "pile_of_poo", shortcodes: ["poop", "shit"], tags: ["poo"], group: "Smileys & Emotion" },
|
|
81
|
+
{ emoji: "\u{1F973}", name: "partying_face", shortcodes: ["partying_face"], tags: ["party", "celebrate"], group: "Smileys & Emotion" },
|
|
82
|
+
{ emoji: "\u{1F972}", name: "smiling_face_with_tear", shortcodes: ["smiling_face_with_tear"], tags: ["sad", "happy"], group: "Smileys & Emotion" },
|
|
83
|
+
{ emoji: "\u{1FAE0}", name: "melting_face", shortcodes: ["melting_face"], tags: ["melt", "hot"], group: "Smileys & Emotion" },
|
|
84
|
+
{ emoji: "\u{1FAE1}", name: "saluting_face", shortcodes: ["saluting_face"], tags: ["salute", "respect"], group: "Smileys & Emotion" },
|
|
85
|
+
{ emoji: "\u{1FAE2}", name: "face_with_open_eyes_and_hand_over_mouth", shortcodes: ["face_with_open_eyes_and_hand_over_mouth"], tags: ["shocked", "oops"], group: "Smileys & Emotion" },
|
|
86
|
+
{ emoji: "\u{1FAE3}", name: "face_with_peeking_eye", shortcodes: ["face_with_peeking_eye"], tags: ["peek", "scared"], group: "Smileys & Emotion" },
|
|
87
|
+
{ emoji: "\u{1FAE5}", name: "dotted_line_face", shortcodes: ["dotted_line_face"], tags: ["invisible", "hidden"], group: "Smileys & Emotion" },
|
|
88
|
+
{ emoji: "\u{1FAE4}", name: "face_with_diagonal_mouth", shortcodes: ["face_with_diagonal_mouth"], tags: ["meh", "skeptical"], group: "Smileys & Emotion" },
|
|
89
|
+
// === Gestures & People ===
|
|
90
|
+
{ emoji: "\u{1F44B}", name: "waving_hand", shortcodes: ["wave"], tags: ["hello", "bye"], group: "People & Body" },
|
|
91
|
+
{ emoji: "\u{1F91A}", name: "raised_back_of_hand", shortcodes: ["raised_back_of_hand"], tags: ["stop"], group: "People & Body" },
|
|
92
|
+
{ emoji: "\u270B", name: "raised_hand", shortcodes: ["hand", "raised_hand"], tags: ["stop", "high five"], group: "People & Body" },
|
|
93
|
+
{ emoji: "\u{1F596}", name: "vulcan_salute", shortcodes: ["vulcan_salute"], tags: ["spock", "star trek"], group: "People & Body" },
|
|
94
|
+
{ emoji: "\u{1F44C}", name: "ok_hand", shortcodes: ["ok_hand"], tags: ["ok", "perfect"], group: "People & Body" },
|
|
95
|
+
{ emoji: "\u{1F90C}", name: "pinched_fingers", shortcodes: ["pinched_fingers"], tags: ["italian", "what"], group: "People & Body" },
|
|
96
|
+
{ emoji: "\u270C\uFE0F", name: "victory_hand", shortcodes: ["v"], tags: ["peace", "victory"], group: "People & Body" },
|
|
97
|
+
{ emoji: "\u{1F91E}", name: "crossed_fingers", shortcodes: ["crossed_fingers"], tags: ["luck", "hope"], group: "People & Body" },
|
|
98
|
+
{ emoji: "\u{1F91F}", name: "love_you_gesture", shortcodes: ["love_you_gesture"], tags: ["love", "rock"], group: "People & Body" },
|
|
99
|
+
{ emoji: "\u{1F918}", name: "sign_of_the_horns", shortcodes: ["metal"], tags: ["rock", "metal"], group: "People & Body" },
|
|
100
|
+
{ emoji: "\u{1F919}", name: "call_me_hand", shortcodes: ["call_me_hand"], tags: ["call", "shaka"], group: "People & Body" },
|
|
101
|
+
{ emoji: "\u{1F448}", name: "backhand_index_pointing_left", shortcodes: ["point_left"], tags: ["left", "direction"], group: "People & Body" },
|
|
102
|
+
{ emoji: "\u{1F449}", name: "backhand_index_pointing_right", shortcodes: ["point_right"], tags: ["right", "direction"], group: "People & Body" },
|
|
103
|
+
{ emoji: "\u{1F446}", name: "backhand_index_pointing_up", shortcodes: ["point_up_2"], tags: ["up", "direction"], group: "People & Body" },
|
|
104
|
+
{ emoji: "\u{1F447}", name: "backhand_index_pointing_down", shortcodes: ["point_down"], tags: ["down", "direction"], group: "People & Body" },
|
|
105
|
+
{ emoji: "\u261D\uFE0F", name: "index_pointing_up", shortcodes: ["point_up"], tags: ["up"], group: "People & Body" },
|
|
106
|
+
{ emoji: "\u{1F44D}", name: "thumbs_up", shortcodes: ["thumbsup", "+1", "thumbs_up"], tags: ["approve", "ok", "like"], group: "People & Body" },
|
|
107
|
+
{ emoji: "\u{1F44E}", name: "thumbs_down", shortcodes: ["thumbsdown", "-1", "thumbs_down"], tags: ["disapprove", "dislike"], group: "People & Body" },
|
|
108
|
+
{ emoji: "\u270A", name: "raised_fist", shortcodes: ["fist"], tags: ["power", "punch"], group: "People & Body" },
|
|
109
|
+
{ emoji: "\u{1F44A}", name: "oncoming_fist", shortcodes: ["fist_oncoming", "punch"], tags: ["punch"], group: "People & Body" },
|
|
110
|
+
{ emoji: "\u{1F91B}", name: "left_facing_fist", shortcodes: ["fist_left"], tags: ["fist bump"], group: "People & Body" },
|
|
111
|
+
{ emoji: "\u{1F91C}", name: "right_facing_fist", shortcodes: ["fist_right"], tags: ["fist bump"], group: "People & Body" },
|
|
112
|
+
{ emoji: "\u{1F44F}", name: "clapping_hands", shortcodes: ["clap"], tags: ["applause", "bravo"], group: "People & Body" },
|
|
113
|
+
{ emoji: "\u{1F64C}", name: "raising_hands", shortcodes: ["raised_hands"], tags: ["celebrate", "hooray"], group: "People & Body" },
|
|
114
|
+
{ emoji: "\u{1F450}", name: "open_hands", shortcodes: ["open_hands"], tags: ["jazz hands"], group: "People & Body" },
|
|
115
|
+
{ emoji: "\u{1F91D}", name: "handshake", shortcodes: ["handshake"], tags: ["deal", "agreement"], group: "People & Body" },
|
|
116
|
+
{ emoji: "\u{1F64F}", name: "folded_hands", shortcodes: ["pray"], tags: ["please", "thank you", "namaste"], group: "People & Body" },
|
|
117
|
+
{ emoji: "\u{1F4AA}", name: "flexed_biceps", shortcodes: ["muscle"], tags: ["strong", "flex"], group: "People & Body" },
|
|
118
|
+
{ emoji: "\u{1FAF6}", name: "heart_hands", shortcodes: ["heart_hands"], tags: ["love", "heart"], group: "People & Body" },
|
|
119
|
+
// === Hearts & Symbols ===
|
|
120
|
+
{ emoji: "\u2764\uFE0F", name: "red_heart", shortcodes: ["heart", "red_heart"], tags: ["love"], group: "Smileys & Emotion" },
|
|
121
|
+
{ emoji: "\u{1F9E1}", name: "orange_heart", shortcodes: ["orange_heart"], tags: ["love"], group: "Smileys & Emotion" },
|
|
122
|
+
{ emoji: "\u{1F49B}", name: "yellow_heart", shortcodes: ["yellow_heart"], tags: ["love"], group: "Smileys & Emotion" },
|
|
123
|
+
{ emoji: "\u{1F49A}", name: "green_heart", shortcodes: ["green_heart"], tags: ["love"], group: "Smileys & Emotion" },
|
|
124
|
+
{ emoji: "\u{1F499}", name: "blue_heart", shortcodes: ["blue_heart"], tags: ["love"], group: "Smileys & Emotion" },
|
|
125
|
+
{ emoji: "\u{1F49C}", name: "purple_heart", shortcodes: ["purple_heart"], tags: ["love"], group: "Smileys & Emotion" },
|
|
126
|
+
{ emoji: "\u{1F5A4}", name: "black_heart", shortcodes: ["black_heart"], tags: ["love", "dark"], group: "Smileys & Emotion" },
|
|
127
|
+
{ emoji: "\u{1F90D}", name: "white_heart", shortcodes: ["white_heart"], tags: ["love", "pure"], group: "Smileys & Emotion" },
|
|
128
|
+
{ emoji: "\u{1F494}", name: "broken_heart", shortcodes: ["broken_heart"], tags: ["sad", "breakup"], group: "Smileys & Emotion" },
|
|
129
|
+
{ emoji: "\u{1F495}", name: "two_hearts", shortcodes: ["two_hearts"], tags: ["love"], group: "Smileys & Emotion" },
|
|
130
|
+
{ emoji: "\u{1F496}", name: "sparkling_heart", shortcodes: ["sparkling_heart"], tags: ["love"], group: "Smileys & Emotion" },
|
|
131
|
+
{ emoji: "\u{1F497}", name: "growing_heart", shortcodes: ["heartpulse"], tags: ["love"], group: "Smileys & Emotion" },
|
|
132
|
+
{ emoji: "\u{1F498}", name: "heart_with_arrow", shortcodes: ["cupid"], tags: ["love", "valentine"], group: "Smileys & Emotion" },
|
|
133
|
+
{ emoji: "\u{1F4AF}", name: "hundred_points", shortcodes: ["100"], tags: ["perfect", "score"], group: "Smileys & Emotion" },
|
|
134
|
+
{ emoji: "\u{1F4A2}", name: "anger_symbol", shortcodes: ["anger"], tags: ["angry"], group: "Smileys & Emotion" },
|
|
135
|
+
{ emoji: "\u{1F4A5}", name: "collision", shortcodes: ["boom", "collision"], tags: ["explode", "bang"], group: "Smileys & Emotion" },
|
|
136
|
+
{ emoji: "\u{1F4AB}", name: "dizzy", shortcodes: ["dizzy"], tags: ["star", "sparkle"], group: "Smileys & Emotion" },
|
|
137
|
+
{ emoji: "\u{1F4A6}", name: "sweat_droplets", shortcodes: ["sweat_drops"], tags: ["water", "sweat"], group: "Smileys & Emotion" },
|
|
138
|
+
{ emoji: "\u{1F4A8}", name: "dashing_away", shortcodes: ["dash"], tags: ["wind", "fast"], group: "Smileys & Emotion" },
|
|
139
|
+
{ emoji: "\u{1F573}\uFE0F", name: "hole", shortcodes: ["hole"], tags: ["hole"], group: "Smileys & Emotion" },
|
|
140
|
+
{ emoji: "\u{1F4AC}", name: "speech_balloon", shortcodes: ["speech_balloon"], tags: ["chat", "talk"], group: "Smileys & Emotion" },
|
|
141
|
+
{ emoji: "\u{1F4AD}", name: "thought_balloon", shortcodes: ["thought_balloon"], tags: ["think", "bubble"], group: "Smileys & Emotion" },
|
|
142
|
+
{ emoji: "\u{1F525}", name: "fire", shortcodes: ["fire"], tags: ["hot", "lit"], group: "Travel & Places" },
|
|
143
|
+
{ emoji: "\u2728", name: "sparkles", shortcodes: ["sparkles"], tags: ["shine", "magic", "new"], group: "Travel & Places" },
|
|
144
|
+
{ emoji: "\u{1F31F}", name: "glowing_star", shortcodes: ["star2"], tags: ["star", "shine"], group: "Travel & Places" },
|
|
145
|
+
{ emoji: "\u2B50", name: "star", shortcodes: ["star"], tags: ["favorite", "gold"], group: "Travel & Places" },
|
|
146
|
+
// === Animals & Nature ===
|
|
147
|
+
{ emoji: "\u{1F436}", name: "dog_face", shortcodes: ["dog"], tags: ["pet", "puppy"], group: "Animals & Nature" },
|
|
148
|
+
{ emoji: "\u{1F431}", name: "cat_face", shortcodes: ["cat"], tags: ["pet", "kitten"], group: "Animals & Nature" },
|
|
149
|
+
{ emoji: "\u{1F42D}", name: "mouse_face", shortcodes: ["mouse"], tags: ["animal"], group: "Animals & Nature" },
|
|
150
|
+
{ emoji: "\u{1F430}", name: "rabbit_face", shortcodes: ["rabbit"], tags: ["bunny", "easter"], group: "Animals & Nature" },
|
|
151
|
+
{ emoji: "\u{1F98A}", name: "fox", shortcodes: ["fox_face"], tags: ["animal"], group: "Animals & Nature" },
|
|
152
|
+
{ emoji: "\u{1F43B}", name: "bear", shortcodes: ["bear"], tags: ["animal", "teddy"], group: "Animals & Nature" },
|
|
153
|
+
{ emoji: "\u{1F43C}", name: "panda", shortcodes: ["panda_face"], tags: ["animal", "cute"], group: "Animals & Nature" },
|
|
154
|
+
{ emoji: "\u{1F438}", name: "frog", shortcodes: ["frog"], tags: ["animal"], group: "Animals & Nature" },
|
|
155
|
+
{ emoji: "\u{1F435}", name: "monkey_face", shortcodes: ["monkey_face"], tags: ["animal"], group: "Animals & Nature" },
|
|
156
|
+
{ emoji: "\u{1F648}", name: "see_no_evil_monkey", shortcodes: ["see_no_evil"], tags: ["monkey", "shy"], group: "Animals & Nature" },
|
|
157
|
+
{ emoji: "\u{1F649}", name: "hear_no_evil_monkey", shortcodes: ["hear_no_evil"], tags: ["monkey"], group: "Animals & Nature" },
|
|
158
|
+
{ emoji: "\u{1F64A}", name: "speak_no_evil_monkey", shortcodes: ["speak_no_evil"], tags: ["monkey", "oops"], group: "Animals & Nature" },
|
|
159
|
+
{ emoji: "\u{1F414}", name: "chicken", shortcodes: ["chicken"], tags: ["animal", "bird"], group: "Animals & Nature" },
|
|
160
|
+
{ emoji: "\u{1F984}", name: "unicorn", shortcodes: ["unicorn"], tags: ["magic", "fantasy"], group: "Animals & Nature" },
|
|
161
|
+
{ emoji: "\u{1F41D}", name: "honeybee", shortcodes: ["bee", "honeybee"], tags: ["insect", "honey"], group: "Animals & Nature" },
|
|
162
|
+
{ emoji: "\u{1F98B}", name: "butterfly", shortcodes: ["butterfly"], tags: ["insect", "nature"], group: "Animals & Nature" },
|
|
163
|
+
{ emoji: "\u{1F422}", name: "turtle", shortcodes: ["turtle"], tags: ["slow", "animal"], group: "Animals & Nature" },
|
|
164
|
+
{ emoji: "\u{1F40D}", name: "snake", shortcodes: ["snake"], tags: ["animal"], group: "Animals & Nature" },
|
|
165
|
+
{ emoji: "\u{1F338}", name: "cherry_blossom", shortcodes: ["cherry_blossom"], tags: ["flower", "spring"], group: "Animals & Nature" },
|
|
166
|
+
{ emoji: "\u{1F339}", name: "rose", shortcodes: ["rose"], tags: ["flower", "love"], group: "Animals & Nature" },
|
|
167
|
+
{ emoji: "\u{1F33B}", name: "sunflower", shortcodes: ["sunflower"], tags: ["flower", "nature"], group: "Animals & Nature" },
|
|
168
|
+
{ emoji: "\u{1F308}", name: "rainbow", shortcodes: ["rainbow"], tags: ["nature", "pride"], group: "Travel & Places" },
|
|
169
|
+
{ emoji: "\u{1F30D}", name: "globe_showing_europe_africa", shortcodes: ["earth_africa"], tags: ["world", "globe"], group: "Travel & Places" },
|
|
170
|
+
// === Food & Drink ===
|
|
171
|
+
{ emoji: "\u{1F34E}", name: "red_apple", shortcodes: ["apple"], tags: ["fruit"], group: "Food & Drink" },
|
|
172
|
+
{ emoji: "\u{1F355}", name: "pizza", shortcodes: ["pizza"], tags: ["food", "italian"], group: "Food & Drink" },
|
|
173
|
+
{ emoji: "\u{1F354}", name: "hamburger", shortcodes: ["hamburger"], tags: ["food", "burger"], group: "Food & Drink" },
|
|
174
|
+
{ emoji: "\u{1F35F}", name: "french_fries", shortcodes: ["fries"], tags: ["food"], group: "Food & Drink" },
|
|
175
|
+
{ emoji: "\u{1F32E}", name: "taco", shortcodes: ["taco"], tags: ["food", "mexican"], group: "Food & Drink" },
|
|
176
|
+
{ emoji: "\u{1F366}", name: "soft_ice_cream", shortcodes: ["icecream"], tags: ["dessert", "sweet"], group: "Food & Drink" },
|
|
177
|
+
{ emoji: "\u{1F370}", name: "shortcake", shortcodes: ["cake"], tags: ["dessert", "birthday"], group: "Food & Drink" },
|
|
178
|
+
{ emoji: "\u{1F382}", name: "birthday_cake", shortcodes: ["birthday"], tags: ["party", "cake"], group: "Food & Drink" },
|
|
179
|
+
{ emoji: "\u{1F369}", name: "doughnut", shortcodes: ["doughnut"], tags: ["donut", "sweet"], group: "Food & Drink" },
|
|
180
|
+
{ emoji: "\u{1F36A}", name: "cookie", shortcodes: ["cookie"], tags: ["sweet", "snack"], group: "Food & Drink" },
|
|
181
|
+
{ emoji: "\u2615", name: "hot_beverage", shortcodes: ["coffee"], tags: ["drink", "tea", "coffee"], group: "Food & Drink" },
|
|
182
|
+
{ emoji: "\u{1F37A}", name: "beer_mug", shortcodes: ["beer"], tags: ["drink", "alcohol"], group: "Food & Drink" },
|
|
183
|
+
{ emoji: "\u{1F377}", name: "wine_glass", shortcodes: ["wine_glass"], tags: ["drink", "alcohol"], group: "Food & Drink" },
|
|
184
|
+
{ emoji: "\u{1F942}", name: "clinking_glasses", shortcodes: ["clinking_glasses"], tags: ["cheers", "toast"], group: "Food & Drink" },
|
|
185
|
+
{ emoji: "\u{1F37B}", name: "clinking_beer_mugs", shortcodes: ["beers"], tags: ["cheers", "drink"], group: "Food & Drink" },
|
|
186
|
+
// === Objects & Activities ===
|
|
187
|
+
{ emoji: "\u26BD", name: "soccer_ball", shortcodes: ["soccer"], tags: ["sport", "football"], group: "Activities" },
|
|
188
|
+
{ emoji: "\u{1F3C0}", name: "basketball", shortcodes: ["basketball"], tags: ["sport"], group: "Activities" },
|
|
189
|
+
{ emoji: "\u{1F3AE}", name: "video_game", shortcodes: ["video_game"], tags: ["game", "controller"], group: "Activities" },
|
|
190
|
+
{ emoji: "\u{1F3AF}", name: "bullseye", shortcodes: ["dart"], tags: ["target", "goal"], group: "Activities" },
|
|
191
|
+
{ emoji: "\u{1F3C6}", name: "trophy", shortcodes: ["trophy"], tags: ["win", "award"], group: "Activities" },
|
|
192
|
+
{ emoji: "\u{1F947}", name: "first_place_medal", shortcodes: ["1st_place_medal", "gold_medal"], tags: ["gold", "winner"], group: "Activities" },
|
|
193
|
+
{ emoji: "\u{1F389}", name: "party_popper", shortcodes: ["tada"], tags: ["party", "celebrate"], group: "Activities" },
|
|
194
|
+
{ emoji: "\u{1F38A}", name: "confetti_ball", shortcodes: ["confetti_ball"], tags: ["party", "celebrate"], group: "Activities" },
|
|
195
|
+
{ emoji: "\u{1F388}", name: "balloon", shortcodes: ["balloon"], tags: ["party", "birthday"], group: "Activities" },
|
|
196
|
+
{ emoji: "\u{1F381}", name: "wrapped_gift", shortcodes: ["gift"], tags: ["present", "birthday"], group: "Activities" },
|
|
197
|
+
{ emoji: "\u{1F3B5}", name: "musical_note", shortcodes: ["musical_note"], tags: ["music", "song"], group: "Objects" },
|
|
198
|
+
{ emoji: "\u{1F3B6}", name: "musical_notes", shortcodes: ["notes"], tags: ["music", "singing"], group: "Objects" },
|
|
199
|
+
{ emoji: "\u{1F3B8}", name: "guitar", shortcodes: ["guitar"], tags: ["music", "rock"], group: "Objects" },
|
|
200
|
+
{ emoji: "\u{1F4F1}", name: "mobile_phone", shortcodes: ["iphone"], tags: ["phone", "cell"], group: "Objects" },
|
|
201
|
+
{ emoji: "\u{1F4BB}", name: "laptop", shortcodes: ["computer"], tags: ["laptop", "tech"], group: "Objects" },
|
|
202
|
+
{ emoji: "\u{1F4F7}", name: "camera", shortcodes: ["camera"], tags: ["photo"], group: "Objects" },
|
|
203
|
+
{ emoji: "\u{1F4DA}", name: "books", shortcodes: ["books"], tags: ["read", "study"], group: "Objects" },
|
|
204
|
+
{ emoji: "\u{1F4DD}", name: "memo", shortcodes: ["memo", "pencil"], tags: ["write", "note"], group: "Objects" },
|
|
205
|
+
{ emoji: "\u{1F4CC}", name: "pushpin", shortcodes: ["pushpin"], tags: ["pin", "location"], group: "Objects" },
|
|
206
|
+
{ emoji: "\u{1F4CE}", name: "paperclip", shortcodes: ["paperclip"], tags: ["attach"], group: "Objects" },
|
|
207
|
+
{ emoji: "\u{1F511}", name: "key", shortcodes: ["key"], tags: ["lock", "password"], group: "Objects" },
|
|
208
|
+
{ emoji: "\u{1F512}", name: "locked", shortcodes: ["lock"], tags: ["security", "private"], group: "Objects" },
|
|
209
|
+
{ emoji: "\u{1F4A1}", name: "light_bulb", shortcodes: ["bulb"], tags: ["idea", "light"], group: "Objects" },
|
|
210
|
+
{ emoji: "\u{1F4B0}", name: "money_bag", shortcodes: ["moneybag"], tags: ["money", "dollar", "rich"], group: "Objects" },
|
|
211
|
+
{ emoji: "\u23F0", name: "alarm_clock", shortcodes: ["alarm_clock"], tags: ["time", "wake"], group: "Objects" },
|
|
212
|
+
{ emoji: "\u{1F514}", name: "bell", shortcodes: ["bell"], tags: ["notification", "alert"], group: "Objects" },
|
|
213
|
+
// === Symbols ===
|
|
214
|
+
{ emoji: "\u2705", name: "check_mark_button", shortcodes: ["white_check_mark"], tags: ["done", "yes", "complete"], group: "Symbols" },
|
|
215
|
+
{ emoji: "\u274C", name: "cross_mark", shortcodes: ["x"], tags: ["no", "wrong", "delete"], group: "Symbols" },
|
|
216
|
+
{ emoji: "\u2753", name: "red_question_mark", shortcodes: ["question"], tags: ["what", "confused"], group: "Symbols" },
|
|
217
|
+
{ emoji: "\u2757", name: "red_exclamation_mark", shortcodes: ["exclamation", "heavy_exclamation_mark"], tags: ["important", "alert"], group: "Symbols" },
|
|
218
|
+
{ emoji: "\u26A0\uFE0F", name: "warning", shortcodes: ["warning"], tags: ["caution", "alert"], group: "Symbols" },
|
|
219
|
+
{ emoji: "\u{1F6AB}", name: "prohibited", shortcodes: ["no_entry_sign"], tags: ["forbidden", "stop"], group: "Symbols" },
|
|
220
|
+
{ emoji: "\u267B\uFE0F", name: "recycling_symbol", shortcodes: ["recycle"], tags: ["environment", "green"], group: "Symbols" },
|
|
221
|
+
{ emoji: "\u27A1\uFE0F", name: "right_arrow", shortcodes: ["arrow_right"], tags: ["direction", "next"], group: "Symbols" },
|
|
222
|
+
{ emoji: "\u2B05\uFE0F", name: "left_arrow", shortcodes: ["arrow_left"], tags: ["direction", "back"], group: "Symbols" },
|
|
223
|
+
{ emoji: "\u2B06\uFE0F", name: "up_arrow", shortcodes: ["arrow_up"], tags: ["direction", "up"], group: "Symbols" },
|
|
224
|
+
{ emoji: "\u2B07\uFE0F", name: "down_arrow", shortcodes: ["arrow_down"], tags: ["direction", "down"], group: "Symbols" },
|
|
225
|
+
{ emoji: "\u{1F534}", name: "red_circle", shortcodes: ["red_circle"], tags: ["red", "dot"], group: "Symbols" },
|
|
226
|
+
{ emoji: "\u{1F7E2}", name: "green_circle", shortcodes: ["green_circle"], tags: ["green", "dot"], group: "Symbols" },
|
|
227
|
+
{ emoji: "\u{1F535}", name: "blue_circle", shortcodes: ["blue_circle"], tags: ["blue", "dot"], group: "Symbols" },
|
|
228
|
+
{ emoji: "\u{1F7E1}", name: "yellow_circle", shortcodes: ["yellow_circle"], tags: ["yellow", "dot"], group: "Symbols" },
|
|
229
|
+
// === Flags (popular) ===
|
|
230
|
+
{ emoji: "\u{1F3F3}\uFE0F", name: "white_flag", shortcodes: ["white_flag"], tags: ["surrender", "peace"], group: "Flags" },
|
|
231
|
+
{ emoji: "\u{1F3F4}", name: "black_flag", shortcodes: ["black_flag"], tags: ["pirate"], group: "Flags" },
|
|
232
|
+
{ emoji: "\u{1F3C1}", name: "chequered_flag", shortcodes: ["checkered_flag"], tags: ["race", "finish"], group: "Flags" },
|
|
233
|
+
{ emoji: "\u{1F6A9}", name: "triangular_flag", shortcodes: ["triangular_flag_on_post"], tags: ["flag", "red flag"], group: "Flags" },
|
|
234
|
+
{ emoji: "\u{1F3F3}\uFE0F\u200D\u{1F308}", name: "rainbow_flag", shortcodes: ["rainbow_flag"], tags: ["pride", "lgbtq"], group: "Flags" }
|
|
235
|
+
];
|
|
236
|
+
var allEmojis = [
|
|
237
|
+
...emojis,
|
|
238
|
+
// === Additional Smileys & Emotion ===
|
|
239
|
+
{ emoji: "\u{1F910}", name: "zipper_mouth_face", shortcodes: ["zipper_mouth_face"], tags: ["secret", "sealed"], group: "Smileys & Emotion" },
|
|
240
|
+
{ emoji: "\u{1F928}", name: "face_with_raised_eyebrow", shortcodes: ["raised_eyebrow"], tags: ["suspicious", "skeptical"], group: "Smileys & Emotion" },
|
|
241
|
+
{ emoji: "\u{1F9D0}", name: "face_with_monocle", shortcodes: ["monocle_face"], tags: ["classy", "hmm"], group: "Smileys & Emotion" },
|
|
242
|
+
{ emoji: "\u{1F92F}", name: "exploding_head", shortcodes: ["exploding_head"], tags: ["mindblown", "shocked"], group: "Smileys & Emotion" },
|
|
243
|
+
{ emoji: "\u{1F636}\u200D\u{1F32B}\uFE0F", name: "face_in_clouds", shortcodes: ["face_in_clouds"], tags: ["foggy", "absent"], group: "Smileys & Emotion" },
|
|
244
|
+
{ emoji: "\u{1F975}", name: "hot_face", shortcodes: ["hot_face"], tags: ["hot", "sweating"], group: "Smileys & Emotion" },
|
|
245
|
+
{ emoji: "\u{1F976}", name: "cold_face", shortcodes: ["cold_face"], tags: ["cold", "freezing"], group: "Smileys & Emotion" },
|
|
246
|
+
{ emoji: "\u{1F631}", name: "face_screaming_in_fear", shortcodes: ["scream"], tags: ["scared", "horror"], group: "Smileys & Emotion" },
|
|
247
|
+
{ emoji: "\u{1F628}", name: "fearful_face", shortcodes: ["fearful"], tags: ["scared", "afraid"], group: "Smileys & Emotion" },
|
|
248
|
+
{ emoji: "\u{1F630}", name: "anxious_face_with_sweat", shortcodes: ["cold_sweat"], tags: ["nervous", "anxious"], group: "Smileys & Emotion" },
|
|
249
|
+
{ emoji: "\u{1F625}", name: "sad_but_relieved_face", shortcodes: ["disappointed_relieved"], tags: ["sad", "phew"], group: "Smileys & Emotion" },
|
|
250
|
+
{ emoji: "\u{1F920}", name: "cowboy_hat_face", shortcodes: ["cowboy_hat_face"], tags: ["cowboy", "western"], group: "Smileys & Emotion" },
|
|
251
|
+
{ emoji: "\u{1F978}", name: "disguised_face", shortcodes: ["disguised_face"], tags: ["disguise", "incognito"], group: "Smileys & Emotion" },
|
|
252
|
+
{ emoji: "\u{1F635}\u200D\u{1F4AB}", name: "face_with_spiral_eyes", shortcodes: ["face_with_spiral_eyes"], tags: ["dizzy", "hypnotized"], group: "Smileys & Emotion" },
|
|
253
|
+
{ emoji: "\u{1FAE8}", name: "shaking_face", shortcodes: ["shaking_face"], tags: ["shake", "vibrate"], group: "Smileys & Emotion" },
|
|
254
|
+
{ emoji: "\u{1F619}", name: "kissing_face_with_smiling_eyes", shortcodes: ["kissing_smiling_eyes"], tags: ["kiss"], group: "Smileys & Emotion" },
|
|
255
|
+
{ emoji: "\u{1FAF0}", name: "hand_with_index_finger_and_thumb_crossed", shortcodes: ["hand_with_index_finger_and_thumb_crossed"], tags: ["money", "snap"], group: "People & Body" },
|
|
256
|
+
// === Additional Hearts ===
|
|
257
|
+
{ emoji: "\u{1FA77}", name: "pink_heart", shortcodes: ["pink_heart"], tags: ["love", "pink"], group: "Smileys & Emotion" },
|
|
258
|
+
{ emoji: "\u{1FA75}", name: "light_blue_heart", shortcodes: ["light_blue_heart"], tags: ["love", "blue"], group: "Smileys & Emotion" },
|
|
259
|
+
{ emoji: "\u{1FA76}", name: "grey_heart", shortcodes: ["grey_heart"], tags: ["love", "grey"], group: "Smileys & Emotion" },
|
|
260
|
+
{ emoji: "\u{1F90E}", name: "brown_heart", shortcodes: ["brown_heart"], tags: ["love", "brown"], group: "Smileys & Emotion" },
|
|
261
|
+
{ emoji: "\u2764\uFE0F\u200D\u{1F525}", name: "heart_on_fire", shortcodes: ["heart_on_fire"], tags: ["love", "passion"], group: "Smileys & Emotion" },
|
|
262
|
+
{ emoji: "\u2764\uFE0F\u200D\u{1FA79}", name: "mending_heart", shortcodes: ["mending_heart"], tags: ["healing", "recovery"], group: "Smileys & Emotion" },
|
|
263
|
+
{ emoji: "\u{1F49D}", name: "heart_with_ribbon", shortcodes: ["gift_heart"], tags: ["love", "valentine"], group: "Smileys & Emotion" },
|
|
264
|
+
{ emoji: "\u{1F49E}", name: "revolving_hearts", shortcodes: ["revolving_hearts"], tags: ["love"], group: "Smileys & Emotion" },
|
|
265
|
+
{ emoji: "\u{1F49F}", name: "heart_decoration", shortcodes: ["heart_decoration"], tags: ["love"], group: "Smileys & Emotion" },
|
|
266
|
+
// === Additional Gestures ===
|
|
267
|
+
{ emoji: "\u{1FAF1}", name: "rightwards_hand", shortcodes: ["rightwards_hand"], tags: ["hand", "right"], group: "People & Body" },
|
|
268
|
+
{ emoji: "\u{1FAF2}", name: "leftwards_hand", shortcodes: ["leftwards_hand"], tags: ["hand", "left"], group: "People & Body" },
|
|
269
|
+
{ emoji: "\u{1FAF3}", name: "palm_down_hand", shortcodes: ["palm_down_hand"], tags: ["hand", "dismiss"], group: "People & Body" },
|
|
270
|
+
{ emoji: "\u{1FAF4}", name: "palm_up_hand", shortcodes: ["palm_up_hand"], tags: ["hand", "offer"], group: "People & Body" },
|
|
271
|
+
{ emoji: "\u{1FAF5}", name: "index_pointing_at_the_viewer", shortcodes: ["index_pointing_at_the_viewer"], tags: ["you", "point"], group: "People & Body" },
|
|
272
|
+
{ emoji: "\u{1F90F}", name: "pinching_hand", shortcodes: ["pinching_hand"], tags: ["small", "tiny"], group: "People & Body" },
|
|
273
|
+
{ emoji: "\u{1F590}\uFE0F", name: "hand_with_fingers_splayed", shortcodes: ["raised_hand_with_fingers_splayed"], tags: ["hand", "five"], group: "People & Body" },
|
|
274
|
+
{ emoji: "\u{1F595}", name: "middle_finger", shortcodes: ["middle_finger", "fu"], tags: ["rude"], group: "People & Body" },
|
|
275
|
+
{ emoji: "\u{1F932}", name: "palms_up_together", shortcodes: ["palms_up_together"], tags: ["pray", "cupped hands"], group: "People & Body" },
|
|
276
|
+
{ emoji: "\u270D\uFE0F", name: "writing_hand", shortcodes: ["writing_hand"], tags: ["write", "sign"], group: "People & Body" },
|
|
277
|
+
{ emoji: "\u{1F485}", name: "nail_polish", shortcodes: ["nail_care"], tags: ["beauty", "manicure"], group: "People & Body" },
|
|
278
|
+
{ emoji: "\u{1F933}", name: "selfie", shortcodes: ["selfie"], tags: ["camera", "phone"], group: "People & Body" },
|
|
279
|
+
// === Additional Animals ===
|
|
280
|
+
{ emoji: "\u{1F412}", name: "monkey", shortcodes: ["monkey"], tags: ["animal", "ape"], group: "Animals & Nature" },
|
|
281
|
+
{ emoji: "\u{1F98D}", name: "gorilla", shortcodes: ["gorilla"], tags: ["animal", "ape"], group: "Animals & Nature" },
|
|
282
|
+
{ emoji: "\u{1F415}", name: "dog", shortcodes: ["dog2"], tags: ["animal", "pet"], group: "Animals & Nature" },
|
|
283
|
+
{ emoji: "\u{1F429}", name: "poodle", shortcodes: ["poodle"], tags: ["dog", "fancy"], group: "Animals & Nature" },
|
|
284
|
+
{ emoji: "\u{1F43A}", name: "wolf", shortcodes: ["wolf"], tags: ["animal", "howl"], group: "Animals & Nature" },
|
|
285
|
+
{ emoji: "\u{1F981}", name: "lion", shortcodes: ["lion"], tags: ["animal", "king"], group: "Animals & Nature" },
|
|
286
|
+
{ emoji: "\u{1F42F}", name: "tiger_face", shortcodes: ["tiger"], tags: ["animal", "cat"], group: "Animals & Nature" },
|
|
287
|
+
{ emoji: "\u{1F42E}", name: "cow_face", shortcodes: ["cow"], tags: ["animal", "moo"], group: "Animals & Nature" },
|
|
288
|
+
{ emoji: "\u{1F437}", name: "pig_face", shortcodes: ["pig"], tags: ["animal", "oink"], group: "Animals & Nature" },
|
|
289
|
+
{ emoji: "\u{1F434}", name: "horse_face", shortcodes: ["horse"], tags: ["animal"], group: "Animals & Nature" },
|
|
290
|
+
{ emoji: "\u{1F432}", name: "dragon_face", shortcodes: ["dragon_face"], tags: ["fantasy", "myth"], group: "Animals & Nature" },
|
|
291
|
+
{ emoji: "\u{1F409}", name: "dragon", shortcodes: ["dragon"], tags: ["fantasy", "myth"], group: "Animals & Nature" },
|
|
292
|
+
{ emoji: "\u{1F995}", name: "sauropod", shortcodes: ["sauropod"], tags: ["dinosaur", "brontosaurus"], group: "Animals & Nature" },
|
|
293
|
+
{ emoji: "\u{1F996}", name: "t_rex", shortcodes: ["t_rex"], tags: ["dinosaur"], group: "Animals & Nature" },
|
|
294
|
+
{ emoji: "\u{1F433}", name: "spouting_whale", shortcodes: ["whale"], tags: ["ocean", "sea"], group: "Animals & Nature" },
|
|
295
|
+
{ emoji: "\u{1F42C}", name: "dolphin", shortcodes: ["dolphin", "flipper"], tags: ["ocean", "sea"], group: "Animals & Nature" },
|
|
296
|
+
{ emoji: "\u{1F988}", name: "shark", shortcodes: ["shark"], tags: ["ocean", "fish"], group: "Animals & Nature" },
|
|
297
|
+
{ emoji: "\u{1F419}", name: "octopus", shortcodes: ["octopus"], tags: ["ocean", "tentacles"], group: "Animals & Nature" },
|
|
298
|
+
{ emoji: "\u{1F40C}", name: "snail", shortcodes: ["snail"], tags: ["slow"], group: "Animals & Nature" },
|
|
299
|
+
{ emoji: "\u{1F41B}", name: "bug", shortcodes: ["bug"], tags: ["insect"], group: "Animals & Nature" },
|
|
300
|
+
{ emoji: "\u{1F41C}", name: "ant", shortcodes: ["ant"], tags: ["insect"], group: "Animals & Nature" },
|
|
301
|
+
{ emoji: "\u{1F577}\uFE0F", name: "spider", shortcodes: ["spider"], tags: ["insect", "web"], group: "Animals & Nature" },
|
|
302
|
+
{ emoji: "\u{1F982}", name: "scorpion", shortcodes: ["scorpion"], tags: ["insect", "zodiac"], group: "Animals & Nature" },
|
|
303
|
+
{ emoji: "\u{1F41E}", name: "lady_beetle", shortcodes: ["lady_beetle", "ladybug"], tags: ["insect", "luck"], group: "Animals & Nature" },
|
|
304
|
+
// === Additional Plants & Nature ===
|
|
305
|
+
{ emoji: "\u{1F490}", name: "bouquet", shortcodes: ["bouquet"], tags: ["flowers", "gift"], group: "Animals & Nature" },
|
|
306
|
+
{ emoji: "\u{1F337}", name: "tulip", shortcodes: ["tulip"], tags: ["flower", "spring"], group: "Animals & Nature" },
|
|
307
|
+
{ emoji: "\u{1F33A}", name: "hibiscus", shortcodes: ["hibiscus"], tags: ["flower", "tropical"], group: "Animals & Nature" },
|
|
308
|
+
{ emoji: "\u{1F332}", name: "evergreen_tree", shortcodes: ["evergreen_tree"], tags: ["tree", "pine"], group: "Animals & Nature" },
|
|
309
|
+
{ emoji: "\u{1F333}", name: "deciduous_tree", shortcodes: ["deciduous_tree"], tags: ["tree", "nature"], group: "Animals & Nature" },
|
|
310
|
+
{ emoji: "\u{1F334}", name: "palm_tree", shortcodes: ["palm_tree"], tags: ["tropical", "beach"], group: "Animals & Nature" },
|
|
311
|
+
{ emoji: "\u{1F340}", name: "four_leaf_clover", shortcodes: ["four_leaf_clover"], tags: ["luck", "irish"], group: "Animals & Nature" },
|
|
312
|
+
{ emoji: "\u{1F341}", name: "maple_leaf", shortcodes: ["maple_leaf"], tags: ["canada", "autumn"], group: "Animals & Nature" },
|
|
313
|
+
{ emoji: "\u{1F342}", name: "fallen_leaf", shortcodes: ["fallen_leaf"], tags: ["autumn", "fall"], group: "Animals & Nature" },
|
|
314
|
+
{ emoji: "\u{1F343}", name: "leaf_fluttering_in_wind", shortcodes: ["leaves"], tags: ["nature", "wind"], group: "Animals & Nature" },
|
|
315
|
+
{ emoji: "\u{1F335}", name: "cactus", shortcodes: ["cactus"], tags: ["desert", "plant"], group: "Animals & Nature" },
|
|
316
|
+
{ emoji: "\u{1F344}", name: "mushroom", shortcodes: ["mushroom"], tags: ["nature", "fungus"], group: "Animals & Nature" },
|
|
317
|
+
// === Additional Food & Drink ===
|
|
318
|
+
{ emoji: "\u{1F34C}", name: "banana", shortcodes: ["banana"], tags: ["fruit"], group: "Food & Drink" },
|
|
319
|
+
{ emoji: "\u{1F347}", name: "grapes", shortcodes: ["grapes"], tags: ["fruit", "wine"], group: "Food & Drink" },
|
|
320
|
+
{ emoji: "\u{1F349}", name: "watermelon", shortcodes: ["watermelon"], tags: ["fruit", "summer"], group: "Food & Drink" },
|
|
321
|
+
{ emoji: "\u{1F34A}", name: "tangerine", shortcodes: ["tangerine", "orange"], tags: ["fruit", "citrus"], group: "Food & Drink" },
|
|
322
|
+
{ emoji: "\u{1F34B}", name: "lemon", shortcodes: ["lemon"], tags: ["fruit", "citrus"], group: "Food & Drink" },
|
|
323
|
+
{ emoji: "\u{1F353}", name: "strawberry", shortcodes: ["strawberry"], tags: ["fruit", "berry"], group: "Food & Drink" },
|
|
324
|
+
{ emoji: "\u{1FAD0}", name: "blueberries", shortcodes: ["blueberries"], tags: ["fruit", "berry"], group: "Food & Drink" },
|
|
325
|
+
{ emoji: "\u{1F351}", name: "peach", shortcodes: ["peach"], tags: ["fruit"], group: "Food & Drink" },
|
|
326
|
+
{ emoji: "\u{1F951}", name: "avocado", shortcodes: ["avocado"], tags: ["fruit", "guacamole"], group: "Food & Drink" },
|
|
327
|
+
{ emoji: "\u{1F345}", name: "tomato", shortcodes: ["tomato"], tags: ["vegetable", "fruit"], group: "Food & Drink" },
|
|
328
|
+
{ emoji: "\u{1F955}", name: "carrot", shortcodes: ["carrot"], tags: ["vegetable", "orange"], group: "Food & Drink" },
|
|
329
|
+
{ emoji: "\u{1F33D}", name: "ear_of_corn", shortcodes: ["corn"], tags: ["vegetable", "maize"], group: "Food & Drink" },
|
|
330
|
+
{ emoji: "\u{1F966}", name: "broccoli", shortcodes: ["broccoli"], tags: ["vegetable", "green"], group: "Food & Drink" },
|
|
331
|
+
{ emoji: "\u{1F9C4}", name: "garlic", shortcodes: ["garlic"], tags: ["spice", "cooking"], group: "Food & Drink" },
|
|
332
|
+
{ emoji: "\u{1F95A}", name: "egg", shortcodes: ["egg"], tags: ["breakfast", "food"], group: "Food & Drink" },
|
|
333
|
+
{ emoji: "\u{1F373}", name: "cooking", shortcodes: ["fried_egg"], tags: ["breakfast", "egg"], group: "Food & Drink" },
|
|
334
|
+
{ emoji: "\u{1F95E}", name: "pancakes", shortcodes: ["pancakes"], tags: ["breakfast", "food"], group: "Food & Drink" },
|
|
335
|
+
{ emoji: "\u{1F9C7}", name: "waffle", shortcodes: ["waffle"], tags: ["breakfast", "food"], group: "Food & Drink" },
|
|
336
|
+
{ emoji: "\u{1F953}", name: "bacon", shortcodes: ["bacon"], tags: ["breakfast", "meat"], group: "Food & Drink" },
|
|
337
|
+
{ emoji: "\u{1F356}", name: "meat_on_bone", shortcodes: ["meat_on_bone"], tags: ["food", "bbq"], group: "Food & Drink" },
|
|
338
|
+
{ emoji: "\u{1F357}", name: "poultry_leg", shortcodes: ["poultry_leg"], tags: ["food", "chicken"], group: "Food & Drink" },
|
|
339
|
+
{ emoji: "\u{1F32D}", name: "hot_dog", shortcodes: ["hot_dog"], tags: ["food", "sausage"], group: "Food & Drink" },
|
|
340
|
+
{ emoji: "\u{1F96A}", name: "sandwich", shortcodes: ["sandwich"], tags: ["food", "lunch"], group: "Food & Drink" },
|
|
341
|
+
{ emoji: "\u{1F363}", name: "sushi", shortcodes: ["sushi"], tags: ["food", "japanese"], group: "Food & Drink" },
|
|
342
|
+
{ emoji: "\u{1F371}", name: "bento_box", shortcodes: ["bento"], tags: ["food", "japanese"], group: "Food & Drink" },
|
|
343
|
+
{ emoji: "\u{1F35C}", name: "steaming_bowl", shortcodes: ["ramen"], tags: ["food", "noodles", "soup"], group: "Food & Drink" },
|
|
344
|
+
{ emoji: "\u{1F35D}", name: "spaghetti", shortcodes: ["spaghetti"], tags: ["food", "pasta", "italian"], group: "Food & Drink" },
|
|
345
|
+
{ emoji: "\u{1F9C1}", name: "cupcake", shortcodes: ["cupcake"], tags: ["dessert", "sweet"], group: "Food & Drink" },
|
|
346
|
+
{ emoji: "\u{1F36B}", name: "chocolate_bar", shortcodes: ["chocolate_bar"], tags: ["sweet", "candy"], group: "Food & Drink" },
|
|
347
|
+
{ emoji: "\u{1F36D}", name: "lollipop", shortcodes: ["lollipop"], tags: ["sweet", "candy"], group: "Food & Drink" },
|
|
348
|
+
{ emoji: "\u{1F37F}", name: "popcorn", shortcodes: ["popcorn"], tags: ["movie", "snack"], group: "Food & Drink" },
|
|
349
|
+
{ emoji: "\u{1F9C3}", name: "beverage_box", shortcodes: ["beverage_box"], tags: ["juice", "drink"], group: "Food & Drink" },
|
|
350
|
+
{ emoji: "\u{1F964}", name: "cup_with_straw", shortcodes: ["cup_with_straw"], tags: ["drink", "soda"], group: "Food & Drink" },
|
|
351
|
+
{ emoji: "\u{1F9CA}", name: "ice", shortcodes: ["ice_cube"], tags: ["cold", "frozen"], group: "Food & Drink" },
|
|
352
|
+
{ emoji: "\u{1F943}", name: "tumbler_glass", shortcodes: ["tumbler_glass"], tags: ["whiskey", "drink"], group: "Food & Drink" },
|
|
353
|
+
{ emoji: "\u{1F378}", name: "cocktail_glass", shortcodes: ["cocktail"], tags: ["drink", "martini"], group: "Food & Drink" },
|
|
354
|
+
{ emoji: "\u{1F379}", name: "tropical_drink", shortcodes: ["tropical_drink"], tags: ["drink", "cocktail"], group: "Food & Drink" },
|
|
355
|
+
{ emoji: "\u{1FAD6}", name: "teapot", shortcodes: ["teapot"], tags: ["tea", "drink"], group: "Food & Drink" },
|
|
356
|
+
// === Travel & Places ===
|
|
357
|
+
{ emoji: "\u{1F30E}", name: "globe_showing_americas", shortcodes: ["earth_americas"], tags: ["world", "globe"], group: "Travel & Places" },
|
|
358
|
+
{ emoji: "\u{1F30F}", name: "globe_showing_asia_australia", shortcodes: ["earth_asia"], tags: ["world", "globe"], group: "Travel & Places" },
|
|
359
|
+
{ emoji: "\u{1F319}", name: "crescent_moon", shortcodes: ["crescent_moon"], tags: ["night", "moon"], group: "Travel & Places" },
|
|
360
|
+
{ emoji: "\u{1F31E}", name: "sun_with_face", shortcodes: ["sun_with_face"], tags: ["sun", "bright"], group: "Travel & Places" },
|
|
361
|
+
{ emoji: "\u2600\uFE0F", name: "sun", shortcodes: ["sunny"], tags: ["weather", "bright"], group: "Travel & Places" },
|
|
362
|
+
{ emoji: "\u26C5", name: "sun_behind_cloud", shortcodes: ["partly_sunny"], tags: ["weather", "cloud"], group: "Travel & Places" },
|
|
363
|
+
{ emoji: "\u2601\uFE0F", name: "cloud", shortcodes: ["cloud"], tags: ["weather"], group: "Travel & Places" },
|
|
364
|
+
{ emoji: "\u{1F327}\uFE0F", name: "cloud_with_rain", shortcodes: ["cloud_with_rain"], tags: ["weather", "rainy"], group: "Travel & Places" },
|
|
365
|
+
{ emoji: "\u26C8\uFE0F", name: "cloud_with_lightning_and_rain", shortcodes: ["cloud_with_lightning_and_rain"], tags: ["weather", "storm"], group: "Travel & Places" },
|
|
366
|
+
{ emoji: "\u{1F329}\uFE0F", name: "cloud_with_lightning", shortcodes: ["cloud_with_lightning"], tags: ["weather", "thunder"], group: "Travel & Places" },
|
|
367
|
+
{ emoji: "\u2744\uFE0F", name: "snowflake", shortcodes: ["snowflake"], tags: ["winter", "cold"], group: "Travel & Places" },
|
|
368
|
+
{ emoji: "\u26C4", name: "snowman_without_snow", shortcodes: ["snowman_without_snow"], tags: ["winter", "cold"], group: "Travel & Places" },
|
|
369
|
+
{ emoji: "\u{1F30A}", name: "water_wave", shortcodes: ["ocean"], tags: ["wave", "sea"], group: "Travel & Places" },
|
|
370
|
+
{ emoji: "\u{1F30B}", name: "volcano", shortcodes: ["volcano"], tags: ["eruption", "mountain"], group: "Travel & Places" },
|
|
371
|
+
{ emoji: "\u{1F3D4}\uFE0F", name: "snow_capped_mountain", shortcodes: ["mountain_snow"], tags: ["mountain", "snow"], group: "Travel & Places" },
|
|
372
|
+
{ emoji: "\u26F0\uFE0F", name: "mountain", shortcodes: ["mountain"], tags: ["nature", "hiking"], group: "Travel & Places" },
|
|
373
|
+
{ emoji: "\u{1F3D6}\uFE0F", name: "beach_with_umbrella", shortcodes: ["beach_umbrella"], tags: ["beach", "summer"], group: "Travel & Places" },
|
|
374
|
+
{ emoji: "\u{1F3D5}\uFE0F", name: "camping", shortcodes: ["camping"], tags: ["tent", "nature"], group: "Travel & Places" },
|
|
375
|
+
{ emoji: "\u{1F3E0}", name: "house", shortcodes: ["house"], tags: ["home", "building"], group: "Travel & Places" },
|
|
376
|
+
{ emoji: "\u{1F3E2}", name: "office_building", shortcodes: ["office"], tags: ["work", "building"], group: "Travel & Places" },
|
|
377
|
+
{ emoji: "\u{1F3E5}", name: "hospital", shortcodes: ["hospital"], tags: ["health", "medical"], group: "Travel & Places" },
|
|
378
|
+
{ emoji: "\u{1F3EB}", name: "school", shortcodes: ["school"], tags: ["education", "building"], group: "Travel & Places" },
|
|
379
|
+
{ emoji: "\u2708\uFE0F", name: "airplane", shortcodes: ["airplane"], tags: ["travel", "fly"], group: "Travel & Places" },
|
|
380
|
+
{ emoji: "\u{1F680}", name: "rocket", shortcodes: ["rocket"], tags: ["space", "launch", "fast"], group: "Travel & Places" },
|
|
381
|
+
{ emoji: "\u{1F6F8}", name: "flying_saucer", shortcodes: ["flying_saucer"], tags: ["ufo", "alien"], group: "Travel & Places" },
|
|
382
|
+
{ emoji: "\u{1F697}", name: "automobile", shortcodes: ["car", "red_car"], tags: ["vehicle", "drive"], group: "Travel & Places" },
|
|
383
|
+
{ emoji: "\u{1F695}", name: "taxi", shortcodes: ["taxi"], tags: ["vehicle", "cab"], group: "Travel & Places" },
|
|
384
|
+
{ emoji: "\u{1F68C}", name: "bus", shortcodes: ["bus"], tags: ["vehicle", "transit"], group: "Travel & Places" },
|
|
385
|
+
{ emoji: "\u{1F6B2}", name: "bicycle", shortcodes: ["bike"], tags: ["vehicle", "cycling"], group: "Travel & Places" },
|
|
386
|
+
{ emoji: "\u{1F6F5}", name: "motor_scooter", shortcodes: ["motor_scooter"], tags: ["vehicle", "vespa"], group: "Travel & Places" },
|
|
387
|
+
{ emoji: "\u{1F6A2}", name: "ship", shortcodes: ["ship"], tags: ["boat", "cruise"], group: "Travel & Places" },
|
|
388
|
+
{ emoji: "\u26F5", name: "sailboat", shortcodes: ["sailboat"], tags: ["boat", "sail"], group: "Travel & Places" },
|
|
389
|
+
// === Additional Objects ===
|
|
390
|
+
{ emoji: "\u231A", name: "watch", shortcodes: ["watch"], tags: ["time", "clock"], group: "Objects" },
|
|
391
|
+
{ emoji: "\u{1F5A5}\uFE0F", name: "desktop_computer", shortcodes: ["desktop_computer"], tags: ["computer", "pc"], group: "Objects" },
|
|
392
|
+
{ emoji: "\u2328\uFE0F", name: "keyboard", shortcodes: ["keyboard"], tags: ["type", "computer"], group: "Objects" },
|
|
393
|
+
{ emoji: "\u{1F5B1}\uFE0F", name: "computer_mouse", shortcodes: ["computer_mouse"], tags: ["click", "computer"], group: "Objects" },
|
|
394
|
+
{ emoji: "\u{1F3A5}", name: "movie_camera", shortcodes: ["movie_camera"], tags: ["film", "cinema"], group: "Objects" },
|
|
395
|
+
{ emoji: "\u{1F4FA}", name: "television", shortcodes: ["tv"], tags: ["screen", "watch"], group: "Objects" },
|
|
396
|
+
{ emoji: "\u{1F4FB}", name: "radio", shortcodes: ["radio"], tags: ["music", "broadcast"], group: "Objects" },
|
|
397
|
+
{ emoji: "\u{1F399}\uFE0F", name: "studio_microphone", shortcodes: ["studio_microphone"], tags: ["podcast", "recording"], group: "Objects" },
|
|
398
|
+
{ emoji: "\u{1F3A4}", name: "microphone", shortcodes: ["microphone"], tags: ["singing", "karaoke"], group: "Objects" },
|
|
399
|
+
{ emoji: "\u{1F3A7}", name: "headphone", shortcodes: ["headphones"], tags: ["music", "audio"], group: "Objects" },
|
|
400
|
+
{ emoji: "\u{1F3B9}", name: "musical_keyboard", shortcodes: ["musical_keyboard"], tags: ["piano", "music"], group: "Objects" },
|
|
401
|
+
{ emoji: "\u{1F941}", name: "drum", shortcodes: ["drum"], tags: ["music", "beat"], group: "Objects" },
|
|
402
|
+
{ emoji: "\u{1F3BA}", name: "trumpet", shortcodes: ["trumpet"], tags: ["music", "brass"], group: "Objects" },
|
|
403
|
+
{ emoji: "\u{1F3BB}", name: "violin", shortcodes: ["violin"], tags: ["music", "string"], group: "Objects" },
|
|
404
|
+
{ emoji: "\u{1F527}", name: "wrench", shortcodes: ["wrench"], tags: ["tool", "fix"], group: "Objects" },
|
|
405
|
+
{ emoji: "\u{1F528}", name: "hammer", shortcodes: ["hammer"], tags: ["tool", "build"], group: "Objects" },
|
|
406
|
+
{ emoji: "\u2699\uFE0F", name: "gear", shortcodes: ["gear"], tags: ["settings", "cog"], group: "Objects" },
|
|
407
|
+
{ emoji: "\u{1F517}", name: "link", shortcodes: ["link"], tags: ["url", "chain"], group: "Objects" },
|
|
408
|
+
{ emoji: "\u{1F587}\uFE0F", name: "linked_paperclips", shortcodes: ["paperclips"], tags: ["attach"], group: "Objects" },
|
|
409
|
+
{ emoji: "\u{1F4CF}", name: "straight_ruler", shortcodes: ["straight_ruler"], tags: ["measure", "school"], group: "Objects" },
|
|
410
|
+
{ emoji: "\u{1F4D0}", name: "triangular_ruler", shortcodes: ["triangular_ruler"], tags: ["math", "school"], group: "Objects" },
|
|
411
|
+
{ emoji: "\u2702\uFE0F", name: "scissors", shortcodes: ["scissors"], tags: ["cut"], group: "Objects" },
|
|
412
|
+
{ emoji: "\u{1F4E6}", name: "package", shortcodes: ["package"], tags: ["box", "delivery"], group: "Objects" },
|
|
413
|
+
{ emoji: "\u{1F4EB}", name: "closed_mailbox_with_raised_flag", shortcodes: ["mailbox"], tags: ["mail", "letter"], group: "Objects" },
|
|
414
|
+
{ emoji: "\u{1F4E7}", name: "email", shortcodes: ["email", "e-mail"], tags: ["mail", "letter"], group: "Objects" },
|
|
415
|
+
{ emoji: "\u{1F4F0}", name: "newspaper", shortcodes: ["newspaper"], tags: ["news", "media"], group: "Objects" },
|
|
416
|
+
{ emoji: "\u{1F5DE}\uFE0F", name: "rolled_up_newspaper", shortcodes: ["newspaper_roll"], tags: ["news"], group: "Objects" },
|
|
417
|
+
{ emoji: "\u{1F4D6}", name: "open_book", shortcodes: ["book", "open_book"], tags: ["read", "study"], group: "Objects" },
|
|
418
|
+
{ emoji: "\u{1F516}", name: "bookmark", shortcodes: ["bookmark"], tags: ["save", "mark"], group: "Objects" },
|
|
419
|
+
{ emoji: "\u{1F3F7}\uFE0F", name: "label", shortcodes: ["label"], tags: ["tag", "price"], group: "Objects" },
|
|
420
|
+
{ emoji: "\u{1F48A}", name: "pill", shortcodes: ["pill"], tags: ["medicine", "health"], group: "Objects" },
|
|
421
|
+
{ emoji: "\u{1FA79}", name: "adhesive_bandage", shortcodes: ["adhesive_bandage"], tags: ["bandaid", "heal"], group: "Objects" },
|
|
422
|
+
{ emoji: "\u{1F9F2}", name: "magnet", shortcodes: ["magnet"], tags: ["attract", "magnetic"], group: "Objects" },
|
|
423
|
+
{ emoji: "\u{1F9EA}", name: "test_tube", shortcodes: ["test_tube"], tags: ["science", "chemistry"], group: "Objects" },
|
|
424
|
+
{ emoji: "\u{1F9EC}", name: "dna", shortcodes: ["dna"], tags: ["science", "genetics"], group: "Objects" },
|
|
425
|
+
{ emoji: "\u{1F52C}", name: "microscope", shortcodes: ["microscope"], tags: ["science", "lab"], group: "Objects" },
|
|
426
|
+
{ emoji: "\u{1F52D}", name: "telescope", shortcodes: ["telescope"], tags: ["space", "astronomy"], group: "Objects" },
|
|
427
|
+
{ emoji: "\u{1F48E}", name: "gem_stone", shortcodes: ["gem"], tags: ["diamond", "jewel"], group: "Objects" },
|
|
428
|
+
{ emoji: "\u{1FA99}", name: "coin", shortcodes: ["coin"], tags: ["money", "currency"], group: "Objects" },
|
|
429
|
+
{ emoji: "\u{1F4B5}", name: "dollar_banknote", shortcodes: ["dollar"], tags: ["money", "cash"], group: "Objects" },
|
|
430
|
+
{ emoji: "\u{1F4B3}", name: "credit_card", shortcodes: ["credit_card"], tags: ["money", "payment"], group: "Objects" },
|
|
431
|
+
// === Additional Activities ===
|
|
432
|
+
{ emoji: "\u{1F3C8}", name: "american_football", shortcodes: ["football"], tags: ["sport", "nfl"], group: "Activities" },
|
|
433
|
+
{ emoji: "\u26BE", name: "baseball", shortcodes: ["baseball"], tags: ["sport"], group: "Activities" },
|
|
434
|
+
{ emoji: "\u{1F3BE}", name: "tennis", shortcodes: ["tennis"], tags: ["sport", "racket"], group: "Activities" },
|
|
435
|
+
{ emoji: "\u{1F3D0}", name: "volleyball", shortcodes: ["volleyball"], tags: ["sport"], group: "Activities" },
|
|
436
|
+
{ emoji: "\u{1F3D3}", name: "ping_pong", shortcodes: ["ping_pong"], tags: ["sport", "table tennis"], group: "Activities" },
|
|
437
|
+
{ emoji: "\u{1F94A}", name: "boxing_glove", shortcodes: ["boxing_glove"], tags: ["sport", "fight"], group: "Activities" },
|
|
438
|
+
{ emoji: "\u{1F3CB}\uFE0F", name: "person_lifting_weights", shortcodes: ["weight_lifting"], tags: ["gym", "exercise"], group: "Activities" },
|
|
439
|
+
{ emoji: "\u{1F6B4}", name: "person_biking", shortcodes: ["biking"], tags: ["cycling", "sport"], group: "Activities" },
|
|
440
|
+
{ emoji: "\u{1F3CA}", name: "person_swimming", shortcodes: ["swimming"], tags: ["sport", "pool"], group: "Activities" },
|
|
441
|
+
{ emoji: "\u{1F9D8}", name: "person_in_lotus_position", shortcodes: ["lotus_position"], tags: ["yoga", "meditation"], group: "Activities" },
|
|
442
|
+
{ emoji: "\u{1F3B2}", name: "game_die", shortcodes: ["game_die"], tags: ["dice", "game"], group: "Activities" },
|
|
443
|
+
{ emoji: "\u{1F9E9}", name: "puzzle_piece", shortcodes: ["jigsaw"], tags: ["puzzle", "game"], group: "Activities" },
|
|
444
|
+
{ emoji: "\u{1F3AD}", name: "performing_arts", shortcodes: ["performing_arts"], tags: ["theater", "drama"], group: "Activities" },
|
|
445
|
+
{ emoji: "\u{1F3A8}", name: "artist_palette", shortcodes: ["art"], tags: ["paint", "creative"], group: "Activities" },
|
|
446
|
+
{ emoji: "\u{1F3AC}", name: "clapper_board", shortcodes: ["clapper"], tags: ["movie", "film"], group: "Activities" },
|
|
447
|
+
{ emoji: "\u{1F3AA}", name: "circus_tent", shortcodes: ["circus_tent"], tags: ["circus", "show"], group: "Activities" },
|
|
448
|
+
{ emoji: "\u{1F948}", name: "second_place_medal", shortcodes: ["silver_medal"], tags: ["second", "silver"], group: "Activities" },
|
|
449
|
+
{ emoji: "\u{1F949}", name: "third_place_medal", shortcodes: ["bronze_medal"], tags: ["third", "bronze"], group: "Activities" },
|
|
450
|
+
{ emoji: "\u{1F397}\uFE0F", name: "reminder_ribbon", shortcodes: ["reminder_ribbon"], tags: ["awareness"], group: "Activities" },
|
|
451
|
+
{ emoji: "\u{1F39F}\uFE0F", name: "admission_tickets", shortcodes: ["tickets"], tags: ["event", "entry"], group: "Activities" },
|
|
452
|
+
{ emoji: "\u{1F384}", name: "christmas_tree", shortcodes: ["christmas_tree"], tags: ["holiday", "xmas"], group: "Activities" },
|
|
453
|
+
{ emoji: "\u{1F383}", name: "jack_o_lantern", shortcodes: ["jack_o_lantern"], tags: ["halloween", "pumpkin"], group: "Activities" },
|
|
454
|
+
{ emoji: "\u{1F386}", name: "fireworks", shortcodes: ["fireworks"], tags: ["celebration", "new year"], group: "Activities" },
|
|
455
|
+
{ emoji: "\u{1F387}", name: "sparkler", shortcodes: ["sparkler"], tags: ["celebration", "firework"], group: "Activities" },
|
|
456
|
+
// === Additional Symbols ===
|
|
457
|
+
{ emoji: "\u262E\uFE0F", name: "peace_symbol", shortcodes: ["peace_symbol"], tags: ["peace"], group: "Symbols" },
|
|
458
|
+
{ emoji: "\u271D\uFE0F", name: "latin_cross", shortcodes: ["latin_cross"], tags: ["religion", "christian"], group: "Symbols" },
|
|
459
|
+
{ emoji: "\u262A\uFE0F", name: "star_and_crescent", shortcodes: ["star_and_crescent"], tags: ["religion", "islam"], group: "Symbols" },
|
|
460
|
+
{ emoji: "\u2721\uFE0F", name: "star_of_david", shortcodes: ["star_of_david"], tags: ["religion", "jewish"], group: "Symbols" },
|
|
461
|
+
{ emoji: "\u262F\uFE0F", name: "yin_yang", shortcodes: ["yin_yang"], tags: ["balance"], group: "Symbols" },
|
|
462
|
+
{ emoji: "\u267E\uFE0F", name: "infinity", shortcodes: ["infinity"], tags: ["forever", "endless"], group: "Symbols" },
|
|
463
|
+
{ emoji: "\u{1F500}", name: "shuffle_tracks_button", shortcodes: ["twisted_rightwards_arrows"], tags: ["random", "shuffle"], group: "Symbols" },
|
|
464
|
+
{ emoji: "\u{1F501}", name: "repeat_button", shortcodes: ["repeat"], tags: ["loop", "replay"], group: "Symbols" },
|
|
465
|
+
{ emoji: "\u25B6\uFE0F", name: "play_button", shortcodes: ["arrow_forward"], tags: ["play", "start"], group: "Symbols" },
|
|
466
|
+
{ emoji: "\u23F8\uFE0F", name: "pause_button", shortcodes: ["pause_button"], tags: ["pause", "stop"], group: "Symbols" },
|
|
467
|
+
{ emoji: "\u23F9\uFE0F", name: "stop_button", shortcodes: ["stop_button"], tags: ["stop", "end"], group: "Symbols" },
|
|
468
|
+
{ emoji: "\u23E9", name: "fast_forward_button", shortcodes: ["fast_forward"], tags: ["speed", "skip"], group: "Symbols" },
|
|
469
|
+
{ emoji: "\u23EA", name: "fast_reverse_button", shortcodes: ["rewind"], tags: ["back", "reverse"], group: "Symbols" },
|
|
470
|
+
{ emoji: "\u{1F50A}", name: "speaker_high_volume", shortcodes: ["loud_sound"], tags: ["volume", "audio"], group: "Symbols" },
|
|
471
|
+
{ emoji: "\u{1F507}", name: "muted_speaker", shortcodes: ["mute"], tags: ["volume", "silent"], group: "Symbols" },
|
|
472
|
+
{ emoji: "\u{1F4F3}", name: "vibration_mode", shortcodes: ["vibration_mode"], tags: ["phone", "silent"], group: "Symbols" },
|
|
473
|
+
{ emoji: "\u{1F505}", name: "dim_button", shortcodes: ["low_brightness"], tags: ["brightness", "dim"], group: "Symbols" },
|
|
474
|
+
{ emoji: "\u{1F506}", name: "bright_button", shortcodes: ["high_brightness"], tags: ["brightness", "light"], group: "Symbols" },
|
|
475
|
+
{ emoji: "\u2640\uFE0F", name: "female_sign", shortcodes: ["female_sign"], tags: ["woman", "gender"], group: "Symbols" },
|
|
476
|
+
{ emoji: "\u2642\uFE0F", name: "male_sign", shortcodes: ["male_sign"], tags: ["man", "gender"], group: "Symbols" },
|
|
477
|
+
{ emoji: "\u26A7\uFE0F", name: "transgender_symbol", shortcodes: ["transgender_symbol"], tags: ["gender", "trans"], group: "Symbols" },
|
|
478
|
+
{ emoji: "\u2795", name: "plus", shortcodes: ["heavy_plus_sign"], tags: ["add", "math"], group: "Symbols" },
|
|
479
|
+
{ emoji: "\u2796", name: "minus", shortcodes: ["heavy_minus_sign"], tags: ["subtract", "math"], group: "Symbols" },
|
|
480
|
+
{ emoji: "\u2797", name: "divide", shortcodes: ["heavy_division_sign"], tags: ["divide", "math"], group: "Symbols" },
|
|
481
|
+
{ emoji: "\u2716\uFE0F", name: "multiply", shortcodes: ["heavy_multiplication_x"], tags: ["multiply", "math"], group: "Symbols" },
|
|
482
|
+
{ emoji: "\u{1F7E0}", name: "orange_circle", shortcodes: ["orange_circle"], tags: ["orange", "dot"], group: "Symbols" },
|
|
483
|
+
{ emoji: "\u{1F7E3}", name: "purple_circle", shortcodes: ["purple_circle"], tags: ["purple", "dot"], group: "Symbols" },
|
|
484
|
+
{ emoji: "\u{1F7E4}", name: "brown_circle", shortcodes: ["brown_circle"], tags: ["brown", "dot"], group: "Symbols" },
|
|
485
|
+
{ emoji: "\u26AB", name: "black_circle", shortcodes: ["black_circle"], tags: ["black", "dot"], group: "Symbols" },
|
|
486
|
+
{ emoji: "\u26AA", name: "white_circle", shortcodes: ["white_circle"], tags: ["white", "dot"], group: "Symbols" },
|
|
487
|
+
{ emoji: "\u{1F7E5}", name: "red_square", shortcodes: ["red_square"], tags: ["red", "square"], group: "Symbols" },
|
|
488
|
+
{ emoji: "\u{1F7E7}", name: "orange_square", shortcodes: ["orange_square"], tags: ["orange", "square"], group: "Symbols" },
|
|
489
|
+
{ emoji: "\u{1F7E8}", name: "yellow_square", shortcodes: ["yellow_square"], tags: ["yellow", "square"], group: "Symbols" },
|
|
490
|
+
{ emoji: "\u{1F7E9}", name: "green_square", shortcodes: ["green_square"], tags: ["green", "square"], group: "Symbols" },
|
|
491
|
+
{ emoji: "\u{1F7E6}", name: "blue_square", shortcodes: ["blue_square"], tags: ["blue", "square"], group: "Symbols" },
|
|
492
|
+
{ emoji: "\u{1F7EA}", name: "purple_square", shortcodes: ["purple_square"], tags: ["purple", "square"], group: "Symbols" },
|
|
493
|
+
{ emoji: "\u{1F536}", name: "large_orange_diamond", shortcodes: ["large_orange_diamond"], tags: ["shape"], group: "Symbols" },
|
|
494
|
+
{ emoji: "\u{1F537}", name: "large_blue_diamond", shortcodes: ["large_blue_diamond"], tags: ["shape"], group: "Symbols" },
|
|
495
|
+
{ emoji: "\u{1F538}", name: "small_orange_diamond", shortcodes: ["small_orange_diamond"], tags: ["shape"], group: "Symbols" },
|
|
496
|
+
{ emoji: "\u{1F539}", name: "small_blue_diamond", shortcodes: ["small_blue_diamond"], tags: ["shape"], group: "Symbols" },
|
|
497
|
+
{ emoji: "\u{1F4A0}", name: "diamond_with_a_dot", shortcodes: ["diamond_shape_with_a_dot_inside"], tags: ["shape"], group: "Symbols" },
|
|
498
|
+
// === Additional Flags ===
|
|
499
|
+
{ emoji: "\u{1F1FA}\u{1F1F8}", name: "flag_us", shortcodes: ["us", "flag_us"], tags: ["usa", "america"], group: "Flags" },
|
|
500
|
+
{ emoji: "\u{1F1EC}\u{1F1E7}", name: "flag_gb", shortcodes: ["gb", "uk", "flag_gb"], tags: ["britain", "england"], group: "Flags" },
|
|
501
|
+
{ emoji: "\u{1F1E9}\u{1F1EA}", name: "flag_de", shortcodes: ["de", "flag_de"], tags: ["germany"], group: "Flags" },
|
|
502
|
+
{ emoji: "\u{1F1EB}\u{1F1F7}", name: "flag_fr", shortcodes: ["fr", "flag_fr"], tags: ["france"], group: "Flags" },
|
|
503
|
+
{ emoji: "\u{1F1EA}\u{1F1F8}", name: "flag_es", shortcodes: ["es", "flag_es"], tags: ["spain"], group: "Flags" },
|
|
504
|
+
{ emoji: "\u{1F1EE}\u{1F1F9}", name: "flag_it", shortcodes: ["it", "flag_it"], tags: ["italy"], group: "Flags" },
|
|
505
|
+
{ emoji: "\u{1F1EF}\u{1F1F5}", name: "flag_jp", shortcodes: ["jp", "flag_jp"], tags: ["japan"], group: "Flags" },
|
|
506
|
+
{ emoji: "\u{1F1F0}\u{1F1F7}", name: "flag_kr", shortcodes: ["kr", "flag_kr"], tags: ["korea", "south korea"], group: "Flags" },
|
|
507
|
+
{ emoji: "\u{1F1E8}\u{1F1F3}", name: "flag_cn", shortcodes: ["cn", "flag_cn"], tags: ["china"], group: "Flags" },
|
|
508
|
+
{ emoji: "\u{1F1F7}\u{1F1FA}", name: "flag_ru", shortcodes: ["ru", "flag_ru"], tags: ["russia"], group: "Flags" },
|
|
509
|
+
{ emoji: "\u{1F1E7}\u{1F1F7}", name: "flag_br", shortcodes: ["br", "flag_br"], tags: ["brazil"], group: "Flags" },
|
|
510
|
+
{ emoji: "\u{1F1EE}\u{1F1F3}", name: "flag_in", shortcodes: ["flag_in"], tags: ["india"], group: "Flags" },
|
|
511
|
+
{ emoji: "\u{1F1E6}\u{1F1FA}", name: "flag_au", shortcodes: ["flag_au"], tags: ["australia"], group: "Flags" },
|
|
512
|
+
{ emoji: "\u{1F1E8}\u{1F1E6}", name: "flag_ca", shortcodes: ["flag_ca"], tags: ["canada"], group: "Flags" },
|
|
513
|
+
{ emoji: "\u{1F1F2}\u{1F1FD}", name: "flag_mx", shortcodes: ["flag_mx"], tags: ["mexico"], group: "Flags" },
|
|
514
|
+
{ emoji: "\u{1F1ED}\u{1F1F7}", name: "flag_hr", shortcodes: ["hr", "flag_hr"], tags: ["croatia"], group: "Flags" },
|
|
515
|
+
{ emoji: "\u{1F1F5}\u{1F1F1}", name: "flag_pl", shortcodes: ["flag_pl"], tags: ["poland"], group: "Flags" },
|
|
516
|
+
{ emoji: "\u{1F1F3}\u{1F1F1}", name: "flag_nl", shortcodes: ["flag_nl"], tags: ["netherlands"], group: "Flags" },
|
|
517
|
+
{ emoji: "\u{1F1F8}\u{1F1EA}", name: "flag_se", shortcodes: ["flag_se"], tags: ["sweden"], group: "Flags" },
|
|
518
|
+
{ emoji: "\u{1F1F3}\u{1F1F4}", name: "flag_no", shortcodes: ["flag_no"], tags: ["norway"], group: "Flags" },
|
|
519
|
+
{ emoji: "\u{1F1F9}\u{1F1F7}", name: "flag_tr", shortcodes: ["flag_tr"], tags: ["turkey"], group: "Flags" },
|
|
520
|
+
{ emoji: "\u{1F1FA}\u{1F1E6}", name: "flag_ua", shortcodes: ["flag_ua"], tags: ["ukraine"], group: "Flags" },
|
|
521
|
+
{ emoji: "\u{1F1F5}\u{1F1F9}", name: "flag_pt", shortcodes: ["flag_pt"], tags: ["portugal"], group: "Flags" },
|
|
522
|
+
{ emoji: "\u{1F1E8}\u{1F1ED}", name: "flag_ch", shortcodes: ["flag_ch"], tags: ["switzerland"], group: "Flags" },
|
|
523
|
+
{ emoji: "\u{1F1E6}\u{1F1F9}", name: "flag_at", shortcodes: ["flag_at"], tags: ["austria"], group: "Flags" },
|
|
524
|
+
{ emoji: "\u{1F1E7}\u{1F1EA}", name: "flag_be", shortcodes: ["flag_be"], tags: ["belgium"], group: "Flags" },
|
|
525
|
+
{ emoji: "\u{1F1EC}\u{1F1F7}", name: "flag_gr", shortcodes: ["flag_gr"], tags: ["greece"], group: "Flags" },
|
|
526
|
+
{ emoji: "\u{1F1EE}\u{1F1EA}", name: "flag_ie", shortcodes: ["flag_ie"], tags: ["ireland"], group: "Flags" },
|
|
527
|
+
{ emoji: "\u{1F1E6}\u{1F1F7}", name: "flag_ar", shortcodes: ["flag_ar"], tags: ["argentina"], group: "Flags" },
|
|
528
|
+
{ emoji: "\u{1F1FF}\u{1F1E6}", name: "flag_za", shortcodes: ["flag_za"], tags: ["south africa"], group: "Flags" },
|
|
529
|
+
{ emoji: "\u{1F1EA}\u{1F1EC}", name: "flag_eg", shortcodes: ["flag_eg"], tags: ["egypt"], group: "Flags" },
|
|
530
|
+
{ emoji: "\u{1F1EE}\u{1F1F1}", name: "flag_il", shortcodes: ["flag_il"], tags: ["israel"], group: "Flags" },
|
|
531
|
+
{ emoji: "\u{1F1F8}\u{1F1E6}", name: "flag_sa", shortcodes: ["flag_sa"], tags: ["saudi arabia"], group: "Flags" },
|
|
532
|
+
{ emoji: "\u{1F1F9}\u{1F1ED}", name: "flag_th", shortcodes: ["flag_th"], tags: ["thailand"], group: "Flags" },
|
|
533
|
+
{ emoji: "\u{1F1FB}\u{1F1F3}", name: "flag_vn", shortcodes: ["flag_vn"], tags: ["vietnam"], group: "Flags" },
|
|
534
|
+
{ emoji: "\u{1F1EE}\u{1F1E9}", name: "flag_id", shortcodes: ["flag_id"], tags: ["indonesia"], group: "Flags" },
|
|
535
|
+
{ emoji: "\u{1F1F5}\u{1F1ED}", name: "flag_ph", shortcodes: ["flag_ph"], tags: ["philippines"], group: "Flags" },
|
|
536
|
+
{ emoji: "\u{1F1F3}\u{1F1EC}", name: "flag_ng", shortcodes: ["flag_ng"], tags: ["nigeria"], group: "Flags" },
|
|
537
|
+
{ emoji: "\u{1F1F0}\u{1F1EA}", name: "flag_ke", shortcodes: ["flag_ke"], tags: ["kenya"], group: "Flags" },
|
|
538
|
+
{ emoji: "\u{1F1E8}\u{1F1F4}", name: "flag_co", shortcodes: ["flag_co"], tags: ["colombia"], group: "Flags" },
|
|
539
|
+
{ emoji: "\u{1F1F5}\u{1F1EA}", name: "flag_pe", shortcodes: ["flag_pe"], tags: ["peru"], group: "Flags" },
|
|
540
|
+
{ emoji: "\u{1F1E8}\u{1F1F1}", name: "flag_cl", shortcodes: ["flag_cl"], tags: ["chile"], group: "Flags" },
|
|
541
|
+
{ emoji: "\u{1F1F3}\u{1F1FF}", name: "flag_nz", shortcodes: ["flag_nz"], tags: ["new zealand"], group: "Flags" },
|
|
542
|
+
{ emoji: "\u{1F1F8}\u{1F1EC}", name: "flag_sg", shortcodes: ["flag_sg"], tags: ["singapore"], group: "Flags" },
|
|
543
|
+
{ emoji: "\u{1F1F2}\u{1F1FE}", name: "flag_my", shortcodes: ["flag_my"], tags: ["malaysia"], group: "Flags" },
|
|
544
|
+
{ emoji: "\u{1F1F7}\u{1F1F8}", name: "flag_rs", shortcodes: ["flag_rs"], tags: ["serbia"], group: "Flags" },
|
|
545
|
+
{ emoji: "\u{1F1E7}\u{1F1E6}", name: "flag_ba", shortcodes: ["flag_ba"], tags: ["bosnia"], group: "Flags" },
|
|
546
|
+
{ emoji: "\u{1F1F8}\u{1F1EE}", name: "flag_si", shortcodes: ["flag_si"], tags: ["slovenia"], group: "Flags" }
|
|
547
|
+
];
|
|
548
|
+
|
|
549
|
+
// src/emoticons.ts
|
|
550
|
+
var emoticons = {
|
|
551
|
+
// Smileys
|
|
552
|
+
":)": "slightly_smiling_face",
|
|
553
|
+
":-)": "slightly_smiling_face",
|
|
554
|
+
"(:": "slightly_smiling_face",
|
|
555
|
+
":D": "grinning_face_with_big_eyes",
|
|
556
|
+
":-D": "grinning_face_with_big_eyes",
|
|
557
|
+
";)": "winking_face",
|
|
558
|
+
";-)": "winking_face",
|
|
559
|
+
":(": "slightly_frowning_face",
|
|
560
|
+
":-(": "slightly_frowning_face",
|
|
561
|
+
":'(": "crying_face",
|
|
562
|
+
":P": "face_with_tongue",
|
|
563
|
+
":-P": "face_with_tongue",
|
|
564
|
+
":p": "face_with_tongue",
|
|
565
|
+
":O": "face_with_open_mouth",
|
|
566
|
+
":-O": "face_with_open_mouth",
|
|
567
|
+
":o": "face_with_open_mouth",
|
|
568
|
+
":/": "confused_face",
|
|
569
|
+
":-/": "confused_face",
|
|
570
|
+
":\\": "confused_face",
|
|
571
|
+
"B)": "smiling_face_with_sunglasses",
|
|
572
|
+
"8)": "smiling_face_with_sunglasses",
|
|
573
|
+
":*": "kissing_face",
|
|
574
|
+
":-*": "kissing_face",
|
|
575
|
+
">:(": "angry_face",
|
|
576
|
+
">:-(": "angry_face",
|
|
577
|
+
"XD": "face_with_tears_of_joy",
|
|
578
|
+
"xD": "face_with_tears_of_joy",
|
|
579
|
+
":$": "flushed_face",
|
|
580
|
+
"O:)": "smiling_face_with_halo",
|
|
581
|
+
">:)": "smiling_face_with_horns",
|
|
582
|
+
":|": "neutral_face",
|
|
583
|
+
":-|": "neutral_face",
|
|
584
|
+
// Symbols
|
|
585
|
+
"<3": "red_heart",
|
|
586
|
+
"</3": "broken_heart"
|
|
587
|
+
};
|
|
588
|
+
var emojiSuggestionPluginKey = new PluginKey(
|
|
589
|
+
"emojiSuggestion"
|
|
590
|
+
);
|
|
591
|
+
var INITIAL_STATE = {
|
|
592
|
+
active: false,
|
|
593
|
+
query: "",
|
|
594
|
+
range: null
|
|
595
|
+
};
|
|
596
|
+
function findSuggestionQuery(state, triggerChar, allowSpaces) {
|
|
597
|
+
const { selection } = state;
|
|
598
|
+
if (!selection.empty) return null;
|
|
599
|
+
const { $from } = selection;
|
|
600
|
+
if ($from.parent.type.spec.code) return null;
|
|
601
|
+
const activeMarks = state.storedMarks ?? $from.marks();
|
|
602
|
+
if (activeMarks.some((m) => m.type.name === "code")) return null;
|
|
603
|
+
const textBefore = $from.parent.textBetween(
|
|
604
|
+
0,
|
|
605
|
+
$from.parentOffset,
|
|
606
|
+
void 0,
|
|
607
|
+
"\uFFFC"
|
|
608
|
+
);
|
|
609
|
+
const triggerIndex = textBefore.lastIndexOf(triggerChar);
|
|
610
|
+
if (triggerIndex === -1) return null;
|
|
611
|
+
if (triggerIndex > 0 && textBefore[triggerIndex - 1] !== " ") return null;
|
|
612
|
+
const queryText = textBefore.slice(triggerIndex + triggerChar.length);
|
|
613
|
+
if (!allowSpaces && queryText.includes(" ")) return null;
|
|
614
|
+
if (!/^[a-zA-Z0-9_+\- ]*$/.test(queryText)) return null;
|
|
615
|
+
const from = $from.start() + triggerIndex;
|
|
616
|
+
const to = $from.pos;
|
|
617
|
+
return { query: queryText, range: { from, to } };
|
|
618
|
+
}
|
|
619
|
+
function createSuggestionPlugin(options) {
|
|
620
|
+
const triggerChar = options.char ?? ":";
|
|
621
|
+
const minQueryLength = options.minQueryLength ?? 0;
|
|
622
|
+
const allowSpaces = options.allowSpaces ?? false;
|
|
623
|
+
const getItems = options.items;
|
|
624
|
+
const getRender = options.render;
|
|
625
|
+
const { nodeType, storage, plainText } = options;
|
|
626
|
+
let renderer = null;
|
|
627
|
+
return new Plugin({
|
|
628
|
+
key: emojiSuggestionPluginKey,
|
|
629
|
+
state: {
|
|
630
|
+
init() {
|
|
631
|
+
return { ...INITIAL_STATE };
|
|
632
|
+
},
|
|
633
|
+
apply(tr, prev, _oldState, newState) {
|
|
634
|
+
if (tr.getMeta(emojiSuggestionPluginKey) === "dismiss") {
|
|
635
|
+
return { ...INITIAL_STATE };
|
|
636
|
+
}
|
|
637
|
+
const isUserInput = tr.docChanged || tr.selectionSet;
|
|
638
|
+
if (!isUserInput) return prev;
|
|
639
|
+
const result = findSuggestionQuery(newState, triggerChar, allowSpaces);
|
|
640
|
+
if (result && result.query.length >= minQueryLength) {
|
|
641
|
+
return {
|
|
642
|
+
active: true,
|
|
643
|
+
query: result.query,
|
|
644
|
+
range: result.range
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
if (prev.active) {
|
|
648
|
+
return { ...INITIAL_STATE };
|
|
649
|
+
}
|
|
650
|
+
return prev;
|
|
651
|
+
}
|
|
652
|
+
},
|
|
653
|
+
view() {
|
|
654
|
+
return {
|
|
655
|
+
update(view) {
|
|
656
|
+
const state = emojiSuggestionPluginKey.getState(view.state);
|
|
657
|
+
if (!state) return;
|
|
658
|
+
if (state.active && state.range) {
|
|
659
|
+
const items = getItems ? getItems({ query: state.query }) : storage.searchEmoji(state.query);
|
|
660
|
+
const command = (item) => {
|
|
661
|
+
if (!state.range) return;
|
|
662
|
+
const { tr } = view.state;
|
|
663
|
+
if (plainText) {
|
|
664
|
+
tr.replaceWith(
|
|
665
|
+
state.range.from,
|
|
666
|
+
state.range.to,
|
|
667
|
+
view.state.schema.text(item.emoji)
|
|
668
|
+
);
|
|
669
|
+
} else if (nodeType) {
|
|
670
|
+
const node = nodeType.create({ name: item.name });
|
|
671
|
+
tr.replaceWith(state.range.from, state.range.to, node);
|
|
672
|
+
}
|
|
673
|
+
tr.insertText(" ");
|
|
674
|
+
view.dispatch(tr);
|
|
675
|
+
storage.addFrequentlyUsed(item.name);
|
|
676
|
+
};
|
|
677
|
+
const clientRect = () => {
|
|
678
|
+
if (!state.range) return null;
|
|
679
|
+
try {
|
|
680
|
+
const coords = view.coordsAtPos(state.range.from);
|
|
681
|
+
return new DOMRect(coords.left, coords.top, 0, coords.bottom - coords.top);
|
|
682
|
+
} catch {
|
|
683
|
+
return null;
|
|
684
|
+
}
|
|
685
|
+
};
|
|
686
|
+
const props = {
|
|
687
|
+
query: state.query,
|
|
688
|
+
range: state.range,
|
|
689
|
+
items,
|
|
690
|
+
command,
|
|
691
|
+
clientRect,
|
|
692
|
+
element: view.dom
|
|
693
|
+
};
|
|
694
|
+
if (!renderer && getRender) {
|
|
695
|
+
renderer = getRender();
|
|
696
|
+
renderer.onStart(props);
|
|
697
|
+
} else if (renderer) {
|
|
698
|
+
renderer.onUpdate(props);
|
|
699
|
+
}
|
|
700
|
+
} else if (renderer) {
|
|
701
|
+
renderer.onExit();
|
|
702
|
+
renderer = null;
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
destroy() {
|
|
706
|
+
if (renderer) {
|
|
707
|
+
renderer.onExit();
|
|
708
|
+
renderer = null;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
};
|
|
712
|
+
},
|
|
713
|
+
props: {
|
|
714
|
+
// Use handleDOMEvents.keydown instead of handleKeyDown so that
|
|
715
|
+
// suggestion key handling fires BEFORE keymap plugins (which use
|
|
716
|
+
// handleKeyDown and would otherwise intercept Enter/ArrowUp/ArrowDown).
|
|
717
|
+
handleDOMEvents: {
|
|
718
|
+
keydown(view, event) {
|
|
719
|
+
const state = emojiSuggestionPluginKey.getState(view.state);
|
|
720
|
+
if (!state?.active) return false;
|
|
721
|
+
if (event.key === "Escape") {
|
|
722
|
+
event.preventDefault();
|
|
723
|
+
const { tr } = view.state;
|
|
724
|
+
tr.setMeta(emojiSuggestionPluginKey, "dismiss");
|
|
725
|
+
view.dispatch(tr);
|
|
726
|
+
return true;
|
|
727
|
+
}
|
|
728
|
+
if (renderer) {
|
|
729
|
+
const handled = renderer.onKeyDown(event);
|
|
730
|
+
if (handled) {
|
|
731
|
+
event.preventDefault();
|
|
732
|
+
}
|
|
733
|
+
return handled;
|
|
734
|
+
}
|
|
735
|
+
return false;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
});
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
// src/Emoji.ts
|
|
743
|
+
function buildShortcodeMap(items) {
|
|
744
|
+
const map = /* @__PURE__ */ new Map();
|
|
745
|
+
for (const item of items) {
|
|
746
|
+
for (const code of item.shortcodes) {
|
|
747
|
+
map.set(code, item);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
return map;
|
|
751
|
+
}
|
|
752
|
+
function buildNameMap(items) {
|
|
753
|
+
const map = /* @__PURE__ */ new Map();
|
|
754
|
+
for (const item of items) {
|
|
755
|
+
map.set(item.name, item);
|
|
756
|
+
}
|
|
757
|
+
return map;
|
|
758
|
+
}
|
|
759
|
+
function escapeRegex(str) {
|
|
760
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
761
|
+
}
|
|
762
|
+
var Emoji = Node.create({
|
|
763
|
+
name: "emoji",
|
|
764
|
+
group: "inline",
|
|
765
|
+
inline: true,
|
|
766
|
+
atom: true,
|
|
767
|
+
selectable: true,
|
|
768
|
+
draggable: false,
|
|
769
|
+
addOptions() {
|
|
770
|
+
return {
|
|
771
|
+
emojis,
|
|
772
|
+
enableEmoticons: false,
|
|
773
|
+
plainText: false,
|
|
774
|
+
HTMLAttributes: {},
|
|
775
|
+
suggestion: null
|
|
776
|
+
};
|
|
777
|
+
},
|
|
778
|
+
addStorage() {
|
|
779
|
+
return {
|
|
780
|
+
getFrequentlyUsed: () => [],
|
|
781
|
+
addFrequentlyUsed: () => void 0,
|
|
782
|
+
findEmoji: () => void 0,
|
|
783
|
+
searchEmoji: () => []
|
|
784
|
+
};
|
|
785
|
+
},
|
|
786
|
+
onCreate() {
|
|
787
|
+
const { emojis: emojiData } = this.options;
|
|
788
|
+
const nameMap = this.storage._nameMap ?? buildNameMap(emojiData);
|
|
789
|
+
const shortcodeMap = this.storage._shortcodeMap ?? buildShortcodeMap(emojiData);
|
|
790
|
+
const frequencyMap = /* @__PURE__ */ new Map();
|
|
791
|
+
this.storage.findEmoji = (name) => nameMap.get(name);
|
|
792
|
+
this.storage.searchEmoji = (query) => {
|
|
793
|
+
const q = query.toLowerCase();
|
|
794
|
+
return emojiData.filter(
|
|
795
|
+
(item) => item.name.includes(q) || item.shortcodes.some((sc) => sc.includes(q)) || item.tags.some((t) => t.includes(q))
|
|
796
|
+
);
|
|
797
|
+
};
|
|
798
|
+
this.storage.addFrequentlyUsed = (name) => {
|
|
799
|
+
frequencyMap.set(name, (frequencyMap.get(name) ?? 0) + 1);
|
|
800
|
+
};
|
|
801
|
+
this.storage.getFrequentlyUsed = () => [...frequencyMap.entries()].sort((a, b) => b[1] - a[1]).map(([name]) => name);
|
|
802
|
+
this.storage._shortcodeMap = shortcodeMap;
|
|
803
|
+
this.storage._nameMap = nameMap;
|
|
804
|
+
},
|
|
805
|
+
addAttributes() {
|
|
806
|
+
return {
|
|
807
|
+
name: {
|
|
808
|
+
default: null,
|
|
809
|
+
parseHTML: (element) => element.getAttribute("data-name") ?? element.getAttribute("data-emoji-name"),
|
|
810
|
+
renderHTML: (attributes) => {
|
|
811
|
+
if (!attributes["name"]) return {};
|
|
812
|
+
return { "data-name": attributes["name"] };
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
};
|
|
816
|
+
},
|
|
817
|
+
parseHTML() {
|
|
818
|
+
return [
|
|
819
|
+
{
|
|
820
|
+
tag: 'span[data-type="emoji"]'
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
tag: "span[data-emoji-name]"
|
|
824
|
+
}
|
|
825
|
+
];
|
|
826
|
+
},
|
|
827
|
+
renderHTML({ node, HTMLAttributes }) {
|
|
828
|
+
const name = node.attrs["name"];
|
|
829
|
+
const nameMap = this.storage._nameMap;
|
|
830
|
+
const item = name ? nameMap?.get(name) : void 0;
|
|
831
|
+
const emoji = item?.emoji ?? "";
|
|
832
|
+
return [
|
|
833
|
+
"span",
|
|
834
|
+
{
|
|
835
|
+
...this.options.HTMLAttributes,
|
|
836
|
+
...HTMLAttributes,
|
|
837
|
+
"data-type": "emoji",
|
|
838
|
+
"data-name": name ?? "",
|
|
839
|
+
class: [
|
|
840
|
+
this.options.HTMLAttributes["class"],
|
|
841
|
+
HTMLAttributes["class"],
|
|
842
|
+
"emoji"
|
|
843
|
+
].filter(Boolean).join(" ")
|
|
844
|
+
},
|
|
845
|
+
emoji
|
|
846
|
+
];
|
|
847
|
+
},
|
|
848
|
+
// leafText: emoji char for getText() and clipboard
|
|
849
|
+
leafText(node) {
|
|
850
|
+
const name = node.attrs["name"];
|
|
851
|
+
const nameMap = this.storage._nameMap;
|
|
852
|
+
const item = name ? nameMap?.get(name) : void 0;
|
|
853
|
+
return item?.emoji ?? "";
|
|
854
|
+
},
|
|
855
|
+
addToolbarItems() {
|
|
856
|
+
return [
|
|
857
|
+
{
|
|
858
|
+
type: "button",
|
|
859
|
+
name: "emoji",
|
|
860
|
+
command: "insertEmoji",
|
|
861
|
+
commandArgs: ["smile"],
|
|
862
|
+
icon: "smiley",
|
|
863
|
+
label: "Insert Emoji",
|
|
864
|
+
group: "insert",
|
|
865
|
+
priority: 50,
|
|
866
|
+
emitEvent: "insertEmoji"
|
|
867
|
+
}
|
|
868
|
+
];
|
|
869
|
+
},
|
|
870
|
+
addCommands() {
|
|
871
|
+
return {
|
|
872
|
+
insertEmoji: (name) => ({ tr, dispatch }) => {
|
|
873
|
+
if (tr.selection.$from.parent.type.spec.code) return false;
|
|
874
|
+
if (!this.options.plainText && !this.nodeType) return false;
|
|
875
|
+
const item = this.storage._nameMap?.get(name);
|
|
876
|
+
if (dispatch) {
|
|
877
|
+
if (!item) return false;
|
|
878
|
+
if (this.options.plainText) {
|
|
879
|
+
tr.insertText(item.emoji);
|
|
880
|
+
} else {
|
|
881
|
+
const nt = this.nodeType;
|
|
882
|
+
if (!nt) return false;
|
|
883
|
+
const node = nt.create({ name });
|
|
884
|
+
tr.replaceSelectionWith(node);
|
|
885
|
+
}
|
|
886
|
+
dispatch(tr);
|
|
887
|
+
this.storage.addFrequentlyUsed(name);
|
|
888
|
+
} else if (!item) {
|
|
889
|
+
return true;
|
|
890
|
+
}
|
|
891
|
+
return true;
|
|
892
|
+
},
|
|
893
|
+
suggestEmoji: () => ({ tr, dispatch }) => {
|
|
894
|
+
const suggestion = this.options.suggestion;
|
|
895
|
+
if (!suggestion) return false;
|
|
896
|
+
const char = suggestion.char ?? ":";
|
|
897
|
+
if (dispatch) {
|
|
898
|
+
tr.insertText(char);
|
|
899
|
+
dispatch(tr);
|
|
900
|
+
}
|
|
901
|
+
return true;
|
|
902
|
+
}
|
|
903
|
+
};
|
|
904
|
+
},
|
|
905
|
+
addInputRules() {
|
|
906
|
+
const rules = [];
|
|
907
|
+
const { emojis: emojiData, plainText, enableEmoticons } = this.options;
|
|
908
|
+
this.storage._shortcodeMap ??= buildShortcodeMap(emojiData);
|
|
909
|
+
this.storage._nameMap ??= buildNameMap(emojiData);
|
|
910
|
+
const nodeType = this.nodeType;
|
|
911
|
+
const storage = this.storage;
|
|
912
|
+
rules.push(
|
|
913
|
+
new InputRule(
|
|
914
|
+
/:([a-zA-Z0-9_+-]+):$/,
|
|
915
|
+
(state, match, start, end) => {
|
|
916
|
+
const { $from } = state.selection;
|
|
917
|
+
if ($from.parent.type.spec.code) return null;
|
|
918
|
+
const activeMarks = state.storedMarks ?? $from.marks();
|
|
919
|
+
if (activeMarks.some((m) => m.type.name === "code")) return null;
|
|
920
|
+
const shortcode = match[1];
|
|
921
|
+
if (!shortcode) return null;
|
|
922
|
+
const item = storage._shortcodeMap?.get(shortcode);
|
|
923
|
+
if (!item) return null;
|
|
924
|
+
const { tr } = state;
|
|
925
|
+
if (plainText) {
|
|
926
|
+
tr.replaceWith(start, end, state.schema.text(item.emoji));
|
|
927
|
+
} else if (nodeType) {
|
|
928
|
+
const node = nodeType.create({ name: item.name });
|
|
929
|
+
tr.replaceWith(start, end, node);
|
|
930
|
+
} else {
|
|
931
|
+
return null;
|
|
932
|
+
}
|
|
933
|
+
storage.addFrequentlyUsed(item.name);
|
|
934
|
+
return tr;
|
|
935
|
+
}
|
|
936
|
+
)
|
|
937
|
+
);
|
|
938
|
+
if (enableEmoticons) {
|
|
939
|
+
const emoticonEntries = Object.entries(emoticons);
|
|
940
|
+
const nameMap = this.storage._nameMap;
|
|
941
|
+
emoticonEntries.sort((a, b) => b[0].length - a[0].length);
|
|
942
|
+
for (const [emoticon, emojiName] of emoticonEntries) {
|
|
943
|
+
const item = nameMap.get(emojiName);
|
|
944
|
+
if (!item) continue;
|
|
945
|
+
const pattern = new RegExp(`(?:^|\\s)(${escapeRegex(emoticon)})\\s$`);
|
|
946
|
+
rules.push(
|
|
947
|
+
new InputRule(
|
|
948
|
+
pattern,
|
|
949
|
+
(state, match, start) => {
|
|
950
|
+
const { $from } = state.selection;
|
|
951
|
+
if ($from.parent.type.spec.code) return null;
|
|
952
|
+
const activeMarks = state.storedMarks ?? $from.marks();
|
|
953
|
+
if (activeMarks.some((m) => m.type.name === "code")) return null;
|
|
954
|
+
const { tr } = state;
|
|
955
|
+
const fullMatch = match[0];
|
|
956
|
+
const emoticonText = match[1];
|
|
957
|
+
if (!emoticonText) return null;
|
|
958
|
+
const emoticonStart = start + fullMatch.indexOf(emoticonText);
|
|
959
|
+
const emoticonEnd = emoticonStart + emoticonText.length;
|
|
960
|
+
if (plainText) {
|
|
961
|
+
tr.replaceWith(emoticonStart, emoticonEnd, state.schema.text(item.emoji));
|
|
962
|
+
} else if (nodeType) {
|
|
963
|
+
const node = nodeType.create({ name: item.name });
|
|
964
|
+
tr.replaceWith(emoticonStart, emoticonEnd, node);
|
|
965
|
+
} else {
|
|
966
|
+
return null;
|
|
967
|
+
}
|
|
968
|
+
storage.addFrequentlyUsed(item.name);
|
|
969
|
+
return tr;
|
|
970
|
+
}
|
|
971
|
+
)
|
|
972
|
+
);
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
return rules;
|
|
976
|
+
},
|
|
977
|
+
addProseMirrorPlugins() {
|
|
978
|
+
const { suggestion } = this.options;
|
|
979
|
+
if (!suggestion) return [];
|
|
980
|
+
return [
|
|
981
|
+
createSuggestionPlugin({
|
|
982
|
+
...suggestion,
|
|
983
|
+
editor: this.editor,
|
|
984
|
+
nodeType: this.nodeType,
|
|
985
|
+
storage: this.storage,
|
|
986
|
+
plainText: this.options.plainText
|
|
987
|
+
})
|
|
988
|
+
];
|
|
989
|
+
}
|
|
990
|
+
});
|
|
991
|
+
var MAX_ITEMS = 10;
|
|
992
|
+
function createEmojiSuggestionRenderer() {
|
|
993
|
+
return () => {
|
|
994
|
+
let container = null;
|
|
995
|
+
let currentProps = null;
|
|
996
|
+
let selectedIndex = 0;
|
|
997
|
+
let cleanupFloating = null;
|
|
998
|
+
function render() {
|
|
999
|
+
if (!container || !currentProps) return;
|
|
1000
|
+
const { items, command } = currentProps;
|
|
1001
|
+
const visible = items.slice(0, MAX_ITEMS);
|
|
1002
|
+
container.innerHTML = "";
|
|
1003
|
+
if (visible.length === 0) {
|
|
1004
|
+
const empty = document.createElement("div");
|
|
1005
|
+
empty.className = "dm-emoji-suggestion-empty";
|
|
1006
|
+
empty.textContent = "No emoji found";
|
|
1007
|
+
container.appendChild(empty);
|
|
1008
|
+
return;
|
|
1009
|
+
}
|
|
1010
|
+
visible.forEach((item, i) => {
|
|
1011
|
+
const btn = document.createElement("button");
|
|
1012
|
+
btn.type = "button";
|
|
1013
|
+
btn.className = "dm-emoji-suggestion-item" + (i === selectedIndex ? " dm-emoji-suggestion-item--selected" : "");
|
|
1014
|
+
btn.setAttribute("role", "option");
|
|
1015
|
+
btn.setAttribute("aria-selected", String(i === selectedIndex));
|
|
1016
|
+
const emojiSpan = document.createElement("span");
|
|
1017
|
+
emojiSpan.className = "dm-emoji-suggestion-emoji";
|
|
1018
|
+
emojiSpan.textContent = item.emoji;
|
|
1019
|
+
const nameSpan = document.createElement("span");
|
|
1020
|
+
nameSpan.className = "dm-emoji-suggestion-name";
|
|
1021
|
+
nameSpan.textContent = item.name.replace(/_/g, " ");
|
|
1022
|
+
btn.appendChild(emojiSpan);
|
|
1023
|
+
btn.appendChild(nameSpan);
|
|
1024
|
+
btn.addEventListener("mousedown", (e) => {
|
|
1025
|
+
e.preventDefault();
|
|
1026
|
+
e.stopPropagation();
|
|
1027
|
+
});
|
|
1028
|
+
btn.addEventListener("click", () => {
|
|
1029
|
+
command(item);
|
|
1030
|
+
});
|
|
1031
|
+
btn.addEventListener("mouseenter", () => {
|
|
1032
|
+
if (selectedIndex === i) return;
|
|
1033
|
+
const prev = container?.querySelector(".dm-emoji-suggestion-item--selected");
|
|
1034
|
+
if (prev) {
|
|
1035
|
+
prev.classList.remove("dm-emoji-suggestion-item--selected");
|
|
1036
|
+
prev.setAttribute("aria-selected", "false");
|
|
1037
|
+
}
|
|
1038
|
+
selectedIndex = i;
|
|
1039
|
+
btn.classList.add("dm-emoji-suggestion-item--selected");
|
|
1040
|
+
btn.setAttribute("aria-selected", "true");
|
|
1041
|
+
});
|
|
1042
|
+
container?.appendChild(btn);
|
|
1043
|
+
});
|
|
1044
|
+
}
|
|
1045
|
+
function updatePosition() {
|
|
1046
|
+
if (!container || !currentProps?.clientRect) return;
|
|
1047
|
+
cleanupFloating?.();
|
|
1048
|
+
const virtualEl = {
|
|
1049
|
+
getBoundingClientRect: () => {
|
|
1050
|
+
const rect = currentProps?.clientRect?.();
|
|
1051
|
+
return rect ?? new DOMRect(0, 0, 0, 0);
|
|
1052
|
+
}
|
|
1053
|
+
};
|
|
1054
|
+
cleanupFloating = positionFloatingOnce(virtualEl, container, {
|
|
1055
|
+
placement: "bottom-start",
|
|
1056
|
+
offsetValue: 4
|
|
1057
|
+
});
|
|
1058
|
+
}
|
|
1059
|
+
return {
|
|
1060
|
+
onStart(props) {
|
|
1061
|
+
currentProps = props;
|
|
1062
|
+
selectedIndex = 0;
|
|
1063
|
+
container = document.createElement("div");
|
|
1064
|
+
container.className = "dm-emoji-suggestion";
|
|
1065
|
+
container.setAttribute("role", "listbox");
|
|
1066
|
+
const editorEl = props.element.closest(".dm-editor");
|
|
1067
|
+
const appendTarget = editorEl ?? document.body;
|
|
1068
|
+
appendTarget.appendChild(container);
|
|
1069
|
+
render();
|
|
1070
|
+
updatePosition();
|
|
1071
|
+
},
|
|
1072
|
+
onUpdate(props) {
|
|
1073
|
+
currentProps = props;
|
|
1074
|
+
selectedIndex = 0;
|
|
1075
|
+
render();
|
|
1076
|
+
updatePosition();
|
|
1077
|
+
},
|
|
1078
|
+
onExit() {
|
|
1079
|
+
cleanupFloating?.();
|
|
1080
|
+
cleanupFloating = null;
|
|
1081
|
+
container?.remove();
|
|
1082
|
+
container = null;
|
|
1083
|
+
currentProps = null;
|
|
1084
|
+
selectedIndex = 0;
|
|
1085
|
+
},
|
|
1086
|
+
onKeyDown(event) {
|
|
1087
|
+
if (!currentProps) return false;
|
|
1088
|
+
const maxIndex = Math.min(currentProps.items.length, MAX_ITEMS) - 1;
|
|
1089
|
+
if (event.key === "ArrowDown") {
|
|
1090
|
+
selectedIndex = Math.min(selectedIndex + 1, maxIndex);
|
|
1091
|
+
render();
|
|
1092
|
+
return true;
|
|
1093
|
+
}
|
|
1094
|
+
if (event.key === "ArrowUp") {
|
|
1095
|
+
selectedIndex = Math.max(selectedIndex - 1, 0);
|
|
1096
|
+
render();
|
|
1097
|
+
return true;
|
|
1098
|
+
}
|
|
1099
|
+
if (event.key === "Enter") {
|
|
1100
|
+
const item = currentProps.items[selectedIndex];
|
|
1101
|
+
if (item) currentProps.command(item);
|
|
1102
|
+
return true;
|
|
1103
|
+
}
|
|
1104
|
+
return false;
|
|
1105
|
+
}
|
|
1106
|
+
};
|
|
1107
|
+
};
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
export { Emoji, allEmojis, createEmojiSuggestionRenderer, createSuggestionPlugin, Emoji as default, emojiSuggestionPluginKey, emojis, emoticons };
|
|
1111
|
+
//# sourceMappingURL=index.js.map
|
|
1112
|
+
//# sourceMappingURL=index.js.map
|