diff --git a/android/gradle.properties b/android/gradle.properties index 740bb746d3..c93ee1b33d 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -14,3 +14,6 @@ agpVersion=8.1.4 # A helpful discussion is at: # https://stackoverflow.com/a/74425347 kotlinVersion=1.9.10 + +# For compatibility with emoji_picker_flutter, see https://github.com/Fintasys/emoji_picker_flutter/issues/189#issuecomment-1965697752 +kotlin.jvm.target.validation.mode=IGNORE diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index 95b924fa18..3e6ae201c9 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -43,6 +43,10 @@ "@permissionsDeniedReadExternalStorage": { "description": "Message for dialog asking the user to grant permissions for external storage read access." }, + "actionSheetOptionAddReaction": "Add reaction", + "@actionSheetOptionAddReaction": { + "description": "Label for add reaction button on action sheet." + }, "actionSheetOptionCopy": "Copy message text", "@actionSheetOptionCopy": { "description": "Label for copy message text button on action sheet." @@ -67,6 +71,10 @@ "@errorCouldNotFetchMessageSource": { "description": "Error message when the source of a message could not be fetched." }, + "errorAddingReactionFailed": "Adding reaction failed", + "@errorAddingReactionFailed": { + "description": "Error message when adding a reaction to a message failed." + }, "errorCopyingFailed": "Copying failed", "@errorCopyingFailed": { "description": "Error message when copying the text of a message to the user's system clipboard failed." diff --git a/lib/emoji.dart b/lib/emoji.dart new file mode 100644 index 0000000000..f761fabd61 --- /dev/null +++ b/lib/emoji.dart @@ -0,0 +1,2122 @@ +import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; + +final emojiSet = defaultEmojiSet.map((emojiCategory) => + CategoryEmoji( + emojiCategory.category, + emojiCategory.emoji + .where((emoji) => emojiNameMaps[getEmojiCode(emoji)] != null) + .map((emoji) => + Emoji(emoji.emoji, getEmojiCanonicalName(emoji), hasSkinTone: emoji.hasSkinTone)).toList())).toList(); + +List filterUnicodeEmojiSet(List emojiSet, Iterable emojiNamesToRemove) { + return emojiSet.map((categoryEmoji) => + CategoryEmoji( + categoryEmoji.category, + categoryEmoji.emoji + .where((emoji) => !emojiNamesToRemove.contains(emoji.name)) + .toList())).toList(); +} + +String getEmojiCanonicalName(Emoji emoji) { + final emojiCode = getEmojiCode(emoji); + final emojiName = emojiNameMaps[emojiCode]; + if (emojiName == null) { + throw Exception("Emoji code $emojiCode not found in emojiNameMaps. Please add it to emojiNameMaps."); + } + final canonicalName = emojiName["canonical_name"]; + if (canonicalName is String) { + return canonicalName; + } + throw Exception("Emoji code $emojiCode not found in emojiNameMaps. Please add it to emojiNameMaps."); +} + +String getEmojiCode(Emoji emoji) { + final emojiString = emoji.emoji; + final codeUnits = emojiString.runes.toList(); + final emojiCode = codeUnits + // unqualify_emoji + // See https://github.com/zulip/zulip/blob/f4d58f1ba6ab612610a261dda7a875006e8b0c17/zerver/lib/emoji_utils.py#L4 + .where((codeUnit) => codeUnit != 0xfe0f) + .map((codeUnit) => codeUnit.toRadixString(16).padLeft(4, '0')).join(); + return emojiCode; +} + +/// A map of emoji code to canonical name and aliases. +/// From https://github.com/zulip/zulip/blob/f4d58f1ba6ab612610a261dda7a875006e8b0c17/tools/setup/emoji/emoji_names.py +final emojiNameMaps = { + "0023-20e3": {"canonical_name": "hash", "aliases": []}, + "002a-20e3": {"canonical_name": "asterisk", "aliases": []}, + "0030-20e3": {"canonical_name": "zero", "aliases": []}, + "0031-20e3": {"canonical_name": "one", "aliases": []}, + "0032-20e3": {"canonical_name": "two", "aliases": []}, + "0033-20e3": {"canonical_name": "three", "aliases": []}, + "0034-20e3": {"canonical_name": "four", "aliases": []}, + "0035-20e3": {"canonical_name": "five", "aliases": []}, + "0036-20e3": {"canonical_name": "six", "aliases": []}, + "0037-20e3": {"canonical_name": "seven", "aliases": []}, + "0038-20e3": {"canonical_name": "eight", "aliases": []}, + "0039-20e3": {"canonical_name": "nine", "aliases": []}, + "00a9": {"canonical_name": "copyright", "aliases": ["c"]}, + "00ae": {"canonical_name": "registered", "aliases": ["r"]}, + "1f004": {"canonical_name": "mahjong", "aliases": []}, + "1f0cf": {"canonical_name": "joker", "aliases": []}, + "1f170": {"canonical_name": "a", "aliases": []}, + "1f171": {"canonical_name": "b", "aliases": []}, + "1f17e": {"canonical_name": "o", "aliases": []}, + "1f17f": {"canonical_name": "parking", "aliases": ["p"]}, + "1f18e": {"canonical_name": "ab", "aliases": []}, + "1f191": {"canonical_name": "cl", "aliases": []}, + "1f192": {"canonical_name": "cool", "aliases": []}, + "1f193": {"canonical_name": "free", "aliases": []}, + "1f194": {"canonical_name": "id", "aliases": []}, + "1f195": {"canonical_name": "new", "aliases": []}, + "1f196": {"canonical_name": "ng", "aliases": []}, + "1f197": {"canonical_name": "squared_ok", "aliases": []}, + "1f198": {"canonical_name": "sos", "aliases": []}, + "1f199": {"canonical_name": "squared_up", "aliases": []}, + "1f19a": {"canonical_name": "vs", "aliases": []}, + "1f1e6-1f1e8": {"canonical_name": "flag_ascension_island", "aliases": []}, + "1f1e6-1f1e9": {"canonical_name": "flag_andorra", "aliases": []}, + "1f1e6-1f1ea": {"canonical_name": "flag_united_arab_emirates", "aliases": []}, + "1f1e6-1f1eb": {"canonical_name": "flag_afghanistan", "aliases": []}, + "1f1e6-1f1ec": {"canonical_name": "flag_antigua_and_barbuda", "aliases": []}, + "1f1e6-1f1ee": {"canonical_name": "flag_anguilla", "aliases": []}, + "1f1e6-1f1f1": {"canonical_name": "flag_albania", "aliases": []}, + "1f1e6-1f1f2": {"canonical_name": "flag_armenia", "aliases": []}, + "1f1e6-1f1f4": {"canonical_name": "flag_angola", "aliases": []}, + "1f1e6-1f1f6": {"canonical_name": "flag_antarctica", "aliases": []}, + "1f1e6-1f1f7": {"canonical_name": "flag_argentina", "aliases": []}, + "1f1e6-1f1f8": {"canonical_name": "flag_american_samoa", "aliases": []}, + "1f1e6-1f1f9": {"canonical_name": "flag_austria", "aliases": []}, + "1f1e6-1f1fa": {"canonical_name": "flag_australia", "aliases": []}, + "1f1e6-1f1fc": {"canonical_name": "flag_aruba", "aliases": []}, + "1f1e6-1f1fd": {"canonical_name": "flag_åland_islands", "aliases": ["flag_aland_islands"]}, + "1f1e6-1f1ff": {"canonical_name": "flag_azerbaijan", "aliases": []}, + "1f1e7-1f1e6": {"canonical_name": "flag_bosnia_and_herzegovina", "aliases": []}, + "1f1e7-1f1e7": {"canonical_name": "flag_barbados", "aliases": []}, + "1f1e7-1f1e9": {"canonical_name": "flag_bangladesh", "aliases": []}, + "1f1e7-1f1ea": {"canonical_name": "flag_belgium", "aliases": []}, + "1f1e7-1f1eb": {"canonical_name": "flag_burkina_faso", "aliases": []}, + "1f1e7-1f1ec": {"canonical_name": "flag_bulgaria", "aliases": []}, + "1f1e7-1f1ed": {"canonical_name": "flag_bahrain", "aliases": []}, + "1f1e7-1f1ee": {"canonical_name": "flag_burundi", "aliases": []}, + "1f1e7-1f1ef": {"canonical_name": "flag_benin", "aliases": []}, + "1f1e7-1f1f1": {"canonical_name": "flag_st_barthélemy", "aliases": ["flag_st_barthelemy"]}, + "1f1e7-1f1f2": {"canonical_name": "flag_bermuda", "aliases": []}, + "1f1e7-1f1f3": {"canonical_name": "flag_brunei", "aliases": []}, + "1f1e7-1f1f4": {"canonical_name": "flag_bolivia", "aliases": []}, + "1f1e7-1f1f6": {"canonical_name": "flag_caribbean_netherlands", "aliases": []}, + "1f1e7-1f1f7": {"canonical_name": "flag_brazil", "aliases": []}, + "1f1e7-1f1f8": {"canonical_name": "flag_bahamas", "aliases": []}, + "1f1e7-1f1f9": {"canonical_name": "flag_bhutan", "aliases": []}, + "1f1e7-1f1fb": {"canonical_name": "flag_bouvet_island", "aliases": []}, + "1f1e7-1f1fc": {"canonical_name": "flag_botswana", "aliases": []}, + "1f1e7-1f1fe": {"canonical_name": "flag_belarus", "aliases": []}, + "1f1e7-1f1ff": {"canonical_name": "flag_belize", "aliases": []}, + "1f1e8-1f1e6": {"canonical_name": "flag_canada", "aliases": []}, + "1f1e8-1f1e8": {"canonical_name": "flag_cocos_keeling_islands", "aliases": []}, + "1f1e8-1f1e9": {"canonical_name": "flag_congo_kinshasa", "aliases": []}, + "1f1e8-1f1eb": {"canonical_name": "flag_central_african_republic", "aliases": []}, + "1f1e8-1f1ec": {"canonical_name": "flag_congo_brazzaville", "aliases": []}, + "1f1e8-1f1ed": {"canonical_name": "flag_switzerland", "aliases": []}, + "1f1e8-1f1ee": {"canonical_name": "flag_côte_divoire", "aliases": ["flag_cote_divoire"]}, + "1f1e8-1f1f0": {"canonical_name": "flag_cook_islands", "aliases": []}, + "1f1e8-1f1f1": {"canonical_name": "flag_chile", "aliases": []}, + "1f1e8-1f1f2": {"canonical_name": "flag_cameroon", "aliases": []}, + "1f1e8-1f1f3": {"canonical_name": "flag_china", "aliases": []}, + "1f1e8-1f1f4": {"canonical_name": "flag_colombia", "aliases": []}, + "1f1e8-1f1f5": {"canonical_name": "flag_clipperton_island", "aliases": []}, + "1f1e8-1f1f7": {"canonical_name": "flag_costa_rica", "aliases": []}, + "1f1e8-1f1fa": {"canonical_name": "flag_cuba", "aliases": []}, + "1f1e8-1f1fb": {"canonical_name": "flag_cape_verde", "aliases": []}, + "1f1e8-1f1fc": {"canonical_name": "flag_curaçao", "aliases": ["flag_curacao"]}, + "1f1e8-1f1fd": {"canonical_name": "flag_christmas_island", "aliases": []}, + "1f1e8-1f1fe": {"canonical_name": "flag_cyprus", "aliases": []}, + "1f1e8-1f1ff": {"canonical_name": "flag_czechia", "aliases": []}, + "1f1e9-1f1ea": {"canonical_name": "flag_germany", "aliases": []}, + "1f1e9-1f1ec": {"canonical_name": "flag_diego_garcia", "aliases": []}, + "1f1e9-1f1ef": {"canonical_name": "flag_djibouti", "aliases": []}, + "1f1e9-1f1f0": {"canonical_name": "flag_denmark", "aliases": []}, + "1f1e9-1f1f2": {"canonical_name": "flag_dominica", "aliases": []}, + "1f1e9-1f1f4": {"canonical_name": "flag_dominican_republic", "aliases": []}, + "1f1e9-1f1ff": {"canonical_name": "flag_algeria", "aliases": []}, + "1f1ea-1f1e6": {"canonical_name": "flag_ceuta_and_melilla", "aliases": []}, + "1f1ea-1f1e8": {"canonical_name": "flag_ecuador", "aliases": []}, + "1f1ea-1f1ea": {"canonical_name": "flag_estonia", "aliases": []}, + "1f1ea-1f1ec": {"canonical_name": "flag_egypt", "aliases": []}, + "1f1ea-1f1ed": {"canonical_name": "flag_western_sahara", "aliases": []}, + "1f1ea-1f1f7": {"canonical_name": "flag_eritrea", "aliases": []}, + "1f1ea-1f1f8": {"canonical_name": "flag_spain", "aliases": []}, + "1f1ea-1f1f9": {"canonical_name": "flag_ethiopia", "aliases": []}, + "1f1ea-1f1fa": {"canonical_name": "flag_european_union", "aliases": []}, + "1f1eb-1f1ee": {"canonical_name": "flag_finland", "aliases": []}, + "1f1eb-1f1ef": {"canonical_name": "flag_fiji", "aliases": []}, + "1f1eb-1f1f0": {"canonical_name": "flag_falkland_islands", "aliases": []}, + "1f1eb-1f1f2": {"canonical_name": "flag_micronesia", "aliases": []}, + "1f1eb-1f1f4": {"canonical_name": "flag_faroe_islands", "aliases": []}, + "1f1eb-1f1f7": {"canonical_name": "flag_france", "aliases": []}, + "1f1ec-1f1e6": {"canonical_name": "flag_gabon", "aliases": []}, + "1f1ec-1f1e7": {"canonical_name": "flag_united_kingdom", "aliases": []}, + "1f1ec-1f1e9": {"canonical_name": "flag_grenada", "aliases": []}, + "1f1ec-1f1ea": {"canonical_name": "flag_georgia", "aliases": []}, + "1f1ec-1f1eb": {"canonical_name": "flag_french_guiana", "aliases": []}, + "1f1ec-1f1ec": {"canonical_name": "flag_guernsey", "aliases": []}, + "1f1ec-1f1ed": {"canonical_name": "flag_ghana", "aliases": []}, + "1f1ec-1f1ee": {"canonical_name": "flag_gibraltar", "aliases": []}, + "1f1ec-1f1f1": {"canonical_name": "flag_greenland", "aliases": []}, + "1f1ec-1f1f2": {"canonical_name": "flag_gambia", "aliases": []}, + "1f1ec-1f1f3": {"canonical_name": "flag_guinea", "aliases": []}, + "1f1ec-1f1f5": {"canonical_name": "flag_guadeloupe", "aliases": []}, + "1f1ec-1f1f6": {"canonical_name": "flag_equatorial_guinea", "aliases": []}, + "1f1ec-1f1f7": {"canonical_name": "flag_greece", "aliases": []}, + "1f1ec-1f1f8": { + "canonical_name": "flag_south_georgia_and_south_sandwich_islands", + "aliases": [], + }, + "1f1ec-1f1f9": {"canonical_name": "flag_guatemala", "aliases": []}, + "1f1ec-1f1fa": {"canonical_name": "flag_guam", "aliases": []}, + "1f1ec-1f1fc": {"canonical_name": "flag_guinea_bissau", "aliases": []}, + "1f1ec-1f1fe": {"canonical_name": "flag_guyana", "aliases": []}, + "1f1ed-1f1f0": {"canonical_name": "flag_hong_kong_sar_china", "aliases": []}, + "1f1ed-1f1f2": {"canonical_name": "flag_heard_and_mcdonald_islands", "aliases": []}, + "1f1ed-1f1f3": {"canonical_name": "flag_honduras", "aliases": []}, + "1f1ed-1f1f7": {"canonical_name": "flag_croatia", "aliases": []}, + "1f1ed-1f1f9": {"canonical_name": "flag_haiti", "aliases": []}, + "1f1ed-1f1fa": {"canonical_name": "flag_hungary", "aliases": []}, + "1f1ee-1f1e8": {"canonical_name": "flag_canary_islands", "aliases": []}, + "1f1ee-1f1e9": {"canonical_name": "flag_indonesia", "aliases": []}, + "1f1ee-1f1ea": {"canonical_name": "flag_ireland", "aliases": []}, + "1f1ee-1f1f1": {"canonical_name": "flag_israel", "aliases": []}, + "1f1ee-1f1f2": {"canonical_name": "flag_isle_of_man", "aliases": []}, + "1f1ee-1f1f3": {"canonical_name": "flag_india", "aliases": []}, + "1f1ee-1f1f4": {"canonical_name": "flag_british_indian_ocean_territory", "aliases": []}, + "1f1ee-1f1f6": {"canonical_name": "flag_iraq", "aliases": []}, + "1f1ee-1f1f7": {"canonical_name": "flag_iran", "aliases": []}, + "1f1ee-1f1f8": {"canonical_name": "flag_iceland", "aliases": []}, + "1f1ee-1f1f9": {"canonical_name": "flag_italy", "aliases": []}, + "1f1ef-1f1ea": {"canonical_name": "flag_jersey", "aliases": []}, + "1f1ef-1f1f2": {"canonical_name": "flag_jamaica", "aliases": []}, + "1f1ef-1f1f4": {"canonical_name": "flag_jordan", "aliases": []}, + "1f1ef-1f1f5": {"canonical_name": "flag_japan", "aliases": []}, + "1f1f0-1f1ea": {"canonical_name": "flag_kenya", "aliases": []}, + "1f1f0-1f1ec": {"canonical_name": "flag_kyrgyzstan", "aliases": []}, + "1f1f0-1f1ed": {"canonical_name": "flag_cambodia", "aliases": []}, + "1f1f0-1f1ee": {"canonical_name": "flag_kiribati", "aliases": []}, + "1f1f0-1f1f2": {"canonical_name": "flag_comoros", "aliases": []}, + "1f1f0-1f1f3": {"canonical_name": "flag_st_kitts_and_nevis", "aliases": []}, + "1f1f0-1f1f5": {"canonical_name": "flag_north_korea", "aliases": []}, + "1f1f0-1f1f7": {"canonical_name": "flag_south_korea", "aliases": []}, + "1f1f0-1f1fc": {"canonical_name": "flag_kuwait", "aliases": []}, + "1f1f0-1f1fe": {"canonical_name": "flag_cayman_islands", "aliases": []}, + "1f1f0-1f1ff": {"canonical_name": "flag_kazakhstan", "aliases": []}, + "1f1f1-1f1e6": {"canonical_name": "flag_laos", "aliases": []}, + "1f1f1-1f1e7": {"canonical_name": "flag_lebanon", "aliases": []}, + "1f1f1-1f1e8": {"canonical_name": "flag_st_lucia", "aliases": []}, + "1f1f1-1f1ee": {"canonical_name": "flag_liechtenstein", "aliases": []}, + "1f1f1-1f1f0": {"canonical_name": "flag_sri_lanka", "aliases": []}, + "1f1f1-1f1f7": {"canonical_name": "flag_liberia", "aliases": []}, + "1f1f1-1f1f8": {"canonical_name": "flag_lesotho", "aliases": []}, + "1f1f1-1f1f9": {"canonical_name": "flag_lithuania", "aliases": []}, + "1f1f1-1f1fa": {"canonical_name": "flag_luxembourg", "aliases": []}, + "1f1f1-1f1fb": {"canonical_name": "flag_latvia", "aliases": []}, + "1f1f1-1f1fe": {"canonical_name": "flag_libya", "aliases": []}, + "1f1f2-1f1e6": {"canonical_name": "flag_morocco", "aliases": []}, + "1f1f2-1f1e8": {"canonical_name": "flag_monaco", "aliases": []}, + "1f1f2-1f1e9": {"canonical_name": "flag_moldova", "aliases": []}, + "1f1f2-1f1ea": {"canonical_name": "flag_montenegro", "aliases": []}, + "1f1f2-1f1eb": {"canonical_name": "flag_st_martin", "aliases": []}, + "1f1f2-1f1ec": {"canonical_name": "flag_madagascar", "aliases": []}, + "1f1f2-1f1ed": {"canonical_name": "flag_marshall_islands", "aliases": []}, + "1f1f2-1f1f0": {"canonical_name": "flag_north_macedonia", "aliases": []}, + "1f1f2-1f1f1": {"canonical_name": "flag_mali", "aliases": []}, + "1f1f2-1f1f2": {"canonical_name": "flag_myanmar_burma", "aliases": []}, + "1f1f2-1f1f3": {"canonical_name": "flag_mongolia", "aliases": []}, + "1f1f2-1f1f4": {"canonical_name": "flag_macao_sar_china", "aliases": []}, + "1f1f2-1f1f5": {"canonical_name": "flag_northern_mariana_islands", "aliases": []}, + "1f1f2-1f1f6": {"canonical_name": "flag_martinique", "aliases": []}, + "1f1f2-1f1f7": {"canonical_name": "flag_mauritania", "aliases": []}, + "1f1f2-1f1f8": {"canonical_name": "flag_montserrat", "aliases": []}, + "1f1f2-1f1f9": {"canonical_name": "flag_malta", "aliases": []}, + "1f1f2-1f1fa": {"canonical_name": "flag_mauritius", "aliases": []}, + "1f1f2-1f1fb": {"canonical_name": "flag_maldives", "aliases": []}, + "1f1f2-1f1fc": {"canonical_name": "flag_malawi", "aliases": []}, + "1f1f2-1f1fd": {"canonical_name": "flag_mexico", "aliases": []}, + "1f1f2-1f1fe": {"canonical_name": "flag_malaysia", "aliases": []}, + "1f1f2-1f1ff": {"canonical_name": "flag_mozambique", "aliases": []}, + "1f1f3-1f1e6": {"canonical_name": "flag_namibia", "aliases": []}, + "1f1f3-1f1e8": {"canonical_name": "flag_new_caledonia", "aliases": []}, + "1f1f3-1f1ea": {"canonical_name": "flag_niger", "aliases": []}, + "1f1f3-1f1eb": {"canonical_name": "flag_norfolk_island", "aliases": []}, + "1f1f3-1f1ec": {"canonical_name": "flag_nigeria", "aliases": []}, + "1f1f3-1f1ee": {"canonical_name": "flag_nicaragua", "aliases": []}, + "1f1f3-1f1f1": {"canonical_name": "flag_netherlands", "aliases": []}, + "1f1f3-1f1f4": {"canonical_name": "flag_norway", "aliases": []}, + "1f1f3-1f1f5": {"canonical_name": "flag_nepal", "aliases": []}, + "1f1f3-1f1f7": {"canonical_name": "flag_nauru", "aliases": []}, + "1f1f3-1f1fa": {"canonical_name": "flag_niue", "aliases": []}, + "1f1f3-1f1ff": {"canonical_name": "flag_new_zealand", "aliases": []}, + "1f1f4-1f1f2": {"canonical_name": "flag_oman", "aliases": []}, + "1f1f5-1f1e6": {"canonical_name": "flag_panama", "aliases": []}, + "1f1f5-1f1ea": {"canonical_name": "flag_peru", "aliases": []}, + "1f1f5-1f1eb": {"canonical_name": "flag_french_polynesia", "aliases": []}, + "1f1f5-1f1ec": {"canonical_name": "flag_papua_new_guinea", "aliases": []}, + "1f1f5-1f1ed": {"canonical_name": "flag_philippines", "aliases": []}, + "1f1f5-1f1f0": {"canonical_name": "flag_pakistan", "aliases": []}, + "1f1f5-1f1f1": {"canonical_name": "flag_poland", "aliases": []}, + "1f1f5-1f1f2": {"canonical_name": "flag_st_pierre_and_miquelon", "aliases": []}, + "1f1f5-1f1f3": {"canonical_name": "flag_pitcairn_islands", "aliases": []}, + "1f1f5-1f1f7": {"canonical_name": "flag_puerto_rico", "aliases": []}, + "1f1f5-1f1f8": {"canonical_name": "flag_palestinian_territories", "aliases": []}, + "1f1f5-1f1f9": {"canonical_name": "flag_portugal", "aliases": []}, + "1f1f5-1f1fc": {"canonical_name": "flag_palau", "aliases": []}, + "1f1f5-1f1fe": {"canonical_name": "flag_paraguay", "aliases": []}, + "1f1f6-1f1e6": {"canonical_name": "flag_qatar", "aliases": []}, + "1f1f7-1f1ea": {"canonical_name": "flag_réunion", "aliases": ["flag_reunion"]}, + "1f1f7-1f1f4": {"canonical_name": "flag_romania", "aliases": []}, + "1f1f7-1f1f8": {"canonical_name": "flag_serbia", "aliases": []}, + "1f1f7-1f1fa": {"canonical_name": "flag_russia", "aliases": []}, + "1f1f7-1f1fc": {"canonical_name": "flag_rwanda", "aliases": []}, + "1f1f8-1f1e6": {"canonical_name": "flag_saudi_arabia", "aliases": []}, + "1f1f8-1f1e7": {"canonical_name": "flag_solomon_islands", "aliases": []}, + "1f1f8-1f1e8": {"canonical_name": "flag_seychelles", "aliases": []}, + "1f1f8-1f1e9": {"canonical_name": "flag_sudan", "aliases": []}, + "1f1f8-1f1ea": {"canonical_name": "flag_sweden", "aliases": []}, + "1f1f8-1f1ec": {"canonical_name": "flag_singapore", "aliases": []}, + "1f1f8-1f1ed": {"canonical_name": "flag_st_helena", "aliases": []}, + "1f1f8-1f1ee": {"canonical_name": "flag_slovenia", "aliases": []}, + "1f1f8-1f1ef": {"canonical_name": "flag_svalbard_and_jan_mayen", "aliases": []}, + "1f1f8-1f1f0": {"canonical_name": "flag_slovakia", "aliases": []}, + "1f1f8-1f1f1": {"canonical_name": "flag_sierra_leone", "aliases": []}, + "1f1f8-1f1f2": {"canonical_name": "flag_san_marino", "aliases": []}, + "1f1f8-1f1f3": {"canonical_name": "flag_senegal", "aliases": []}, + "1f1f8-1f1f4": {"canonical_name": "flag_somalia", "aliases": []}, + "1f1f8-1f1f7": {"canonical_name": "flag_suriname", "aliases": []}, + "1f1f8-1f1f8": {"canonical_name": "flag_south_sudan", "aliases": []}, + "1f1f8-1f1f9": { + "canonical_name": "flag_são_tomé_and_príncipe", + "aliases": ["flag_sao_tome_and_principe"], + }, + "1f1f8-1f1fb": {"canonical_name": "flag_el_salvador", "aliases": []}, + "1f1f8-1f1fd": {"canonical_name": "flag_sint_maarten", "aliases": []}, + "1f1f8-1f1fe": {"canonical_name": "flag_syria", "aliases": []}, + "1f1f8-1f1ff": {"canonical_name": "flag_eswatini", "aliases": []}, + "1f1f9-1f1e6": {"canonical_name": "flag_tristan_da_cunha", "aliases": []}, + "1f1f9-1f1e8": {"canonical_name": "flag_turks_and_caicos_islands", "aliases": []}, + "1f1f9-1f1e9": {"canonical_name": "flag_chad", "aliases": []}, + "1f1f9-1f1eb": {"canonical_name": "flag_french_southern_territories", "aliases": []}, + "1f1f9-1f1ec": {"canonical_name": "flag_togo", "aliases": []}, + "1f1f9-1f1ed": {"canonical_name": "flag_thailand", "aliases": []}, + "1f1f9-1f1ef": {"canonical_name": "flag_tajikistan", "aliases": []}, + "1f1f9-1f1f0": {"canonical_name": "flag_tokelau", "aliases": []}, + "1f1f9-1f1f1": {"canonical_name": "flag_timor_leste", "aliases": []}, + "1f1f9-1f1f2": {"canonical_name": "flag_turkmenistan", "aliases": []}, + "1f1f9-1f1f3": {"canonical_name": "flag_tunisia", "aliases": []}, + "1f1f9-1f1f4": {"canonical_name": "flag_tonga", "aliases": []}, + "1f1f9-1f1f7": {"canonical_name": "flag_türkiye", "aliases": ["flag_turkiye"]}, + "1f1f9-1f1f9": {"canonical_name": "flag_trinidad_and_tobago", "aliases": []}, + "1f1f9-1f1fb": {"canonical_name": "flag_tuvalu", "aliases": []}, + "1f1f9-1f1fc": {"canonical_name": "flag_taiwan", "aliases": []}, + "1f1f9-1f1ff": {"canonical_name": "flag_tanzania", "aliases": []}, + "1f1fa-1f1e6": {"canonical_name": "flag_ukraine", "aliases": []}, + "1f1fa-1f1ec": {"canonical_name": "flag_uganda", "aliases": []}, + "1f1fa-1f1f2": {"canonical_name": "flag_us_outlying_islands", "aliases": []}, + "1f1fa-1f1f3": {"canonical_name": "flag_united_nations", "aliases": []}, + "1f1fa-1f1f8": {"canonical_name": "flag_united_states", "aliases": []}, + "1f1fa-1f1fe": {"canonical_name": "flag_uruguay", "aliases": []}, + "1f1fa-1f1ff": {"canonical_name": "flag_uzbekistan", "aliases": []}, + "1f1fb-1f1e6": {"canonical_name": "flag_vatican_city", "aliases": []}, + "1f1fb-1f1e8": {"canonical_name": "flag_st_vincent_and_grenadines", "aliases": []}, + "1f1fb-1f1ea": {"canonical_name": "flag_venezuela", "aliases": []}, + "1f1fb-1f1ec": {"canonical_name": "flag_british_virgin_islands", "aliases": []}, + "1f1fb-1f1ee": {"canonical_name": "flag_us_virgin_islands", "aliases": []}, + "1f1fb-1f1f3": {"canonical_name": "flag_vietnam", "aliases": []}, + "1f1fb-1f1fa": {"canonical_name": "flag_vanuatu", "aliases": []}, + "1f1fc-1f1eb": {"canonical_name": "flag_wallis_and_futuna", "aliases": []}, + "1f1fc-1f1f8": {"canonical_name": "flag_samoa", "aliases": []}, + "1f1fd-1f1f0": {"canonical_name": "flag_kosovo", "aliases": []}, + "1f1fe-1f1ea": {"canonical_name": "flag_yemen", "aliases": []}, + "1f1fe-1f1f9": {"canonical_name": "flag_mayotte", "aliases": []}, + "1f1ff-1f1e6": {"canonical_name": "flag_south_africa", "aliases": []}, + "1f1ff-1f1f2": {"canonical_name": "flag_zambia", "aliases": []}, + "1f1ff-1f1fc": {"canonical_name": "flag_zimbabwe", "aliases": []}, + "1f201": {"canonical_name": "japanese_here_button", "aliases": ["here", "ココ"]}, + "1f202": { + "canonical_name": "japanese_service_charge_button", + "aliases": ["service_charge", "サ"], + }, + "1f21a": {"canonical_name": "japanese_free_of_charge_button", "aliases": ["u7121"]}, + "1f22f": {"canonical_name": "japanese_reserved_button", "aliases": ["reserved", "指"]}, + "1f232": {"canonical_name": "japanese_prohibited_button", "aliases": ["u7981"]}, + "1f233": {"canonical_name": "japanese_vacancy_button", "aliases": ["vacancy", "空"]}, + "1f234": {"canonical_name": "japanese_passing_grade_button", "aliases": ["u5408"]}, + "1f235": {"canonical_name": "japanese_no_vacancy_button", "aliases": ["u6e80"]}, + "1f236": {"canonical_name": "japanese_not_free_of_charge_button", "aliases": ["u6709"]}, + "1f237": {"canonical_name": "japanese_monthly_amount_button", "aliases": ["u6708"]}, + "1f238": {"canonical_name": "japanese_application_button", "aliases": ["u7533"]}, + "1f239": {"canonical_name": "japanese_discount_button", "aliases": ["u5272"]}, + "1f23a": {"canonical_name": "japanese_open_for_business_button", "aliases": ["u55b6"]}, + "1f250": {"canonical_name": "japanese_bargain_button", "aliases": ["ideograph_advantage"]}, + "1f251": {"canonical_name": "japanese_acceptable_button", "aliases": ["accept"]}, + "1f300": {"canonical_name": "cyclone", "aliases": ["hurricane", "typhoon"]}, + "1f301": {"canonical_name": "foggy", "aliases": []}, + "1f302": {"canonical_name": "closed_umbrella", "aliases": []}, + "1f303": {"canonical_name": "night", "aliases": []}, + "1f304": {"canonical_name": "mountain_sunrise", "aliases": []}, + "1f305": {"canonical_name": "sunrise", "aliases": ["ocean_sunrise"]}, + "1f306": {"canonical_name": "sunset", "aliases": []}, + "1f307": {"canonical_name": "city_sunrise", "aliases": []}, + "1f308": {"canonical_name": "rainbow", "aliases": ["pride", "lgbtq"]}, + "1f309": {"canonical_name": "bridge", "aliases": []}, + "1f30a": {"canonical_name": "ocean", "aliases": []}, + "1f30b": {"canonical_name": "volcano", "aliases": []}, + "1f30c": {"canonical_name": "milky_way", "aliases": ["night_sky"]}, + "1f30d": {"canonical_name": "earth_africa", "aliases": []}, + "1f30e": {"canonical_name": "earth_americas", "aliases": []}, + "1f30f": {"canonical_name": "earth_asia", "aliases": []}, + "1f310": {"canonical_name": "www", "aliases": ["globe"]}, + "1f311": {"canonical_name": "new_moon", "aliases": []}, + "1f312": {"canonical_name": "waxing_crescent_moon", "aliases": ["waxing"]}, + "1f313": {"canonical_name": "first_quarter_moon", "aliases": []}, + "1f314": {"canonical_name": "waxing_moon", "aliases": []}, + "1f315": {"canonical_name": "full_moon", "aliases": []}, + "1f316": {"canonical_name": "waning_gibbous_moon", "aliases": ["gibbous"]}, + "1f317": {"canonical_name": "last_quarter_moon", "aliases": []}, + "1f318": {"canonical_name": "waning_crescent_moon", "aliases": []}, + "1f319": {"canonical_name": "moon", "aliases": []}, + "1f31a": {"canonical_name": "new_moon_face", "aliases": []}, + "1f31b": {"canonical_name": "goodnight", "aliases": []}, + "1f31c": {"canonical_name": "last_quarter_moon_face", "aliases": []}, + "1f31d": {"canonical_name": "moon_face", "aliases": []}, + "1f31e": {"canonical_name": "sun_face", "aliases": []}, + "1f31f": {"canonical_name": "glowing_star", "aliases": []}, + "1f320": {"canonical_name": "shooting_star", "aliases": ["wish"]}, + "1f321": {"canonical_name": "temperature", "aliases": ["thermometer", "warm"]}, + "1f324": {"canonical_name": "mostly_sunny", "aliases": []}, + "1f325": {"canonical_name": "cloudy", "aliases": []}, + "1f326": { + "canonical_name": "sunshowers", + "aliases": ["sun_and_rain", "partly_sunny_with_rain"], + }, + "1f327": {"canonical_name": "rainy", "aliases": ["soaked", "drenched"]}, + "1f328": {"canonical_name": "snowy", "aliases": ["snowstorm"]}, + "1f329": {"canonical_name": "lightning", "aliases": ["lightning_storm"]}, + "1f32a": {"canonical_name": "tornado", "aliases": []}, + "1f32b": {"canonical_name": "fog", "aliases": ["hazy"]}, + "1f32c": {"canonical_name": "windy", "aliases": ["mother_nature"]}, + "1f32d": {"canonical_name": "hotdog", "aliases": []}, + "1f32e": {"canonical_name": "taco", "aliases": []}, + "1f32f": {"canonical_name": "burrito", "aliases": []}, + "1f330": {"canonical_name": "chestnut", "aliases": []}, + "1f331": {"canonical_name": "seedling", "aliases": ["sprout"]}, + "1f332": {"canonical_name": "evergreen_tree", "aliases": []}, + "1f333": {"canonical_name": "tree", "aliases": ["deciduous_tree"]}, + "1f334": {"canonical_name": "palm_tree", "aliases": []}, + "1f335": {"canonical_name": "cactus", "aliases": []}, + "1f336": {"canonical_name": "hot_pepper", "aliases": ["chili_pepper"]}, + "1f337": {"canonical_name": "tulip", "aliases": ["flower"]}, + "1f338": {"canonical_name": "cherry_blossom", "aliases": []}, + "1f339": {"canonical_name": "rose", "aliases": []}, + "1f33a": {"canonical_name": "hibiscus", "aliases": []}, + "1f33b": {"canonical_name": "sunflower", "aliases": []}, + "1f33c": {"canonical_name": "blossom", "aliases": []}, + "1f33d": {"canonical_name": "corn", "aliases": ["maize"]}, + "1f33e": {"canonical_name": "harvest", "aliases": ["ear_of_rice"]}, + "1f33f": {"canonical_name": "herb", "aliases": ["plant"]}, + "1f340": {"canonical_name": "lucky", "aliases": ["four_leaf_clover"]}, + "1f341": {"canonical_name": "maple_leaf", "aliases": []}, + "1f342": {"canonical_name": "fallen_leaf", "aliases": []}, + "1f343": {"canonical_name": "leaves", "aliases": ["wind", "fall"]}, + "1f344": {"canonical_name": "mushroom", "aliases": []}, + "1f345": {"canonical_name": "tomato", "aliases": []}, + "1f346": {"canonical_name": "eggplant", "aliases": []}, + "1f347": {"canonical_name": "grapes", "aliases": []}, + "1f348": {"canonical_name": "melon", "aliases": []}, + "1f349": {"canonical_name": "watermelon", "aliases": []}, + "1f34a": {"canonical_name": "orange", "aliases": ["tangerine", "mandarin"]}, + "1f34b": {"canonical_name": "lemon", "aliases": []}, + "1f34c": {"canonical_name": "banana", "aliases": []}, + "1f34d": {"canonical_name": "pineapple", "aliases": []}, + "1f34e": {"canonical_name": "apple", "aliases": []}, + "1f34f": {"canonical_name": "green_apple", "aliases": []}, + "1f350": {"canonical_name": "pear", "aliases": []}, + "1f351": {"canonical_name": "peach", "aliases": []}, + "1f352": {"canonical_name": "cherries", "aliases": []}, + "1f353": {"canonical_name": "strawberry", "aliases": []}, + "1f354": {"canonical_name": "hamburger", "aliases": []}, + "1f355": {"canonical_name": "pizza", "aliases": []}, + "1f356": {"canonical_name": "meat", "aliases": []}, + "1f357": {"canonical_name": "drumstick", "aliases": ["poultry"]}, + "1f358": {"canonical_name": "senbei", "aliases": ["rice_cracker"]}, + "1f359": {"canonical_name": "onigiri", "aliases": []}, + "1f35a": {"canonical_name": "rice", "aliases": []}, + "1f35b": {"canonical_name": "curry", "aliases": []}, + "1f35c": {"canonical_name": "ramen", "aliases": ["noodles"]}, + "1f35d": {"canonical_name": "spaghetti", "aliases": []}, + "1f35e": {"canonical_name": "bread", "aliases": []}, + "1f35f": {"canonical_name": "fries", "aliases": []}, + "1f360": {"canonical_name": "yam", "aliases": ["sweet_potato"]}, + "1f361": {"canonical_name": "dango", "aliases": []}, + "1f362": {"canonical_name": "oden", "aliases": []}, + "1f363": {"canonical_name": "sushi", "aliases": []}, + "1f364": {"canonical_name": "tempura", "aliases": []}, + "1f365": {"canonical_name": "naruto", "aliases": []}, + "1f366": {"canonical_name": "soft_serve", "aliases": ["soft_ice_cream"]}, + "1f367": {"canonical_name": "shaved_ice", "aliases": []}, + "1f368": {"canonical_name": "ice_cream", "aliases": ["gelato"]}, + "1f369": {"canonical_name": "donut", "aliases": ["doughnut"]}, + "1f36a": {"canonical_name": "cookie", "aliases": []}, + "1f36b": {"canonical_name": "chocolate", "aliases": []}, + "1f36c": {"canonical_name": "candy", "aliases": []}, + "1f36d": {"canonical_name": "lollipop", "aliases": []}, + "1f36e": {"canonical_name": "custard", "aliases": ["flan"]}, + "1f36f": {"canonical_name": "honey", "aliases": []}, + "1f370": {"canonical_name": "cake", "aliases": []}, + "1f371": {"canonical_name": "bento", "aliases": []}, + "1f372": {"canonical_name": "food", "aliases": ["soup", "stew"]}, + "1f373": {"canonical_name": "cooking", "aliases": []}, + "1f374": {"canonical_name": "fork_and_knife", "aliases": ["eating_utensils"]}, + "1f375": {"canonical_name": "tea", "aliases": []}, + "1f376": {"canonical_name": "sake", "aliases": []}, + "1f377": {"canonical_name": "wine", "aliases": []}, + "1f378": {"canonical_name": "cocktail", "aliases": []}, + "1f379": {"canonical_name": "tropical_drink", "aliases": []}, + "1f37a": {"canonical_name": "beer", "aliases": []}, + "1f37b": {"canonical_name": "beers", "aliases": []}, + "1f37c": {"canonical_name": "baby_bottle", "aliases": []}, + "1f37d": { + "canonical_name": "hungry", + "aliases": ["meal", "table_setting", "fork_and_knife_with_plate", "lets_eat"], + }, + "1f37e": {"canonical_name": "champagne", "aliases": []}, + "1f37f": {"canonical_name": "popcorn", "aliases": []}, + "1f380": {"canonical_name": "ribbon", "aliases": ["decoration"]}, + "1f381": {"canonical_name": "gift", "aliases": ["present"]}, + "1f382": {"canonical_name": "birthday", "aliases": []}, + "1f383": {"canonical_name": "jack-o-lantern", "aliases": ["pumpkin"]}, + "1f384": {"canonical_name": "holiday_tree", "aliases": []}, + "1f385": {"canonical_name": "santa", "aliases": []}, + "1f386": {"canonical_name": "fireworks", "aliases": []}, + "1f387": {"canonical_name": "sparkler", "aliases": []}, + "1f388": {"canonical_name": "balloon", "aliases": ["celebration"]}, + "1f389": {"canonical_name": "tada", "aliases": []}, + "1f38a": {"canonical_name": "confetti", "aliases": ["party_ball"]}, + "1f38b": {"canonical_name": "wish_tree", "aliases": ["tanabata_tree"]}, + "1f38c": {"canonical_name": "crossed_flags", "aliases": ["solidarity"]}, + "1f38d": {"canonical_name": "bamboo", "aliases": []}, + "1f38e": {"canonical_name": "dolls", "aliases": []}, + "1f38f": {"canonical_name": "carp_streamer", "aliases": ["flags"]}, + "1f390": {"canonical_name": "wind_chime", "aliases": []}, + "1f391": {"canonical_name": "moon_ceremony", "aliases": []}, + "1f392": {"canonical_name": "backpack", "aliases": ["satchel"]}, + "1f393": {"canonical_name": "graduate", "aliases": ["mortar_board"]}, + "1f396": {"canonical_name": "military_medal", "aliases": []}, + "1f397": {"canonical_name": "reminder_ribbon", "aliases": []}, + "1f399": {"canonical_name": "studio_microphone", "aliases": []}, + "1f39a": {"canonical_name": "volume", "aliases": ["level_slider"]}, + "1f39b": {"canonical_name": "control_knobs", "aliases": []}, + "1f39e": {"canonical_name": "film", "aliases": []}, + "1f39f": {"canonical_name": "ticket", "aliases": []}, + "1f3a0": {"canonical_name": "carousel", "aliases": ["merry_go_round"]}, + "1f3a1": {"canonical_name": "ferris_wheel", "aliases": []}, + "1f3a2": {"canonical_name": "roller_coaster", "aliases": []}, + "1f3a3": {"canonical_name": "fishing", "aliases": []}, + "1f3a4": {"canonical_name": "microphone", "aliases": ["mike", "mic"]}, + "1f3a5": {"canonical_name": "movie_camera", "aliases": []}, + "1f3a6": {"canonical_name": "cinema", "aliases": ["movie_theater"]}, + "1f3a7": {"canonical_name": "headphones", "aliases": []}, + "1f3a8": {"canonical_name": "art", "aliases": ["palette", "painting"]}, + "1f3a9": {"canonical_name": "top_hat", "aliases": []}, + "1f3aa": {"canonical_name": "circus", "aliases": []}, + "1f3ab": {"canonical_name": "pass", "aliases": []}, + "1f3ac": {"canonical_name": "action", "aliases": []}, + "1f3ad": {"canonical_name": "performing_arts", "aliases": ["drama", "theater"]}, + "1f3ae": {"canonical_name": "video_game", "aliases": []}, + "1f3af": {"canonical_name": "direct_hit", "aliases": ["darts", "bulls_eye"]}, + "1f3b0": {"canonical_name": "slot_machine", "aliases": []}, + "1f3b1": {"canonical_name": "billiards", "aliases": ["pool", "8_ball"]}, + "1f3b2": {"canonical_name": "dice", "aliases": ["die"]}, + "1f3b3": {"canonical_name": "strike", "aliases": ["bowling"]}, + "1f3b4": {"canonical_name": "playing_cards", "aliases": []}, + "1f3b5": {"canonical_name": "music", "aliases": []}, + "1f3b6": {"canonical_name": "musical_notes", "aliases": []}, + "1f3b7": {"canonical_name": "saxophone", "aliases": []}, + "1f3b8": {"canonical_name": "guitar", "aliases": []}, + "1f3b9": {"canonical_name": "piano", "aliases": ["musical_keyboard"]}, + "1f3ba": {"canonical_name": "trumpet", "aliases": []}, + "1f3bb": {"canonical_name": "violin", "aliases": []}, + "1f3bc": {"canonical_name": "musical_score", "aliases": []}, + "1f3bd": {"canonical_name": "running_shirt", "aliases": []}, + "1f3be": {"canonical_name": "tennis", "aliases": []}, + "1f3bf": {"canonical_name": "ski", "aliases": []}, + "1f3c0": {"canonical_name": "basketball", "aliases": []}, + "1f3c1": {"canonical_name": "checkered_flag", "aliases": ["race", "go", "start"]}, + "1f3c2": {"canonical_name": "snowboarder", "aliases": []}, + "1f3c3-200d-2640": {"canonical_name": "woman_running", "aliases": []}, + "1f3c3-200d-2642": {"canonical_name": "man_running", "aliases": []}, + "1f3c3": {"canonical_name": "running", "aliases": ["runner"]}, + "1f3c4-200d-2640": {"canonical_name": "woman_surfing", "aliases": []}, + "1f3c4-200d-2642": {"canonical_name": "man_surfing", "aliases": []}, + "1f3c4": {"canonical_name": "surf", "aliases": []}, + "1f3c5": {"canonical_name": "medal", "aliases": []}, + "1f3c6": {"canonical_name": "trophy", "aliases": ["winner"]}, + "1f3c7": {"canonical_name": "horse_racing", "aliases": ["horse_riding"]}, + "1f3c8": {"canonical_name": "american_football", "aliases": []}, + "1f3c9": {"canonical_name": "rugby", "aliases": []}, + "1f3ca-200d-2640": {"canonical_name": "woman_swimming", "aliases": []}, + "1f3ca-200d-2642": {"canonical_name": "man_swimming", "aliases": []}, + "1f3ca": {"canonical_name": "swim", "aliases": []}, + "1f3cb-200d-2640": {"canonical_name": "woman_lifting_weights", "aliases": []}, + "1f3cb-200d-2642": {"canonical_name": "man_lifting_weights", "aliases": []}, + "1f3cb": {"canonical_name": "lift", "aliases": ["work_out", "weight_lift", "gym"]}, + "1f3cc-200d-2640": {"canonical_name": "woman_golfing", "aliases": []}, + "1f3cc-200d-2642": {"canonical_name": "man_golfing", "aliases": []}, + "1f3cc": {"canonical_name": "golf", "aliases": []}, + "1f3cd": {"canonical_name": "motorcycle", "aliases": []}, + "1f3ce": {"canonical_name": "racecar", "aliases": []}, + "1f3cf": {"canonical_name": "cricket_game", "aliases": []}, + "1f3d0": {"canonical_name": "volleyball", "aliases": []}, + "1f3d1": {"canonical_name": "field_hockey", "aliases": []}, + "1f3d2": {"canonical_name": "ice_hockey", "aliases": []}, + "1f3d3": {"canonical_name": "ping_pong", "aliases": ["table_tennis"]}, + "1f3d4": {"canonical_name": "snowy_mountain", "aliases": []}, + "1f3d5": {"canonical_name": "campsite", "aliases": []}, + "1f3d6": {"canonical_name": "beach", "aliases": []}, + "1f3d7": {"canonical_name": "construction", "aliases": []}, + "1f3d8": {"canonical_name": "houses", "aliases": []}, + "1f3d9": {"canonical_name": "city", "aliases": ["skyline"]}, + "1f3da": {"canonical_name": "derelict_house", "aliases": ["condemned"]}, + "1f3db": {"canonical_name": "classical_building", "aliases": []}, + "1f3dc": {"canonical_name": "desert", "aliases": []}, + "1f3dd": {"canonical_name": "island", "aliases": []}, + "1f3de": {"canonical_name": "national_park", "aliases": []}, + "1f3df": {"canonical_name": "stadium", "aliases": []}, + "1f3e0": {"canonical_name": "house", "aliases": []}, + "1f3e1": {"canonical_name": "suburb", "aliases": []}, + "1f3e2": {"canonical_name": "office", "aliases": []}, + "1f3e3": {"canonical_name": "japan_post", "aliases": []}, + "1f3e4": {"canonical_name": "post_office", "aliases": []}, + "1f3e5": {"canonical_name": "hospital", "aliases": []}, + "1f3e6": {"canonical_name": "bank", "aliases": []}, + "1f3e7": {"canonical_name": "atm", "aliases": []}, + "1f3e8": {"canonical_name": "hotel", "aliases": []}, + "1f3e9": {"canonical_name": "love_hotel", "aliases": []}, + "1f3ea": {"canonical_name": "convenience_store", "aliases": []}, + "1f3eb": {"canonical_name": "school", "aliases": []}, + "1f3ec": {"canonical_name": "department_store", "aliases": []}, + "1f3ed": {"canonical_name": "factory", "aliases": []}, + "1f3ee": {"canonical_name": "lantern", "aliases": ["izakaya_lantern"]}, + "1f3ef": {"canonical_name": "shiro", "aliases": []}, + "1f3f0": {"canonical_name": "castle", "aliases": []}, + "1f3f3-200d-1f308": {"canonical_name": "rainbow_flag", "aliases": []}, + "1f3f3-200d-26a7": {"canonical_name": "transgender_flag", "aliases": []}, + "1f3f3": {"canonical_name": "white_flag", "aliases": ["surrender"]}, + "1f3f4-200d-2620": {"canonical_name": "pirate_flag", "aliases": ["jolly_roger", "plunder"]}, + "1f3f4-e0067-e0062-e0065-e006e-e0067-e007f": {"canonical_name": "flag_england", "aliases": []}, + "1f3f4-e0067-e0062-e0073-e0063-e0074-e007f": {"canonical_name": "flag_scotland", "aliases": []}, + "1f3f4-e0067-e0062-e0077-e006c-e0073-e007f": {"canonical_name": "flag_wales", "aliases": []}, + "1f3f4": {"canonical_name": "black_flag", "aliases": []}, + "1f3f5": {"canonical_name": "rosette", "aliases": []}, + "1f3f7": {"canonical_name": "label", "aliases": ["tag", "price_tag"]}, + "1f3f8": {"canonical_name": "badminton", "aliases": []}, + "1f3f9": {"canonical_name": "bow_and_arrow", "aliases": ["archery"]}, + "1f3fa": {"canonical_name": "vase", "aliases": ["amphora"]}, + "1f400": {"canonical_name": "rat", "aliases": []}, + "1f401": {"canonical_name": "mouse", "aliases": []}, + "1f402": {"canonical_name": "ox", "aliases": ["bull"]}, + "1f403": {"canonical_name": "water_buffalo", "aliases": []}, + "1f404": {"canonical_name": "cow", "aliases": []}, + "1f405": {"canonical_name": "tiger", "aliases": []}, + "1f406": {"canonical_name": "leopard", "aliases": []}, + "1f407": {"canonical_name": "rabbit", "aliases": []}, + "1f408-200d-2b1b": {"canonical_name": "black_cat", "aliases": ["unlucky"]}, + "1f408": {"canonical_name": "cat", "aliases": ["meow"]}, + "1f409": {"canonical_name": "dragon", "aliases": []}, + "1f40a": {"canonical_name": "crocodile", "aliases": []}, + "1f40b": {"canonical_name": "humpback_whale", "aliases": []}, + "1f40c": {"canonical_name": "snail", "aliases": []}, + "1f40d": {"canonical_name": "snake", "aliases": ["hiss"]}, + "1f40e": {"canonical_name": "horse", "aliases": []}, + "1f40f": {"canonical_name": "ram", "aliases": []}, + "1f410": {"canonical_name": "goat", "aliases": []}, + "1f411": {"canonical_name": "sheep", "aliases": ["baa"]}, + "1f412": {"canonical_name": "monkey", "aliases": []}, + "1f413": {"canonical_name": "rooster", "aliases": ["alarm", "cock-a-doodle-doo"]}, + "1f414": {"canonical_name": "chicken", "aliases": ["cluck"]}, + "1f415-200d-1f9ba": {"canonical_name": "service_dog", "aliases": ["assistance", "service"]}, + "1f415": {"canonical_name": "dog", "aliases": ["woof"]}, + "1f416": {"canonical_name": "pig", "aliases": ["oink"]}, + "1f417": {"canonical_name": "boar", "aliases": []}, + "1f418": {"canonical_name": "elephant", "aliases": []}, + "1f419": {"canonical_name": "octopus", "aliases": []}, + "1f41a": {"canonical_name": "shell", "aliases": ["seashell", "conch", "spiral_shell"]}, + "1f41b": {"canonical_name": "bug", "aliases": ["caterpillar"]}, + "1f41c": {"canonical_name": "ant", "aliases": []}, + "1f41d": {"canonical_name": "bee", "aliases": ["buzz", "honeybee"]}, + "1f41e": {"canonical_name": "lady_beetle", "aliases": ["ladybird", "ladybug"]}, + "1f41f": {"canonical_name": "fish", "aliases": []}, + "1f420": {"canonical_name": "tropical_fish", "aliases": []}, + "1f421": {"canonical_name": "blowfish", "aliases": []}, + "1f422": {"canonical_name": "turtle", "aliases": ["tortoise"]}, + "1f423": {"canonical_name": "hatching", "aliases": ["hatching_chick"]}, + "1f424": {"canonical_name": "chick", "aliases": ["baby_chick"]}, + "1f425": {"canonical_name": "new_baby", "aliases": []}, + "1f426-200d-2b1b": {"canonical_name": "black_bird", "aliases": ["crow", "raven", "rook"]}, + "1f426": {"canonical_name": "bird", "aliases": []}, + "1f427": {"canonical_name": "penguin", "aliases": []}, + "1f428": {"canonical_name": "koala", "aliases": []}, + "1f429": {"canonical_name": "poodle", "aliases": []}, + "1f42a": {"canonical_name": "arabian_camel", "aliases": []}, + "1f42b": {"canonical_name": "camel", "aliases": []}, + "1f42c": {"canonical_name": "dolphin", "aliases": ["flipper"]}, + "1f42d": {"canonical_name": "dormouse", "aliases": []}, + "1f42e": {"canonical_name": "calf", "aliases": []}, + "1f42f": {"canonical_name": "tiger_cub", "aliases": []}, + "1f430": {"canonical_name": "bunny", "aliases": []}, + "1f431": {"canonical_name": "kitten", "aliases": []}, + "1f432": {"canonical_name": "dragon_face", "aliases": []}, + "1f433": {"canonical_name": "whale", "aliases": []}, + "1f434": {"canonical_name": "pony", "aliases": []}, + "1f435": {"canonical_name": "monkey_face", "aliases": []}, + "1f436": {"canonical_name": "puppy", "aliases": []}, + "1f437": {"canonical_name": "piglet", "aliases": []}, + "1f438": {"canonical_name": "frog", "aliases": []}, + "1f439": {"canonical_name": "hamster", "aliases": []}, + "1f43a": {"canonical_name": "wolf", "aliases": []}, + "1f43b-200d-2744": {"canonical_name": "polar_bear", "aliases": ["arctic"]}, + "1f43b": {"canonical_name": "bear", "aliases": []}, + "1f43c": {"canonical_name": "panda", "aliases": []}, + "1f43d": {"canonical_name": "pig_nose", "aliases": []}, + "1f43e": {"canonical_name": "paw_prints", "aliases": ["paws"]}, + "1f43f": {"canonical_name": "chipmunk", "aliases": []}, + "1f440": {"canonical_name": "eyes", "aliases": ["looking"]}, + "1f441-200d-1f5e8": { + "canonical_name": "eye_in_speech_bubble", + "aliases": ["speech", "witness"], + }, + "1f441": {"canonical_name": "eye", "aliases": []}, + "1f442": {"canonical_name": "ear", "aliases": []}, + "1f443": {"canonical_name": "nose", "aliases": []}, + "1f444": {"canonical_name": "lips", "aliases": ["mouth"]}, + "1f445": {"canonical_name": "tongue", "aliases": []}, + "1f446": {"canonical_name": "point_up", "aliases": ["this"]}, + "1f447": {"canonical_name": "point_down", "aliases": []}, + "1f448": {"canonical_name": "point_left", "aliases": []}, + "1f449": {"canonical_name": "point_right", "aliases": []}, + "1f44a": {"canonical_name": "fist_bump", "aliases": ["punch"]}, + "1f44b": {"canonical_name": "wave", "aliases": ["hello", "hi"]}, + "1f44c": {"canonical_name": "ok", "aliases": ["got_it"]}, + "1f44d": {"canonical_name": "+1", "aliases": ["thumbs_up", "like"]}, + "1f44e": {"canonical_name": "-1", "aliases": ["thumbs_down"]}, + "1f44f": {"canonical_name": "clap", "aliases": ["applause"]}, + "1f450": {"canonical_name": "open_hands", "aliases": []}, + "1f451": {"canonical_name": "crown", "aliases": ["queen", "king"]}, + "1f452": {"canonical_name": "hat", "aliases": []}, + "1f453": {"canonical_name": "glasses", "aliases": ["spectacles"]}, + "1f454": {"canonical_name": "tie", "aliases": []}, + "1f455": {"canonical_name": "shirt", "aliases": ["tshirt"]}, + "1f456": {"canonical_name": "jeans", "aliases": ["denim"]}, + "1f457": {"canonical_name": "dress", "aliases": []}, + "1f458": {"canonical_name": "kimono", "aliases": []}, + "1f459": {"canonical_name": "bikini", "aliases": []}, + "1f45a": {"canonical_name": "clothing", "aliases": []}, + "1f45b": {"canonical_name": "purse", "aliases": []}, + "1f45c": {"canonical_name": "handbag", "aliases": []}, + "1f45d": {"canonical_name": "pouch", "aliases": []}, + "1f45e": {"canonical_name": "shoe", "aliases": []}, + "1f45f": {"canonical_name": "athletic_shoe", "aliases": ["sneaker", "running_shoe"]}, + "1f460": {"canonical_name": "high_heels", "aliases": []}, + "1f461": {"canonical_name": "sandal", "aliases": ["flip_flops"]}, + "1f462": {"canonical_name": "boot", "aliases": []}, + "1f463": {"canonical_name": "footprints", "aliases": ["feet"]}, + "1f464": {"canonical_name": "silhouette", "aliases": ["shadow"]}, + "1f465": {"canonical_name": "silhouettes", "aliases": ["shadows"]}, + "1f466": {"canonical_name": "boy", "aliases": []}, + "1f467": {"canonical_name": "girl", "aliases": []}, + "1f468-200d-1f33e": {"canonical_name": "man_farmer", "aliases": []}, + "1f468-200d-1f373": {"canonical_name": "man_cook", "aliases": []}, + "1f468-200d-1f37c": {"canonical_name": "man_feeding_baby", "aliases": []}, + "1f468-200d-1f393": {"canonical_name": "man_student", "aliases": []}, + "1f468-200d-1f3a4": {"canonical_name": "man_singer", "aliases": []}, + "1f468-200d-1f3a8": {"canonical_name": "man_artist", "aliases": []}, + "1f468-200d-1f3eb": {"canonical_name": "man_teacher", "aliases": []}, + "1f468-200d-1f3ed": {"canonical_name": "man_factory_worker", "aliases": []}, + "1f468-200d-1f466-200d-1f466": {"canonical_name": "family_man_boy_boy", "aliases": []}, + "1f468-200d-1f466": {"canonical_name": "family_man_boy", "aliases": []}, + "1f468-200d-1f467-200d-1f466": {"canonical_name": "family_man_girl_boy", "aliases": []}, + "1f468-200d-1f467-200d-1f467": {"canonical_name": "family_man_girl_girl", "aliases": []}, + "1f468-200d-1f467": {"canonical_name": "family_man_girl", "aliases": []}, + "1f468-200d-1f468-200d-1f466": {"canonical_name": "family_man_man_boy", "aliases": []}, + "1f468-200d-1f468-200d-1f466-200d-1f466": { + "canonical_name": "family_man_man_boy_boy", + "aliases": [], + }, + "1f468-200d-1f468-200d-1f467": {"canonical_name": "family_man_man_girl", "aliases": []}, + "1f468-200d-1f468-200d-1f467-200d-1f466": { + "canonical_name": "family_man_man_girl_boy", + "aliases": [], + }, + "1f468-200d-1f468-200d-1f467-200d-1f467": { + "canonical_name": "family_man_man_girl_girl", + "aliases": [], + }, + "1f468-200d-1f469-200d-1f466": {"canonical_name": "family_man_woman_boy", "aliases": []}, + "1f468-200d-1f469-200d-1f466-200d-1f466": { + "canonical_name": "family_man_woman_boy_boy", + "aliases": [], + }, + "1f468-200d-1f469-200d-1f467": {"canonical_name": "family_man_woman_girl", "aliases": []}, + "1f468-200d-1f469-200d-1f467-200d-1f466": { + "canonical_name": "family_man_woman_girl_boy", + "aliases": [], + }, + "1f468-200d-1f469-200d-1f467-200d-1f467": { + "canonical_name": "family_man_woman_girl_girl", + "aliases": [], + }, + "1f468-200d-1f4bb": {"canonical_name": "man_technologist", "aliases": []}, + "1f468-200d-1f4bc": {"canonical_name": "man_office_worker", "aliases": []}, + "1f468-200d-1f527": {"canonical_name": "man_mechanic", "aliases": []}, + "1f468-200d-1f52c": {"canonical_name": "man_scientist", "aliases": []}, + "1f468-200d-1f680": {"canonical_name": "man_astronaut", "aliases": []}, + "1f468-200d-1f692": {"canonical_name": "man_firefighter", "aliases": []}, + "1f468-200d-1f9af": {"canonical_name": "man_with_white_cane", "aliases": []}, + "1f468-200d-1f9b0": {"canonical_name": "man_red_hair", "aliases": []}, + "1f468-200d-1f9b1": {"canonical_name": "man_curly_hair", "aliases": []}, + "1f468-200d-1f9b2": {"canonical_name": "man_bald", "aliases": []}, + "1f468-200d-1f9b3": {"canonical_name": "man_white_hair", "aliases": []}, + "1f468-200d-1f9bc": {"canonical_name": "man_in_motorized_wheelchair", "aliases": []}, + "1f468-200d-1f9bd": {"canonical_name": "man_in_manual_wheelchair", "aliases": []}, + "1f468-200d-2695": {"canonical_name": "man_health_worker", "aliases": []}, + "1f468-200d-2696": {"canonical_name": "man_judge", "aliases": []}, + "1f468-200d-2708": {"canonical_name": "man_pilot", "aliases": []}, + "1f468-200d-2764-200d-1f468": {"canonical_name": "couple_with_heart_man_man", "aliases": []}, + "1f468-200d-2764-200d-1f48b-200d-1f468": {"canonical_name": "kiss_man_man", "aliases": []}, + "1f468": {"canonical_name": "man", "aliases": []}, + "1f469-200d-1f33e": {"canonical_name": "woman_farmer", "aliases": []}, + "1f469-200d-1f373": {"canonical_name": "woman_cook", "aliases": []}, + "1f469-200d-1f37c": {"canonical_name": "woman_feeding_baby", "aliases": []}, + "1f469-200d-1f393": {"canonical_name": "woman_student", "aliases": []}, + "1f469-200d-1f3a4": {"canonical_name": "woman_singer", "aliases": []}, + "1f469-200d-1f3a8": {"canonical_name": "woman_artist", "aliases": []}, + "1f469-200d-1f3eb": {"canonical_name": "woman_teacher", "aliases": []}, + "1f469-200d-1f3ed": {"canonical_name": "woman_factory_worker", "aliases": []}, + "1f469-200d-1f466-200d-1f466": {"canonical_name": "family_woman_boy_boy", "aliases": []}, + "1f469-200d-1f466": {"canonical_name": "family_woman_boy", "aliases": []}, + "1f469-200d-1f467-200d-1f466": {"canonical_name": "family_woman_girl_boy", "aliases": []}, + "1f469-200d-1f467-200d-1f467": {"canonical_name": "family_woman_girl_girl", "aliases": []}, + "1f469-200d-1f467": {"canonical_name": "family_woman_girl", "aliases": []}, + "1f469-200d-1f469-200d-1f466": {"canonical_name": "family_woman_woman_boy", "aliases": []}, + "1f469-200d-1f469-200d-1f466-200d-1f466": { + "canonical_name": "family_woman_woman_boy_boy", + "aliases": [], + }, + "1f469-200d-1f469-200d-1f467": {"canonical_name": "family_woman_woman_girl", "aliases": []}, + "1f469-200d-1f469-200d-1f467-200d-1f466": { + "canonical_name": "family_woman_woman_girl_boy", + "aliases": [], + }, + "1f469-200d-1f469-200d-1f467-200d-1f467": { + "canonical_name": "family_woman_woman_girl_girl", + "aliases": [], + }, + "1f469-200d-1f4bb": {"canonical_name": "woman_technologist", "aliases": []}, + "1f469-200d-1f4bc": {"canonical_name": "woman_office_worker", "aliases": []}, + "1f469-200d-1f527": {"canonical_name": "woman_mechanic", "aliases": []}, + "1f469-200d-1f52c": {"canonical_name": "woman_scientist", "aliases": []}, + "1f469-200d-1f680": {"canonical_name": "woman_astronaut", "aliases": []}, + "1f469-200d-1f692": {"canonical_name": "woman_firefighter", "aliases": []}, + "1f469-200d-1f9af": {"canonical_name": "woman_with_white_cane", "aliases": []}, + "1f469-200d-1f9b0": {"canonical_name": "woman_red_hair", "aliases": []}, + "1f469-200d-1f9b1": {"canonical_name": "woman_curly_hair", "aliases": []}, + "1f469-200d-1f9b2": {"canonical_name": "woman_bald", "aliases": []}, + "1f469-200d-1f9b3": {"canonical_name": "woman_white_hair", "aliases": []}, + "1f469-200d-1f9bc": {"canonical_name": "woman_in_motorized_wheelchair", "aliases": []}, + "1f469-200d-1f9bd": {"canonical_name": "woman_in_manual_wheelchair", "aliases": []}, + "1f469-200d-2695": {"canonical_name": "woman_health_worker", "aliases": []}, + "1f469-200d-2696": {"canonical_name": "woman_judge", "aliases": []}, + "1f469-200d-2708": {"canonical_name": "woman_pilot", "aliases": []}, + "1f469-200d-2764-200d-1f468": {"canonical_name": "couple_with_heart_woman_man", "aliases": []}, + "1f469-200d-2764-200d-1f469": { + "canonical_name": "couple_with_heart_woman_woman", + "aliases": [], + }, + "1f469-200d-2764-200d-1f48b-200d-1f468": {"canonical_name": "kiss_woman_man", "aliases": []}, + "1f469-200d-2764-200d-1f48b-200d-1f469": {"canonical_name": "kiss_woman_woman", "aliases": []}, + "1f469": {"canonical_name": "woman", "aliases": []}, + "1f46a": {"canonical_name": "family", "aliases": []}, + "1f46b": {"canonical_name": "man_and_woman_holding_hands", "aliases": ["man_and_woman_couple"]}, + "1f46c": {"canonical_name": "two_men_holding_hands", "aliases": ["men_couple"]}, + "1f46d": {"canonical_name": "two_women_holding_hands", "aliases": ["women_couple"]}, + "1f46e-200d-2640": {"canonical_name": "woman_police_officer", "aliases": []}, + "1f46e-200d-2642": {"canonical_name": "man_police_officer", "aliases": []}, + "1f46e": {"canonical_name": "police", "aliases": ["cop"]}, + "1f46f-200d-2640": {"canonical_name": "women_with_bunny_ears", "aliases": []}, + "1f46f-200d-2642": {"canonical_name": "men_with_bunny_ears", "aliases": []}, + "1f46f": {"canonical_name": "dancers", "aliases": []}, + "1f470-200d-2640": {"canonical_name": "woman_with_veil", "aliases": []}, + "1f470-200d-2642": {"canonical_name": "man_with_veil", "aliases": []}, + "1f470": {"canonical_name": "bride", "aliases": []}, + "1f471-200d-2640": { + "canonical_name": "woman_blond_hair", + "aliases": ["blond_haired_woman", "blonde"], + }, + "1f471-200d-2642": {"canonical_name": "man_blond_hair", "aliases": ["blond_haired_man"]}, + "1f471": {"canonical_name": "person_blond_hair", "aliases": ["blond_haired_person"]}, + "1f472": {"canonical_name": "gua_pi_mao", "aliases": []}, + "1f473-200d-2640": {"canonical_name": "woman_wearing_turban", "aliases": []}, + "1f473-200d-2642": {"canonical_name": "man_wearing_turban", "aliases": []}, + "1f473": {"canonical_name": "turban", "aliases": []}, + "1f474": {"canonical_name": "older_man", "aliases": ["elderly_man"]}, + "1f475": {"canonical_name": "older_woman", "aliases": ["elderly_woman"]}, + "1f476": {"canonical_name": "baby", "aliases": []}, + "1f477-200d-2640": {"canonical_name": "woman_construction_worker", "aliases": []}, + "1f477-200d-2642": {"canonical_name": "man_construction_worker", "aliases": []}, + "1f477": {"canonical_name": "construction_worker", "aliases": []}, + "1f478": {"canonical_name": "princess", "aliases": []}, + "1f479": {"canonical_name": "ogre", "aliases": []}, + "1f47a": {"canonical_name": "goblin", "aliases": []}, + "1f47b": {"canonical_name": "ghost", "aliases": ["boo", "spooky", "haunted"]}, + "1f47c": {"canonical_name": "angel", "aliases": []}, + "1f47d": {"canonical_name": "alien", "aliases": ["ufo"]}, + "1f47e": {"canonical_name": "space_invader", "aliases": []}, + "1f47f": {"canonical_name": "devil", "aliases": ["imp", "angry_devil"]}, + "1f480": {"canonical_name": "skull", "aliases": []}, + "1f481-200d-2640": {"canonical_name": "woman_tipping_hand", "aliases": []}, + "1f481-200d-2642": {"canonical_name": "man_tipping_hand", "aliases": []}, + "1f481": {"canonical_name": "information_desk_person", "aliases": ["person_tipping_hand"]}, + "1f482-200d-2640": {"canonical_name": "woman_guard", "aliases": []}, + "1f482-200d-2642": {"canonical_name": "man_guard", "aliases": []}, + "1f482": {"canonical_name": "guard", "aliases": []}, + "1f483": {"canonical_name": "dancer", "aliases": []}, + "1f484": {"canonical_name": "lipstick", "aliases": []}, + "1f485": {"canonical_name": "nail_polish", "aliases": ["nail_care"]}, + "1f486-200d-2640": {"canonical_name": "woman_getting_massage", "aliases": []}, + "1f486-200d-2642": {"canonical_name": "man_getting_massage", "aliases": []}, + "1f486": {"canonical_name": "massage", "aliases": []}, + "1f487-200d-2640": {"canonical_name": "woman_getting_haircut", "aliases": []}, + "1f487-200d-2642": {"canonical_name": "man_getting_haircut", "aliases": []}, + "1f487": {"canonical_name": "haircut", "aliases": []}, + "1f488": {"canonical_name": "barber", "aliases": ["striped_pole"]}, + "1f489": {"canonical_name": "injection", "aliases": ["syringe"]}, + "1f48a": {"canonical_name": "medicine", "aliases": ["pill"]}, + "1f48b": {"canonical_name": "lipstick_kiss", "aliases": []}, + "1f48c": {"canonical_name": "love_letter", "aliases": []}, + "1f48d": {"canonical_name": "ring", "aliases": []}, + "1f48e": {"canonical_name": "gem", "aliases": ["crystal"]}, + "1f48f": {"canonical_name": "kiss", "aliases": []}, + "1f490": {"canonical_name": "bouquet", "aliases": []}, + "1f491": {"canonical_name": "couple_with_heart", "aliases": []}, + "1f492": {"canonical_name": "wedding", "aliases": []}, + "1f493": {"canonical_name": "heartbeat", "aliases": []}, + "1f494": {"canonical_name": "broken_heart", "aliases": ["heartache"]}, + "1f495": {"canonical_name": "two_hearts", "aliases": []}, + "1f496": {"canonical_name": "sparkling_heart", "aliases": []}, + "1f497": {"canonical_name": "heart_pulse", "aliases": ["growing_heart"]}, + "1f498": {"canonical_name": "cupid", "aliases": ["smitten", "heart_arrow"]}, + "1f499": {"canonical_name": "blue_heart", "aliases": []}, + "1f49a": {"canonical_name": "green_heart", "aliases": ["envy"]}, + "1f49b": {"canonical_name": "yellow_heart", "aliases": ["heart_of_gold"]}, + "1f49c": {"canonical_name": "purple_heart", "aliases": ["bravery"]}, + "1f49d": {"canonical_name": "gift_heart", "aliases": []}, + "1f49e": {"canonical_name": "revolving_hearts", "aliases": []}, + "1f49f": {"canonical_name": "heart_box", "aliases": []}, + "1f4a0": {"canonical_name": "cute", "aliases": ["kawaii", "diamond_with_a_dot"]}, + "1f4a1": {"canonical_name": "light_bulb", "aliases": ["bulb", "idea"]}, + "1f4a2": {"canonical_name": "anger", "aliases": ["bam", "pow"]}, + "1f4a3": {"canonical_name": "bomb", "aliases": []}, + "1f4a4": {"canonical_name": "zzz", "aliases": []}, + "1f4a5": {"canonical_name": "boom", "aliases": ["explosion", "crash", "collision"]}, + "1f4a6": {"canonical_name": "sweat_drops", "aliases": []}, + "1f4a7": {"canonical_name": "drop", "aliases": ["water_drop"]}, + "1f4a8": {"canonical_name": "dash", "aliases": []}, + "1f4a9": {"canonical_name": "poop", "aliases": ["pile_of_poo"]}, + "1f4aa": {"canonical_name": "muscle", "aliases": []}, + "1f4ab": {"canonical_name": "seeing_stars", "aliases": []}, + "1f4ac": {"canonical_name": "umm", "aliases": ["speech_balloon"]}, + "1f4ad": {"canonical_name": "thought", "aliases": ["dream"]}, + "1f4ae": {"canonical_name": "white_flower", "aliases": []}, + "1f4af": {"canonical_name": "100", "aliases": ["hundred"]}, + "1f4b0": {"canonical_name": "money", "aliases": []}, + "1f4b1": {"canonical_name": "exchange", "aliases": []}, + "1f4b2": {"canonical_name": "dollars", "aliases": []}, + "1f4b3": {"canonical_name": "credit_card", "aliases": ["debit_card"]}, + "1f4b4": {"canonical_name": "yen_banknotes", "aliases": []}, + "1f4b5": {"canonical_name": "dollar_bills", "aliases": []}, + "1f4b6": {"canonical_name": "euro_banknotes", "aliases": []}, + "1f4b7": {"canonical_name": "pound_notes", "aliases": []}, + "1f4b8": { + "canonical_name": "losing_money", + "aliases": ["easy_come_easy_go", "money_with_wings"], + }, + "1f4b9": {"canonical_name": "stock_market", "aliases": []}, + "1f4ba": {"canonical_name": "seat", "aliases": []}, + "1f4bb": {"canonical_name": "computer", "aliases": ["laptop"]}, + "1f4bc": {"canonical_name": "briefcase", "aliases": []}, + "1f4bd": {"canonical_name": "gold_record", "aliases": ["minidisc"]}, + "1f4be": {"canonical_name": "floppy_disk", "aliases": []}, + "1f4bf": {"canonical_name": "cd", "aliases": []}, + "1f4c0": {"canonical_name": "dvd", "aliases": []}, + "1f4c1": {"canonical_name": "organize", "aliases": ["file_folder"]}, + "1f4c2": {"canonical_name": "folder", "aliases": []}, + "1f4c3": {"canonical_name": "page_with_curl", "aliases": ["curl"]}, + "1f4c4": {"canonical_name": "document", "aliases": ["paper", "file", "page"]}, + "1f4c5": {"canonical_name": "calendar", "aliases": []}, + "1f4c6": {"canonical_name": "date", "aliases": []}, + "1f4c7": {"canonical_name": "rolodex", "aliases": ["card_index"]}, + "1f4c8": {"canonical_name": "chart", "aliases": ["upwards_trend", "growing", "increasing"]}, + "1f4c9": {"canonical_name": "downwards_trend", "aliases": ["shrinking", "decreasing"]}, + "1f4ca": {"canonical_name": "bar_chart", "aliases": []}, + "1f4cb": {"canonical_name": "clipboard", "aliases": []}, + "1f4cc": {"canonical_name": "push_pin", "aliases": ["thumb_tack"]}, + "1f4cd": {"canonical_name": "pin", "aliases": ["sewing_pin"]}, + "1f4ce": {"canonical_name": "paperclip", "aliases": ["attachment"]}, + "1f4cf": {"canonical_name": "ruler", "aliases": ["straightedge"]}, + "1f4d0": {"canonical_name": "carpenter_square", "aliases": ["triangular_ruler"]}, + "1f4d1": {"canonical_name": "place_holder", "aliases": []}, + "1f4d2": {"canonical_name": "ledger", "aliases": ["spiral_notebook"]}, + "1f4d3": {"canonical_name": "notebook", "aliases": ["composition_book"]}, + "1f4d4": {"canonical_name": "decorative_notebook", "aliases": []}, + "1f4d5": {"canonical_name": "red_book", "aliases": ["closed_book"]}, + "1f4d6": {"canonical_name": "book", "aliases": ["open_book"]}, + "1f4d7": {"canonical_name": "green_book", "aliases": []}, + "1f4d8": {"canonical_name": "blue_book", "aliases": []}, + "1f4d9": {"canonical_name": "orange_book", "aliases": []}, + "1f4da": {"canonical_name": "books", "aliases": []}, + "1f4db": {"canonical_name": "name_badge", "aliases": []}, + "1f4dc": {"canonical_name": "scroll", "aliases": []}, + "1f4dd": {"canonical_name": "memo", "aliases": ["note"]}, + "1f4de": {"canonical_name": "landline", "aliases": ["home_phone"]}, + "1f4df": {"canonical_name": "pager", "aliases": []}, + "1f4e0": {"canonical_name": "fax", "aliases": []}, + "1f4e1": {"canonical_name": "satellite_antenna", "aliases": []}, + "1f4e2": {"canonical_name": "loudspeaker", "aliases": ["bullhorn"]}, + "1f4e3": {"canonical_name": "megaphone", "aliases": ["shout"]}, + "1f4e4": {"canonical_name": "outbox", "aliases": []}, + "1f4e5": {"canonical_name": "inbox", "aliases": []}, + "1f4e6": {"canonical_name": "package", "aliases": []}, + "1f4e7": {"canonical_name": "e-mail", "aliases": []}, + "1f4e8": {"canonical_name": "mail_received", "aliases": []}, + "1f4e9": {"canonical_name": "mail_sent", "aliases": ["sealed"]}, + "1f4ea": {"canonical_name": "closed_mailbox", "aliases": []}, + "1f4eb": {"canonical_name": "mailbox", "aliases": []}, + "1f4ec": {"canonical_name": "unread_mail", "aliases": []}, + "1f4ed": {"canonical_name": "inbox_zero", "aliases": ["empty_mailbox", "no_mail"]}, + "1f4ee": {"canonical_name": "mail_dropoff", "aliases": []}, + "1f4ef": {"canonical_name": "horn", "aliases": []}, + "1f4f0": {"canonical_name": "headlines", "aliases": []}, + "1f4f1": {"canonical_name": "mobile_phone", "aliases": ["smartphone", "iphone", "android"]}, + "1f4f2": {"canonical_name": "calling", "aliases": []}, + "1f4f3": {"canonical_name": "vibration_mode", "aliases": []}, + "1f4f4": {"canonical_name": "phone_off", "aliases": []}, + "1f4f5": {"canonical_name": "no_phones", "aliases": []}, + "1f4f6": {"canonical_name": "cell_reception", "aliases": ["signal_strength", "signal_bars"]}, + "1f4f7": {"canonical_name": "camera", "aliases": []}, + "1f4f8": {"canonical_name": "taking_a_picture", "aliases": ["say_cheese"]}, + "1f4f9": {"canonical_name": "video_camera", "aliases": ["video_recorder"]}, + "1f4fa": {"canonical_name": "tv", "aliases": ["television"]}, + "1f4fb": {"canonical_name": "radio", "aliases": []}, + "1f4fc": {"canonical_name": "vhs", "aliases": ["videocassette"]}, + "1f4fd": {"canonical_name": "projector", "aliases": ["movie"]}, + "1f4ff": {"canonical_name": "prayer_beads", "aliases": []}, + "1f500": {"canonical_name": "shuffle", "aliases": []}, + "1f501": {"canonical_name": "repeat", "aliases": []}, + "1f502": {"canonical_name": "repeat_one", "aliases": []}, + "1f503": {"canonical_name": "clockwise", "aliases": []}, + "1f504": {"canonical_name": "counterclockwise", "aliases": ["return"]}, + "1f505": {"canonical_name": "low_brightness", "aliases": ["dim"]}, + "1f506": {"canonical_name": "brightness", "aliases": ["high_brightness"]}, + "1f507": {"canonical_name": "mute", "aliases": ["no_sound"]}, + "1f508": {"canonical_name": "speaker", "aliases": []}, + "1f509": {"canonical_name": "softer", "aliases": []}, + "1f50a": {"canonical_name": "louder", "aliases": ["sound"]}, + "1f50b": {"canonical_name": "battery", "aliases": ["full_battery"]}, + "1f50c": {"canonical_name": "electric_plug", "aliases": []}, + "1f50d": {"canonical_name": "search", "aliases": ["find", "magnifying_glass"]}, + "1f50e": {"canonical_name": "magnifying_glass_tilted_right", "aliases": ["magnifying"]}, + "1f50f": { + "canonical_name": "privacy", + "aliases": ["key_signing", "digital_security", "protected"], + }, + "1f510": { + "canonical_name": "secure", + "aliases": ["lock_with_key", "safe", "commitment", "loyalty"], + }, + "1f511": {"canonical_name": "key", "aliases": []}, + "1f512": {"canonical_name": "locked", "aliases": []}, + "1f513": {"canonical_name": "unlocked", "aliases": []}, + "1f514": {"canonical_name": "notifications", "aliases": ["bell"]}, + "1f515": {"canonical_name": "mute_notifications", "aliases": []}, + "1f516": {"canonical_name": "bookmark", "aliases": []}, + "1f517": {"canonical_name": "link", "aliases": []}, + "1f518": {"canonical_name": "radio_button", "aliases": []}, + "1f519": {"canonical_name": "back", "aliases": []}, + "1f51a": {"canonical_name": "end", "aliases": []}, + "1f51b": {"canonical_name": "on", "aliases": []}, + "1f51c": {"canonical_name": "soon", "aliases": []}, + "1f51d": {"canonical_name": "top", "aliases": []}, + "1f51e": {"canonical_name": "underage", "aliases": ["nc17"]}, + "1f51f": {"canonical_name": "ten", "aliases": []}, + "1f520": {"canonical_name": "capital_abcd", "aliases": ["capital_letters"]}, + "1f521": {"canonical_name": "abcd", "aliases": ["alphabet"]}, + "1f522": {"canonical_name": "1234", "aliases": ["numbers"]}, + "1f523": {"canonical_name": "symbols", "aliases": []}, + "1f524": {"canonical_name": "abc", "aliases": []}, + "1f525": {"canonical_name": "fire", "aliases": ["lit", "hot", "flame"]}, + "1f526": {"canonical_name": "flashlight", "aliases": []}, + "1f527": {"canonical_name": "fixing", "aliases": ["wrench"]}, + "1f528": {"canonical_name": "hammer", "aliases": ["maintenance", "handyman", "handywoman"]}, + "1f529": {"canonical_name": "nut_and_bolt", "aliases": ["screw"]}, + "1f52a": {"canonical_name": "knife", "aliases": ["hocho", "betrayed"]}, + "1f52b": {"canonical_name": "gun", "aliases": []}, + "1f52c": {"canonical_name": "science", "aliases": ["microscope"]}, + "1f52d": {"canonical_name": "telescope", "aliases": []}, + "1f52e": {"canonical_name": "crystal_ball", "aliases": ["oracle", "future", "fortune_telling"]}, + "1f52f": {"canonical_name": "dotted_six_pointed_star", "aliases": ["fortune"]}, + "1f530": {"canonical_name": "beginner", "aliases": []}, + "1f531": {"canonical_name": "trident", "aliases": []}, + "1f532": {"canonical_name": "white_and_black_square", "aliases": []}, + "1f533": {"canonical_name": "black_and_white_square", "aliases": []}, + "1f534": {"canonical_name": "red_circle", "aliases": []}, + "1f535": {"canonical_name": "blue_circle", "aliases": []}, + "1f536": {"canonical_name": "large_orange_diamond", "aliases": []}, + "1f537": {"canonical_name": "large_blue_diamond", "aliases": []}, + "1f538": {"canonical_name": "small_orange_diamond", "aliases": []}, + "1f539": {"canonical_name": "small_blue_diamond", "aliases": []}, + "1f53a": {"canonical_name": "red_triangle_up", "aliases": []}, + "1f53b": {"canonical_name": "red_triangle_down", "aliases": []}, + "1f53c": {"canonical_name": "upvote", "aliases": ["up_button", "increase"]}, + "1f53d": {"canonical_name": "downvote", "aliases": ["down_button", "decrease"]}, + "1f549": {"canonical_name": "om", "aliases": ["hinduism"]}, + "1f54a": {"canonical_name": "dove", "aliases": ["dove_of_peace"]}, + "1f54b": {"canonical_name": "kaaba", "aliases": []}, + "1f54c": {"canonical_name": "mosque", "aliases": []}, + "1f54d": {"canonical_name": "synagogue", "aliases": []}, + "1f54e": {"canonical_name": "menorah", "aliases": []}, + "1f557": {"canonical_name": "time", "aliases": ["clock"]}, + "1f56f": {"canonical_name": "candle", "aliases": []}, + "1f570": {"canonical_name": "mantelpiece_clock", "aliases": []}, + "1f573": {"canonical_name": "hole", "aliases": []}, + "1f574": {"canonical_name": "levitating", "aliases": ["hover"]}, + "1f575-200d-2640": {"canonical_name": "woman_detective", "aliases": []}, + "1f575-200d-2642": {"canonical_name": "man_detective", "aliases": []}, + "1f575": {"canonical_name": "detective", "aliases": ["spy", "sleuth", "agent", "sneaky"]}, + "1f576": {"canonical_name": "dark_sunglasses", "aliases": []}, + "1f577": {"canonical_name": "spider", "aliases": []}, + "1f578": {"canonical_name": "web", "aliases": ["spider_web"]}, + "1f579": {"canonical_name": "joystick", "aliases": ["arcade"]}, + "1f57a": {"canonical_name": "dancing", "aliases": ["disco"]}, + "1f587": {"canonical_name": "office_supplies", "aliases": ["paperclip_chain", "linked"]}, + "1f58a": {"canonical_name": "pen", "aliases": ["ballpoint_pen"]}, + "1f58b": {"canonical_name": "fountain_pen", "aliases": []}, + "1f58c": {"canonical_name": "paintbrush", "aliases": []}, + "1f58d": {"canonical_name": "crayon", "aliases": []}, + "1f590": {"canonical_name": "high_five", "aliases": ["palm"]}, + "1f595": {"canonical_name": "middle_finger", "aliases": []}, + "1f596": {"canonical_name": "spock", "aliases": ["live_long_and_prosper"]}, + "1f5a4": {"canonical_name": "black_heart", "aliases": []}, + "1f5a5": {"canonical_name": "desktop_computer", "aliases": []}, + "1f5a8": {"canonical_name": "printer", "aliases": []}, + "1f5b1": {"canonical_name": "computer_mouse", "aliases": []}, + "1f5b2": {"canonical_name": "trackball", "aliases": []}, + "1f5bc": {"canonical_name": "picture", "aliases": ["framed_picture"]}, + "1f5c2": {"canonical_name": "sort", "aliases": []}, + "1f5c3": {"canonical_name": "archive", "aliases": []}, + "1f5c4": {"canonical_name": "file_cabinet", "aliases": []}, + "1f5d1": {"canonical_name": "wastebasket", "aliases": ["trash_can"]}, + "1f5d2": {"canonical_name": "spiral_notepad", "aliases": []}, + "1f5d3": {"canonical_name": "spiral_calendar", "aliases": ["pad"]}, + "1f5dc": {"canonical_name": "compression", "aliases": ["vise"]}, + "1f5dd": { + "canonical_name": "secret", + "aliases": ["dungeon", "old_key", "encrypted", "clue", "hint"], + }, + "1f5de": {"canonical_name": "newspaper", "aliases": ["swat"]}, + "1f5e1": {"canonical_name": "dagger", "aliases": ["rated_for_violence"]}, + "1f5e3": {"canonical_name": "speaking_head", "aliases": []}, + "1f5e8": {"canonical_name": "speech_bubble", "aliases": []}, + "1f5ef": {"canonical_name": "anger_bubble", "aliases": []}, + "1f5f3": {"canonical_name": "ballot_box", "aliases": []}, + "1f5fa": {"canonical_name": "map", "aliases": ["world_map", "road_trip"]}, + "1f5fb": {"canonical_name": "mount_fuji", "aliases": []}, + "1f5fc": {"canonical_name": "tower", "aliases": ["tokyo_tower"]}, + "1f5fd": {"canonical_name": "statue", "aliases": ["new_york", "statue_of_liberty"]}, + "1f5fe": {"canonical_name": "japan", "aliases": []}, + "1f5ff": {"canonical_name": "rock_carving", "aliases": ["moyai"]}, + "1f600": {"canonical_name": "grinning", "aliases": ["happy"]}, + "1f601": {"canonical_name": "grinning_face_with_smiling_eyes", "aliases": []}, + "1f602": {"canonical_name": "joy", "aliases": ["tears", "laughter_tears"]}, + "1f603": {"canonical_name": "smiley", "aliases": []}, + "1f604": {"canonical_name": "big_smile", "aliases": []}, + "1f605": {"canonical_name": "sweat_smile", "aliases": []}, + "1f606": {"canonical_name": "laughing", "aliases": ["lol"]}, + "1f607": {"canonical_name": "innocent", "aliases": ["halo"]}, + "1f608": { + "canonical_name": "smiling_devil", + "aliases": ["smiling_imp", "smiling_face_with_horns"], + }, + "1f609": {"canonical_name": "wink", "aliases": []}, + "1f60a": {"canonical_name": "blush", "aliases": []}, + "1f60b": {"canonical_name": "yum", "aliases": []}, + "1f60c": {"canonical_name": "relieved", "aliases": []}, + "1f60d": {"canonical_name": "heart_eyes", "aliases": ["in_love"]}, + "1f60e": {"canonical_name": "sunglasses", "aliases": []}, + "1f60f": {"canonical_name": "smirk", "aliases": ["smug"]}, + "1f610": {"canonical_name": "neutral", "aliases": []}, + "1f611": {"canonical_name": "expressionless", "aliases": []}, + "1f612": {"canonical_name": "unamused", "aliases": []}, + "1f613": {"canonical_name": "sweat", "aliases": []}, + "1f614": {"canonical_name": "pensive", "aliases": ["tired"]}, + "1f615": {"canonical_name": "oh_no", "aliases": ["half_frown", "concerned", "confused"]}, + "1f616": {"canonical_name": "confounded", "aliases": ["agony"]}, + "1f617": {"canonical_name": "kissing_face", "aliases": []}, + "1f618": {"canonical_name": "heart_kiss", "aliases": ["blow_a_kiss"]}, + "1f619": {"canonical_name": "kiss_smiling_eyes", "aliases": []}, + "1f61a": {"canonical_name": "kiss_with_blush", "aliases": []}, + "1f61b": {"canonical_name": "stuck_out_tongue", "aliases": ["mischievous"]}, + "1f61c": {"canonical_name": "stuck_out_tongue_wink", "aliases": ["joking", "crazy"]}, + "1f61d": {"canonical_name": "stuck_out_tongue_closed_eyes", "aliases": []}, + "1f61e": {"canonical_name": "disappointed", "aliases": []}, + "1f61f": {"canonical_name": "worried", "aliases": []}, + "1f620": {"canonical_name": "angry", "aliases": []}, + "1f621": {"canonical_name": "rage", "aliases": ["mad", "grumpy", "very_angry"]}, + "1f622": {"canonical_name": "cry", "aliases": []}, + "1f623": {"canonical_name": "persevere", "aliases": ["helpless"]}, + "1f624": {"canonical_name": "triumph", "aliases": []}, + "1f625": {"canonical_name": "exhausted", "aliases": ["disappointed_relieved", "stressed"]}, + "1f626": {"canonical_name": "frowning", "aliases": []}, + "1f627": {"canonical_name": "anguished", "aliases": ["pained"]}, + "1f628": {"canonical_name": "fear", "aliases": ["scared", "shock"]}, + "1f629": {"canonical_name": "weary", "aliases": ["distraught"]}, + "1f62a": {"canonical_name": "sleepy", "aliases": []}, + "1f62b": {"canonical_name": "anguish", "aliases": []}, + "1f62c": {"canonical_name": "grimacing", "aliases": ["nervous", "anxious"]}, + "1f62d": {"canonical_name": "sob", "aliases": []}, + "1f62e-200d-1f4a8": { + "canonical_name": "face_exhaling", + "aliases": ["exhale", "gasp", "groan", "relief", "whisper", "whistle"], + }, + "1f62e": {"canonical_name": "open_mouth", "aliases": ["surprise"]}, + "1f62f": {"canonical_name": "hushed", "aliases": []}, + "1f630": {"canonical_name": "cold_sweat", "aliases": []}, + "1f631": {"canonical_name": "scream", "aliases": []}, + "1f632": {"canonical_name": "astonished", "aliases": []}, + "1f633": {"canonical_name": "flushed", "aliases": ["embarrassed", "blushing"]}, + "1f634": {"canonical_name": "sleeping", "aliases": []}, + "1f635-200d-1f4ab": { + "canonical_name": "face_with_spiral_eyes", + "aliases": ["hypnotized", "trouble", "whoa"], + }, + "1f635": {"canonical_name": "dizzy", "aliases": []}, + "1f636-200d-1f32b": { + "canonical_name": "face_in_clouds", + "aliases": ["absentminded", "face_in_the_fog", "head_in_clouds"], + }, + "1f636": {"canonical_name": "speechless", "aliases": ["no_mouth", "blank", "poker_face"]}, + "1f637": {"canonical_name": "mask", "aliases": []}, + "1f638": {"canonical_name": "smile_cat", "aliases": []}, + "1f639": {"canonical_name": "joy_cat", "aliases": []}, + "1f63a": {"canonical_name": "smiley_cat", "aliases": []}, + "1f63b": {"canonical_name": "heart_eyes_cat", "aliases": []}, + "1f63c": {"canonical_name": "smirk_cat", "aliases": ["smug_cat"]}, + "1f63d": {"canonical_name": "kissing_cat", "aliases": []}, + "1f63e": {"canonical_name": "angry_cat", "aliases": ["pouting_cat"]}, + "1f63f": {"canonical_name": "crying_cat", "aliases": []}, + "1f640": {"canonical_name": "scream_cat", "aliases": ["weary_cat"]}, + "1f641": {"canonical_name": "frown", "aliases": ["slight_frown"]}, + "1f642": {"canonical_name": "smile", "aliases": []}, + "1f643": {"canonical_name": "upside_down", "aliases": ["oops"]}, + "1f644": {"canonical_name": "rolling_eyes", "aliases": []}, + "1f645-200d-2640": {"canonical_name": "woman_gesturing_no", "aliases": []}, + "1f645-200d-2642": {"canonical_name": "man_gesturing_no", "aliases": []}, + "1f645": {"canonical_name": "no_signal", "aliases": ["nope"]}, + "1f646-200d-2640": {"canonical_name": "woman_gesturing_ok", "aliases": []}, + "1f646-200d-2642": {"canonical_name": "man_gesturing_ok", "aliases": []}, + "1f646": {"canonical_name": "ok_signal", "aliases": []}, + "1f647-200d-2640": {"canonical_name": "woman_bowing", "aliases": []}, + "1f647-200d-2642": {"canonical_name": "man_bowing", "aliases": []}, + "1f647": {"canonical_name": "bow", "aliases": []}, + "1f648": {"canonical_name": "see_no_evil", "aliases": []}, + "1f649": {"canonical_name": "hear_no_evil", "aliases": []}, + "1f64a": {"canonical_name": "speak_no_evil", "aliases": []}, + "1f64b-200d-2640": {"canonical_name": "woman_raising_hand", "aliases": []}, + "1f64b-200d-2642": {"canonical_name": "man_raising_hand", "aliases": []}, + "1f64b": {"canonical_name": "raising_hand", "aliases": ["pick_me"]}, + "1f64c": {"canonical_name": "raised_hands", "aliases": ["praise"]}, + "1f64d-200d-2640": {"canonical_name": "woman_frowning", "aliases": []}, + "1f64d-200d-2642": {"canonical_name": "man_frowning", "aliases": []}, + "1f64d": {"canonical_name": "person_frowning", "aliases": []}, + "1f64e-200d-2640": {"canonical_name": "woman_pouting", "aliases": []}, + "1f64e-200d-2642": {"canonical_name": "man_pouting", "aliases": []}, + "1f64e": {"canonical_name": "person_pouting", "aliases": []}, + "1f64f": {"canonical_name": "pray", "aliases": ["welcome", "thank_you", "namaste"]}, + "1f680": {"canonical_name": "rocket", "aliases": []}, + "1f681": {"canonical_name": "helicopter", "aliases": []}, + "1f682": {"canonical_name": "train", "aliases": ["steam_locomotive"]}, + "1f683": {"canonical_name": "railway_car", "aliases": ["train_car"]}, + "1f684": {"canonical_name": "high_speed_train", "aliases": []}, + "1f685": {"canonical_name": "bullet_train", "aliases": []}, + "1f686": {"canonical_name": "oncoming_train", "aliases": []}, + "1f687": {"canonical_name": "subway", "aliases": []}, + "1f688": {"canonical_name": "light_rail", "aliases": []}, + "1f689": {"canonical_name": "station", "aliases": []}, + "1f68a": { + "canonical_name": "oncoming_tram", + "aliases": ["oncoming_streetcar", "oncoming_trolley"], + }, + "1f68b": {"canonical_name": "tram", "aliases": ["streetcar"]}, + "1f68c": {"canonical_name": "bus", "aliases": ["school_bus"]}, + "1f68d": {"canonical_name": "oncoming_bus", "aliases": []}, + "1f68e": {"canonical_name": "trolley", "aliases": []}, + "1f68f": {"canonical_name": "bus_stop", "aliases": []}, + "1f690": {"canonical_name": "minibus", "aliases": []}, + "1f691": {"canonical_name": "ambulance", "aliases": []}, + "1f692": {"canonical_name": "fire_truck", "aliases": ["fire_engine"]}, + "1f693": {"canonical_name": "police_car", "aliases": []}, + "1f694": {"canonical_name": "oncoming_police_car", "aliases": []}, + "1f695": {"canonical_name": "taxi", "aliases": ["rideshare"]}, + "1f696": {"canonical_name": "oncoming_taxi", "aliases": []}, + "1f697": {"canonical_name": "car", "aliases": []}, + "1f698": {"canonical_name": "oncoming_car", "aliases": ["oncoming_automobile"]}, + "1f699": {"canonical_name": "recreational_vehicle", "aliases": ["jeep"]}, + "1f69a": {"canonical_name": "moving_truck", "aliases": []}, + "1f69b": { + "canonical_name": "truck", + "aliases": ["tractor-trailer", "big_rig", "semi_truck", "transport_truck"], + }, + "1f69c": {"canonical_name": "tractor", "aliases": []}, + "1f69d": {"canonical_name": "monorail", "aliases": ["elevated_train"]}, + "1f69e": {"canonical_name": "mountain_railway", "aliases": []}, + "1f69f": {"canonical_name": "suspension_railway", "aliases": []}, + "1f6a0": {"canonical_name": "gondola", "aliases": ["mountain_cableway"]}, + "1f6a1": {"canonical_name": "aerial_tramway", "aliases": ["ski_lift"]}, + "1f6a2": {"canonical_name": "ship", "aliases": []}, + "1f6a3-200d-2640": {"canonical_name": "woman_rowing_boat", "aliases": []}, + "1f6a3-200d-2642": {"canonical_name": "man_rowing_boat", "aliases": []}, + "1f6a3": {"canonical_name": "rowboat", "aliases": ["crew", "sculling", "rowing"]}, + "1f6a4": {"canonical_name": "speedboat", "aliases": []}, + "1f6a5": {"canonical_name": "horizontal_traffic_light", "aliases": []}, + "1f6a6": {"canonical_name": "traffic_light", "aliases": ["vertical_traffic_light"]}, + "1f6a7": {"canonical_name": "work_in_progress", "aliases": ["construction_zone"]}, + "1f6a8": {"canonical_name": "siren", "aliases": ["rotating_light", "alert"]}, + "1f6a9": {"canonical_name": "triangular_flag", "aliases": []}, + "1f6aa": {"canonical_name": "door", "aliases": []}, + "1f6ab": {"canonical_name": "prohibited", "aliases": ["not_allowed"]}, + "1f6ac": {"canonical_name": "smoking", "aliases": []}, + "1f6ad": {"canonical_name": "no_smoking", "aliases": []}, + "1f6ae": {"canonical_name": "put_litter_in_its_place", "aliases": []}, + "1f6af": {"canonical_name": "do_not_litter", "aliases": []}, + "1f6b0": {"canonical_name": "potable_water", "aliases": ["tap_water", "drinking_water"]}, + "1f6b1": {"canonical_name": "non-potable_water", "aliases": []}, + "1f6b2": {"canonical_name": "bike", "aliases": ["bicycle"]}, + "1f6b3": {"canonical_name": "no_bicycles", "aliases": []}, + "1f6b4-200d-2640": {"canonical_name": "woman_biking", "aliases": []}, + "1f6b4-200d-2642": {"canonical_name": "man_biking", "aliases": []}, + "1f6b4": {"canonical_name": "cyclist", "aliases": []}, + "1f6b5-200d-2640": {"canonical_name": "woman_mountain_biking", "aliases": []}, + "1f6b5-200d-2642": {"canonical_name": "man_mountain_biking", "aliases": []}, + "1f6b5": {"canonical_name": "mountain_biker", "aliases": []}, + "1f6b6-200d-2640": {"canonical_name": "woman_walking", "aliases": []}, + "1f6b6-200d-2642": {"canonical_name": "man_walking", "aliases": []}, + "1f6b6": {"canonical_name": "walking", "aliases": ["pedestrian"]}, + "1f6b7": {"canonical_name": "no_pedestrians", "aliases": []}, + "1f6b8": { + "canonical_name": "children_crossing", + "aliases": ["school_crossing", "drive_with_care"], + }, + "1f6b9": {"canonical_name": "mens", "aliases": []}, + "1f6ba": {"canonical_name": "womens", "aliases": []}, + "1f6bb": {"canonical_name": "restroom", "aliases": []}, + "1f6bc": {"canonical_name": "baby_change_station", "aliases": ["nursery"]}, + "1f6bd": {"canonical_name": "toilet", "aliases": []}, + "1f6be": {"canonical_name": "wc", "aliases": ["water_closet"]}, + "1f6bf": {"canonical_name": "shower", "aliases": []}, + "1f6c0": {"canonical_name": "bath", "aliases": []}, + "1f6c1": {"canonical_name": "bathtub", "aliases": []}, + "1f6c2": {"canonical_name": "passport_control", "aliases": ["immigration"]}, + "1f6c3": {"canonical_name": "customs", "aliases": []}, + "1f6c4": {"canonical_name": "baggage_claim", "aliases": []}, + "1f6c5": {"canonical_name": "locker", "aliases": ["locked_bag"]}, + "1f6cb": { + "canonical_name": "living_room", + "aliases": ["furniture", "couch_and_lamp", "lifestyles"], + }, + "1f6cc": {"canonical_name": "in_bed", "aliases": ["accommodations", "guestrooms"]}, + "1f6cd": {"canonical_name": "shopping_bags", "aliases": []}, + "1f6ce": {"canonical_name": "bellhop_bell", "aliases": ["reception", "services", "ding"]}, + "1f6cf": {"canonical_name": "bed", "aliases": ["bedroom"]}, + "1f6d0": {"canonical_name": "place_of_worship", "aliases": []}, + "1f6d1": {"canonical_name": "stop_sign", "aliases": ["octagonal_sign"]}, + "1f6d2": {"canonical_name": "shopping_cart", "aliases": ["shopping_trolley"]}, + "1f6d5": {"canonical_name": "hindu_temple", "aliases": ["hindu", "temple"]}, + "1f6d6": {"canonical_name": "hut", "aliases": ["roundhouse", "yurt"]}, + "1f6d7": {"canonical_name": "elevator", "aliases": ["hoist"]}, + "1f6dc": {"canonical_name": "wireless", "aliases": ["internet", "network", "wi_fi", "wifi"]}, + "1f6dd": {"canonical_name": "playground_slide", "aliases": ["amusement_park", "theme_park"]}, + "1f6de": {"canonical_name": "wheel", "aliases": ["tire", "turn"]}, + "1f6df": { + "canonical_name": "ring_buoy", + "aliases": ["float", "life_preserver", "life_saver", "rescue"], + }, + "1f6e0": {"canonical_name": "working_on_it", "aliases": ["hammer_and_wrench", "tools"]}, + "1f6e1": {"canonical_name": "shield", "aliases": []}, + "1f6e2": {"canonical_name": "oil_drum", "aliases": ["commodities"]}, + "1f6e3": {"canonical_name": "road", "aliases": ["motorway"]}, + "1f6e4": {"canonical_name": "railway_track", "aliases": ["train_tracks"]}, + "1f6e5": {"canonical_name": "motor_boat", "aliases": []}, + "1f6e9": {"canonical_name": "small_airplane", "aliases": []}, + "1f6eb": {"canonical_name": "take_off", "aliases": ["departure", "airplane_departure"]}, + "1f6ec": {"canonical_name": "landing", "aliases": ["arrival", "airplane_arrival"]}, + "1f6f0": {"canonical_name": "satellite", "aliases": []}, + "1f6f3": {"canonical_name": "passenger_ship", "aliases": ["yacht", "cruise"]}, + "1f6f4": {"canonical_name": "kick_scooter", "aliases": []}, + "1f6f5": {"canonical_name": "scooter", "aliases": ["motor_bike"]}, + "1f6f6": {"canonical_name": "canoe", "aliases": []}, + "1f6f7": {"canonical_name": "sled", "aliases": ["sledge", "sleigh"]}, + "1f6f8": {"canonical_name": "flying_saucer", "aliases": []}, + "1f6f9": {"canonical_name": "skateboard", "aliases": ["board"]}, + "1f6fa": {"canonical_name": "auto_rickshaw", "aliases": ["tuk_tuk"]}, + "1f6fb": {"canonical_name": "pickup_truck", "aliases": ["pick_up", "pickup"]}, + "1f6fc": {"canonical_name": "roller_skate", "aliases": ["roller", "skate"]}, + "1f7e0": {"canonical_name": "orange_circle", "aliases": []}, + "1f7e1": {"canonical_name": "yellow_circle", "aliases": ["yellow"]}, + "1f7e2": {"canonical_name": "green_circle", "aliases": ["green"]}, + "1f7e3": {"canonical_name": "purple_circle", "aliases": []}, + "1f7e4": {"canonical_name": "brown_circle", "aliases": []}, + "1f7e5": {"canonical_name": "red_square", "aliases": ["red"]}, + "1f7e6": {"canonical_name": "blue_square", "aliases": []}, + "1f7e7": {"canonical_name": "orange_square", "aliases": []}, + "1f7e8": {"canonical_name": "yellow_large_square", "aliases": []}, + "1f7e9": {"canonical_name": "green_large_square", "aliases": []}, + "1f7ea": {"canonical_name": "purple_square", "aliases": []}, + "1f7eb": {"canonical_name": "brown_square", "aliases": []}, + "1f7f0": {"canonical_name": "heavy_equals_sign", "aliases": ["equality", "math"]}, + "1f90c": { + "canonical_name": "pinched_fingers", + "aliases": ["fingers", "hand_gesture", "interrogation", "pinched", "sarcastic"], + }, + "1f90d": {"canonical_name": "white_heart", "aliases": []}, + "1f90e": {"canonical_name": "brown_heart", "aliases": []}, + "1f90f": {"canonical_name": "pinching_hand", "aliases": ["small_amount"]}, + "1f910": { + "canonical_name": "silence", + "aliases": ["quiet", "hush", "zip_it", "lips_are_sealed"], + }, + "1f911": {"canonical_name": "money_face", "aliases": ["kaching"]}, + "1f912": { + "canonical_name": "sick", + "aliases": ["flu", "face_with_thermometer", "ill", "fever"], + }, + "1f913": {"canonical_name": "nerd", "aliases": ["geek"]}, + "1f914": {"canonical_name": "thinking", "aliases": []}, + "1f915": {"canonical_name": "hurt", "aliases": ["head_bandage", "injured"]}, + "1f916": {"canonical_name": "robot", "aliases": []}, + "1f917": {"canonical_name": "hug", "aliases": ["arms_open"]}, + "1f918": {"canonical_name": "rock_on", "aliases": ["sign_of_the_horns"]}, + "1f919": {"canonical_name": "call_me", "aliases": []}, + "1f91a": {"canonical_name": "stop", "aliases": []}, + "1f91b": {"canonical_name": "left_fist", "aliases": []}, + "1f91c": {"canonical_name": "right_fist", "aliases": []}, + "1f91d": {"canonical_name": "handshake", "aliases": ["done_deal"]}, + "1f91e": {"canonical_name": "fingers_crossed", "aliases": []}, + "1f91f": {"canonical_name": "love_you_gesture", "aliases": ["ily"]}, + "1f920": {"canonical_name": "cowboy", "aliases": []}, + "1f921": {"canonical_name": "clown", "aliases": []}, + "1f922": {"canonical_name": "nauseated", "aliases": ["queasy"]}, + "1f923": {"canonical_name": "rolling_on_the_floor_laughing", "aliases": ["rofl"]}, + "1f924": {"canonical_name": "drooling", "aliases": []}, + "1f925": {"canonical_name": "lying", "aliases": []}, + "1f926-200d-2640": {"canonical_name": "woman_facepalming", "aliases": []}, + "1f926-200d-2642": {"canonical_name": "man_facepalming", "aliases": []}, + "1f926": {"canonical_name": "face_palm", "aliases": []}, + "1f927": {"canonical_name": "sneezing", "aliases": []}, + "1f928": {"canonical_name": "face_with_raised_eyebrow", "aliases": ["distrust", "skeptic"]}, + "1f929": {"canonical_name": "star_struck", "aliases": []}, + "1f92a": {"canonical_name": "zany_face", "aliases": ["goofy", "small"]}, + "1f92b": {"canonical_name": "shushing_face", "aliases": ["shush"]}, + "1f92c": {"canonical_name": "face_with_symbols_on_mouth", "aliases": ["swearing"]}, + "1f92d": {"canonical_name": "face_with_hand_over_mouth", "aliases": ["whoops"]}, + "1f92e": {"canonical_name": "face_vomiting", "aliases": ["puke", "vomit"]}, + "1f92f": {"canonical_name": "exploding_head", "aliases": ["mind_blown", "shocked"]}, + "1f930": {"canonical_name": "pregnant", "aliases": ["expecting"]}, + "1f931": {"canonical_name": "breast_feeding", "aliases": ["breast"]}, + "1f932": {"canonical_name": "palms_up_together", "aliases": ["prayer"]}, + "1f933": {"canonical_name": "selfie", "aliases": []}, + "1f934": {"canonical_name": "prince", "aliases": []}, + "1f935-200d-2640": {"canonical_name": "woman_in_tuxedo", "aliases": []}, + "1f935-200d-2642": {"canonical_name": "man_in_tuxedo", "aliases": []}, + "1f935": {"canonical_name": "tuxedo", "aliases": []}, + "1f936": {"canonical_name": "mother_christmas", "aliases": ["mrs_claus"]}, + "1f937-200d-2640": {"canonical_name": "woman_shrugging", "aliases": []}, + "1f937-200d-2642": {"canonical_name": "man_shrugging", "aliases": []}, + "1f937": {"canonical_name": "shrug", "aliases": []}, + "1f938-200d-2640": {"canonical_name": "woman_cartwheeling", "aliases": []}, + "1f938-200d-2642": {"canonical_name": "man_cartwheeling", "aliases": []}, + "1f938": {"canonical_name": "cartwheel", "aliases": ["acrobatics", "gymnastics", "tumbling"]}, + "1f939-200d-2640": {"canonical_name": "woman_juggling", "aliases": []}, + "1f939-200d-2642": {"canonical_name": "man_juggling", "aliases": []}, + "1f939": {"canonical_name": "juggling", "aliases": []}, + "1f93a": {"canonical_name": "fencing", "aliases": []}, + "1f93c-200d-2640": {"canonical_name": "women_wrestling", "aliases": []}, + "1f93c-200d-2642": {"canonical_name": "men_wrestling", "aliases": []}, + "1f93c": {"canonical_name": "wrestling", "aliases": []}, + "1f93d-200d-2640": {"canonical_name": "woman_playing_water_polo", "aliases": []}, + "1f93d-200d-2642": {"canonical_name": "man_playing_water_polo", "aliases": []}, + "1f93d": {"canonical_name": "water_polo", "aliases": []}, + "1f93e-200d-2640": {"canonical_name": "woman_playing_handball", "aliases": []}, + "1f93e-200d-2642": {"canonical_name": "man_playing_handball", "aliases": []}, + "1f93e": {"canonical_name": "handball", "aliases": []}, + "1f93f": {"canonical_name": "diving_mask", "aliases": ["scuba", "snorkeling"]}, + "1f940": {"canonical_name": "wilted_flower", "aliases": ["crushed"]}, + "1f941": {"canonical_name": "drum", "aliases": []}, + "1f942": {"canonical_name": "clink", "aliases": ["toast"]}, + "1f943": {"canonical_name": "small_glass", "aliases": []}, + "1f944": {"canonical_name": "spoon", "aliases": []}, + "1f945": {"canonical_name": "gooooooooal", "aliases": ["goal"]}, + "1f947": {"canonical_name": "first_place", "aliases": ["gold", "number_one"]}, + "1f948": {"canonical_name": "second_place", "aliases": ["silver"]}, + "1f949": {"canonical_name": "third_place", "aliases": ["bronze"]}, + "1f94a": {"canonical_name": "boxing_glove", "aliases": []}, + "1f94b": {"canonical_name": "black_belt", "aliases": ["keikogi", "dogi", "martial_arts"]}, + "1f94c": {"canonical_name": "curling_stone", "aliases": []}, + "1f94d": {"canonical_name": "lacrosse", "aliases": []}, + "1f94e": {"canonical_name": "softball", "aliases": ["glove", "underarm"]}, + "1f94f": {"canonical_name": "flying_disc", "aliases": ["ultimate"]}, + "1f950": {"canonical_name": "croissant", "aliases": []}, + "1f951": {"canonical_name": "avocado", "aliases": []}, + "1f952": {"canonical_name": "cucumber", "aliases": []}, + "1f953": {"canonical_name": "bacon", "aliases": []}, + "1f954": {"canonical_name": "potato", "aliases": []}, + "1f955": {"canonical_name": "carrot", "aliases": []}, + "1f956": {"canonical_name": "baguette", "aliases": []}, + "1f957": {"canonical_name": "salad", "aliases": []}, + "1f958": {"canonical_name": "paella", "aliases": []}, + "1f959": { + "canonical_name": "doner_kebab", + "aliases": ["shawarma", "souvlaki", "stuffed_flatbread"], + }, + "1f95a": {"canonical_name": "egg", "aliases": []}, + "1f95b": {"canonical_name": "milk", "aliases": ["glass_of_milk"]}, + "1f95c": {"canonical_name": "peanuts", "aliases": []}, + "1f95d": {"canonical_name": "kiwi", "aliases": []}, + "1f95e": {"canonical_name": "pancakes", "aliases": ["breakfast"]}, + "1f95f": { + "canonical_name": "dumpling", + "aliases": ["empanada", "gyōza", "jiaozi", "pierogi", "potsticker", "gyoza"], + }, + "1f960": {"canonical_name": "fortune_cookie", "aliases": ["prophecy"]}, + "1f961": {"canonical_name": "takeout_box", "aliases": ["oyster_pail"]}, + "1f962": {"canonical_name": "chopsticks", "aliases": ["hashi"]}, + "1f963": {"canonical_name": "bowl_with_spoon", "aliases": ["cereal", "congee"]}, + "1f964": {"canonical_name": "cup_with_straw", "aliases": ["soda"]}, + "1f965": {"canonical_name": "coconut", "aliases": ["piña_colada", "pina_colada"]}, + "1f966": {"canonical_name": "broccoli", "aliases": ["wild_cabbage"]}, + "1f967": {"canonical_name": "pie", "aliases": ["filling", "pastry"]}, + "1f968": {"canonical_name": "pretzel", "aliases": ["twisted"]}, + "1f969": {"canonical_name": "cut_of_meat", "aliases": ["lambchop", "porkchop", "steak"]}, + "1f96a": {"canonical_name": "sandwich", "aliases": []}, + "1f96b": {"canonical_name": "canned_food", "aliases": ["can"]}, + "1f96c": { + "canonical_name": "leafy_green", + "aliases": ["bok_choy", "cabbage", "kale", "lettuce"], + }, + "1f96d": {"canonical_name": "mango", "aliases": ["fruit"]}, + "1f96e": { + "canonical_name": "moon_cake", + "aliases": ["autumn", "festival", "yuèbǐng", "yuebing"], + }, + "1f96f": {"canonical_name": "bagel", "aliases": ["schmear"]}, + "1f970": {"canonical_name": "smiling_face_with_hearts", "aliases": ["adore", "crush"]}, + "1f971": {"canonical_name": "yawning_face", "aliases": ["bored", "yawn"]}, + "1f972": { + "canonical_name": "smiling_face_with_tear", + "aliases": ["grateful", "smiling", "tear", "touched"], + }, + "1f973": {"canonical_name": "partying_face", "aliases": []}, + "1f974": { + "canonical_name": "woozy_face", + "aliases": ["intoxicated", "tipsy", "uneven_eyes", "wavy_mouth"], + }, + "1f975": { + "canonical_name": "hot_face", + "aliases": ["feverish", "heat_stroke", "red_faced", "sweating"], + }, + "1f976": { + "canonical_name": "cold_face", + "aliases": ["blue_faced", "freezing", "frostbite", "icicles"], + }, + "1f977": {"canonical_name": "ninja", "aliases": ["fighter", "hidden", "stealth"]}, + "1f978": {"canonical_name": "disguised_face", "aliases": ["disguise", "incognito"]}, + "1f979": {"canonical_name": "face_holding_back_tears", "aliases": ["resist"]}, + "1f97a": {"canonical_name": "pleading_face", "aliases": ["begging", "mercy", "puppy_eyes"]}, + "1f97b": {"canonical_name": "sari", "aliases": []}, + "1f97c": {"canonical_name": "lab_coat", "aliases": []}, + "1f97d": {"canonical_name": "goggles", "aliases": ["eye_protection", "swimming", "welding"]}, + "1f97e": {"canonical_name": "hiking_boot", "aliases": ["backpacking", "hiking"]}, + "1f97f": {"canonical_name": "flat_shoe", "aliases": ["ballet_flat", "slip_on", "slipper"]}, + "1f980": {"canonical_name": "crab", "aliases": []}, + "1f981": {"canonical_name": "lion", "aliases": []}, + "1f982": {"canonical_name": "scorpion", "aliases": []}, + "1f983": {"canonical_name": "turkey", "aliases": []}, + "1f984": {"canonical_name": "unicorn", "aliases": []}, + "1f985": {"canonical_name": "eagle", "aliases": []}, + "1f986": {"canonical_name": "duck", "aliases": []}, + "1f987": {"canonical_name": "bat", "aliases": []}, + "1f988": {"canonical_name": "shark", "aliases": []}, + "1f989": {"canonical_name": "owl", "aliases": []}, + "1f98a": {"canonical_name": "fox", "aliases": []}, + "1f98b": {"canonical_name": "butterfly", "aliases": []}, + "1f98c": {"canonical_name": "deer", "aliases": []}, + "1f98d": {"canonical_name": "gorilla", "aliases": []}, + "1f98e": {"canonical_name": "lizard", "aliases": ["gecko"]}, + "1f98f": {"canonical_name": "rhinoceros", "aliases": []}, + "1f990": {"canonical_name": "shrimp", "aliases": []}, + "1f991": {"canonical_name": "squid", "aliases": []}, + "1f992": {"canonical_name": "giraffe", "aliases": ["spots"]}, + "1f993": {"canonical_name": "zebra", "aliases": ["stripe"]}, + "1f994": {"canonical_name": "hedgehog", "aliases": ["spiny"]}, + "1f995": { + "canonical_name": "sauropod", + "aliases": ["brachiosaurus", "brontosaurus", "diplodocus"], + }, + "1f996": {"canonical_name": "t_rex", "aliases": ["tyrannosaurus_rex"]}, + "1f997": {"canonical_name": "cricket", "aliases": ["grasshopper"]}, + "1f998": {"canonical_name": "kangaroo", "aliases": ["joey", "jump", "marsupial"]}, + "1f999": { + "canonical_name": "llama", + "aliases": ["alpaca", "guanaco", "vicuña", "wool", "vicuna"], + }, + "1f99a": {"canonical_name": "peacock", "aliases": ["ostentatious", "peahen"]}, + "1f99b": {"canonical_name": "hippopotamus", "aliases": ["hippo"]}, + "1f99c": {"canonical_name": "parrot", "aliases": ["talk"]}, + "1f99d": {"canonical_name": "raccoon", "aliases": ["curious", "sly"]}, + "1f99e": {"canonical_name": "lobster", "aliases": ["bisque", "claws", "seafood"]}, + "1f99f": {"canonical_name": "mosquito", "aliases": ["malaria"]}, + "1f9a0": {"canonical_name": "microbe", "aliases": ["amoeba"]}, + "1f9a1": {"canonical_name": "badger", "aliases": ["honey_badger", "pester"]}, + "1f9a2": {"canonical_name": "swan", "aliases": ["cygnet", "ugly_duckling"]}, + "1f9a3": {"canonical_name": "mammoth", "aliases": ["tusk", "woolly"]}, + "1f9a4": {"canonical_name": "dodo", "aliases": ["mauritius"]}, + "1f9a5": {"canonical_name": "sloth", "aliases": ["lazy", "slow"]}, + "1f9a6": {"canonical_name": "otter", "aliases": ["playful"]}, + "1f9a7": {"canonical_name": "orangutan", "aliases": ["ape"]}, + "1f9a8": {"canonical_name": "skunk", "aliases": ["stink"]}, + "1f9a9": {"canonical_name": "flamingo", "aliases": ["flamboyant"]}, + "1f9aa": {"canonical_name": "oyster", "aliases": []}, + "1f9ab": {"canonical_name": "beaver", "aliases": ["dam"]}, + "1f9ac": {"canonical_name": "bison", "aliases": ["buffalo", "herd", "wisent"]}, + "1f9ad": {"canonical_name": "seal", "aliases": ["sea_lion"]}, + "1f9ae": {"canonical_name": "guide_dog", "aliases": ["guide"]}, + "1f9af": {"canonical_name": "white_cane", "aliases": []}, + "1f9b4": {"canonical_name": "bone", "aliases": []}, + "1f9b5": {"canonical_name": "leg", "aliases": ["limb"]}, + "1f9b6": {"canonical_name": "foot", "aliases": ["stomp"]}, + "1f9b7": {"canonical_name": "tooth", "aliases": ["dentist"]}, + "1f9b8-200d-2640": {"canonical_name": "woman_superhero", "aliases": []}, + "1f9b8-200d-2642": {"canonical_name": "man_superhero", "aliases": []}, + "1f9b8": {"canonical_name": "superhero", "aliases": []}, + "1f9b9-200d-2640": {"canonical_name": "woman_supervillain", "aliases": []}, + "1f9b9-200d-2642": {"canonical_name": "man_supervillain", "aliases": []}, + "1f9b9": {"canonical_name": "supervillain", "aliases": []}, + "1f9ba": {"canonical_name": "safety_vest", "aliases": ["emergency", "vest"]}, + "1f9bb": {"canonical_name": "ear_with_hearing_aid", "aliases": ["hard_of_hearing"]}, + "1f9bc": {"canonical_name": "motorized_wheelchair", "aliases": []}, + "1f9bd": {"canonical_name": "manual_wheelchair", "aliases": []}, + "1f9be": {"canonical_name": "mechanical_arm", "aliases": []}, + "1f9bf": {"canonical_name": "mechanical_leg", "aliases": []}, + "1f9c0": {"canonical_name": "cheese", "aliases": []}, + "1f9c1": {"canonical_name": "cupcake", "aliases": []}, + "1f9c2": {"canonical_name": "salt", "aliases": ["shaker"]}, + "1f9c3": {"canonical_name": "beverage_box", "aliases": ["beverage", "box", "straw"]}, + "1f9c4": {"canonical_name": "garlic", "aliases": []}, + "1f9c5": {"canonical_name": "onion", "aliases": []}, + "1f9c6": {"canonical_name": "falafel", "aliases": ["chickpea", "meatball"]}, + "1f9c7": {"canonical_name": "waffle", "aliases": ["indecisive", "iron"]}, + "1f9c8": {"canonical_name": "butter", "aliases": ["dairy"]}, + "1f9c9": {"canonical_name": "mate", "aliases": []}, + "1f9ca": {"canonical_name": "ice", "aliases": ["ice_cube", "iceberg"]}, + "1f9cb": {"canonical_name": "bubble_tea", "aliases": []}, + "1f9cc": {"canonical_name": "troll", "aliases": ["fairy_tale", "fantasy", "monster"]}, + "1f9cd-200d-2640": {"canonical_name": "woman_standing", "aliases": []}, + "1f9cd-200d-2642": {"canonical_name": "man_standing", "aliases": []}, + "1f9cd": {"canonical_name": "person_standing", "aliases": ["stand"]}, + "1f9ce-200d-2640": {"canonical_name": "woman_kneeling", "aliases": []}, + "1f9ce-200d-2642": {"canonical_name": "man_kneeling", "aliases": []}, + "1f9ce": {"canonical_name": "person_kneeling", "aliases": ["kneel"]}, + "1f9cf-200d-2640": {"canonical_name": "deaf_woman", "aliases": []}, + "1f9cf-200d-2642": {"canonical_name": "deaf_man", "aliases": []}, + "1f9cf": {"canonical_name": "deaf_person", "aliases": ["hear"]}, + "1f9d0": {"canonical_name": "face_with_monocle", "aliases": ["monocle", "stuffy"]}, + "1f9d1-200d-1f33e": {"canonical_name": "farmer", "aliases": []}, + "1f9d1-200d-1f373": {"canonical_name": "cook", "aliases": []}, + "1f9d1-200d-1f37c": {"canonical_name": "person_feeding_baby", "aliases": []}, + "1f9d1-200d-1f384": {"canonical_name": "mx_claus", "aliases": ["christmas", "claus"]}, + "1f9d1-200d-1f393": {"canonical_name": "student", "aliases": []}, + "1f9d1-200d-1f3a4": {"canonical_name": "singer", "aliases": []}, + "1f9d1-200d-1f3a8": {"canonical_name": "artist", "aliases": []}, + "1f9d1-200d-1f3eb": {"canonical_name": "teacher", "aliases": []}, + "1f9d1-200d-1f3ed": {"canonical_name": "factory_worker", "aliases": []}, + "1f9d1-200d-1f4bb": {"canonical_name": "technologist", "aliases": []}, + "1f9d1-200d-1f4bc": {"canonical_name": "office_worker", "aliases": []}, + "1f9d1-200d-1f527": {"canonical_name": "mechanic", "aliases": []}, + "1f9d1-200d-1f52c": {"canonical_name": "scientist", "aliases": []}, + "1f9d1-200d-1f680": {"canonical_name": "astronaut", "aliases": []}, + "1f9d1-200d-1f692": {"canonical_name": "firefighter", "aliases": []}, + "1f9d1-200d-1f91d-200d-1f9d1": { + "canonical_name": "people_holding_hands", + "aliases": ["hold", "holding_hands"], + }, + "1f9d1-200d-1f9af": {"canonical_name": "person_with_white_cane", "aliases": []}, + "1f9d1-200d-1f9b0": {"canonical_name": "person_red_hair", "aliases": []}, + "1f9d1-200d-1f9b1": {"canonical_name": "person_curly_hair", "aliases": []}, + "1f9d1-200d-1f9b2": {"canonical_name": "person_bald", "aliases": []}, + "1f9d1-200d-1f9b3": {"canonical_name": "person_white_hair", "aliases": []}, + "1f9d1-200d-1f9bc": {"canonical_name": "person_in_motorized_wheelchair", "aliases": []}, + "1f9d1-200d-1f9bd": {"canonical_name": "person_in_manual_wheelchair", "aliases": []}, + "1f9d1-200d-2695": {"canonical_name": "health_worker", "aliases": []}, + "1f9d1-200d-2696": {"canonical_name": "judge", "aliases": []}, + "1f9d1-200d-2708": {"canonical_name": "pilot", "aliases": []}, + "1f9d1": {"canonical_name": "person", "aliases": []}, + "1f9d2": {"canonical_name": "child", "aliases": ["young"]}, + "1f9d3": {"canonical_name": "older_person", "aliases": ["old"]}, + "1f9d4-200d-2640": {"canonical_name": "woman_beard", "aliases": []}, + "1f9d4-200d-2642": {"canonical_name": "man_beard", "aliases": []}, + "1f9d4": {"canonical_name": "person_beard", "aliases": []}, + "1f9d5": { + "canonical_name": "woman_with_headscarf", + "aliases": ["headscarf", "hijab", "mantilla", "tichel"], + }, + "1f9d6-200d-2640": {"canonical_name": "woman_in_steamy_room", "aliases": []}, + "1f9d6-200d-2642": {"canonical_name": "man_in_steamy_room", "aliases": []}, + "1f9d6": {"canonical_name": "person_in_steamy_room", "aliases": []}, + "1f9d7-200d-2640": {"canonical_name": "woman_climbing", "aliases": []}, + "1f9d7-200d-2642": {"canonical_name": "man_climbing", "aliases": []}, + "1f9d7": {"canonical_name": "person_climbing", "aliases": []}, + "1f9d8-200d-2640": {"canonical_name": "woman_in_lotus_position", "aliases": []}, + "1f9d8-200d-2642": {"canonical_name": "man_in_lotus_position", "aliases": []}, + "1f9d8": {"canonical_name": "person_in_lotus_position", "aliases": []}, + "1f9d9-200d-2640": {"canonical_name": "woman_mage", "aliases": []}, + "1f9d9-200d-2642": {"canonical_name": "man_mage", "aliases": []}, + "1f9d9": {"canonical_name": "mage", "aliases": []}, + "1f9da-200d-2640": {"canonical_name": "woman_fairy", "aliases": []}, + "1f9da-200d-2642": {"canonical_name": "man_fairy", "aliases": []}, + "1f9da": {"canonical_name": "fairy", "aliases": []}, + "1f9db-200d-2640": {"canonical_name": "woman_vampire", "aliases": []}, + "1f9db-200d-2642": {"canonical_name": "man_vampire", "aliases": []}, + "1f9db": {"canonical_name": "vampire", "aliases": []}, + "1f9dc-200d-2640": {"canonical_name": "mermaid", "aliases": []}, + "1f9dc-200d-2642": {"canonical_name": "merman", "aliases": ["triton"]}, + "1f9dc": {"canonical_name": "merperson", "aliases": []}, + "1f9dd-200d-2640": {"canonical_name": "woman_elf", "aliases": []}, + "1f9dd-200d-2642": {"canonical_name": "man_elf", "aliases": []}, + "1f9dd": {"canonical_name": "elf", "aliases": []}, + "1f9de-200d-2640": {"canonical_name": "woman_genie", "aliases": []}, + "1f9de-200d-2642": {"canonical_name": "man_genie", "aliases": []}, + "1f9de": {"canonical_name": "genie", "aliases": []}, + "1f9df-200d-2640": {"canonical_name": "woman_zombie", "aliases": []}, + "1f9df-200d-2642": {"canonical_name": "man_zombie", "aliases": []}, + "1f9df": {"canonical_name": "zombie", "aliases": []}, + "1f9e0": {"canonical_name": "brain", "aliases": ["intelligent"]}, + "1f9e1": {"canonical_name": "orange_heart", "aliases": []}, + "1f9e2": {"canonical_name": "billed_cap", "aliases": ["baseball_cap"]}, + "1f9e3": {"canonical_name": "scarf", "aliases": ["neck"]}, + "1f9e4": {"canonical_name": "gloves", "aliases": []}, + "1f9e5": {"canonical_name": "coat", "aliases": ["jacket"]}, + "1f9e6": {"canonical_name": "socks", "aliases": ["stocking"]}, + "1f9e7": { + "canonical_name": "red_envelope", + "aliases": ["good_luck", "hóngbāo", "lai_see", "hongbao"], + }, + "1f9e8": {"canonical_name": "firecracker", "aliases": ["dynamite", "explosive"]}, + "1f9e9": { + "canonical_name": "puzzle_piece", + "aliases": ["interlocking", "jigsaw", "piece", "puzzle"], + }, + "1f9ea": {"canonical_name": "test_tube", "aliases": ["chemistry"]}, + "1f9eb": {"canonical_name": "petri_dish", "aliases": ["biology", "culture"]}, + "1f9ec": {"canonical_name": "dna", "aliases": ["evolution", "gene", "genetics", "life"]}, + "1f9ed": {"canonical_name": "compass", "aliases": ["navigation", "orienteering"]}, + "1f9ee": {"canonical_name": "abacus", "aliases": ["calculation"]}, + "1f9ef": {"canonical_name": "fire_extinguisher", "aliases": ["extinguish", "quench"]}, + "1f9f0": {"canonical_name": "toolbox", "aliases": ["chest"]}, + "1f9f1": {"canonical_name": "brick", "aliases": ["bricks", "clay", "mortar", "wall"]}, + "1f9f2": {"canonical_name": "magnet", "aliases": ["attraction", "horseshoe"]}, + "1f9f3": {"canonical_name": "luggage", "aliases": ["packing", "travel"]}, + "1f9f4": { + "canonical_name": "lotion_bottle", + "aliases": ["lotion", "moisturizer", "shampoo", "sunscreen"], + }, + "1f9f5": {"canonical_name": "thread", "aliases": ["spool", "string"]}, + "1f9f6": {"canonical_name": "yarn", "aliases": ["crochet", "knit"]}, + "1f9f7": {"canonical_name": "safety_pin", "aliases": ["diaper", "punk_rock"]}, + "1f9f8": {"canonical_name": "teddy_bear", "aliases": ["plaything", "plush", "stuffed"]}, + "1f9f9": {"canonical_name": "broom", "aliases": ["sweeping"]}, + "1f9fa": {"canonical_name": "basket", "aliases": ["farming", "laundry", "picnic"]}, + "1f9fb": {"canonical_name": "roll_of_paper", "aliases": ["paper_towels", "toilet_paper"]}, + "1f9fc": {"canonical_name": "soap", "aliases": ["bar", "bathing", "lather", "soapdish"]}, + "1f9fd": {"canonical_name": "sponge", "aliases": ["absorbing", "porous"]}, + "1f9fe": { + "canonical_name": "receipt", + "aliases": ["accounting", "bookkeeping", "evidence", "proof"], + }, + "1f9ff": { + "canonical_name": "nazar_amulet", + "aliases": ["bead", "charm", "evil_eye", "nazar", "talisman"], + }, + "1fa70": {"canonical_name": "ballet_shoes", "aliases": ["ballet"]}, + "1fa71": {"canonical_name": "one_piece_swimsuit", "aliases": []}, + "1fa72": {"canonical_name": "briefs", "aliases": ["one_piece", "swimsuit"]}, + "1fa73": {"canonical_name": "shorts", "aliases": ["pants"]}, + "1fa74": { + "canonical_name": "thong_sandal", + "aliases": ["beach_sandals", "sandals", "thong_sandals", "thongs", "zōri", "zori"], + }, + "1fa75": {"canonical_name": "light_blue_heart", "aliases": ["cyan", "teal"]}, + "1fa76": {"canonical_name": "grey_heart", "aliases": ["gray", "slate"]}, + "1fa77": {"canonical_name": "pink_heart", "aliases": []}, + "1fa78": { + "canonical_name": "drop_of_blood", + "aliases": ["bleed", "blood_donation", "injury", "menstruation"], + }, + "1fa79": {"canonical_name": "adhesive_bandage", "aliases": ["bandage"]}, + "1fa7a": {"canonical_name": "stethoscope", "aliases": []}, + "1fa7b": {"canonical_name": "x_ray", "aliases": ["bones", "medical"]}, + "1fa7c": {"canonical_name": "crutch", "aliases": ["cane", "disability", "mobility_aid"]}, + "1fa80": {"canonical_name": "yo_yo", "aliases": ["fluctuate"]}, + "1fa81": {"canonical_name": "kite", "aliases": ["soar"]}, + "1fa82": {"canonical_name": "parachute", "aliases": ["hang_glide", "parasail", "skydive"]}, + "1fa83": {"canonical_name": "boomerang", "aliases": ["rebound", "repercussion"]}, + "1fa84": {"canonical_name": "magic_wand", "aliases": ["magic"]}, + "1fa85": {"canonical_name": "piñata", "aliases": ["pinata"]}, + "1fa86": {"canonical_name": "nesting_dolls", "aliases": ["doll", "russia"]}, + "1fa87": { + "canonical_name": "maracas", + "aliases": ["instrument", "percussion", "rattle", "shake"], + }, + "1fa88": {"canonical_name": "flute", "aliases": ["fife", "pipe", "recorder", "woodwind"]}, + "1fa90": {"canonical_name": "ringed_planet", "aliases": ["saturn", "saturnine"]}, + "1fa91": {"canonical_name": "chair", "aliases": ["sit"]}, + "1fa92": {"canonical_name": "razor", "aliases": ["sharp", "shave"]}, + "1fa93": {"canonical_name": "axe", "aliases": ["hatchet", "split"]}, + "1fa94": {"canonical_name": "diya_lamp", "aliases": ["diya", "lamp", "oil"]}, + "1fa95": {"canonical_name": "banjo", "aliases": ["stringed"]}, + "1fa96": { + "canonical_name": "military_helmet", + "aliases": ["army", "military", "soldier", "warrior"], + }, + "1fa97": {"canonical_name": "accordion", "aliases": ["concertina", "squeeze_box"]}, + "1fa98": {"canonical_name": "long_drum", "aliases": ["beat", "conga", "rhythm"]}, + "1fa99": {"canonical_name": "coin", "aliases": ["metal"]}, + "1fa9a": {"canonical_name": "carpentry_saw", "aliases": ["carpenter", "saw"]}, + "1fa9b": {"canonical_name": "screwdriver", "aliases": []}, + "1fa9c": {"canonical_name": "ladder", "aliases": ["climb", "rung", "step"]}, + "1fa9d": {"canonical_name": "hook", "aliases": ["crook", "curve", "ensnare", "selling_point"]}, + "1fa9e": {"canonical_name": "mirror", "aliases": ["reflection", "reflector", "speculum"]}, + "1fa9f": { + "canonical_name": "window", + "aliases": ["frame", "fresh_air", "opening", "transparent", "view"], + }, + "1faa0": {"canonical_name": "plunger", "aliases": ["force_cup", "suction"]}, + "1faa1": { + "canonical_name": "sewing_needle", + "aliases": ["embroidery", "stitches", "sutures", "tailoring"], + }, + "1faa2": {"canonical_name": "knot", "aliases": ["rope", "tangled", "twine", "twist"]}, + "1faa3": {"canonical_name": "bucket", "aliases": ["cask", "pail", "vat"]}, + "1faa4": {"canonical_name": "mouse_trap", "aliases": ["bait", "mousetrap", "snare", "trap"]}, + "1faa5": { + "canonical_name": "toothbrush", + "aliases": ["bathroom", "brush", "dental", "hygiene", "teeth"], + }, + "1faa6": {"canonical_name": "headstone", "aliases": ["cemetery", "graveyard", "tombstone"]}, + "1faa7": { + "canonical_name": "placard", + "aliases": ["demonstration", "picket", "protest", "sign"], + }, + "1faa8": {"canonical_name": "rock", "aliases": ["boulder", "heavy", "solid", "stone"]}, + "1faa9": {"canonical_name": "mirror_ball", "aliases": ["glitter"]}, + "1faaa": { + "canonical_name": "identification_card", + "aliases": ["credentials", "license", "security"], + }, + "1faab": {"canonical_name": "low_battery", "aliases": ["electronic", "low_energy"]}, + "1faac": { + "canonical_name": "hamsa", + "aliases": ["amulet", "fatima", "mary", "miriam", "protection"], + }, + "1faad": { + "canonical_name": "folding_hand_fan", + "aliases": ["cooling", "fan", "flutter", "shy"], + }, + "1faae": {"canonical_name": "hair_pick", "aliases": ["afro", "comb"]}, + "1faaf": {"canonical_name": "khanda", "aliases": ["religion", "sikh"]}, + "1fab0": {"canonical_name": "fly", "aliases": ["maggot", "rotting"]}, + "1fab1": {"canonical_name": "worm", "aliases": ["annelid", "earthworm", "parasite"]}, + "1fab2": {"canonical_name": "beetle", "aliases": []}, + "1fab3": {"canonical_name": "cockroach", "aliases": ["roach"]}, + "1fab4": { + "canonical_name": "potted_plant", + "aliases": ["boring", "grow", "nurturing", "useless"], + }, + "1fab5": {"canonical_name": "wood", "aliases": ["log", "timber"]}, + "1fab6": {"canonical_name": "feather", "aliases": ["flight", "light", "plumage"]}, + "1fab7": {"canonical_name": "lotus", "aliases": ["purity"]}, + "1fab8": {"canonical_name": "coral", "aliases": ["reef"]}, + "1fab9": {"canonical_name": "empty_nest", "aliases": []}, + "1faba": {"canonical_name": "nest_with_eggs", "aliases": []}, + "1fabb": { + "canonical_name": "hyacinth", + "aliases": ["bluebonnet", "lavender", "lupine", "snapdragon"], + }, + "1fabc": { + "canonical_name": "jellyfish", + "aliases": ["invertebrate", "jelly", "marine", "ouch", "stinger"], + }, + "1fabd": {"canonical_name": "wing", "aliases": ["angelic", "aviation", "flying", "mythology"]}, + "1fabf": {"canonical_name": "goose", "aliases": ["fowl", "honk", "silly"]}, + "1fac0": { + "canonical_name": "anatomical_heart", + "aliases": ["anatomical", "cardiology", "pulse"], + }, + "1fac1": { + "canonical_name": "lungs", + "aliases": ["breath", "exhalation", "inhalation", "respiration"], + }, + "1fac2": {"canonical_name": "people_hugging", "aliases": ["goodbye", "thanks"]}, + "1fac3": {"canonical_name": "pregnant_man", "aliases": []}, + "1fac4": {"canonical_name": "pregnant_person", "aliases": []}, + "1fac5": { + "canonical_name": "person_with_crown", + "aliases": ["monarch", "noble", "regal", "royalty"], + }, + "1face": {"canonical_name": "moose", "aliases": ["antlers", "elk"]}, + "1facf": {"canonical_name": "donkey", "aliases": ["ass", "burro", "mule", "stubborn"]}, + "1fad0": {"canonical_name": "blueberries", "aliases": ["berry", "bilberry", "blueberry"]}, + "1fad1": {"canonical_name": "bell_pepper", "aliases": ["capsicum", "pepper"]}, + "1fad2": {"canonical_name": "olive", "aliases": []}, + "1fad3": {"canonical_name": "flatbread", "aliases": ["arepa", "lavash", "naan", "pita"]}, + "1fad4": {"canonical_name": "tamale", "aliases": ["mexican", "wrapped"]}, + "1fad5": {"canonical_name": "fondue", "aliases": ["melted", "swiss"]}, + "1fad6": {"canonical_name": "teapot", "aliases": []}, + "1fad7": {"canonical_name": "pouring_liquid", "aliases": ["spill"]}, + "1fad8": {"canonical_name": "beans", "aliases": ["kidney"]}, + "1fad9": {"canonical_name": "jar", "aliases": ["container", "sauce", "store"]}, + "1fada": {"canonical_name": "ginger_root", "aliases": ["root", "spice"]}, + "1fadb": {"canonical_name": "pea_pod", "aliases": ["edamame", "pea", "pod"]}, + "1fae0": {"canonical_name": "melting_face", "aliases": ["dissolve", "liquid", "melt"]}, + "1fae1": {"canonical_name": "saluting_face", "aliases": ["salute", "troops", "yes"]}, + "1fae2": { + "canonical_name": "face_with_open_eyes_and_hand_over_mouth", + "aliases": ["amazement", "awe", "embarrass"], + }, + "1fae3": { + "canonical_name": "face_with_peeking_eye", + "aliases": ["captivated", "peep", "stare"], + }, + "1fae4": { + "canonical_name": "face_with_diagonal_mouth", + "aliases": ["meh", "skeptical", "unsure"], + }, + "1fae5": { + "canonical_name": "dotted_line_face", + "aliases": ["depressed", "hide", "introvert", "invisible"], + }, + "1fae6": {"canonical_name": "biting_lip", "aliases": ["flirting", "uncomfortable"]}, + "1fae7": {"canonical_name": "bubbles", "aliases": ["burp", "underwater"]}, + "1fae8": {"canonical_name": "shaking_face", "aliases": ["earthquake", "shaking", "vibrate"]}, + "1faf0": { + "canonical_name": "hand_with_index_finger_and_thumb_crossed", + "aliases": ["expensive", "snap"], + }, + "1faf1": {"canonical_name": "rightwards_hand", "aliases": []}, + "1faf2": {"canonical_name": "leftwards_hand", "aliases": []}, + "1faf3": {"canonical_name": "palm_down_hand", "aliases": ["dismiss", "shoo"]}, + "1faf4": {"canonical_name": "palm_up_hand", "aliases": ["beckon", "come", "offer"]}, + "1faf5": {"canonical_name": "index_pointing_at_the_viewer", "aliases": ["point", "you"]}, + "1faf6": {"canonical_name": "heart_hands", "aliases": []}, + "1faf7": {"canonical_name": "leftwards_pushing_hand", "aliases": []}, + "1faf8": {"canonical_name": "rightwards_pushing_hand", "aliases": []}, + "203c": {"canonical_name": "bangbang", "aliases": ["double_exclamation"]}, + "2049": {"canonical_name": "interrobang", "aliases": []}, + "2122": {"canonical_name": "tm", "aliases": ["trademark"]}, + "2139": {"canonical_name": "info", "aliases": []}, + "2194": {"canonical_name": "left_right", "aliases": ["swap"]}, + "2195": {"canonical_name": "up_down", "aliases": []}, + "2196": {"canonical_name": "upper_left", "aliases": ["north_west"]}, + "2197": {"canonical_name": "upper_right", "aliases": ["north_east"]}, + "2198": {"canonical_name": "lower_right", "aliases": ["south_east"]}, + "2199": {"canonical_name": "lower_left", "aliases": ["south_west"]}, + "21a9": {"canonical_name": "reply", "aliases": ["left_hook"]}, + "21aa": {"canonical_name": "forward", "aliases": ["right_hook"]}, + "231a": {"canonical_name": "watch", "aliases": []}, + "231b": {"canonical_name": "times_up", "aliases": ["hourglass_done"]}, + "2328": {"canonical_name": "keyboard", "aliases": []}, + "23cf": {"canonical_name": "eject_button", "aliases": ["eject"]}, + "23e9": {"canonical_name": "fast_forward", "aliases": []}, + "23ea": {"canonical_name": "rewind", "aliases": ["fast_reverse"]}, + "23eb": {"canonical_name": "double_up", "aliases": ["fast_up"]}, + "23ec": {"canonical_name": "double_down", "aliases": ["fast_down"]}, + "23ed": {"canonical_name": "next_track", "aliases": ["skip_forward"]}, + "23ee": {"canonical_name": "previous_track", "aliases": ["skip_back"]}, + "23ef": {"canonical_name": "play_pause", "aliases": []}, + "23f0": {"canonical_name": "alarm_clock", "aliases": []}, + "23f1": {"canonical_name": "stopwatch", "aliases": []}, + "23f2": {"canonical_name": "timer", "aliases": []}, + "23f3": {"canonical_name": "time_ticking", "aliases": ["hourglass"]}, + "23f8": {"canonical_name": "pause", "aliases": []}, + "23f9": {"canonical_name": "stop_button", "aliases": []}, + "23fa": {"canonical_name": "record", "aliases": []}, + "24c2": {"canonical_name": "metro", "aliases": ["m"]}, + "25aa": {"canonical_name": "black_small_square", "aliases": []}, + "25ab": {"canonical_name": "white_small_square", "aliases": []}, + "25b6": {"canonical_name": "play", "aliases": []}, + "25c0": {"canonical_name": "play_reverse", "aliases": []}, + "25fb": {"canonical_name": "white_medium_square", "aliases": []}, + "25fc": {"canonical_name": "black_medium_square", "aliases": []}, + "25fd": {"canonical_name": "white_medium_small_square", "aliases": []}, + "25fe": {"canonical_name": "black_medium_small_square", "aliases": []}, + "2600": {"canonical_name": "sunny", "aliases": []}, + "2601": {"canonical_name": "cloud", "aliases": ["overcast"]}, + "2602": {"canonical_name": "umbrella", "aliases": []}, + "2603": {"canonical_name": "snowman", "aliases": []}, + "2604": {"canonical_name": "comet", "aliases": ["meteor"]}, + "260e": {"canonical_name": "phone", "aliases": ["telephone"]}, + "2611": {"canonical_name": "checkbox", "aliases": []}, + "2614": {"canonical_name": "umbrella_with_rain", "aliases": []}, + "2615": {"canonical_name": "coffee", "aliases": []}, + "2618": {"canonical_name": "shamrock", "aliases": ["clover"]}, + "261d": { + "canonical_name": "wait_one_second", + "aliases": ["point_of_information", "asking_a_question"], + }, + "2620": { + "canonical_name": "skull_and_crossbones", + "aliases": ["pirate", "death", "hazard", "toxic", "poison"], + }, + "2622": {"canonical_name": "radioactive", "aliases": ["nuclear"]}, + "2623": {"canonical_name": "biohazard", "aliases": []}, + "2626": {"canonical_name": "orthodox_cross", "aliases": []}, + "262a": {"canonical_name": "star_and_crescent", "aliases": ["islam"]}, + "262e": {"canonical_name": "peace", "aliases": []}, + "262f": {"canonical_name": "yin_yang", "aliases": []}, + "2638": {"canonical_name": "wheel_of_dharma", "aliases": ["buddhism"]}, + "2639": {"canonical_name": "sad", "aliases": ["big_frown"]}, + "263a": {"canonical_name": "smiling_face", "aliases": ["relaxed"]}, + "2640": {"canonical_name": "female_sign", "aliases": []}, + "2642": {"canonical_name": "male_sign", "aliases": []}, + "2648": {"canonical_name": "aries", "aliases": []}, + "2649": {"canonical_name": "taurus", "aliases": []}, + "264a": {"canonical_name": "gemini", "aliases": []}, + "264b": {"canonical_name": "cancer", "aliases": []}, + "264c": {"canonical_name": "leo", "aliases": []}, + "264d": {"canonical_name": "virgo", "aliases": []}, + "264e": {"canonical_name": "libra", "aliases": []}, + "264f": {"canonical_name": "scorpius", "aliases": []}, + "2650": {"canonical_name": "sagittarius", "aliases": []}, + "2651": {"canonical_name": "capricorn", "aliases": []}, + "2652": {"canonical_name": "aquarius", "aliases": []}, + "2653": {"canonical_name": "pisces", "aliases": []}, + "265f": {"canonical_name": "chess_pawn", "aliases": ["chess", "dupe", "expendable"]}, + "2660": {"canonical_name": "spades", "aliases": []}, + "2663": {"canonical_name": "clubs", "aliases": []}, + "2665": {"canonical_name": "hearts", "aliases": []}, + "2666": {"canonical_name": "diamonds", "aliases": []}, + "2668": {"canonical_name": "hot_springs", "aliases": []}, + "267b": {"canonical_name": "recycle", "aliases": []}, + "267e": {"canonical_name": "infinity", "aliases": ["forever", "unbounded", "universal"]}, + "267f": {"canonical_name": "accessible", "aliases": ["wheelchair", "disabled"]}, + "2692": {"canonical_name": "at_work", "aliases": ["hammer_and_pick"]}, + "2693": {"canonical_name": "anchor", "aliases": []}, + "2694": {"canonical_name": "duel", "aliases": ["swords"]}, + "2695": {"canonical_name": "medical_symbol", "aliases": ["aesculapius", "staff"]}, + "2696": {"canonical_name": "justice", "aliases": ["scales", "balance"]}, + "2697": {"canonical_name": "alchemy", "aliases": ["alembic"]}, + "2699": {"canonical_name": "gear", "aliases": ["settings", "mechanical", "engineer"]}, + "269b": {"canonical_name": "atom", "aliases": ["physics"]}, + "269c": {"canonical_name": "fleur_de_lis", "aliases": []}, + "26a0": {"canonical_name": "warning", "aliases": ["caution", "danger"]}, + "26a1": {"canonical_name": "high_voltage", "aliases": ["zap"]}, + "26a7": {"canonical_name": "transgender_symbol", "aliases": []}, + "26aa": {"canonical_name": "white_circle", "aliases": []}, + "26ab": {"canonical_name": "black_circle", "aliases": []}, + "26b0": {"canonical_name": "coffin", "aliases": ["burial", "grave"]}, + "26b1": {"canonical_name": "funeral_urn", "aliases": ["cremation"]}, + "26bd": {"canonical_name": "football", "aliases": ["soccer"]}, + "26be": {"canonical_name": "baseball", "aliases": []}, + "26c4": {"canonical_name": "frosty", "aliases": []}, + "26c5": {"canonical_name": "partly_sunny", "aliases": ["partly_cloudy"]}, + "26c8": {"canonical_name": "thunderstorm", "aliases": ["thunder_and_rain"]}, + "26ce": {"canonical_name": "ophiuchus", "aliases": []}, + "26cf": {"canonical_name": "mine", "aliases": ["pick"]}, + "26d1": { + "canonical_name": "helmet", + "aliases": ["hard_hat", "rescue_worker", "safety_first", "invincible"], + }, + "26d3": {"canonical_name": "chains", "aliases": []}, + "26d4": {"canonical_name": "no_entry", "aliases": ["wrong_way"]}, + "26e9": {"canonical_name": "shinto_shrine", "aliases": []}, + "26ea": {"canonical_name": "church", "aliases": []}, + "26f0": {"canonical_name": "mountain", "aliases": []}, + "26f1": {"canonical_name": "beach_umbrella", "aliases": []}, + "26f2": {"canonical_name": "fountain", "aliases": []}, + "26f3": {"canonical_name": "hole_in_one", "aliases": []}, + "26f4": {"canonical_name": "ferry", "aliases": []}, + "26f5": {"canonical_name": "boat", "aliases": ["sailboat"]}, + "26f7": {"canonical_name": "skier", "aliases": []}, + "26f8": {"canonical_name": "ice_skate", "aliases": []}, + "26f9-200d-2640": {"canonical_name": "woman_bouncing_ball", "aliases": []}, + "26f9-200d-2642": {"canonical_name": "man_bouncing_ball", "aliases": []}, + "26f9": {"canonical_name": "ball", "aliases": ["sports"]}, + "26fa": {"canonical_name": "tent", "aliases": ["camping"]}, + "26fd": {"canonical_name": "fuel_pump", "aliases": ["gas_pump", "petrol_pump"]}, + "2702": {"canonical_name": "scissors", "aliases": []}, + "2705": {"canonical_name": "check", "aliases": ["all_good", "approved"]}, + "2708": {"canonical_name": "airplane", "aliases": []}, + "2709": {"canonical_name": "email", "aliases": ["envelope", "mail"]}, + "270a": {"canonical_name": "fist", "aliases": ["power"]}, + "270b": {"canonical_name": "hand", "aliases": ["raised_hand"]}, + "270c": {"canonical_name": "peace_sign", "aliases": ["victory"]}, + "270d": {"canonical_name": "writing", "aliases": []}, + "270f": {"canonical_name": "pencil", "aliases": []}, + "2712": {"canonical_name": "black_nib", "aliases": ["nib"]}, + "2714": {"canonical_name": "check_mark", "aliases": []}, + "2716": {"canonical_name": "multiplication", "aliases": ["multiply"]}, + "271d": {"canonical_name": "cross", "aliases": ["christianity"]}, + "2721": {"canonical_name": "star_of_david", "aliases": ["judaism"]}, + "2728": {"canonical_name": "sparkles", "aliases": ["glamour"]}, + "2733": {"canonical_name": "eight_spoked_asterisk", "aliases": []}, + "2734": {"canonical_name": "eight_pointed_star", "aliases": []}, + "2744": {"canonical_name": "snowflake", "aliases": []}, + "2747": {"canonical_name": "sparkle", "aliases": []}, + "274c": {"canonical_name": "cross_mark", "aliases": ["incorrect", "wrong"]}, + "274e": {"canonical_name": "x", "aliases": []}, + "2753": {"canonical_name": "question", "aliases": []}, + "2754": {"canonical_name": "grey_question", "aliases": []}, + "2755": {"canonical_name": "grey_exclamation", "aliases": []}, + "2757": {"canonical_name": "exclamation", "aliases": []}, + "2763": {"canonical_name": "heart_exclamation", "aliases": []}, + "2764-200d-1f525": {"canonical_name": "heart_on_fire", "aliases": ["lust", "sacred_heart"]}, + "2764-200d-1fa79": { + "canonical_name": "mending_heart", + "aliases": ["healthier", "improving", "mending", "recovering", "recuperating", "well"], + }, + "2764": {"canonical_name": "heart", "aliases": ["love", "love_you"]}, + "2795": {"canonical_name": "plus", "aliases": ["add"]}, + "2796": {"canonical_name": "minus", "aliases": ["subtract"]}, + "2797": {"canonical_name": "division", "aliases": ["divide"]}, + "27a1": {"canonical_name": "right", "aliases": ["east"]}, + "27b0": {"canonical_name": "loop", "aliases": []}, + "27bf": {"canonical_name": "double_loop", "aliases": ["voicemail"]}, + "2934": {"canonical_name": "heading_up", "aliases": []}, + "2935": {"canonical_name": "heading_down", "aliases": []}, + "2b05": {"canonical_name": "left", "aliases": ["west"]}, + "2b06": {"canonical_name": "up", "aliases": ["north"]}, + "2b07": {"canonical_name": "down", "aliases": ["south"]}, + "2b1b": {"canonical_name": "black_large_square", "aliases": []}, + "2b1c": {"canonical_name": "white_large_square", "aliases": []}, + "2b50": {"canonical_name": "star", "aliases": []}, + "2b55": {"canonical_name": "circle", "aliases": []}, + "3030": {"canonical_name": "wavy_dash", "aliases": []}, + "303d": {"canonical_name": "part_alternation", "aliases": []}, + "3297": {"canonical_name": "japanese_congratulations_button", "aliases": ["congratulations"]}, + "3299": {"canonical_name": "japanese_secret_button", "aliases": []}, +}; diff --git a/lib/widgets/action_sheet.dart b/lib/widgets/action_sheet.dart index ba03831fe2..dd1cd3ae18 100644 --- a/lib/widgets/action_sheet.dart +++ b/lib/widgets/action_sheet.dart @@ -1,3 +1,4 @@ +import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/zulip_localizations.dart'; @@ -6,6 +7,7 @@ import 'package:share_plus/share_plus.dart'; import '../api/exception.dart'; import '../api/model/model.dart'; import '../api/route/messages.dart'; +import '../emoji.dart'; import 'clipboard.dart'; import 'compose_box.dart'; import 'dialog.dart'; @@ -18,26 +20,17 @@ import 'store.dart'; /// /// Must have a [MessageListPage] ancestor. void showMessageActionSheet({required BuildContext context, required Message message}) { - final store = PerAccountStoreWidget.of(context); - // The UI that's conditioned on this won't live-update during this appearance // of the action sheet (we avoid calling composeBoxControllerOf in a build // method; see its doc). But currently it will be constant through the life of // any message list, so that's fine. final isComposeBoxOffered = MessageListPage.composeBoxControllerOf(context) != null; - final hasThumbsUpReactionVote = message.reactions - ?.aggregated.any((reactionWithVotes) => - reactionWithVotes.reactionType == ReactionType.unicodeEmoji - && reactionWithVotes.emojiCode == '1f44d' - && reactionWithVotes.userIds.contains(store.selfUserId)) - ?? false; - showDraggableScrollableModalBottomSheet( context: context, builder: (BuildContext _) { return Column(children: [ - if (!hasThumbsUpReactionVote) AddThumbsUpButton(message: message, messageListContext: context), + AddReactionButton(message: message, messageListContext: context), StarButton(message: message, messageListContext: context), ShareButton(message: message, messageListContext: context), if (isComposeBoxOffered) QuoteAndReplyButton( @@ -73,10 +66,8 @@ abstract class MessageActionSheetMenuItemButton extends StatelessWidget { } } -// This button is very temporary, to complete #125 before we have a way to -// choose an arbitrary reaction (#388). So, skipping i18n. -class AddThumbsUpButton extends MessageActionSheetMenuItemButton { - AddThumbsUpButton({ +class AddReactionButton extends MessageActionSheetMenuItemButton { + AddReactionButton({ super.key, required super.message, required super.messageListContext, @@ -86,34 +77,75 @@ class AddThumbsUpButton extends MessageActionSheetMenuItemButton { @override String label(ZulipLocalizations zulipLocalizations) { - return 'React with 👍'; // TODO(i18n) skip translation for now + return zulipLocalizations.actionSheetOptionAddReaction; } @override get onPressed => (BuildContext context) async { + // dismiss action sheet Navigator.of(context).pop(); - String? errorMessage; - try { - await addReaction(PerAccountStoreWidget.of(messageListContext).connection, - messageId: message.id, - reactionType: ReactionType.unicodeEmoji, - emojiCode: '1f44d', - emojiName: '+1', - ); - } catch (e) { - if (!messageListContext.mounted) return; - switch (e) { - case ZulipApiException(): - errorMessage = e.message; - // TODO specific messages for common errors, like network errors - // (support with reusable code) - default: - } - - await showErrorDialog(context: context, - title: 'Adding reaction failed', message: errorMessage); - } + await showModalBottomSheet( + context: context, + clipBehavior: Clip.hardEdge, + builder: (BuildContext emojiPickerContext) { + return Padding( + // apply bottom padding to handle keyboard opening via https://github.com/flutter/flutter/issues/71418 + padding: EdgeInsets.only(bottom: MediaQuery.of(emojiPickerContext).viewInsets.bottom), + child: EmojiPicker( + config: Config( + checkPlatformCompatibility: false, + emojiSet: getEmojiToDisplay(), + // TODO figure out why tests fail without RecentTabBehavior.NONE + categoryViewConfig: const CategoryViewConfig(recentTabBehavior: RecentTabBehavior.NONE)), + onEmojiSelected: (_, Emoji? emoji) async { + if (emoji == null) { + // dismiss emoji picker + Navigator.of(emojiPickerContext).pop(); + return; + } + final emojiName = emoji.name; + final emojiCode = getEmojiCode(emoji); + String? errorMessage; + try { + await addReaction(PerAccountStoreWidget.of(messageListContext).connection, + messageId: message.id, + reactionType: ReactionType.unicodeEmoji, + emojiCode: emojiCode, + emojiName: emojiName, + ); + if (!emojiPickerContext.mounted) return; + Navigator.of(emojiPickerContext).pop(); + } catch (e) { + debugPrint('Error adding reaction: $e'); + if (!emojiPickerContext.mounted) return; + + switch (e) { + case ZulipApiException(): + errorMessage = e.message; + // TODO specific messages for common errors, like network errors + // (support with reusable code) + default: + } + + final zulipLocalizations = ZulipLocalizations.of(messageListContext); + await showErrorDialog(context: emojiPickerContext, + title: zulipLocalizations.errorAddingReactionFailed, message: errorMessage); + } + })); + }); }; + + /// Returns the emoji set to display in the emoji picker. + List getEmojiToDisplay() { + final selfUserId = PerAccountStoreWidget.of(messageListContext).selfUserId; + final selfUserUnicodeReactions = message.reactions + ?.aggregated.where((reactionWithVotes) => + reactionWithVotes.reactionType == ReactionType.unicodeEmoji + && reactionWithVotes.userIds.contains(selfUserId)) + .map((reactionWithVotes) => reactionWithVotes.emojiName); + return selfUserUnicodeReactions != null + ? filterUnicodeEmojiSet(emojiSet, selfUserUnicodeReactions) : emojiSet; + } } class StarButton extends MessageActionSheetMenuItemButton { diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 9f99dda793..e3f93e550d 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,11 +6,15 @@ #include "generated_plugin_registrant.h" +#include #include #include #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) emoji_picker_flutter_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "EmojiPickerFlutterPlugin"); + emoji_picker_flutter_plugin_register_with_registrar(emoji_picker_flutter_registrar); g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 3ff88a36d4..edbe6fb90e 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + emoji_picker_flutter file_selector_linux sqlite3_flutter_libs url_launcher_linux diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index d9af90d6c9..ff196ea113 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,6 +6,7 @@ import FlutterMacOS import Foundation import device_info_plus +import emoji_picker_flutter import file_selector_macos import firebase_core import firebase_messaging @@ -13,11 +14,13 @@ import flutter_local_notifications import package_info_plus import path_provider_foundation import share_plus +import shared_preferences_foundation import sqlite3_flutter_libs import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) @@ -25,6 +28,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 867978a671..2ed219bdec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -289,6 +289,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.15.0" + emoji_picker_flutter: + dependency: "direct main" + description: + name: emoji_picker_flutter + sha256: "871339250c00dc469b7fdaaec84f4e10ffa435e730a4f3f3fd06ebd5289ea5ad" + url: "https://pub.dev" + source: hosted + version: "2.1.0" fake_async: dependency: "direct dev" description: @@ -908,6 +916,62 @@ packages: url: "https://pub.dev" source: hosted version: "3.3.1" + shared_preferences: + dependency: transitive + description: + name: shared_preferences + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" + url: "https://pub.dev" + source: hosted + version: "2.3.5" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" shelf: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 0157f6ea70..370a0c644f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,6 +64,7 @@ dependencies: sqlite3_flutter_libs: ^0.5.13 url_launcher: ^6.1.11 url_launcher_android: ">=6.1.0" + emoji_picker_flutter: ^2.1.0 dev_dependencies: flutter_driver: diff --git a/test/widgets/action_sheet_test.dart b/test/widgets/action_sheet_test.dart index 069e3810cf..9ed3cfd45b 100644 --- a/test/widgets/action_sheet_test.dart +++ b/test/widgets/action_sheet_test.dart @@ -98,11 +98,20 @@ void main() { (store.connection as FakeApiConnection).prepare(httpStatus: 400, json: fakeResponseJson); } - group('AddThumbsUpButton', () { - Future tapButton(WidgetTester tester) async { + group('AddReactionButton', () { + Future tapThumbsUpEmoji(WidgetTester tester) async { await tester.ensureVisible(find.byIcon(Icons.add_reaction_outlined, skipOffstage: false)); await tester.tap(find.byIcon(Icons.add_reaction_outlined)); - await tester.pump(); // [MenuItemButton.onPressed] called in a post-frame callback: flutter/flutter@e4a39fa2e + await tester.pumpAndSettle(); // Wait for emoji picker to appear + await tester.ensureVisible(find.byIcon(Icons.tag_faces)); + await tester.tap(find.byIcon(Icons.tag_faces)); + await tester.dragUntilVisible( + find.text('👍').hitTestable(), + // TODO use a constant imported from emoji_picker_flutter once that's upstreamed. + find.byKey(const Key('emojiScrollView')), + const Offset(0, -300), + ); + await tester.tap(find.text('👍')); } testWidgets('success', (WidgetTester tester) async { @@ -112,7 +121,7 @@ void main() { final connection = store.connection as FakeApiConnection; connection.prepare(json: {}); - await tapButton(tester); + await tapThumbsUpEmoji(tester); await tester.pump(Duration.zero); check(connection.lastRequest).isA() @@ -129,6 +138,7 @@ void main() { final message = eg.streamMessage(); await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message)); final store = await testBinding.globalStore.perAccount(eg.selfAccount.id); + final zulipLocalizations = GlobalLocalizations.zulipLocalizations; final connection = store.connection as FakeApiConnection; @@ -137,11 +147,11 @@ void main() { 'msg': 'Invalid message(s)', 'result': 'error', }); - await tapButton(tester); + await tapThumbsUpEmoji(tester); await tester.pump(Duration.zero); // error arrives; error dialog shows await tester.tap(find.byWidget(checkErrorDialog(tester, - expectedTitle: 'Adding reaction failed', + expectedTitle: zulipLocalizations.errorAddingReactionFailed, expectedMessage: 'Invalid message(s)'))); }); }); diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 0d4b4d65c2..b11a4bcb4e 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,7 @@ #include "generated_plugin_registrant.h" +#include #include #include #include @@ -13,6 +14,8 @@ #include void RegisterPlugins(flutter::PluginRegistry* registry) { + EmojiPickerFlutterPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); FirebaseCorePluginCApiRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 4a4d9be3e7..cb428a7e37 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + emoji_picker_flutter file_selector_windows firebase_core share_plus