From be0c9b6f0e4ebd44f204775c40e09e20bacdae65 Mon Sep 17 00:00:00 2001 From: alexa Date: Sun, 28 Apr 2024 23:16:38 +0200 Subject: [PATCH] add emoji support for :format: --- ui/js/markdown/EmojiList.mjs | 4227 +++++++++++++++++ ui/js/markdown/Emojis.mjs | 109 + ui/js/{ => markdown}/MarkdownProcessor.mjs | 9 +- .../markdown}/MarkdownTemplates.mjs | 0 ui/styles.css | 7 +- ui/templates/ChatTemplates.mjs | 2 +- 6 files changed, 4349 insertions(+), 5 deletions(-) create mode 100644 ui/js/markdown/EmojiList.mjs create mode 100644 ui/js/markdown/Emojis.mjs rename ui/js/{ => markdown}/MarkdownProcessor.mjs (96%) rename ui/{templates => js/markdown}/MarkdownTemplates.mjs (100%) diff --git a/ui/js/markdown/EmojiList.mjs b/ui/js/markdown/EmojiList.mjs new file mode 100644 index 0000000..3d75df0 --- /dev/null +++ b/ui/js/markdown/EmojiList.mjs @@ -0,0 +1,4227 @@ +export const Emojis = [ + { + "name": "emoji_u1f600", + "codepoint": "1f600", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":smile:" + ] + }, + { + "name": "emoji_u1f603", + "codepoint": "1f603", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":smile-with-big-eyes:" + ] + }, + { + "name": "emoji_u1f604", + "codepoint": "1f604", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":grin:" + ] + }, + { + "name": "emoji_u1f601", + "codepoint": "1f601", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":grinning:" + ] + }, + { + "name": "emoji_u1f606", + "codepoint": "1f606", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":laughing:" + ] + }, + { + "name": "emoji_u1f605", + "codepoint": "1f605", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":grin-sweat:" + ] + }, + { + "name": "emoji_u1f602", + "codepoint": "1f602", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":joy:" + ] + }, + { + "name": "emoji_u1f923", + "codepoint": "1f923", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":rofl:" + ] + }, + { + "name": "emoji_u1f62d", + "codepoint": "1f62d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":loudly-crying:" + ] + }, + { + "name": "emoji_u1f609", + "codepoint": "1f609", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":wink:" + ] + }, + { + "name": "emoji_u1f617", + "codepoint": "1f617", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":kissing:" + ] + }, + { + "name": "emoji_u1f619", + "codepoint": "1f619", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":kissing-smiling-eyes:" + ] + }, + { + "name": "emoji_u1f61a", + "codepoint": "1f61a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":kissing-closed-eyes:" + ] + }, + { + "name": "emoji_u1f618", + "codepoint": "1f618", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":kissing-heart:" + ] + }, + { + "name": "emoji_u1f970", + "codepoint": "1f970", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":heart-face:", + ":3-hearts:" + ] + }, + { + "name": "emoji_u1f60d", + "codepoint": "1f60d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":heart-eyes:" + ] + }, + { + "name": "emoji_u1f929", + "codepoint": "1f929", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":star-struck:" + ] + }, + { + "name": "emoji_u1f973", + "codepoint": "1f973", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":partying-face:" + ] + }, + { + "name": "emoji_u1fae0", + "codepoint": "1fae0", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":melting:" + ] + }, + { + "name": "emoji_u1f643", + "codepoint": "1f643", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":upside-down-face:" + ] + }, + { + "name": "emoji_u1f642", + "codepoint": "1f642", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":slightly-happy:" + ] + }, + { + "name": "emoji_u1f972", + "codepoint": "1f972", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":happy-cry:" + ] + }, + { + "name": "emoji_u1f979", + "codepoint": "1f979", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":holding-back-tears:" + ] + }, + { + "name": "emoji_u1f60a", + "codepoint": "1f60a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":blush:" + ] + }, + { + "name": "emoji_u263a_fe0f", + "codepoint": "263a_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":warm-smile:" + ] + }, + { + "name": "emoji_u1f60c", + "codepoint": "1f60c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":relieved:" + ] + }, + { + "name": "emoji_u1f60f", + "codepoint": "1f60f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":smirk:" + ] + }, + { + "name": "emoji_u1f924", + "codepoint": "1f924", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":drool:" + ] + }, + { + "name": "emoji_u1f60b", + "codepoint": "1f60b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":yum:" + ] + }, + { + "name": "emoji_u1f61b", + "codepoint": "1f61b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":stuck-out-tongue:" + ] + }, + { + "name": "emoji_u1f61d", + "codepoint": "1f61d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":squinting-tongue:" + ] + }, + { + "name": "emoji_u1f61c", + "codepoint": "1f61c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":winky-tongue:" + ] + }, + { + "name": "emoji_u1f92a", + "codepoint": "1f92a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":zany-face:" + ] + }, + { + "name": "emoji_u1f974", + "codepoint": "1f974", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":woozy:" + ] + }, + { + "name": "emoji_u1f614", + "codepoint": "1f614", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":pensive:" + ] + }, + { + "name": "emoji_u1f97a", + "codepoint": "1f97a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":pleading:" + ] + }, + { + "name": "emoji_u1f62c", + "codepoint": "1f62c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":grimacing:" + ] + }, + { + "name": "emoji_u1f611", + "codepoint": "1f611", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":expressionless:" + ] + }, + { + "name": "emoji_u1f610", + "codepoint": "1f610", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":neutral-face:" + ] + }, + { + "name": "emoji_u1f636", + "codepoint": "1f636", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":mouth-none:" + ] + }, + { + "name": "emoji_u1f636_200d_1f32b_fe0f", + "codepoint": "1f636_200d_1f32b_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":face-in-clouds:", + ":lost:" + ] + }, + { + "name": "emoji_u1fae5", + "codepoint": "1fae5", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":dotted-line-face:", + ":invisible:" + ] + }, + { + "name": "emoji_u1f910", + "codepoint": "1f910", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":zipper-face:" + ] + }, + { + "name": "emoji_u1fae1", + "codepoint": "1fae1", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":salute:" + ] + }, + { + "name": "emoji_u1f914", + "codepoint": "1f914", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thinking-face:" + ] + }, + { + "name": "emoji_u1f92b", + "codepoint": "1f92b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":shushing-face:" + ] + }, + { + "name": "emoji_u1fae2", + "codepoint": "1fae2", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":hand-over-mouth:" + ] + }, + { + "name": "emoji_u1f92d", + "codepoint": "1f92d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":smiling-eyes-with-hand-over-mouth:", + ":chuckling:" + ] + }, + { + "name": "emoji_u1f971", + "codepoint": "1f971", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":yawn:" + ] + }, + { + "name": "emoji_u1f917", + "codepoint": "1f917", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":hug-face:" + ] + }, + { + "name": "emoji_u1fae3", + "codepoint": "1fae3", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":peeking:" + ] + }, + { + "name": "emoji_u1f631", + "codepoint": "1f631", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":screaming:" + ] + }, + { + "name": "emoji_u1f928", + "codepoint": "1f928", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":raised-eyebrow:" + ] + }, + { + "name": "emoji_u1f9d0", + "codepoint": "1f9d0", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":monocle:" + ] + }, + { + "name": "emoji_u1f612", + "codepoint": "1f612", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":unamused:" + ] + }, + { + "name": "emoji_u1f644", + "codepoint": "1f644", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":rolling-eyes:" + ] + }, + { + "name": "emoji_u1f62e_200d_1f4a8", + "codepoint": "1f62e_200d_1f4a8", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":exhale:" + ] + }, + { + "name": "emoji_u1f624", + "codepoint": "1f624", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":triumph:" + ] + }, + { + "name": "emoji_u1f620", + "codepoint": "1f620", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":angry:" + ] + }, + { + "name": "emoji_u1f621", + "codepoint": "1f621", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":rage:" + ] + }, + { + "name": "emoji_u1f92c", + "codepoint": "1f92c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":cursing:" + ] + }, + { + "name": "emoji_u1f61e", + "codepoint": "1f61e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sad:" + ] + }, + { + "name": "emoji_u1f613", + "codepoint": "1f613", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sweat:", + ":downcast:" + ] + }, + { + "name": "emoji_u1f61f", + "codepoint": "1f61f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":worried:" + ] + }, + { + "name": "emoji_u1f625", + "codepoint": "1f625", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":concerned:" + ] + }, + { + "name": "emoji_u1f622", + "codepoint": "1f622", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":cry:" + ] + }, + { + "name": "emoji_u2639_fe0f", + "codepoint": "2639_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":big-frown:" + ] + }, + { + "name": "emoji_u1f641", + "codepoint": "1f641", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":frown:" + ] + }, + { + "name": "emoji_u1fae4", + "codepoint": "1fae4", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":diagonal-mouth:" + ] + }, + { + "name": "emoji_u1f615", + "codepoint": "1f615", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":slightly-frowning:" + ] + }, + { + "name": "emoji_u1f630", + "codepoint": "1f630", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":anxious-with-sweat:" + ] + }, + { + "name": "emoji_u1f628", + "codepoint": "1f628", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":scared:" + ] + }, + { + "name": "emoji_u1f627", + "codepoint": "1f627", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":anguished:" + ] + }, + { + "name": "emoji_u1f626", + "codepoint": "1f626", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":gasp:" + ] + }, + { + "name": "emoji_u1f62e", + "codepoint": "1f62e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":mouth-open:" + ] + }, + { + "name": "emoji_u1f62f", + "codepoint": "1f62f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":surprised:", + ":hushed:" + ] + }, + { + "name": "emoji_u1f632", + "codepoint": "1f632", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":astonished:" + ] + }, + { + "name": "emoji_u1f633", + "codepoint": "1f633", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":flushed:" + ] + }, + { + "name": "emoji_u1f92f", + "codepoint": "1f92f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":mind-blown:", + ":exploding-head:" + ] + }, + { + "name": "emoji_u1f616", + "codepoint": "1f616", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":scrunched-mouth:", + ":confounded:", + ":zigzag-mouth:" + ] + }, + { + "name": "emoji_u1f623", + "codepoint": "1f623", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":scrunched-eyes:", + ":persevering:" + ] + }, + { + "name": "emoji_u1f629", + "codepoint": "1f629", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":weary:" + ] + }, + { + "name": "emoji_u1f62b", + "codepoint": "1f62b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":distraught:" + ] + }, + { + "name": "emoji_u1f635", + "codepoint": "1f635", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":x-eyes:" + ] + }, + { + "name": "emoji_u1f635_200d_1f4ab", + "codepoint": "1f635_200d_1f4ab", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":dizzy-face:" + ] + }, + { + "name": "emoji_u1fae8", + "codepoint": "1fae8", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":shaking-face:" + ] + }, + { + "name": "emoji_u1f976", + "codepoint": "1f976", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":cold-face:" + ] + }, + { + "name": "emoji_u1f975", + "codepoint": "1f975", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":hot-face:", + ":sweat-face:" + ] + }, + { + "name": "emoji_u1f922", + "codepoint": "1f922", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sick:", + ":nauseated:" + ] + }, + { + "name": "emoji_u1f92e", + "codepoint": "1f92e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":vomit:" + ] + }, + { + "name": "emoji_u1f634", + "codepoint": "1f634", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sleep:", + ":tired:" + ] + }, + { + "name": "emoji_u1f62a", + "codepoint": "1f62a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sleepy:" + ] + }, + { + "name": "emoji_u1f927", + "codepoint": "1f927", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sneeze:" + ] + }, + { + "name": "emoji_u1f912", + "codepoint": "1f912", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thermometer-face:" + ] + }, + { + "name": "emoji_u1f915", + "codepoint": "1f915", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":bandage-face:" + ] + }, + { + "name": "emoji_u1f637", + "codepoint": "1f637", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":mask:" + ] + }, + { + "name": "emoji_u1f925", + "codepoint": "1f925", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":liar:" + ] + }, + { + "name": "emoji_u1f607", + "codepoint": "1f607", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":halo:", + ":innocent:" + ] + }, + { + "name": "emoji_u1f920", + "codepoint": "1f920", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":cowboy:" + ] + }, + { + "name": "emoji_u1f911", + "codepoint": "1f911", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":money-face:" + ] + }, + { + "name": "emoji_u1f913", + "codepoint": "1f913", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":nerd-face:" + ] + }, + { + "name": "emoji_u1f60e", + "codepoint": "1f60e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sunglasses-face:" + ] + }, + { + "name": "emoji_u1f978", + "codepoint": "1f978", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":disguise:" + ] + }, + { + "name": "emoji_u1f921", + "codepoint": "1f921", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":clown:" + ] + }, + { + "name": "emoji_u1f608", + "codepoint": "1f608", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":imp-smile:" + ] + }, + { + "name": "emoji_u1f47f", + "codepoint": "1f47f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":imp-frown:" + ] + }, + { + "name": "emoji_u1f47b", + "codepoint": "1f47b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":ghost:" + ] + }, + { + "name": "emoji_u1f480", + "codepoint": "1f480", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":skull:" + ] + }, + { + "name": "emoji_u1f383", + "codepoint": "1f383", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":jack-o-lantern:" + ] + }, + { + "name": "emoji_u1f4a9", + "codepoint": "1f4a9", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":poop:" + ] + }, + { + "name": "emoji_u1f916", + "codepoint": "1f916", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":robot:" + ] + }, + { + "name": "emoji_u1f47d", + "codepoint": "1f47d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":alien:" + ] + }, + { + "name": "emoji_u1f31e", + "codepoint": "1f31e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sun-with-face:" + ] + }, + { + "name": "emoji_u1f31b", + "codepoint": "1f31b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":moon-face-first-quarter:" + ] + }, + { + "name": "emoji_u1f31c", + "codepoint": "1f31c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":moon-face-last-quarter:" + ] + }, + { + "name": "emoji_u1f648", + "codepoint": "1f648", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":see-no-evil-monkey:" + ] + }, + { + "name": "emoji_u1f649", + "codepoint": "1f649", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":hear-no-evil-monkey:" + ] + }, + { + "name": "emoji_u1f64a", + "codepoint": "1f64a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":speak-no-evil-monkey:" + ] + }, + { + "name": "emoji_u1f63a", + "codepoint": "1f63a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":smiley-cat:" + ] + }, + { + "name": "emoji_u1f638", + "codepoint": "1f638", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":smile-cat:" + ] + }, + { + "name": "emoji_u1f639", + "codepoint": "1f639", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":joy-cat:" + ] + }, + { + "name": "emoji_u1f63b", + "codepoint": "1f63b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":heart-eyes-cat:" + ] + }, + { + "name": "emoji_u1f63c", + "codepoint": "1f63c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":smirk-cat:" + ] + }, + { + "name": "emoji_u1f63d", + "codepoint": "1f63d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":kissing-cat:" + ] + }, + { + "name": "emoji_u1f640", + "codepoint": "1f640", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":scream-cat:" + ] + }, + { + "name": "emoji_u1f63f", + "codepoint": "1f63f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":crying-cat-face:" + ] + }, + { + "name": "emoji_u1f63e", + "codepoint": "1f63e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":pouting-cat:" + ] + }, + { + "name": "emoji_u1f31f", + "codepoint": "1f31f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":glowing-star:" + ] + }, + { + "name": "emoji_u2728", + "codepoint": "2728", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sparkles:" + ] + }, + { + "name": "emoji_u1f4a5", + "codepoint": "1f4a5", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":collision:" + ] + }, + { + "name": "emoji_u1f525", + "codepoint": "1f525", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":fire:", + ":burn:", + ":lit:" + ] + }, + { + "name": "emoji_u1f4af", + "codepoint": "1f4af", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":100:", + ":one-hundred:", + ":hundred:", + ":points:" + ] + }, + { + "name": "emoji_u1f389", + "codepoint": "1f389", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":party-popper:" + ] + }, + { + "name": "emoji_u2764_fe0f", + "codepoint": "2764_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":red-heart:" + ] + }, + { + "name": "emoji_u1f9e1", + "codepoint": "1f9e1", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":orange-heart:" + ] + }, + { + "name": "emoji_u1f49b", + "codepoint": "1f49b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":yellow-heart:" + ] + }, + { + "name": "emoji_u1f49a", + "codepoint": "1f49a", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":green-heart:" + ] + }, + { + "name": "emoji_u1fa75", + "codepoint": "1fa75", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":light-blue-heart:" + ] + }, + { + "name": "emoji_u1f499", + "codepoint": "1f499", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":blue-heart:" + ] + }, + { + "name": "emoji_u1f49c", + "codepoint": "1f49c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":purple-heart:" + ] + }, + { + "name": "emoji_u1f90e", + "codepoint": "1f90e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":brown-heart:" + ] + }, + { + "name": "emoji_u1f5a4", + "codepoint": "1f5a4", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":black-heart:" + ] + }, + { + "name": "emoji_u1fa76", + "codepoint": "1fa76", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":grey-heart:" + ] + }, + { + "name": "emoji_u1f90d", + "codepoint": "1f90d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":white-heart:" + ] + }, + { + "name": "emoji_u1fa77", + "codepoint": "1fa77", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":pink-heart:" + ] + }, + { + "name": "emoji_u1f498", + "codepoint": "1f498", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":cupid:" + ] + }, + { + "name": "emoji_u1f49d", + "codepoint": "1f49d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":gift-heart:" + ] + }, + { + "name": "emoji_u1f496", + "codepoint": "1f496", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":sparkling-heart:" + ] + }, + { + "name": "emoji_u1f497", + "codepoint": "1f497", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":heart-grow:" + ] + }, + { + "name": "emoji_u1f493", + "codepoint": "1f493", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":beating-heart:" + ] + }, + { + "name": "emoji_u1f49e", + "codepoint": "1f49e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":revolving-hearts:" + ] + }, + { + "name": "emoji_u1f495", + "codepoint": "1f495", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":two-hearts:" + ] + }, + { + "name": "emoji_u1f48c", + "codepoint": "1f48c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":love-letter:" + ] + }, + { + "name": "emoji_u1f49f", + "codepoint": "1f49f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":heart-box:" + ] + }, + { + "name": "emoji_u2763_fe0f", + "codepoint": "2763_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":heart-exclamation-point:" + ] + }, + { + "name": "emoji_u2764_fe0f_200d_1fa79", + "codepoint": "2764_fe0f_200d_1fa79", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":bandaged-heart:" + ] + }, + { + "name": "emoji_u1f494", + "codepoint": "1f494", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":broken-heart:" + ] + }, + { + "name": "emoji_u2764_fe0f_200d_1f525", + "codepoint": "2764_fe0f_200d_1f525", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":fire-heart:" + ] + }, + { + "name": "emoji_u1f48b", + "codepoint": "1f48b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":kiss:" + ] + }, + { + "name": "emoji_u1f463", + "codepoint": "1f463", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":footprints:" + ] + }, + { + "name": "emoji_u1fac0", + "codepoint": "1fac0", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":anatomical-heart:" + ] + }, + { + "name": "emoji_u1fa78", + "codepoint": "1fa78", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":blood:" + ] + }, + { + "name": "emoji_u1f9a0", + "codepoint": "1f9a0", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":microbe:", + ":virus:" + ] + }, + { + "name": "emoji_u1f440", + "codepoint": "1f440", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":eyes:" + ] + }, + { + "name": "emoji_u1f441_fe0f", + "codepoint": "1f441_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":eye:" + ] + }, + { + "name": "emoji_u1fae6", + "codepoint": "1fae6", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":biting-lip:" + ] + }, + { + "name": "emoji_u1f9bf", + "codepoint": "1f9bf", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":leg-mechanical:" + ] + }, + { + "name": "emoji_u1f9be", + "codepoint": "1f9be", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":arm-mechanical:" + ] + }, + { + "name": "emoji_u1f4aa", + "codepoint": "1f4aa", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":muscle:", + ":flex:", + ":bicep:", + ":strong:" + ] + }, + { + "name": "emoji_u1f4aa_1f3fb", + "codepoint": "1f4aa_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":muscle:", + ":flex:", + ":bicep:", + ":strong:" + ] + }, + { + "name": "emoji_u1f4aa_1f3fc", + "codepoint": "1f4aa_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":muscle:", + ":flex:", + ":bicep:", + ":strong:" + ] + }, + { + "name": "emoji_u1f4aa_1f3fd", + "codepoint": "1f4aa_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":muscle:", + ":flex:", + ":bicep:", + ":strong:" + ] + }, + { + "name": "emoji_u1f4aa_1f3fe", + "codepoint": "1f4aa_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":muscle:", + ":flex:", + ":bicep:", + ":strong:" + ] + }, + { + "name": "emoji_u1f4aa_1f3ff", + "codepoint": "1f4aa_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":muscle:", + ":flex:", + ":bicep:", + ":strong:" + ] + }, + { + "name": "emoji_u1f44f", + "codepoint": "1f44f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":clap:" + ] + }, + { + "name": "emoji_u1f44f_1f3fb", + "codepoint": "1f44f_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":clap:" + ] + }, + { + "name": "emoji_u1f44f_1f3fc", + "codepoint": "1f44f_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":clap:" + ] + }, + { + "name": "emoji_u1f44f_1f3fd", + "codepoint": "1f44f_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":clap:" + ] + }, + { + "name": "emoji_u1f44f_1f3fe", + "codepoint": "1f44f_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":clap:" + ] + }, + { + "name": "emoji_u1f44f_1f3ff", + "codepoint": "1f44f_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":clap:" + ] + }, + { + "name": "emoji_u1f44d", + "codepoint": "1f44d", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-up:", + ":+1:" + ] + }, + { + "name": "emoji_u1f44d_1f3fb", + "codepoint": "1f44d_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-up:", + ":+1:" + ] + }, + { + "name": "emoji_u1f44d_1f3fc", + "codepoint": "1f44d_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-up:", + ":+1:" + ] + }, + { + "name": "emoji_u1f44d_1f3fd", + "codepoint": "1f44d_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-up:", + ":+1:" + ] + }, + { + "name": "emoji_u1f44d_1f3fe", + "codepoint": "1f44d_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-up:", + ":+1:" + ] + }, + { + "name": "emoji_u1f44d_1f3ff", + "codepoint": "1f44d_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-up:", + ":+1:" + ] + }, + { + "name": "emoji_u1f44e", + "codepoint": "1f44e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-down:" + ] + }, + { + "name": "emoji_u1f44e_1f3fb", + "codepoint": "1f44e_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-down:" + ] + }, + { + "name": "emoji_u1f44e_1f3fc", + "codepoint": "1f44e_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-down:" + ] + }, + { + "name": "emoji_u1f44e_1f3fd", + "codepoint": "1f44e_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-down:" + ] + }, + { + "name": "emoji_u1f44e_1f3fe", + "codepoint": "1f44e_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-down:" + ] + }, + { + "name": "emoji_u1f44e_1f3ff", + "codepoint": "1f44e_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":thumbs-down:" + ] + }, + { + "name": "emoji_u1f64c", + "codepoint": "1f64c", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":raising-hands:", + ":hooray:" + ] + }, + { + "name": "emoji_u1f64c_1f3fb", + "codepoint": "1f64c_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":raising-hands:", + ":hooray:" + ] + }, + { + "name": "emoji_u1f64c_1f3fc", + "codepoint": "1f64c_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":raising-hands:", + ":hooray:" + ] + }, + { + "name": "emoji_u1f64c_1f3fd", + "codepoint": "1f64c_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":raising-hands:", + ":hooray:" + ] + }, + { + "name": "emoji_u1f64c_1f3fe", + "codepoint": "1f64c_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":raising-hands:", + ":hooray:" + ] + }, + { + "name": "emoji_u1f64c_1f3ff", + "codepoint": "1f64c_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":raising-hands:", + ":hooray:" + ] + }, + { + "name": "emoji_u1f44b", + "codepoint": "1f44b", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":wave:" + ] + }, + { + "name": "emoji_u1f44b_1f3fb", + "codepoint": "1f44b_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":wave:" + ] + }, + { + "name": "emoji_u1f44b_1f3fc", + "codepoint": "1f44b_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":wave:" + ] + }, + { + "name": "emoji_u1f44b_1f3fd", + "codepoint": "1f44b_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":wave:" + ] + }, + { + "name": "emoji_u1f44b_1f3fe", + "codepoint": "1f44b_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":wave:" + ] + }, + { + "name": "emoji_u1f44b_1f3ff", + "codepoint": "1f44b_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":wave:" + ] + }, + { + "name": "emoji_u270c_fe0f", + "codepoint": "270c_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":victory:", + ":v:", + ":peace-hand:" + ] + }, + { + "name": "emoji_u270c_1f3fb", + "codepoint": "270c_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":victory:", + ":v:", + ":peace-hand:" + ] + }, + { + "name": "emoji_u270c_1f3fc", + "codepoint": "270c_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":victory:", + ":v:", + ":peace-hand:" + ] + }, + { + "name": "emoji_u270c_1f3fd", + "codepoint": "270c_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":victory:", + ":v:", + ":peace-hand:" + ] + }, + { + "name": "emoji_u270c_1f3fe", + "codepoint": "270c_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":victory:", + ":v:", + ":peace-hand:" + ] + }, + { + "name": "emoji_u270c_1f3ff", + "codepoint": "270c_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":victory:", + ":v:", + ":peace-hand:" + ] + }, + { + "name": "emoji_u1f91e", + "codepoint": "1f91e", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":crossed-fingers:" + ] + }, + { + "name": "emoji_u1f91e_1f3fb", + "codepoint": "1f91e_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":crossed-fingers:" + ] + }, + { + "name": "emoji_u1f91e_1f3fc", + "codepoint": "1f91e_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":crossed-fingers:" + ] + }, + { + "name": "emoji_u1f91e_1f3fd", + "codepoint": "1f91e_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":crossed-fingers:" + ] + }, + { + "name": "emoji_u1f91e_1f3fe", + "codepoint": "1f91e_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":crossed-fingers:" + ] + }, + { + "name": "emoji_u1f91e_1f3ff", + "codepoint": "1f91e_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":crossed-fingers:" + ] + }, + { + "name": "emoji_u261d_fe0f", + "codepoint": "261d_fe0f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":index-finger:" + ] + }, + { + "name": "emoji_u261d_1f3fb", + "codepoint": "261d_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":index-finger:" + ] + }, + { + "name": "emoji_u261d_1f3fc", + "codepoint": "261d_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":index-finger:" + ] + }, + { + "name": "emoji_u261d_1f3fd", + "codepoint": "261d_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":index-finger:" + ] + }, + { + "name": "emoji_u261d_1f3fe", + "codepoint": "261d_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":index-finger:" + ] + }, + { + "name": "emoji_u261d_1f3ff", + "codepoint": "261d_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":index-finger:" + ] + }, + { + "name": "emoji_u1f64f", + "codepoint": "1f64f", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ] + }, + { + "name": "emoji_u1f64f_1f3fb", + "codepoint": "1f64f_1f3fb", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ] + }, + { + "name": "emoji_u1f64f_1f3fc", + "codepoint": "1f64f_1f3fc", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ] + }, + { + "name": "emoji_u1f64f_1f3fd", + "codepoint": "1f64f_1f3fd", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ] + }, + { + "name": "emoji_u1f64f_1f3fe", + "codepoint": "1f64f_1f3fe", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ] + }, + { + "name": "emoji_u1f64f_1f3ff", + "codepoint": "1f64f_1f3ff", + "categories": [ + "Smileys and emotions" + ], + "tags": [ + ":folded-hands:", + ":please:", + ":pray:", + ":hope:", + ":wish:", + ":thank-you:", + ":high-five:" + ] + }, + { + "name": "emoji_u1f483", + "codepoint": "1f483", + "categories": [ + "People" + ], + "tags": [ + ":dancer-woman:" + ] + }, + { + "name": "emoji_u1f483_1f3fb", + "codepoint": "1f483_1f3fb", + "categories": [ + "People" + ], + "tags": [ + ":dancer-woman:" + ] + }, + { + "name": "emoji_u1f483_1f3fc", + "codepoint": "1f483_1f3fc", + "categories": [ + "People" + ], + "tags": [ + ":dancer-woman:" + ] + }, + { + "name": "emoji_u1f483_1f3fd", + "codepoint": "1f483_1f3fd", + "categories": [ + "People" + ], + "tags": [ + ":dancer-woman:" + ] + }, + { + "name": "emoji_u1f483_1f3fe", + "codepoint": "1f483_1f3fe", + "categories": [ + "People" + ], + "tags": [ + ":dancer-woman:" + ] + }, + { + "name": "emoji_u1f483_1f3ff", + "codepoint": "1f483_1f3ff", + "categories": [ + "People" + ], + "tags": [ + ":dancer-woman:" + ] + }, + { + "name": "emoji_u1f339", + "codepoint": "1f339", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":rose:" + ] + }, + { + "name": "emoji_u1f940", + "codepoint": "1f940", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":wilted-flower:" + ] + }, + { + "name": "emoji_u1f342", + "codepoint": "1f342", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":fallen-leaf:" + ] + }, + { + "name": "emoji_u1f331", + "codepoint": "1f331", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":plant:", + ":seed:" + ] + }, + { + "name": "emoji_u1f343", + "codepoint": "1f343", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":leaves:" + ] + }, + { + "name": "emoji_u1f340", + "codepoint": "1f340", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":luck:", + ":four-leaf-clover:" + ] + }, + { + "name": "emoji_u2744_fe0f", + "codepoint": "2744_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":snowflake:", + ":winter:", + ":cold:" + ] + }, + { + "name": "emoji_u1f30b", + "codepoint": "1f30b", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":volcano:" + ] + }, + { + "name": "emoji_u1f305", + "codepoint": "1f305", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":sunrise:" + ] + }, + { + "name": "emoji_u1f304", + "codepoint": "1f304", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":sunrise-over-mountains:" + ] + }, + { + "name": "emoji_u1f308", + "codepoint": "1f308", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":rainbow:" + ] + }, + { + "name": "emoji_u1fae7", + "codepoint": "1fae7", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":bubbles:" + ] + }, + { + "name": "emoji_u1f30a", + "codepoint": "1f30a", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":ocean:" + ] + }, + { + "name": "emoji_u1f32c_fe0f", + "codepoint": "1f32c_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":wind-face:" + ] + }, + { + "name": "emoji_u1f32a_fe0f", + "codepoint": "1f32a_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":tornado:" + ] + }, + { + "name": "emoji_u26a1", + "codepoint": "26a1", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":electricity:", + ":zap:", + ":lightning:" + ] + }, + { + "name": "emoji_u1f4a7", + "codepoint": "1f4a7", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":droplet:" + ] + }, + { + "name": "emoji_u1f327_fe0f", + "codepoint": "1f327_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":rain-cloud:" + ] + }, + { + "name": "emoji_u1f329_fe0f", + "codepoint": "1f329_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":cloud-with-lightning:" + ] + }, + { + "name": "emoji_u1f4ab", + "codepoint": "1f4ab", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":dizzy:" + ] + }, + { + "name": "emoji_u2604_fe0f", + "codepoint": "2604_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":comet:" + ] + }, + { + "name": "emoji_u1f30d", + "codepoint": "1f30d", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":globe-showing-Europe-Africa:" + ] + }, + { + "name": "emoji_u1f30e", + "codepoint": "1f30e", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":globe-showing-Americas:" + ] + }, + { + "name": "emoji_u1f30f", + "codepoint": "1f30f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":globe-showing-Asia-Australia:" + ] + }, + { + "name": "emoji_u1f42e", + "codepoint": "1f42e", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":cow-face:" + ] + }, + { + "name": "emoji_u1f984", + "codepoint": "1f984", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":unicorn:" + ] + }, + { + "name": "emoji_u1f98e", + "codepoint": "1f98e", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":lizard:" + ] + }, + { + "name": "emoji_u1f409", + "codepoint": "1f409", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":dragon:" + ] + }, + { + "name": "emoji_u1f996", + "codepoint": "1f996", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":t-rex:" + ] + }, + { + "name": "emoji_u1f995", + "codepoint": "1f995", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":dinosaur:" + ] + }, + { + "name": "emoji_u1f422", + "codepoint": "1f422", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":turtle:" + ] + }, + { + "name": "emoji_u1f40a", + "codepoint": "1f40a", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":crocodile:" + ] + }, + { + "name": "emoji_u1f40d", + "codepoint": "1f40d", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":snake:" + ] + }, + { + "name": "emoji_u1f438", + "codepoint": "1f438", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":frog:" + ] + }, + { + "name": "emoji_u1f407", + "codepoint": "1f407", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":rabbit:" + ] + }, + { + "name": "emoji_u1f400", + "codepoint": "1f400", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":rat:" + ] + }, + { + "name": "emoji_u1f429", + "codepoint": "1f429", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":poodle:" + ] + }, + { + "name": "emoji_u1f415", + "codepoint": "1f415", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":dog:" + ] + }, + { + "name": "emoji_u1f9ae", + "codepoint": "1f9ae", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":guide-dog:" + ] + }, + { + "name": "emoji_u1f415_200d_1f9ba", + "codepoint": "1f415_200d_1f9ba", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":service-dog:" + ] + }, + { + "name": "emoji_u1f416", + "codepoint": "1f416", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":pig:" + ] + }, + { + "name": "emoji_u1f40e", + "codepoint": "1f40e", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":racehorse:" + ] + }, + { + "name": "emoji_u1facf", + "codepoint": "1facf", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":donkey:" + ] + }, + { + "name": "emoji_u1f402", + "codepoint": "1f402", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":ox:" + ] + }, + { + "name": "emoji_u1f410", + "codepoint": "1f410", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":goat:" + ] + }, + { + "name": "emoji_u1f998", + "codepoint": "1f998", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":kangaroo:" + ] + }, + { + "name": "emoji_u1f405", + "codepoint": "1f405", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":tiger:" + ] + }, + { + "name": "emoji_u1f412", + "codepoint": "1f412", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":monkey:" + ] + }, + { + "name": "emoji_u1f98d", + "codepoint": "1f98d", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":gorilla:" + ] + }, + { + "name": "emoji_u1f9a7", + "codepoint": "1f9a7", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":orangutan:" + ] + }, + { + "name": "emoji_u1f43f_fe0f", + "codepoint": "1f43f_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":chipmunk:" + ] + }, + { + "name": "emoji_u1f9a6", + "codepoint": "1f9a6", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":otter:" + ] + }, + { + "name": "emoji_u1f987", + "codepoint": "1f987", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":bat:" + ] + }, + { + "name": "emoji_u1f426", + "codepoint": "1f426", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":bird:" + ] + }, + { + "name": "emoji_u1f426_200d_2b1b", + "codepoint": "1f426_200d_2b1b", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":black-bird:" + ] + }, + { + "name": "emoji_u1f413", + "codepoint": "1f413", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":rooster:" + ] + }, + { + "name": "emoji_u1f423", + "codepoint": "1f423", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":hatching-chick:" + ] + }, + { + "name": "emoji_u1f424", + "codepoint": "1f424", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":baby-chick:" + ] + }, + { + "name": "emoji_u1f425", + "codepoint": "1f425", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":hatched-chick:" + ] + }, + { + "name": "emoji_u1f985", + "codepoint": "1f985", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":eagle:" + ] + }, + { + "name": "emoji_u1f54a_fe0f", + "codepoint": "1f54a_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":peace:", + ":dove:" + ] + }, + { + "name": "emoji_u1fabf", + "codepoint": "1fabf", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":goose:" + ] + }, + { + "name": "emoji_u1f99a", + "codepoint": "1f99a", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":peacock:" + ] + }, + { + "name": "emoji_u1f9ad", + "codepoint": "1f9ad", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":seal:" + ] + }, + { + "name": "emoji_u1f988", + "codepoint": "1f988", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":shark:" + ] + }, + { + "name": "emoji_u1f42c", + "codepoint": "1f42c", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":dolphin:" + ] + }, + { + "name": "emoji_u1f433", + "codepoint": "1f433", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":whale:" + ] + }, + { + "name": "emoji_u1f421", + "codepoint": "1f421", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":blowfish:" + ] + }, + { + "name": "emoji_u1f980", + "codepoint": "1f980", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":crab:" + ] + }, + { + "name": "emoji_u1f419", + "codepoint": "1f419", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":octopus:" + ] + }, + { + "name": "emoji_u1fabc", + "codepoint": "1fabc", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":jellyfish:" + ] + }, + { + "name": "emoji_u1f577_fe0f", + "codepoint": "1f577_fe0f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":spider:" + ] + }, + { + "name": "emoji_u1f40c", + "codepoint": "1f40c", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":snail:" + ] + }, + { + "name": "emoji_u1f41c", + "codepoint": "1f41c", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":ant:" + ] + }, + { + "name": "emoji_u1f99f", + "codepoint": "1f99f", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":mosquito:" + ] + }, + { + "name": "emoji_u1fab3", + "codepoint": "1fab3", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":cockroach:" + ] + }, + { + "name": "emoji_u1fab0", + "codepoint": "1fab0", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":fly:" + ] + }, + { + "name": "emoji_u1f41d", + "codepoint": "1f41d", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":bee:" + ] + }, + { + "name": "emoji_u1f41e", + "codepoint": "1f41e", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":lady-bug:" + ] + }, + { + "name": "emoji_u1f98b", + "codepoint": "1f98b", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":butterfly:" + ] + }, + { + "name": "emoji_u1f41b", + "codepoint": "1f41b", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":bug:" + ] + }, + { + "name": "emoji_u1fab1", + "codepoint": "1fab1", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":worm:" + ] + }, + { + "name": "emoji_u1f43e", + "codepoint": "1f43e", + "categories": [ + "Animals and nature" + ], + "tags": [ + ":paw prints:" + ] + }, + { + "name": "emoji_u1f345", + "codepoint": "1f345", + "categories": [ + "Food and drink" + ], + "tags": [ + ":tomato:" + ] + }, + { + "name": "emoji_u1f373", + "codepoint": "1f373", + "categories": [ + "Food and drink" + ], + "tags": [ + ":cooking:" + ] + }, + { + "name": "emoji_u1f35d", + "codepoint": "1f35d", + "categories": [ + "Food and drink" + ], + "tags": [ + ":spaghetti:" + ] + }, + { + "name": "emoji_u1f35c", + "codepoint": "1f35c", + "categories": [ + "Food and drink" + ], + "tags": [ + ":steaming-bowl:" + ] + }, + { + "name": "emoji_u1f37f", + "codepoint": "1f37f", + "categories": [ + "Food and drink" + ], + "tags": [ + ":popcorn:" + ] + }, + { + "name": "emoji_u2615", + "codepoint": "2615", + "categories": [ + "Food and drink" + ], + "tags": [ + ":hot-beverage:" + ] + }, + { + "name": "emoji_u1f37b", + "codepoint": "1f37b", + "categories": [ + "Food and drink" + ], + "tags": [ + ":clinking-beer-mugs:" + ] + }, + { + "name": "emoji_u1f942", + "codepoint": "1f942", + "categories": [ + "Food and drink" + ], + "tags": [ + ":clinking-glasses:" + ] + }, + { + "name": "emoji_u1f37e", + "codepoint": "1f37e", + "categories": [ + "Food and drink" + ], + "tags": [ + ":bottle-with-popping-cork:" + ] + }, + { + "name": "emoji_u1f377", + "codepoint": "1f377", + "categories": [ + "Food and drink" + ], + "tags": [ + ":wine-glass:" + ] + }, + { + "name": "emoji_u1f379", + "codepoint": "1f379", + "categories": [ + "Food and drink" + ], + "tags": [ + ":tropical-drink:" + ] + }, + { + "name": "emoji_u1f6a7", + "codepoint": "1f6a7", + "categories": [ + "Travel and places" + ], + "tags": [ + ":construction:" + ] + }, + { + "name": "emoji_u1f6a8", + "codepoint": "1f6a8", + "categories": [ + "Travel and places" + ], + "tags": [ + ":police-car-light:" + ] + }, + { + "name": "emoji_u1f6b2", + "codepoint": "1f6b2", + "categories": [ + "Travel and places" + ], + "tags": [ + ":bicycle:" + ] + }, + { + "name": "emoji_u1f6f8", + "codepoint": "1f6f8", + "categories": [ + "Travel and places" + ], + "tags": [ + ":flying-saucer:" + ] + }, + { + "name": "emoji_u1f680", + "codepoint": "1f680", + "categories": [ + "Travel and places" + ], + "tags": [ + ":rocket:" + ] + }, + { + "name": "emoji_u1f6eb", + "codepoint": "1f6eb", + "categories": [ + "Travel and places" + ], + "tags": [ + ":airplane-departure:" + ] + }, + { + "name": "emoji_u1f6ec", + "codepoint": "1f6ec", + "categories": [ + "Travel and places" + ], + "tags": [ + ":airplane-arrival:" + ] + }, + { + "name": "emoji_u1f3a2", + "codepoint": "1f3a2", + "categories": [ + "Travel and places" + ], + "tags": [ + ":roller-coaster:" + ] + }, + { + "name": "emoji_u1f3d5_fe0f", + "codepoint": "1f3d5_fe0f", + "categories": [ + "Travel and places" + ], + "tags": [ + ":camping:" + ] + }, + { + "name": "emoji_u1f38a", + "codepoint": "1f38a", + "categories": [ + "Activities and events" + ], + "tags": [ + ":confetti-ball:" + ] + }, + { + "name": "emoji_u1f388", + "codepoint": "1f388", + "categories": [ + "Activities and events" + ], + "tags": [ + ":balloon:" + ] + }, + { + "name": "emoji_u1f382", + "codepoint": "1f382", + "categories": [ + "Activities and events" + ], + "tags": [ + ":birthday-cake:" + ] + }, + { + "name": "emoji_u1f381", + "codepoint": "1f381", + "categories": [ + "Activities and events" + ], + "tags": [ + ":wrapped-gift:" + ] + }, + { + "name": "emoji_u1f386", + "codepoint": "1f386", + "categories": [ + "Activities and events" + ], + "tags": [ + ":fireworks:" + ] + }, + { + "name": "emoji_u1fa85", + "codepoint": "1fa85", + "categories": [ + "Activities and events" + ], + "tags": [ + ":piƱata:" + ] + }, + { + "name": "emoji_u1faa9", + "codepoint": "1faa9", + "categories": [ + "Activities and events" + ], + "tags": [ + ":mirror-ball:", + ":disco-ball:" + ] + }, + { + "name": "emoji_u26bd", + "codepoint": "26bd", + "categories": [ + "Activities and events" + ], + "tags": [ + ":soccer-ball:" + ] + }, + { + "name": "emoji_u26be", + "codepoint": "26be", + "categories": [ + "Activities and events" + ], + "tags": [ + ":baseball:" + ] + }, + { + "name": "emoji_u1f94e", + "codepoint": "1f94e", + "categories": [ + "Activities and events" + ], + "tags": [ + ":softball:" + ] + }, + { + "name": "emoji_u1f3be", + "codepoint": "1f3be", + "categories": [ + "Activities and events" + ], + "tags": [ + ":tennis:" + ] + }, + { + "name": "emoji_u1f3f8", + "codepoint": "1f3f8", + "categories": [ + "Activities and events" + ], + "tags": [ + ":badminton:" + ] + }, + { + "name": "emoji_u1f94d", + "codepoint": "1f94d", + "categories": [ + "Activities and events" + ], + "tags": [ + ":lacrosse:" + ] + }, + { + "name": "emoji_u1f3cf", + "codepoint": "1f3cf", + "categories": [ + "Activities and events" + ], + "tags": [ + ":cricket-game:" + ] + }, + { + "name": "emoji_u1f3d1", + "codepoint": "1f3d1", + "categories": [ + "Activities and events" + ], + "tags": [ + ":field-hockey:" + ] + }, + { + "name": "emoji_u1f3d2", + "codepoint": "1f3d2", + "categories": [ + "Activities and events" + ], + "tags": [ + ":ice-hockey:" + ] + }, + { + "name": "emoji_u1f3af", + "codepoint": "1f3af", + "categories": [ + "Activities and events" + ], + "tags": [ + ":direct-hit:", + ":target:" + ] + }, + { + "name": "emoji_u1f94f", + "codepoint": "1f94f", + "categories": [ + "Activities and events" + ], + "tags": [ + ":flying-disc:" + ] + }, + { + "name": "emoji_u1fa83", + "codepoint": "1fa83", + "categories": [ + "Activities and events" + ], + "tags": [ + ":boomerang:" + ] + }, + { + "name": "emoji_u1fa81", + "codepoint": "1fa81", + "categories": [ + "Activities and events" + ], + "tags": [ + ":kite:" + ] + }, + { + "name": "emoji_u1f3d3", + "codepoint": "1f3d3", + "categories": [ + "Activities and events" + ], + "tags": [ + ":ping-pong:" + ] + }, + { + "name": "emoji_u1f3b3", + "codepoint": "1f3b3", + "categories": [ + "Activities and events" + ], + "tags": [ + ":bowling:" + ] + }, + { + "name": "emoji_u1f3b2", + "codepoint": "1f3b2", + "categories": [ + "Activities and events" + ], + "tags": [ + ":die:" + ] + }, + { + "name": "emoji_u1f3b0", + "codepoint": "1f3b0", + "categories": [ + "Activities and events" + ], + "tags": [ + ":slot-machine:" + ] + }, + { + "name": "emoji_u1f4f8", + "codepoint": "1f4f8", + "categories": [ + "Activities and events" + ], + "tags": [ + ":camera-flash:" + ] + }, + { + "name": "emoji_u1f3bb", + "codepoint": "1f3bb", + "categories": [ + "Activities and events" + ], + "tags": [ + ":violin:" + ] + }, + { + "name": "emoji_u1f941", + "codepoint": "1f941", + "categories": [ + "Activities and events" + ], + "tags": [ + ":drum:" + ] + }, + { + "name": "emoji_u1fa87", + "codepoint": "1fa87", + "categories": [ + "Activities and events" + ], + "tags": [ + ":maracas:" + ] + }, + { + "name": "emoji_u1f50b", + "codepoint": "1f50b", + "categories": [ + "Objects" + ], + "tags": [ + ":battery-full:" + ] + }, + { + "name": "emoji_u1faab", + "codepoint": "1faab", + "categories": [ + "Objects" + ], + "tags": [ + ":battery-low:" + ] + }, + { + "name": "emoji_u1f4b8", + "codepoint": "1f4b8", + "categories": [ + "Objects" + ], + "tags": [ + ":money-with-wings:" + ] + }, + { + "name": "emoji_u2696_fe0f", + "codepoint": "2696_fe0f", + "categories": [ + "Objects" + ], + "tags": [ + ":balance-scale:" + ] + }, + { + "name": "emoji_u1f4a1", + "codepoint": "1f4a1", + "categories": [ + "Objects" + ], + "tags": [ + ":light-bulb:" + ] + }, + { + "name": "emoji_u1f393", + "codepoint": "1f393", + "categories": [ + "Objects" + ], + "tags": [ + ":graduation-cap:" + ] + }, + { + "name": "emoji_u2602_fe0f", + "codepoint": "2602_fe0f", + "categories": [ + "Objects" + ], + "tags": [ + ":umbrella:" + ] + }, + { + "name": "emoji_u1f48e", + "codepoint": "1f48e", + "categories": [ + "Objects" + ], + "tags": [ + ":gem-stone:" + ] + }, + { + "name": "emoji_u2699_fe0f", + "codepoint": "2699_fe0f", + "categories": [ + "Objects" + ], + "tags": [ + ":gear:" + ] + }, + { + "name": "emoji_u270f_fe0f", + "codepoint": "270f_fe0f", + "categories": [ + "Objects" + ], + "tags": [ + ":pencil:" + ] + }, + { + "name": "emoji_u23f0", + "codepoint": "23f0", + "categories": [ + "Objects" + ], + "tags": [ + ":alarm-clock:" + ] + }, + { + "name": "emoji_u1f6ce_fe0f", + "codepoint": "1f6ce_fe0f", + "categories": [ + "Objects" + ], + "tags": [ + ":bellhop-bell:" + ] + }, + { + "name": "emoji_u1f514", + "codepoint": "1f514", + "categories": [ + "Objects" + ], + "tags": [ + ":bell:" + ] + }, + { + "name": "emoji_u1f52e", + "codepoint": "1f52e", + "categories": [ + "Objects" + ], + "tags": [ + ":crystal-ball:" + ] + }, + { + "name": "emoji_u2648", + "codepoint": "2648", + "categories": [ + "Symbols" + ], + "tags": [ + ":Aries:" + ] + }, + { + "name": "emoji_u2649", + "codepoint": "2649", + "categories": [ + "Symbols" + ], + "tags": [ + ":Taurus:" + ] + }, + { + "name": "emoji_u264a", + "codepoint": "264a", + "categories": [ + "Symbols" + ], + "tags": [ + ":Gemini:" + ] + }, + { + "name": "emoji_u264b", + "codepoint": "264b", + "categories": [ + "Symbols" + ], + "tags": [ + ":Cancer:" + ] + }, + { + "name": "emoji_u264c", + "codepoint": "264c", + "categories": [ + "Symbols" + ], + "tags": [ + ":Leo:" + ] + }, + { + "name": "emoji_u264d", + "codepoint": "264d", + "categories": [ + "Symbols" + ], + "tags": [ + ":Virgo:" + ] + }, + { + "name": "emoji_u264e", + "codepoint": "264e", + "categories": [ + "Symbols" + ], + "tags": [ + ":Libra:" + ] + }, + { + "name": "emoji_u264f", + "codepoint": "264f", + "categories": [ + "Symbols" + ], + "tags": [ + ":Scorpio:" + ] + }, + { + "name": "emoji_u2650", + "codepoint": "2650", + "categories": [ + "Symbols" + ], + "tags": [ + ":Sagittarius:" + ] + }, + { + "name": "emoji_u2651", + "codepoint": "2651", + "categories": [ + "Symbols" + ], + "tags": [ + ":Capricorn:" + ] + }, + { + "name": "emoji_u2652", + "codepoint": "2652", + "categories": [ + "Symbols" + ], + "tags": [ + ":Aquarius:" + ] + }, + { + "name": "emoji_u2653", + "codepoint": "2653", + "categories": [ + "Symbols" + ], + "tags": [ + ":Pisces:" + ] + }, + { + "name": "emoji_u26ce", + "codepoint": "26ce", + "categories": [ + "Symbols" + ], + "tags": [ + ":Ophiuchus:" + ] + }, + { + "name": "emoji_u2757", + "codepoint": "2757", + "categories": [ + "Symbols" + ], + "tags": [ + ":exclamation:", + ":exclamation-mark:" + ] + }, + { + "name": "emoji_u2753", + "codepoint": "2753", + "categories": [ + "Symbols" + ], + "tags": [ + ":question:", + ":question-mark:", + ":?:" + ] + }, + { + "name": "emoji_u2049_fe0f", + "codepoint": "2049_fe0f", + "categories": [ + "Symbols" + ], + "tags": [ + ":exclamation-question-mark:", + ":!?:" + ] + }, + { + "name": "emoji_u203c_fe0f", + "codepoint": "203c_fe0f", + "categories": [ + "Symbols" + ], + "tags": [ + ":exclamation-double:", + ":!!:" + ] + }, + { + "name": "emoji_u274c", + "codepoint": "274c", + "categories": [ + "Symbols" + ], + "tags": [ + ":cross-mark:", + ":x:" + ] + }, + { + "name": "emoji_u1f198", + "codepoint": "1f198", + "categories": [ + "Symbols" + ], + "tags": [ + ":sos:" + ] + }, + { + "name": "emoji_u1f4f4", + "codepoint": "1f4f4", + "categories": [ + "Symbols" + ], + "tags": [ + ":phone-off:" + ] + }, + { + "name": "emoji_u2705", + "codepoint": "2705", + "categories": [ + "Symbols" + ], + "tags": [ + ":check-mark:", + ":check-mark-green:" + ] + }, + { + "name": "emoji_u1f195", + "codepoint": "1f195", + "categories": [ + "Symbols" + ], + "tags": [ + ":new:" + ] + }, + { + "name": "emoji_u1f193", + "codepoint": "1f193", + "categories": [ + "Symbols" + ], + "tags": [ + ":free:" + ] + }, + { + "name": "emoji_u1f199", + "codepoint": "1f199", + "categories": [ + "Symbols" + ], + "tags": [ + ":up!:" + ] + }, + { + "name": "emoji_u1f192", + "codepoint": "1f192", + "categories": [ + "Symbols" + ], + "tags": [ + ":cool:" + ] + }, + { + "name": "emoji_u1f6ae", + "codepoint": "1f6ae", + "categories": [ + "Symbols" + ], + "tags": [ + ":litter:" + ] + }, + { + "name": "emoji_u1f3b6", + "codepoint": "1f3b6", + "categories": [ + "Symbols" + ], + "tags": [ + ":musical-notes:" + ] + }, + { + "name": "emoji_u2795", + "codepoint": "2795", + "categories": [ + "Symbols" + ], + "tags": [ + ":plus-sign:", + ":+:" + ] + }, + { + "name": "emoji_u1f3c1", + "codepoint": "1f3c1", + "categories": [ + "Flags" + ], + "tags": [ + ":chequered-flag:" + ] + }, + { + "name": "emoji_u1f6a9", + "codepoint": "1f6a9", + "categories": [ + "Flags" + ], + "tags": [ + ":triangular-flag:" + ] + }, + { + "name": "emoji_u1f3f4", + "codepoint": "1f3f4", + "categories": [ + "Flags" + ], + "tags": [ + ":black-flag:" + ] + }, + { + "name": "emoji_u1f3f3_fe0f", + "codepoint": "1f3f3_fe0f", + "categories": [ + "Flags" + ], + "tags": [ + ":white-flag:" + ] + } +]; \ No newline at end of file diff --git a/ui/js/markdown/Emojis.mjs b/ui/js/markdown/Emojis.mjs new file mode 100644 index 0000000..ab598ce --- /dev/null +++ b/ui/js/markdown/Emojis.mjs @@ -0,0 +1,109 @@ +import {create} from "https://fjs.targoninc.com/f.js"; +import {Emojis} from "./EmojiList.mjs"; + +const getEmoji = (tag) => { + tag = tag.replaceAll(" ", "-").replaceAll("_", "-"); + + const perfectMatch = Emojis.find(emoji => emoji.tags.includes(tag)); + if (perfectMatch) { + return perfectMatch; + } + + const partialMatch = Emojis.find(emoji => emoji.tags.some(t => t.includes(tag))); + if (partialMatch) { + return partialMatch; + } + + const words = tag.split("_"); + for (const word of words) { + const match = Emojis.find(emoji => emoji.tags.includes(word)); + if (match) { + return match; + } + } + + for (const emoji of Emojis) { + for (const alias of emoji.tags) { + const otherAlias = alias.replaceAll("-", ""); + if (otherAlias.includes(tag) || tag.includes(otherAlias)) { + return emoji; + } + } + } + + const closestMatch = Emojis.reduce((acc, emoji) => { + const distance = emoji.tags.reduce((acc, t) => { + const d = levenshtein(tag, t); + return d < acc ? d : acc; + }, Infinity); + if (distance < acc.distance) { + return {distance, emoji}; + } + return acc; + }); + if (closestMatch.distance < 5) { + return closestMatch.emoji; + } + + return null; +} + +const levenshtein = (a, b) => { + const matrix = []; + + const aLength = a.length; + const bLength = b.length; + + if (aLength === 0) { + return bLength; + } else if (bLength === 0) { + return aLength; + } + + for (let i = 0; i <= bLength; i++) { + matrix[i] = [i]; + } + + for (let j = 0; j <= aLength; j++) { + matrix[0][j] = j; + } + + for (let i = 1; i <= bLength; i++) { + for (let j = 1; j <= aLength; j++) { + if (b.charAt(i-1) === a.charAt(j-1)) { + matrix[i][j] = matrix[i-1][j-1]; + } else { + matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, Math.min(matrix[i][j-1] + 1, matrix[i-1][j] + 1)); + } + } + } + + return matrix[bLength][aLength]; +} + +const renderEmoji = (emoji) => { + return create("picture") + .classes("emoji") + .children( + create("source") + .attributes("srcset", `https://fonts.gstatic.com/s/e/notoemoji/latest/${emoji.codepoint}/512.webp`) + .type("type", "image/webp") + .build(), + create("img") + .src(`https://fonts.gstatic.com/s/e/notoemoji/latest/${emoji.codepoint}/512.gif`) + .alt(emoji.tags[0]) + .width(32) + .height(32) + .build() + ).build(); +} + +export const emoji = (tag) => { + console.log(tag); + const emoji = getEmoji(tag); + if (!emoji) { + return create("span").text(tag).build(); + } + console.log(emoji); + return renderEmoji(emoji); +} diff --git a/ui/js/MarkdownProcessor.mjs b/ui/js/markdown/MarkdownProcessor.mjs similarity index 96% rename from ui/js/MarkdownProcessor.mjs rename to ui/js/markdown/MarkdownProcessor.mjs index 34a9515..bdc498a 100644 --- a/ui/js/MarkdownProcessor.mjs +++ b/ui/js/markdown/MarkdownProcessor.mjs @@ -1,4 +1,5 @@ -import {MarkdownTemplates} from "../templates/MarkdownTemplates.mjs"; +import {MarkdownTemplates} from "./MarkdownTemplates.mjs"; +import {emoji} from "./Emojis.mjs"; export class MarkdownProcessor { static process(text) { @@ -67,6 +68,7 @@ export class MarkdownProcessor { {name: 'italic', regex: /\*(.*?)\*/g}, {name: 'link', regex: /\[(.*?)]\((.*?)\)/g}, {name: 'image', regex: /!\[(.*?)]\((.*?)\)/g}, + {name: 'emoji', regex: /:(.*?):/g} ]; // Keep examining the text until all formatting has been extracted while (text.length > 0) { @@ -79,7 +81,6 @@ export class MarkdownProcessor { type.regex.lastIndex = 0; // Reset lastIndex to start search from beginning of string const match = type.regex.exec(text); if (match && match.index < nearest.index) { - console.log(match, type.name); nearest = match; nearestType = type.name; } @@ -111,7 +112,6 @@ export class MarkdownProcessor { static processText(text) { const elements = MarkdownProcessor.parseText(text); - console.log(text, elements.length); return MarkdownProcessor.generateTextHtml(elements); } @@ -192,6 +192,9 @@ export class MarkdownProcessor { case 'image': nodes.push(MarkdownTemplates.image(element.src, element.alt)); break; + case 'emoji': + nodes.push(emoji(element.text)); + break; default: nodes.push(MarkdownTemplates.text(element.text)); break; diff --git a/ui/templates/MarkdownTemplates.mjs b/ui/js/markdown/MarkdownTemplates.mjs similarity index 100% rename from ui/templates/MarkdownTemplates.mjs rename to ui/js/markdown/MarkdownTemplates.mjs diff --git a/ui/styles.css b/ui/styles.css index f6472db..2501bcc 100644 --- a/ui/styles.css +++ b/ui/styles.css @@ -18,7 +18,7 @@ --color-7: #A63BFF; --color-8: #FF3BDE; --color-9: #FF3B8C; - --font-size: 16px; + --font-size: 18px; --regular-padding: 10px; --small-padding: 5px; --vertical-input-padding: 0.4rem; @@ -342,6 +342,11 @@ blockquote { border-radius: var(--border-radius); } +.emoji img { + height: 1rem; + width: 1rem; +} + input { padding: var(--input-padding); border-radius: var(--border-radius); diff --git a/ui/templates/ChatTemplates.mjs b/ui/templates/ChatTemplates.mjs index 0ea0224..9e9167d 100644 --- a/ui/templates/ChatTemplates.mjs +++ b/ui/templates/ChatTemplates.mjs @@ -7,7 +7,7 @@ import {VoiceRecorder} from "../js/VoiceRecorder.mjs"; import {TimeParser} from "../js/TimeParser.mjs"; import {GenericTemplates} from "./GenericTemplates.mjs"; import {StoreKeys} from "../js/StoreKeys.mjs"; -import {MarkdownProcessor} from "../js/MarkdownProcessor.mjs"; +import {MarkdownProcessor} from "../js/markdown/MarkdownProcessor.mjs"; export class ChatTemplates { static messageContainer(domNode, type, time) {