From 84088e5a2d759dc108391565f5eaea93de25111a Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Mon, 10 Jun 2024 16:38:13 +0200 Subject: [PATCH] vmui/logs: add markdown support (#6292) Add support for markdown format and emoji for the `_msg` field in the "Group" view. Add markdown rendering toggle. Disabled by default. Value is stored in `localStorage`. --- app/vmui/packages/vmui/package-lock.json | 25 +- app/vmui/packages/vmui/package.json | 4 +- app/vmui/packages/vmui/src/AppLogs.tsx | 1 + .../packages/vmui/src/constants/emojis.ts | 1915 +++++++++++++++++ .../vmui/src/constants/markedPlugins.ts | 5 + .../vmui/src/hooks/useGetMetricsQL.tsx | 2 +- .../src/pages/ExploreLogs/ExploreLogs.tsx | 9 + .../ExploreLogsBody/ExploreLogsBody.tsx | 8 +- .../ExploreLogsHeader/ExploreLogsHeader.tsx | 22 +- .../ExploreLogs/ExploreLogsHeader/style.scss | 4 + .../pages/ExploreLogs/GroupLogs/GroupLogs.tsx | 4 +- .../ExploreLogs/GroupLogs/GroupLogsItem.tsx | 6 +- .../pages/ExploreLogs/GroupLogs/style.scss | 59 + .../PredefinedPanel/PredefinedPanel.tsx | 2 +- app/vmui/packages/vmui/src/utils/storage.ts | 1 + docs/VictoriaLogs/CHANGELOG.md | 2 + 16 files changed, 2048 insertions(+), 21 deletions(-) create mode 100644 app/vmui/packages/vmui/src/constants/emojis.ts create mode 100644 app/vmui/packages/vmui/src/constants/markedPlugins.ts diff --git a/app/vmui/packages/vmui/package-lock.json b/app/vmui/packages/vmui/package-lock.json index 7499f667d..d895e367a 100644 --- a/app/vmui/packages/vmui/package-lock.json +++ b/app/vmui/packages/vmui/package-lock.json @@ -11,7 +11,6 @@ "@types/lodash.debounce": "^4.0.6", "@types/lodash.get": "^4.4.6", "@types/lodash.throttle": "^4.1.6", - "@types/marked": "^5.0.0", "@types/node": "^20.4.0", "@types/qs": "^6.9.7", "@types/react-input-mask": "^3.0.2", @@ -22,7 +21,8 @@ "lodash.debounce": "^4.0.8", "lodash.get": "^4.4.2", "lodash.throttle": "^4.1.1", - "marked": "^5.1.0", + "marked": "^12.0.2", + "marked-emoji": "^1.4.0", "preact": "^10.7.1", "qs": "^6.10.3", "react-input-mask": "^2.0.4", @@ -4272,11 +4272,6 @@ "@types/lodash": "*" } }, - "node_modules/@types/marked": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-5.0.2.tgz", - "integrity": "sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==" - }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -13598,14 +13593,22 @@ } }, "node_modules/marked": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 16" + "node": ">= 18" + } + }, + "node_modules/marked-emoji": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/marked-emoji/-/marked-emoji-1.4.0.tgz", + "integrity": "sha512-/2TJfGzXpiBBq+X3akHHbTrAjZPJDwR+7FV6SyQLECnQEfaoVkrpKZJzHhPTAq3Sl/A1l2frMT0u6b38VBBlNg==", + "peerDependencies": { + "marked": ">=4 <13" } }, "node_modules/mdn-data": { diff --git a/app/vmui/packages/vmui/package.json b/app/vmui/packages/vmui/package.json index 6682b1052..5af4c67b6 100644 --- a/app/vmui/packages/vmui/package.json +++ b/app/vmui/packages/vmui/package.json @@ -7,7 +7,6 @@ "@types/lodash.debounce": "^4.0.6", "@types/lodash.get": "^4.4.6", "@types/lodash.throttle": "^4.1.6", - "@types/marked": "^5.0.0", "@types/node": "^20.4.0", "@types/qs": "^6.9.7", "@types/react-input-mask": "^3.0.2", @@ -18,7 +17,8 @@ "lodash.debounce": "^4.0.8", "lodash.get": "^4.4.2", "lodash.throttle": "^4.1.1", - "marked": "^5.1.0", + "marked": "^12.0.2", + "marked-emoji": "^1.4.0", "preact": "^10.7.1", "qs": "^6.10.3", "react-input-mask": "^2.0.4", diff --git a/app/vmui/packages/vmui/src/AppLogs.tsx b/app/vmui/packages/vmui/src/AppLogs.tsx index 698abf94e..d041679e0 100644 --- a/app/vmui/packages/vmui/src/AppLogs.tsx +++ b/app/vmui/packages/vmui/src/AppLogs.tsx @@ -4,6 +4,7 @@ import AppContextProvider from "./contexts/AppContextProvider"; import ThemeProvider from "./components/Main/ThemeProvider/ThemeProvider"; import ExploreLogs from "./pages/ExploreLogs/ExploreLogs"; import LogsLayout from "./layouts/LogsLayout/LogsLayout"; +import "./constants/markedPlugins"; const AppLogs: FC = () => { const [loadedTheme, setLoadedTheme] = useState(false); diff --git a/app/vmui/packages/vmui/src/constants/emojis.ts b/app/vmui/packages/vmui/src/constants/emojis.ts new file mode 100644 index 000000000..9f189d734 --- /dev/null +++ b/app/vmui/packages/vmui/src/constants/emojis.ts @@ -0,0 +1,1915 @@ +export default { + "100": "๐Ÿ’ฏ", + "1234": "๐Ÿ”ข", + "grinning": "๐Ÿ˜€", + "smiley": "๐Ÿ˜ƒ", + "smile": "๐Ÿ˜„", + "grin": "๐Ÿ˜", + "laughing": "๐Ÿ˜†", + "satisfied": "๐Ÿ˜†", + "sweat_smile": "๐Ÿ˜…", + "rofl": "๐Ÿคฃ", + "joy": "๐Ÿ˜‚", + "slightly_smiling_face": "๐Ÿ™‚", + "upside_down_face": "๐Ÿ™ƒ", + "melting_face": "๐Ÿซ ", + "wink": "๐Ÿ˜‰", + "blush": "๐Ÿ˜Š", + "innocent": "๐Ÿ˜‡", + "smiling_face_with_three_hearts": "๐Ÿฅฐ", + "heart_eyes": "๐Ÿ˜", + "star_struck": "๐Ÿคฉ", + "kissing_heart": "๐Ÿ˜˜", + "kissing": "๐Ÿ˜—", + "relaxed": "โ˜บ๏ธ", + "kissing_closed_eyes": "๐Ÿ˜š", + "kissing_smiling_eyes": "๐Ÿ˜™", + "smiling_face_with_tear": "๐Ÿฅฒ", + "yum": "๐Ÿ˜‹", + "stuck_out_tongue": "๐Ÿ˜›", + "stuck_out_tongue_winking_eye": "๐Ÿ˜œ", + "zany_face": "๐Ÿคช", + "stuck_out_tongue_closed_eyes": "๐Ÿ˜", + "money_mouth_face": "๐Ÿค‘", + "hugs": "๐Ÿค—", + "hand_over_mouth": "๐Ÿคญ", + "face_with_open_eyes_and_hand_over_mouth": "๐Ÿซข", + "face_with_peeking_eye": "๐Ÿซฃ", + "shushing_face": "๐Ÿคซ", + "thinking": "๐Ÿค”", + "saluting_face": "๐Ÿซก", + "zipper_mouth_face": "๐Ÿค", + "raised_eyebrow": "๐Ÿคจ", + "neutral_face": "๐Ÿ˜", + "expressionless": "๐Ÿ˜‘", + "no_mouth": "๐Ÿ˜ถ", + "dotted_line_face": "๐Ÿซฅ", + "face_in_clouds": "๐Ÿ˜ถโ€๐ŸŒซ๏ธ", + "smirk": "๐Ÿ˜", + "unamused": "๐Ÿ˜’", + "roll_eyes": "๐Ÿ™„", + "grimacing": "๐Ÿ˜ฌ", + "face_exhaling": "๐Ÿ˜ฎโ€๐Ÿ’จ", + "lying_face": "๐Ÿคฅ", + "shaking_face": "๐Ÿซจ", + "relieved": "๐Ÿ˜Œ", + "pensive": "๐Ÿ˜”", + "sleepy": "๐Ÿ˜ช", + "drooling_face": "๐Ÿคค", + "sleeping": "๐Ÿ˜ด", + "mask": "๐Ÿ˜ท", + "face_with_thermometer": "๐Ÿค’", + "face_with_head_bandage": "๐Ÿค•", + "nauseated_face": "๐Ÿคข", + "vomiting_face": "๐Ÿคฎ", + "sneezing_face": "๐Ÿคง", + "hot_face": "๐Ÿฅต", + "cold_face": "๐Ÿฅถ", + "woozy_face": "๐Ÿฅด", + "dizzy_face": "๐Ÿ˜ต", + "face_with_spiral_eyes": "๐Ÿ˜ตโ€๐Ÿ’ซ", + "exploding_head": "๐Ÿคฏ", + "cowboy_hat_face": "๐Ÿค ", + "partying_face": "๐Ÿฅณ", + "disguised_face": "๐Ÿฅธ", + "sunglasses": "๐Ÿ˜Ž", + "nerd_face": "๐Ÿค“", + "monocle_face": "๐Ÿง", + "confused": "๐Ÿ˜•", + "face_with_diagonal_mouth": "๐Ÿซค", + "worried": "๐Ÿ˜Ÿ", + "slightly_frowning_face": "๐Ÿ™", + "frowning_face": "โ˜น๏ธ", + "open_mouth": "๐Ÿ˜ฎ", + "hushed": "๐Ÿ˜ฏ", + "astonished": "๐Ÿ˜ฒ", + "flushed": "๐Ÿ˜ณ", + "pleading_face": "๐Ÿฅบ", + "face_holding_back_tears": "๐Ÿฅน", + "frowning": "๐Ÿ˜ฆ", + "anguished": "๐Ÿ˜ง", + "fearful": "๐Ÿ˜จ", + "cold_sweat": "๐Ÿ˜ฐ", + "disappointed_relieved": "๐Ÿ˜ฅ", + "cry": "๐Ÿ˜ข", + "sob": "๐Ÿ˜ญ", + "scream": "๐Ÿ˜ฑ", + "confounded": "๐Ÿ˜–", + "persevere": "๐Ÿ˜ฃ", + "disappointed": "๐Ÿ˜ž", + "sweat": "๐Ÿ˜“", + "weary": "๐Ÿ˜ฉ", + "tired_face": "๐Ÿ˜ซ", + "yawning_face": "๐Ÿฅฑ", + "triumph": "๐Ÿ˜ค", + "rage": "๐Ÿ˜ก", + "pout": "๐Ÿ˜ก", + "angry": "๐Ÿ˜ ", + "cursing_face": "๐Ÿคฌ", + "smiling_imp": "๐Ÿ˜ˆ", + "imp": "๐Ÿ‘ฟ", + "skull": "๐Ÿ’€", + "skull_and_crossbones": "โ˜ ๏ธ", + "hankey": "๐Ÿ’ฉ", + "poop": "๐Ÿ’ฉ", + "shit": "๐Ÿ’ฉ", + "clown_face": "๐Ÿคก", + "japanese_ogre": "๐Ÿ‘น", + "japanese_goblin": "๐Ÿ‘บ", + "ghost": "๐Ÿ‘ป", + "alien": "๐Ÿ‘ฝ", + "space_invader": "๐Ÿ‘พ", + "robot": "๐Ÿค–", + "smiley_cat": "๐Ÿ˜บ", + "smile_cat": "๐Ÿ˜ธ", + "joy_cat": "๐Ÿ˜น", + "heart_eyes_cat": "๐Ÿ˜ป", + "smirk_cat": "๐Ÿ˜ผ", + "kissing_cat": "๐Ÿ˜ฝ", + "scream_cat": "๐Ÿ™€", + "crying_cat_face": "๐Ÿ˜ฟ", + "pouting_cat": "๐Ÿ˜พ", + "see_no_evil": "๐Ÿ™ˆ", + "hear_no_evil": "๐Ÿ™‰", + "speak_no_evil": "๐Ÿ™Š", + "love_letter": "๐Ÿ’Œ", + "cupid": "๐Ÿ’˜", + "gift_heart": "๐Ÿ’", + "sparkling_heart": "๐Ÿ’–", + "heartpulse": "๐Ÿ’—", + "heartbeat": "๐Ÿ’“", + "revolving_hearts": "๐Ÿ’ž", + "two_hearts": "๐Ÿ’•", + "heart_decoration": "๐Ÿ’Ÿ", + "heavy_heart_exclamation": "โฃ๏ธ", + "broken_heart": "๐Ÿ’”", + "heart_on_fire": "โค๏ธโ€๐Ÿ”ฅ", + "mending_heart": "โค๏ธโ€๐Ÿฉน", + "heart": "โค๏ธ", + "pink_heart": "๐Ÿฉท", + "orange_heart": "๐Ÿงก", + "yellow_heart": "๐Ÿ’›", + "green_heart": "๐Ÿ’š", + "blue_heart": "๐Ÿ’™", + "light_blue_heart": "๐Ÿฉต", + "purple_heart": "๐Ÿ’œ", + "brown_heart": "๐ŸคŽ", + "black_heart": "๐Ÿ–ค", + "grey_heart": "๐Ÿฉถ", + "white_heart": "๐Ÿค", + "kiss": "๐Ÿ’‹", + "anger": "๐Ÿ’ข", + "boom": "๐Ÿ’ฅ", + "collision": "๐Ÿ’ฅ", + "dizzy": "๐Ÿ’ซ", + "sweat_drops": "๐Ÿ’ฆ", + "dash": "๐Ÿ’จ", + "hole": "๐Ÿ•ณ๏ธ", + "speech_balloon": "๐Ÿ’ฌ", + "eye_speech_bubble": "๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ", + "left_speech_bubble": "๐Ÿ—จ๏ธ", + "right_anger_bubble": "๐Ÿ—ฏ๏ธ", + "thought_balloon": "๐Ÿ’ญ", + "zzz": "๐Ÿ’ค", + "wave": "๐Ÿ‘‹", + "raised_back_of_hand": "๐Ÿคš", + "raised_hand_with_fingers_splayed": "๐Ÿ–๏ธ", + "hand": "โœ‹", + "raised_hand": "โœ‹", + "vulcan_salute": "๐Ÿ––", + "rightwards_hand": "๐Ÿซฑ", + "leftwards_hand": "๐Ÿซฒ", + "palm_down_hand": "๐Ÿซณ", + "palm_up_hand": "๐Ÿซด", + "leftwards_pushing_hand": "๐Ÿซท", + "rightwards_pushing_hand": "๐Ÿซธ", + "ok_hand": "๐Ÿ‘Œ", + "pinched_fingers": "๐ŸคŒ", + "pinching_hand": "๐Ÿค", + "v": "โœŒ๏ธ", + "crossed_fingers": "๐Ÿคž", + "hand_with_index_finger_and_thumb_crossed": "๐Ÿซฐ", + "love_you_gesture": "๐ŸคŸ", + "metal": "๐Ÿค˜", + "call_me_hand": "๐Ÿค™", + "point_left": "๐Ÿ‘ˆ", + "point_right": "๐Ÿ‘‰", + "point_up_2": "๐Ÿ‘†", + "middle_finger": "๐Ÿ–•", + "fu": "๐Ÿ–•", + "point_down": "๐Ÿ‘‡", + "point_up": "โ˜๏ธ", + "index_pointing_at_the_viewer": "๐Ÿซต", + "+1": "๐Ÿ‘", + "thumbsup": "๐Ÿ‘", + "-1": "๐Ÿ‘Ž", + "thumbsdown": "๐Ÿ‘Ž", + "fist_raised": "โœŠ", + "fist": "โœŠ", + "fist_oncoming": "๐Ÿ‘Š", + "facepunch": "๐Ÿ‘Š", + "punch": "๐Ÿ‘Š", + "fist_left": "๐Ÿค›", + "fist_right": "๐Ÿคœ", + "clap": "๐Ÿ‘", + "raised_hands": "๐Ÿ™Œ", + "heart_hands": "๐Ÿซถ", + "open_hands": "๐Ÿ‘", + "palms_up_together": "๐Ÿคฒ", + "handshake": "๐Ÿค", + "pray": "๐Ÿ™", + "writing_hand": "โœ๏ธ", + "nail_care": "๐Ÿ’…", + "selfie": "๐Ÿคณ", + "muscle": "๐Ÿ’ช", + "mechanical_arm": "๐Ÿฆพ", + "mechanical_leg": "๐Ÿฆฟ", + "leg": "๐Ÿฆต", + "foot": "๐Ÿฆถ", + "ear": "๐Ÿ‘‚", + "ear_with_hearing_aid": "๐Ÿฆป", + "nose": "๐Ÿ‘ƒ", + "brain": "๐Ÿง ", + "anatomical_heart": "๐Ÿซ€", + "lungs": "๐Ÿซ", + "tooth": "๐Ÿฆท", + "bone": "๐Ÿฆด", + "eyes": "๐Ÿ‘€", + "eye": "๐Ÿ‘๏ธ", + "tongue": "๐Ÿ‘…", + "lips": "๐Ÿ‘„", + "biting_lip": "๐Ÿซฆ", + "baby": "๐Ÿ‘ถ", + "child": "๐Ÿง’", + "boy": "๐Ÿ‘ฆ", + "girl": "๐Ÿ‘ง", + "adult": "๐Ÿง‘", + "blond_haired_person": "๐Ÿ‘ฑ", + "man": "๐Ÿ‘จ", + "bearded_person": "๐Ÿง”", + "man_beard": "๐Ÿง”โ€โ™‚๏ธ", + "woman_beard": "๐Ÿง”โ€โ™€๏ธ", + "red_haired_man": "๐Ÿ‘จโ€๐Ÿฆฐ", + "curly_haired_man": "๐Ÿ‘จโ€๐Ÿฆฑ", + "white_haired_man": "๐Ÿ‘จโ€๐Ÿฆณ", + "bald_man": "๐Ÿ‘จโ€๐Ÿฆฒ", + "woman": "๐Ÿ‘ฉ", + "red_haired_woman": "๐Ÿ‘ฉโ€๐Ÿฆฐ", + "person_red_hair": "๐Ÿง‘โ€๐Ÿฆฐ", + "curly_haired_woman": "๐Ÿ‘ฉโ€๐Ÿฆฑ", + "person_curly_hair": "๐Ÿง‘โ€๐Ÿฆฑ", + "white_haired_woman": "๐Ÿ‘ฉโ€๐Ÿฆณ", + "person_white_hair": "๐Ÿง‘โ€๐Ÿฆณ", + "bald_woman": "๐Ÿ‘ฉโ€๐Ÿฆฒ", + "person_bald": "๐Ÿง‘โ€๐Ÿฆฒ", + "blond_haired_woman": "๐Ÿ‘ฑโ€โ™€๏ธ", + "blonde_woman": "๐Ÿ‘ฑโ€โ™€๏ธ", + "blond_haired_man": "๐Ÿ‘ฑโ€โ™‚๏ธ", + "older_adult": "๐Ÿง“", + "older_man": "๐Ÿ‘ด", + "older_woman": "๐Ÿ‘ต", + "frowning_person": "๐Ÿ™", + "frowning_man": "๐Ÿ™โ€โ™‚๏ธ", + "frowning_woman": "๐Ÿ™โ€โ™€๏ธ", + "pouting_face": "๐Ÿ™Ž", + "pouting_man": "๐Ÿ™Žโ€โ™‚๏ธ", + "pouting_woman": "๐Ÿ™Žโ€โ™€๏ธ", + "no_good": "๐Ÿ™…", + "no_good_man": "๐Ÿ™…โ€โ™‚๏ธ", + "ng_man": "๐Ÿ™…โ€โ™‚๏ธ", + "no_good_woman": "๐Ÿ™…โ€โ™€๏ธ", + "ng_woman": "๐Ÿ™…โ€โ™€๏ธ", + "ok_person": "๐Ÿ™†", + "ok_man": "๐Ÿ™†โ€โ™‚๏ธ", + "ok_woman": "๐Ÿ™†โ€โ™€๏ธ", + "tipping_hand_person": "๐Ÿ’", + "information_desk_person": "๐Ÿ’", + "tipping_hand_man": "๐Ÿ’โ€โ™‚๏ธ", + "sassy_man": "๐Ÿ’โ€โ™‚๏ธ", + "tipping_hand_woman": "๐Ÿ’โ€โ™€๏ธ", + "sassy_woman": "๐Ÿ’โ€โ™€๏ธ", + "raising_hand": "๐Ÿ™‹", + "raising_hand_man": "๐Ÿ™‹โ€โ™‚๏ธ", + "raising_hand_woman": "๐Ÿ™‹โ€โ™€๏ธ", + "deaf_person": "๐Ÿง", + "deaf_man": "๐Ÿงโ€โ™‚๏ธ", + "deaf_woman": "๐Ÿงโ€โ™€๏ธ", + "bow": "๐Ÿ™‡", + "bowing_man": "๐Ÿ™‡โ€โ™‚๏ธ", + "bowing_woman": "๐Ÿ™‡โ€โ™€๏ธ", + "facepalm": "๐Ÿคฆ", + "man_facepalming": "๐Ÿคฆโ€โ™‚๏ธ", + "woman_facepalming": "๐Ÿคฆโ€โ™€๏ธ", + "shrug": "๐Ÿคท", + "man_shrugging": "๐Ÿคทโ€โ™‚๏ธ", + "woman_shrugging": "๐Ÿคทโ€โ™€๏ธ", + "health_worker": "๐Ÿง‘โ€โš•๏ธ", + "man_health_worker": "๐Ÿ‘จโ€โš•๏ธ", + "woman_health_worker": "๐Ÿ‘ฉโ€โš•๏ธ", + "student": "๐Ÿง‘โ€๐ŸŽ“", + "man_student": "๐Ÿ‘จโ€๐ŸŽ“", + "woman_student": "๐Ÿ‘ฉโ€๐ŸŽ“", + "teacher": "๐Ÿง‘โ€๐Ÿซ", + "man_teacher": "๐Ÿ‘จโ€๐Ÿซ", + "woman_teacher": "๐Ÿ‘ฉโ€๐Ÿซ", + "judge": "๐Ÿง‘โ€โš–๏ธ", + "man_judge": "๐Ÿ‘จโ€โš–๏ธ", + "woman_judge": "๐Ÿ‘ฉโ€โš–๏ธ", + "farmer": "๐Ÿง‘โ€๐ŸŒพ", + "man_farmer": "๐Ÿ‘จโ€๐ŸŒพ", + "woman_farmer": "๐Ÿ‘ฉโ€๐ŸŒพ", + "cook": "๐Ÿง‘โ€๐Ÿณ", + "man_cook": "๐Ÿ‘จโ€๐Ÿณ", + "woman_cook": "๐Ÿ‘ฉโ€๐Ÿณ", + "mechanic": "๐Ÿง‘โ€๐Ÿ”ง", + "man_mechanic": "๐Ÿ‘จโ€๐Ÿ”ง", + "woman_mechanic": "๐Ÿ‘ฉโ€๐Ÿ”ง", + "factory_worker": "๐Ÿง‘โ€๐Ÿญ", + "man_factory_worker": "๐Ÿ‘จโ€๐Ÿญ", + "woman_factory_worker": "๐Ÿ‘ฉโ€๐Ÿญ", + "office_worker": "๐Ÿง‘โ€๐Ÿ’ผ", + "man_office_worker": "๐Ÿ‘จโ€๐Ÿ’ผ", + "woman_office_worker": "๐Ÿ‘ฉโ€๐Ÿ’ผ", + "scientist": "๐Ÿง‘โ€๐Ÿ”ฌ", + "man_scientist": "๐Ÿ‘จโ€๐Ÿ”ฌ", + "woman_scientist": "๐Ÿ‘ฉโ€๐Ÿ”ฌ", + "technologist": "๐Ÿง‘โ€๐Ÿ’ป", + "man_technologist": "๐Ÿ‘จโ€๐Ÿ’ป", + "woman_technologist": "๐Ÿ‘ฉโ€๐Ÿ’ป", + "singer": "๐Ÿง‘โ€๐ŸŽค", + "man_singer": "๐Ÿ‘จโ€๐ŸŽค", + "woman_singer": "๐Ÿ‘ฉโ€๐ŸŽค", + "artist": "๐Ÿง‘โ€๐ŸŽจ", + "man_artist": "๐Ÿ‘จโ€๐ŸŽจ", + "woman_artist": "๐Ÿ‘ฉโ€๐ŸŽจ", + "pilot": "๐Ÿง‘โ€โœˆ๏ธ", + "man_pilot": "๐Ÿ‘จโ€โœˆ๏ธ", + "woman_pilot": "๐Ÿ‘ฉโ€โœˆ๏ธ", + "astronaut": "๐Ÿง‘โ€๐Ÿš€", + "man_astronaut": "๐Ÿ‘จโ€๐Ÿš€", + "woman_astronaut": "๐Ÿ‘ฉโ€๐Ÿš€", + "firefighter": "๐Ÿง‘โ€๐Ÿš’", + "man_firefighter": "๐Ÿ‘จโ€๐Ÿš’", + "woman_firefighter": "๐Ÿ‘ฉโ€๐Ÿš’", + "police_officer": "๐Ÿ‘ฎ", + "cop": "๐Ÿ‘ฎ", + "policeman": "๐Ÿ‘ฎโ€โ™‚๏ธ", + "policewoman": "๐Ÿ‘ฎโ€โ™€๏ธ", + "detective": "๐Ÿ•ต๏ธ", + "male_detective": "๐Ÿ•ต๏ธโ€โ™‚๏ธ", + "female_detective": "๐Ÿ•ต๏ธโ€โ™€๏ธ", + "guard": "๐Ÿ’‚", + "guardsman": "๐Ÿ’‚โ€โ™‚๏ธ", + "guardswoman": "๐Ÿ’‚โ€โ™€๏ธ", + "ninja": "๐Ÿฅท", + "construction_worker": "๐Ÿ‘ท", + "construction_worker_man": "๐Ÿ‘ทโ€โ™‚๏ธ", + "construction_worker_woman": "๐Ÿ‘ทโ€โ™€๏ธ", + "person_with_crown": "๐Ÿซ…", + "prince": "๐Ÿคด", + "princess": "๐Ÿ‘ธ", + "person_with_turban": "๐Ÿ‘ณ", + "man_with_turban": "๐Ÿ‘ณโ€โ™‚๏ธ", + "woman_with_turban": "๐Ÿ‘ณโ€โ™€๏ธ", + "man_with_gua_pi_mao": "๐Ÿ‘ฒ", + "woman_with_headscarf": "๐Ÿง•", + "person_in_tuxedo": "๐Ÿคต", + "man_in_tuxedo": "๐Ÿคตโ€โ™‚๏ธ", + "woman_in_tuxedo": "๐Ÿคตโ€โ™€๏ธ", + "person_with_veil": "๐Ÿ‘ฐ", + "man_with_veil": "๐Ÿ‘ฐโ€โ™‚๏ธ", + "woman_with_veil": "๐Ÿ‘ฐโ€โ™€๏ธ", + "bride_with_veil": "๐Ÿ‘ฐโ€โ™€๏ธ", + "pregnant_woman": "๐Ÿคฐ", + "pregnant_man": "๐Ÿซƒ", + "pregnant_person": "๐Ÿซ„", + "breast_feeding": "๐Ÿคฑ", + "woman_feeding_baby": "๐Ÿ‘ฉโ€๐Ÿผ", + "man_feeding_baby": "๐Ÿ‘จโ€๐Ÿผ", + "person_feeding_baby": "๐Ÿง‘โ€๐Ÿผ", + "angel": "๐Ÿ‘ผ", + "santa": "๐ŸŽ…", + "mrs_claus": "๐Ÿคถ", + "mx_claus": "๐Ÿง‘โ€๐ŸŽ„", + "superhero": "๐Ÿฆธ", + "superhero_man": "๐Ÿฆธโ€โ™‚๏ธ", + "superhero_woman": "๐Ÿฆธโ€โ™€๏ธ", + "supervillain": "๐Ÿฆน", + "supervillain_man": "๐Ÿฆนโ€โ™‚๏ธ", + "supervillain_woman": "๐Ÿฆนโ€โ™€๏ธ", + "mage": "๐Ÿง™", + "mage_man": "๐Ÿง™โ€โ™‚๏ธ", + "mage_woman": "๐Ÿง™โ€โ™€๏ธ", + "fairy": "๐Ÿงš", + "fairy_man": "๐Ÿงšโ€โ™‚๏ธ", + "fairy_woman": "๐Ÿงšโ€โ™€๏ธ", + "vampire": "๐Ÿง›", + "vampire_man": "๐Ÿง›โ€โ™‚๏ธ", + "vampire_woman": "๐Ÿง›โ€โ™€๏ธ", + "merperson": "๐Ÿงœ", + "merman": "๐Ÿงœโ€โ™‚๏ธ", + "mermaid": "๐Ÿงœโ€โ™€๏ธ", + "elf": "๐Ÿง", + "elf_man": "๐Ÿงโ€โ™‚๏ธ", + "elf_woman": "๐Ÿงโ€โ™€๏ธ", + "genie": "๐Ÿงž", + "genie_man": "๐Ÿงžโ€โ™‚๏ธ", + "genie_woman": "๐Ÿงžโ€โ™€๏ธ", + "zombie": "๐ŸงŸ", + "zombie_man": "๐ŸงŸโ€โ™‚๏ธ", + "zombie_woman": "๐ŸงŸโ€โ™€๏ธ", + "troll": "๐ŸงŒ", + "massage": "๐Ÿ’†", + "massage_man": "๐Ÿ’†โ€โ™‚๏ธ", + "massage_woman": "๐Ÿ’†โ€โ™€๏ธ", + "haircut": "๐Ÿ’‡", + "haircut_man": "๐Ÿ’‡โ€โ™‚๏ธ", + "haircut_woman": "๐Ÿ’‡โ€โ™€๏ธ", + "walking": "๐Ÿšถ", + "walking_man": "๐Ÿšถโ€โ™‚๏ธ", + "walking_woman": "๐Ÿšถโ€โ™€๏ธ", + "standing_person": "๐Ÿง", + "standing_man": "๐Ÿงโ€โ™‚๏ธ", + "standing_woman": "๐Ÿงโ€โ™€๏ธ", + "kneeling_person": "๐ŸงŽ", + "kneeling_man": "๐ŸงŽโ€โ™‚๏ธ", + "kneeling_woman": "๐ŸงŽโ€โ™€๏ธ", + "person_with_probing_cane": "๐Ÿง‘โ€๐Ÿฆฏ", + "man_with_probing_cane": "๐Ÿ‘จโ€๐Ÿฆฏ", + "woman_with_probing_cane": "๐Ÿ‘ฉโ€๐Ÿฆฏ", + "person_in_motorized_wheelchair": "๐Ÿง‘โ€๐Ÿฆผ", + "man_in_motorized_wheelchair": "๐Ÿ‘จโ€๐Ÿฆผ", + "woman_in_motorized_wheelchair": "๐Ÿ‘ฉโ€๐Ÿฆผ", + "person_in_manual_wheelchair": "๐Ÿง‘โ€๐Ÿฆฝ", + "man_in_manual_wheelchair": "๐Ÿ‘จโ€๐Ÿฆฝ", + "woman_in_manual_wheelchair": "๐Ÿ‘ฉโ€๐Ÿฆฝ", + "runner": "๐Ÿƒ", + "running": "๐Ÿƒ", + "running_man": "๐Ÿƒโ€โ™‚๏ธ", + "running_woman": "๐Ÿƒโ€โ™€๏ธ", + "woman_dancing": "๐Ÿ’ƒ", + "dancer": "๐Ÿ’ƒ", + "man_dancing": "๐Ÿ•บ", + "business_suit_levitating": "๐Ÿ•ด๏ธ", + "dancers": "๐Ÿ‘ฏ", + "dancing_men": "๐Ÿ‘ฏโ€โ™‚๏ธ", + "dancing_women": "๐Ÿ‘ฏโ€โ™€๏ธ", + "sauna_person": "๐Ÿง–", + "sauna_man": "๐Ÿง–โ€โ™‚๏ธ", + "sauna_woman": "๐Ÿง–โ€โ™€๏ธ", + "climbing": "๐Ÿง—", + "climbing_man": "๐Ÿง—โ€โ™‚๏ธ", + "climbing_woman": "๐Ÿง—โ€โ™€๏ธ", + "person_fencing": "๐Ÿคบ", + "horse_racing": "๐Ÿ‡", + "skier": "โ›ท๏ธ", + "snowboarder": "๐Ÿ‚", + "golfing": "๐ŸŒ๏ธ", + "golfing_man": "๐ŸŒ๏ธโ€โ™‚๏ธ", + "golfing_woman": "๐ŸŒ๏ธโ€โ™€๏ธ", + "surfer": "๐Ÿ„", + "surfing_man": "๐Ÿ„โ€โ™‚๏ธ", + "surfing_woman": "๐Ÿ„โ€โ™€๏ธ", + "rowboat": "๐Ÿšฃ", + "rowing_man": "๐Ÿšฃโ€โ™‚๏ธ", + "rowing_woman": "๐Ÿšฃโ€โ™€๏ธ", + "swimmer": "๐ŸŠ", + "swimming_man": "๐ŸŠโ€โ™‚๏ธ", + "swimming_woman": "๐ŸŠโ€โ™€๏ธ", + "bouncing_ball_person": "โ›น๏ธ", + "bouncing_ball_man": "โ›น๏ธโ€โ™‚๏ธ", + "basketball_man": "โ›น๏ธโ€โ™‚๏ธ", + "bouncing_ball_woman": "โ›น๏ธโ€โ™€๏ธ", + "basketball_woman": "โ›น๏ธโ€โ™€๏ธ", + "weight_lifting": "๐Ÿ‹๏ธ", + "weight_lifting_man": "๐Ÿ‹๏ธโ€โ™‚๏ธ", + "weight_lifting_woman": "๐Ÿ‹๏ธโ€โ™€๏ธ", + "bicyclist": "๐Ÿšด", + "biking_man": "๐Ÿšดโ€โ™‚๏ธ", + "biking_woman": "๐Ÿšดโ€โ™€๏ธ", + "mountain_bicyclist": "๐Ÿšต", + "mountain_biking_man": "๐Ÿšตโ€โ™‚๏ธ", + "mountain_biking_woman": "๐Ÿšตโ€โ™€๏ธ", + "cartwheeling": "๐Ÿคธ", + "man_cartwheeling": "๐Ÿคธโ€โ™‚๏ธ", + "woman_cartwheeling": "๐Ÿคธโ€โ™€๏ธ", + "wrestling": "๐Ÿคผ", + "men_wrestling": "๐Ÿคผโ€โ™‚๏ธ", + "women_wrestling": "๐Ÿคผโ€โ™€๏ธ", + "water_polo": "๐Ÿคฝ", + "man_playing_water_polo": "๐Ÿคฝโ€โ™‚๏ธ", + "woman_playing_water_polo": "๐Ÿคฝโ€โ™€๏ธ", + "handball_person": "๐Ÿคพ", + "man_playing_handball": "๐Ÿคพโ€โ™‚๏ธ", + "woman_playing_handball": "๐Ÿคพโ€โ™€๏ธ", + "juggling_person": "๐Ÿคน", + "man_juggling": "๐Ÿคนโ€โ™‚๏ธ", + "woman_juggling": "๐Ÿคนโ€โ™€๏ธ", + "lotus_position": "๐Ÿง˜", + "lotus_position_man": "๐Ÿง˜โ€โ™‚๏ธ", + "lotus_position_woman": "๐Ÿง˜โ€โ™€๏ธ", + "bath": "๐Ÿ›€", + "sleeping_bed": "๐Ÿ›Œ", + "people_holding_hands": "๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘", + "two_women_holding_hands": "๐Ÿ‘ญ", + "couple": "๐Ÿ‘ซ", + "two_men_holding_hands": "๐Ÿ‘ฌ", + "couplekiss": "๐Ÿ’", + "couplekiss_man_woman": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + "couplekiss_man_man": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + "couplekiss_woman_woman": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + "couple_with_heart": "๐Ÿ’‘", + "couple_with_heart_woman_man": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ", + "couple_with_heart_man_man": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", + "couple_with_heart_woman_woman": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + "family": "๐Ÿ‘ช", + "family_man_woman_boy": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "family_man_woman_girl": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "family_man_woman_girl_boy": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_man_woman_boy_boy": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_man_woman_girl_girl": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_man_man_boy": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ", + "family_man_man_girl": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง", + "family_man_man_girl_boy": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_man_man_boy_boy": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_man_man_girl_girl": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_woman_woman_boy": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "family_woman_woman_girl": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "family_woman_woman_girl_boy": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_woman_woman_boy_boy": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_woman_woman_girl_girl": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_man_boy": "๐Ÿ‘จโ€๐Ÿ‘ฆ", + "family_man_boy_boy": "๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_man_girl": "๐Ÿ‘จโ€๐Ÿ‘ง", + "family_man_girl_boy": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_man_girl_girl": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "family_woman_boy": "๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "family_woman_boy_boy": "๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "family_woman_girl": "๐Ÿ‘ฉโ€๐Ÿ‘ง", + "family_woman_girl_boy": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "family_woman_girl_girl": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "speaking_head": "๐Ÿ—ฃ๏ธ", + "bust_in_silhouette": "๐Ÿ‘ค", + "busts_in_silhouette": "๐Ÿ‘ฅ", + "people_hugging": "๐Ÿซ‚", + "footprints": "๐Ÿ‘ฃ", + "monkey_face": "๐Ÿต", + "monkey": "๐Ÿ’", + "gorilla": "๐Ÿฆ", + "orangutan": "๐Ÿฆง", + "dog": "๐Ÿถ", + "dog2": "๐Ÿ•", + "guide_dog": "๐Ÿฆฎ", + "service_dog": "๐Ÿ•โ€๐Ÿฆบ", + "poodle": "๐Ÿฉ", + "wolf": "๐Ÿบ", + "fox_face": "๐ŸฆŠ", + "raccoon": "๐Ÿฆ", + "cat": "๐Ÿฑ", + "cat2": "๐Ÿˆ", + "black_cat": "๐Ÿˆโ€โฌ›", + "lion": "๐Ÿฆ", + "tiger": "๐Ÿฏ", + "tiger2": "๐Ÿ…", + "leopard": "๐Ÿ†", + "horse": "๐Ÿด", + "moose": "๐ŸซŽ", + "donkey": "๐Ÿซ", + "racehorse": "๐ŸŽ", + "unicorn": "๐Ÿฆ„", + "zebra": "๐Ÿฆ“", + "deer": "๐ŸฆŒ", + "bison": "๐Ÿฆฌ", + "cow": "๐Ÿฎ", + "ox": "๐Ÿ‚", + "water_buffalo": "๐Ÿƒ", + "cow2": "๐Ÿ„", + "pig": "๐Ÿท", + "pig2": "๐Ÿ–", + "boar": "๐Ÿ—", + "pig_nose": "๐Ÿฝ", + "ram": "๐Ÿ", + "sheep": "๐Ÿ‘", + "goat": "๐Ÿ", + "dromedary_camel": "๐Ÿช", + "camel": "๐Ÿซ", + "llama": "๐Ÿฆ™", + "giraffe": "๐Ÿฆ’", + "elephant": "๐Ÿ˜", + "mammoth": "๐Ÿฆฃ", + "rhinoceros": "๐Ÿฆ", + "hippopotamus": "๐Ÿฆ›", + "mouse": "๐Ÿญ", + "mouse2": "๐Ÿ", + "rat": "๐Ÿ€", + "hamster": "๐Ÿน", + "rabbit": "๐Ÿฐ", + "rabbit2": "๐Ÿ‡", + "chipmunk": "๐Ÿฟ๏ธ", + "beaver": "๐Ÿฆซ", + "hedgehog": "๐Ÿฆ”", + "bat": "๐Ÿฆ‡", + "bear": "๐Ÿป", + "polar_bear": "๐Ÿปโ€โ„๏ธ", + "koala": "๐Ÿจ", + "panda_face": "๐Ÿผ", + "sloth": "๐Ÿฆฅ", + "otter": "๐Ÿฆฆ", + "skunk": "๐Ÿฆจ", + "kangaroo": "๐Ÿฆ˜", + "badger": "๐Ÿฆก", + "feet": "๐Ÿพ", + "paw_prints": "๐Ÿพ", + "turkey": "๐Ÿฆƒ", + "chicken": "๐Ÿ”", + "rooster": "๐Ÿ“", + "hatching_chick": "๐Ÿฃ", + "baby_chick": "๐Ÿค", + "hatched_chick": "๐Ÿฅ", + "bird": "๐Ÿฆ", + "penguin": "๐Ÿง", + "dove": "๐Ÿ•Š๏ธ", + "eagle": "๐Ÿฆ…", + "duck": "๐Ÿฆ†", + "swan": "๐Ÿฆข", + "owl": "๐Ÿฆ‰", + "dodo": "๐Ÿฆค", + "feather": "๐Ÿชถ", + "flamingo": "๐Ÿฆฉ", + "peacock": "๐Ÿฆš", + "parrot": "๐Ÿฆœ", + "wing": "๐Ÿชฝ", + "black_bird": "๐Ÿฆโ€โฌ›", + "goose": "๐Ÿชฟ", + "frog": "๐Ÿธ", + "crocodile": "๐ŸŠ", + "turtle": "๐Ÿข", + "lizard": "๐ŸฆŽ", + "snake": "๐Ÿ", + "dragon_face": "๐Ÿฒ", + "dragon": "๐Ÿ‰", + "sauropod": "๐Ÿฆ•", + "t-rex": "๐Ÿฆ–", + "whale": "๐Ÿณ", + "whale2": "๐Ÿ‹", + "dolphin": "๐Ÿฌ", + "flipper": "๐Ÿฌ", + "seal": "๐Ÿฆญ", + "fish": "๐ŸŸ", + "tropical_fish": "๐Ÿ ", + "blowfish": "๐Ÿก", + "shark": "๐Ÿฆˆ", + "octopus": "๐Ÿ™", + "shell": "๐Ÿš", + "coral": "๐Ÿชธ", + "jellyfish": "๐Ÿชผ", + "snail": "๐ŸŒ", + "butterfly": "๐Ÿฆ‹", + "bug": "๐Ÿ›", + "ant": "๐Ÿœ", + "bee": "๐Ÿ", + "honeybee": "๐Ÿ", + "beetle": "๐Ÿชฒ", + "lady_beetle": "๐Ÿž", + "cricket": "๐Ÿฆ—", + "cockroach": "๐Ÿชณ", + "spider": "๐Ÿ•ท๏ธ", + "spider_web": "๐Ÿ•ธ๏ธ", + "scorpion": "๐Ÿฆ‚", + "mosquito": "๐ŸฆŸ", + "fly": "๐Ÿชฐ", + "worm": "๐Ÿชฑ", + "microbe": "๐Ÿฆ ", + "bouquet": "๐Ÿ’", + "cherry_blossom": "๐ŸŒธ", + "white_flower": "๐Ÿ’ฎ", + "lotus": "๐Ÿชท", + "rosette": "๐Ÿต๏ธ", + "rose": "๐ŸŒน", + "wilted_flower": "๐Ÿฅ€", + "hibiscus": "๐ŸŒบ", + "sunflower": "๐ŸŒป", + "blossom": "๐ŸŒผ", + "tulip": "๐ŸŒท", + "hyacinth": "๐Ÿชป", + "seedling": "๐ŸŒฑ", + "potted_plant": "๐Ÿชด", + "evergreen_tree": "๐ŸŒฒ", + "deciduous_tree": "๐ŸŒณ", + "palm_tree": "๐ŸŒด", + "cactus": "๐ŸŒต", + "ear_of_rice": "๐ŸŒพ", + "herb": "๐ŸŒฟ", + "shamrock": "โ˜˜๏ธ", + "four_leaf_clover": "๐Ÿ€", + "maple_leaf": "๐Ÿ", + "fallen_leaf": "๐Ÿ‚", + "leaves": "๐Ÿƒ", + "empty_nest": "๐Ÿชน", + "nest_with_eggs": "๐Ÿชบ", + "mushroom": "๐Ÿ„", + "grapes": "๐Ÿ‡", + "melon": "๐Ÿˆ", + "watermelon": "๐Ÿ‰", + "tangerine": "๐ŸŠ", + "orange": "๐ŸŠ", + "mandarin": "๐ŸŠ", + "lemon": "๐Ÿ‹", + "banana": "๐ŸŒ", + "pineapple": "๐Ÿ", + "mango": "๐Ÿฅญ", + "apple": "๐ŸŽ", + "green_apple": "๐Ÿ", + "pear": "๐Ÿ", + "peach": "๐Ÿ‘", + "cherries": "๐Ÿ’", + "strawberry": "๐Ÿ“", + "blueberries": "๐Ÿซ", + "kiwi_fruit": "๐Ÿฅ", + "tomato": "๐Ÿ…", + "olive": "๐Ÿซ’", + "coconut": "๐Ÿฅฅ", + "avocado": "๐Ÿฅ‘", + "eggplant": "๐Ÿ†", + "potato": "๐Ÿฅ”", + "carrot": "๐Ÿฅ•", + "corn": "๐ŸŒฝ", + "hot_pepper": "๐ŸŒถ๏ธ", + "bell_pepper": "๐Ÿซ‘", + "cucumber": "๐Ÿฅ’", + "leafy_green": "๐Ÿฅฌ", + "broccoli": "๐Ÿฅฆ", + "garlic": "๐Ÿง„", + "onion": "๐Ÿง…", + "peanuts": "๐Ÿฅœ", + "beans": "๐Ÿซ˜", + "chestnut": "๐ŸŒฐ", + "ginger_root": "๐Ÿซš", + "pea_pod": "๐Ÿซ›", + "bread": "๐Ÿž", + "croissant": "๐Ÿฅ", + "baguette_bread": "๐Ÿฅ–", + "flatbread": "๐Ÿซ“", + "pretzel": "๐Ÿฅจ", + "bagel": "๐Ÿฅฏ", + "pancakes": "๐Ÿฅž", + "waffle": "๐Ÿง‡", + "cheese": "๐Ÿง€", + "meat_on_bone": "๐Ÿ–", + "poultry_leg": "๐Ÿ—", + "cut_of_meat": "๐Ÿฅฉ", + "bacon": "๐Ÿฅ“", + "hamburger": "๐Ÿ”", + "fries": "๐ŸŸ", + "pizza": "๐Ÿ•", + "hotdog": "๐ŸŒญ", + "sandwich": "๐Ÿฅช", + "taco": "๐ŸŒฎ", + "burrito": "๐ŸŒฏ", + "tamale": "๐Ÿซ”", + "stuffed_flatbread": "๐Ÿฅ™", + "falafel": "๐Ÿง†", + "egg": "๐Ÿฅš", + "fried_egg": "๐Ÿณ", + "shallow_pan_of_food": "๐Ÿฅ˜", + "stew": "๐Ÿฒ", + "fondue": "๐Ÿซ•", + "bowl_with_spoon": "๐Ÿฅฃ", + "green_salad": "๐Ÿฅ—", + "popcorn": "๐Ÿฟ", + "butter": "๐Ÿงˆ", + "salt": "๐Ÿง‚", + "canned_food": "๐Ÿฅซ", + "bento": "๐Ÿฑ", + "rice_cracker": "๐Ÿ˜", + "rice_ball": "๐Ÿ™", + "rice": "๐Ÿš", + "curry": "๐Ÿ›", + "ramen": "๐Ÿœ", + "spaghetti": "๐Ÿ", + "sweet_potato": "๐Ÿ ", + "oden": "๐Ÿข", + "sushi": "๐Ÿฃ", + "fried_shrimp": "๐Ÿค", + "fish_cake": "๐Ÿฅ", + "moon_cake": "๐Ÿฅฎ", + "dango": "๐Ÿก", + "dumpling": "๐ŸฅŸ", + "fortune_cookie": "๐Ÿฅ ", + "takeout_box": "๐Ÿฅก", + "crab": "๐Ÿฆ€", + "lobster": "๐Ÿฆž", + "shrimp": "๐Ÿฆ", + "squid": "๐Ÿฆ‘", + "oyster": "๐Ÿฆช", + "icecream": "๐Ÿฆ", + "shaved_ice": "๐Ÿง", + "ice_cream": "๐Ÿจ", + "doughnut": "๐Ÿฉ", + "cookie": "๐Ÿช", + "birthday": "๐ŸŽ‚", + "cake": "๐Ÿฐ", + "cupcake": "๐Ÿง", + "pie": "๐Ÿฅง", + "chocolate_bar": "๐Ÿซ", + "candy": "๐Ÿฌ", + "lollipop": "๐Ÿญ", + "custard": "๐Ÿฎ", + "honey_pot": "๐Ÿฏ", + "baby_bottle": "๐Ÿผ", + "milk_glass": "๐Ÿฅ›", + "coffee": "โ˜•", + "teapot": "๐Ÿซ–", + "tea": "๐Ÿต", + "sake": "๐Ÿถ", + "champagne": "๐Ÿพ", + "wine_glass": "๐Ÿท", + "cocktail": "๐Ÿธ", + "tropical_drink": "๐Ÿน", + "beer": "๐Ÿบ", + "beers": "๐Ÿป", + "clinking_glasses": "๐Ÿฅ‚", + "tumbler_glass": "๐Ÿฅƒ", + "pouring_liquid": "๐Ÿซ—", + "cup_with_straw": "๐Ÿฅค", + "bubble_tea": "๐Ÿง‹", + "beverage_box": "๐Ÿงƒ", + "mate": "๐Ÿง‰", + "ice_cube": "๐ŸงŠ", + "chopsticks": "๐Ÿฅข", + "plate_with_cutlery": "๐Ÿฝ๏ธ", + "fork_and_knife": "๐Ÿด", + "spoon": "๐Ÿฅ„", + "hocho": "๐Ÿ”ช", + "knife": "๐Ÿ”ช", + "jar": "๐Ÿซ™", + "amphora": "๐Ÿบ", + "earth_africa": "๐ŸŒ", + "earth_americas": "๐ŸŒŽ", + "earth_asia": "๐ŸŒ", + "globe_with_meridians": "๐ŸŒ", + "world_map": "๐Ÿ—บ๏ธ", + "japan": "๐Ÿ—พ", + "compass": "๐Ÿงญ", + "mountain_snow": "๐Ÿ”๏ธ", + "mountain": "โ›ฐ๏ธ", + "volcano": "๐ŸŒ‹", + "mount_fuji": "๐Ÿ—ป", + "camping": "๐Ÿ•๏ธ", + "beach_umbrella": "๐Ÿ–๏ธ", + "desert": "๐Ÿœ๏ธ", + "desert_island": "๐Ÿ๏ธ", + "national_park": "๐Ÿž๏ธ", + "stadium": "๐ŸŸ๏ธ", + "classical_building": "๐Ÿ›๏ธ", + "building_construction": "๐Ÿ—๏ธ", + "bricks": "๐Ÿงฑ", + "rock": "๐Ÿชจ", + "wood": "๐Ÿชต", + "hut": "๐Ÿ›–", + "houses": "๐Ÿ˜๏ธ", + "derelict_house": "๐Ÿš๏ธ", + "house": "๐Ÿ ", + "house_with_garden": "๐Ÿก", + "office": "๐Ÿข", + "post_office": "๐Ÿฃ", + "european_post_office": "๐Ÿค", + "hospital": "๐Ÿฅ", + "bank": "๐Ÿฆ", + "hotel": "๐Ÿจ", + "love_hotel": "๐Ÿฉ", + "convenience_store": "๐Ÿช", + "school": "๐Ÿซ", + "department_store": "๐Ÿฌ", + "factory": "๐Ÿญ", + "japanese_castle": "๐Ÿฏ", + "european_castle": "๐Ÿฐ", + "wedding": "๐Ÿ’’", + "tokyo_tower": "๐Ÿ—ผ", + "statue_of_liberty": "๐Ÿ—ฝ", + "church": "โ›ช", + "mosque": "๐Ÿ•Œ", + "hindu_temple": "๐Ÿ›•", + "synagogue": "๐Ÿ•", + "shinto_shrine": "โ›ฉ๏ธ", + "kaaba": "๐Ÿ•‹", + "fountain": "โ›ฒ", + "tent": "โ›บ", + "foggy": "๐ŸŒ", + "night_with_stars": "๐ŸŒƒ", + "cityscape": "๐Ÿ™๏ธ", + "sunrise_over_mountains": "๐ŸŒ„", + "sunrise": "๐ŸŒ…", + "city_sunset": "๐ŸŒ†", + "city_sunrise": "๐ŸŒ‡", + "bridge_at_night": "๐ŸŒ‰", + "hotsprings": "โ™จ๏ธ", + "carousel_horse": "๐ŸŽ ", + "playground_slide": "๐Ÿ›", + "ferris_wheel": "๐ŸŽก", + "roller_coaster": "๐ŸŽข", + "barber": "๐Ÿ’ˆ", + "circus_tent": "๐ŸŽช", + "steam_locomotive": "๐Ÿš‚", + "railway_car": "๐Ÿšƒ", + "bullettrain_side": "๐Ÿš„", + "bullettrain_front": "๐Ÿš…", + "train2": "๐Ÿš†", + "metro": "๐Ÿš‡", + "light_rail": "๐Ÿšˆ", + "station": "๐Ÿš‰", + "tram": "๐ŸšŠ", + "monorail": "๐Ÿš", + "mountain_railway": "๐Ÿšž", + "train": "๐Ÿš‹", + "bus": "๐ŸšŒ", + "oncoming_bus": "๐Ÿš", + "trolleybus": "๐ŸšŽ", + "minibus": "๐Ÿš", + "ambulance": "๐Ÿš‘", + "fire_engine": "๐Ÿš’", + "police_car": "๐Ÿš“", + "oncoming_police_car": "๐Ÿš”", + "taxi": "๐Ÿš•", + "oncoming_taxi": "๐Ÿš–", + "car": "๐Ÿš—", + "red_car": "๐Ÿš—", + "oncoming_automobile": "๐Ÿš˜", + "blue_car": "๐Ÿš™", + "pickup_truck": "๐Ÿ›ป", + "truck": "๐Ÿšš", + "articulated_lorry": "๐Ÿš›", + "tractor": "๐Ÿšœ", + "racing_car": "๐ŸŽ๏ธ", + "motorcycle": "๐Ÿ๏ธ", + "motor_scooter": "๐Ÿ›ต", + "manual_wheelchair": "๐Ÿฆฝ", + "motorized_wheelchair": "๐Ÿฆผ", + "auto_rickshaw": "๐Ÿ›บ", + "bike": "๐Ÿšฒ", + "kick_scooter": "๐Ÿ›ด", + "skateboard": "๐Ÿ›น", + "roller_skate": "๐Ÿ›ผ", + "busstop": "๐Ÿš", + "motorway": "๐Ÿ›ฃ๏ธ", + "railway_track": "๐Ÿ›ค๏ธ", + "oil_drum": "๐Ÿ›ข๏ธ", + "fuelpump": "โ›ฝ", + "wheel": "๐Ÿ›ž", + "rotating_light": "๐Ÿšจ", + "traffic_light": "๐Ÿšฅ", + "vertical_traffic_light": "๐Ÿšฆ", + "stop_sign": "๐Ÿ›‘", + "construction": "๐Ÿšง", + "anchor": "โš“", + "ring_buoy": "๐Ÿ›Ÿ", + "boat": "โ›ต", + "sailboat": "โ›ต", + "canoe": "๐Ÿ›ถ", + "speedboat": "๐Ÿšค", + "passenger_ship": "๐Ÿ›ณ๏ธ", + "ferry": "โ›ด๏ธ", + "motor_boat": "๐Ÿ›ฅ๏ธ", + "ship": "๐Ÿšข", + "airplane": "โœˆ๏ธ", + "small_airplane": "๐Ÿ›ฉ๏ธ", + "flight_departure": "๐Ÿ›ซ", + "flight_arrival": "๐Ÿ›ฌ", + "parachute": "๐Ÿช‚", + "seat": "๐Ÿ’บ", + "helicopter": "๐Ÿš", + "suspension_railway": "๐ŸšŸ", + "mountain_cableway": "๐Ÿš ", + "aerial_tramway": "๐Ÿšก", + "artificial_satellite": "๐Ÿ›ฐ๏ธ", + "rocket": "๐Ÿš€", + "flying_saucer": "๐Ÿ›ธ", + "bellhop_bell": "๐Ÿ›Ž๏ธ", + "luggage": "๐Ÿงณ", + "hourglass": "โŒ›", + "hourglass_flowing_sand": "โณ", + "watch": "โŒš", + "alarm_clock": "โฐ", + "stopwatch": "โฑ๏ธ", + "timer_clock": "โฒ๏ธ", + "mantelpiece_clock": "๐Ÿ•ฐ๏ธ", + "clock12": "๐Ÿ•›", + "clock1230": "๐Ÿ•ง", + "clock1": "๐Ÿ•", + "clock130": "๐Ÿ•œ", + "clock2": "๐Ÿ•‘", + "clock230": "๐Ÿ•", + "clock3": "๐Ÿ•’", + "clock330": "๐Ÿ•ž", + "clock4": "๐Ÿ•“", + "clock430": "๐Ÿ•Ÿ", + "clock5": "๐Ÿ•”", + "clock530": "๐Ÿ• ", + "clock6": "๐Ÿ••", + "clock630": "๐Ÿ•ก", + "clock7": "๐Ÿ•–", + "clock730": "๐Ÿ•ข", + "clock8": "๐Ÿ•—", + "clock830": "๐Ÿ•ฃ", + "clock9": "๐Ÿ•˜", + "clock930": "๐Ÿ•ค", + "clock10": "๐Ÿ•™", + "clock1030": "๐Ÿ•ฅ", + "clock11": "๐Ÿ•š", + "clock1130": "๐Ÿ•ฆ", + "new_moon": "๐ŸŒ‘", + "waxing_crescent_moon": "๐ŸŒ’", + "first_quarter_moon": "๐ŸŒ“", + "moon": "๐ŸŒ”", + "waxing_gibbous_moon": "๐ŸŒ”", + "full_moon": "๐ŸŒ•", + "waning_gibbous_moon": "๐ŸŒ–", + "last_quarter_moon": "๐ŸŒ—", + "waning_crescent_moon": "๐ŸŒ˜", + "crescent_moon": "๐ŸŒ™", + "new_moon_with_face": "๐ŸŒš", + "first_quarter_moon_with_face": "๐ŸŒ›", + "last_quarter_moon_with_face": "๐ŸŒœ", + "thermometer": "๐ŸŒก๏ธ", + "sunny": "โ˜€๏ธ", + "full_moon_with_face": "๐ŸŒ", + "sun_with_face": "๐ŸŒž", + "ringed_planet": "๐Ÿช", + "star": "โญ", + "star2": "๐ŸŒŸ", + "stars": "๐ŸŒ ", + "milky_way": "๐ŸŒŒ", + "cloud": "โ˜๏ธ", + "partly_sunny": "โ›…", + "cloud_with_lightning_and_rain": "โ›ˆ๏ธ", + "sun_behind_small_cloud": "๐ŸŒค๏ธ", + "sun_behind_large_cloud": "๐ŸŒฅ๏ธ", + "sun_behind_rain_cloud": "๐ŸŒฆ๏ธ", + "cloud_with_rain": "๐ŸŒง๏ธ", + "cloud_with_snow": "๐ŸŒจ๏ธ", + "cloud_with_lightning": "๐ŸŒฉ๏ธ", + "tornado": "๐ŸŒช๏ธ", + "fog": "๐ŸŒซ๏ธ", + "wind_face": "๐ŸŒฌ๏ธ", + "cyclone": "๐ŸŒ€", + "rainbow": "๐ŸŒˆ", + "closed_umbrella": "๐ŸŒ‚", + "open_umbrella": "โ˜‚๏ธ", + "umbrella": "โ˜”", + "parasol_on_ground": "โ›ฑ๏ธ", + "zap": "โšก", + "snowflake": "โ„๏ธ", + "snowman_with_snow": "โ˜ƒ๏ธ", + "snowman": "โ›„", + "comet": "โ˜„๏ธ", + "fire": "๐Ÿ”ฅ", + "droplet": "๐Ÿ’ง", + "ocean": "๐ŸŒŠ", + "jack_o_lantern": "๐ŸŽƒ", + "christmas_tree": "๐ŸŽ„", + "fireworks": "๐ŸŽ†", + "sparkler": "๐ŸŽ‡", + "firecracker": "๐Ÿงจ", + "sparkles": "โœจ", + "balloon": "๐ŸŽˆ", + "tada": "๐ŸŽ‰", + "confetti_ball": "๐ŸŽŠ", + "tanabata_tree": "๐ŸŽ‹", + "bamboo": "๐ŸŽ", + "dolls": "๐ŸŽŽ", + "flags": "๐ŸŽ", + "wind_chime": "๐ŸŽ", + "rice_scene": "๐ŸŽ‘", + "red_envelope": "๐Ÿงง", + "ribbon": "๐ŸŽ€", + "gift": "๐ŸŽ", + "reminder_ribbon": "๐ŸŽ—๏ธ", + "tickets": "๐ŸŽŸ๏ธ", + "ticket": "๐ŸŽซ", + "medal_military": "๐ŸŽ–๏ธ", + "trophy": "๐Ÿ†", + "medal_sports": "๐Ÿ…", + "1st_place_medal": "๐Ÿฅ‡", + "2nd_place_medal": "๐Ÿฅˆ", + "3rd_place_medal": "๐Ÿฅ‰", + "soccer": "โšฝ", + "baseball": "โšพ", + "softball": "๐ŸฅŽ", + "basketball": "๐Ÿ€", + "volleyball": "๐Ÿ", + "football": "๐Ÿˆ", + "rugby_football": "๐Ÿ‰", + "tennis": "๐ŸŽพ", + "flying_disc": "๐Ÿฅ", + "bowling": "๐ŸŽณ", + "cricket_game": "๐Ÿ", + "field_hockey": "๐Ÿ‘", + "ice_hockey": "๐Ÿ’", + "lacrosse": "๐Ÿฅ", + "ping_pong": "๐Ÿ“", + "badminton": "๐Ÿธ", + "boxing_glove": "๐ŸฅŠ", + "martial_arts_uniform": "๐Ÿฅ‹", + "goal_net": "๐Ÿฅ…", + "golf": "โ›ณ", + "ice_skate": "โ›ธ๏ธ", + "fishing_pole_and_fish": "๐ŸŽฃ", + "diving_mask": "๐Ÿคฟ", + "running_shirt_with_sash": "๐ŸŽฝ", + "ski": "๐ŸŽฟ", + "sled": "๐Ÿ›ท", + "curling_stone": "๐ŸฅŒ", + "dart": "๐ŸŽฏ", + "yo_yo": "๐Ÿช€", + "kite": "๐Ÿช", + "gun": "๐Ÿ”ซ", + "8ball": "๐ŸŽฑ", + "crystal_ball": "๐Ÿ”ฎ", + "magic_wand": "๐Ÿช„", + "video_game": "๐ŸŽฎ", + "joystick": "๐Ÿ•น๏ธ", + "slot_machine": "๐ŸŽฐ", + "game_die": "๐ŸŽฒ", + "jigsaw": "๐Ÿงฉ", + "teddy_bear": "๐Ÿงธ", + "pinata": "๐Ÿช…", + "mirror_ball": "๐Ÿชฉ", + "nesting_dolls": "๐Ÿช†", + "spades": "โ™ ๏ธ", + "hearts": "โ™ฅ๏ธ", + "diamonds": "โ™ฆ๏ธ", + "clubs": "โ™ฃ๏ธ", + "chess_pawn": "โ™Ÿ๏ธ", + "black_joker": "๐Ÿƒ", + "mahjong": "๐Ÿ€„", + "flower_playing_cards": "๐ŸŽด", + "performing_arts": "๐ŸŽญ", + "framed_picture": "๐Ÿ–ผ๏ธ", + "art": "๐ŸŽจ", + "thread": "๐Ÿงต", + "sewing_needle": "๐Ÿชก", + "yarn": "๐Ÿงถ", + "knot": "๐Ÿชข", + "eyeglasses": "๐Ÿ‘“", + "dark_sunglasses": "๐Ÿ•ถ๏ธ", + "goggles": "๐Ÿฅฝ", + "lab_coat": "๐Ÿฅผ", + "safety_vest": "๐Ÿฆบ", + "necktie": "๐Ÿ‘”", + "shirt": "๐Ÿ‘•", + "tshirt": "๐Ÿ‘•", + "jeans": "๐Ÿ‘–", + "scarf": "๐Ÿงฃ", + "gloves": "๐Ÿงค", + "coat": "๐Ÿงฅ", + "socks": "๐Ÿงฆ", + "dress": "๐Ÿ‘—", + "kimono": "๐Ÿ‘˜", + "sari": "๐Ÿฅป", + "one_piece_swimsuit": "๐Ÿฉฑ", + "swim_brief": "๐Ÿฉฒ", + "shorts": "๐Ÿฉณ", + "bikini": "๐Ÿ‘™", + "womans_clothes": "๐Ÿ‘š", + "folding_hand_fan": "๐Ÿชญ", + "purse": "๐Ÿ‘›", + "handbag": "๐Ÿ‘œ", + "pouch": "๐Ÿ‘", + "shopping": "๐Ÿ›๏ธ", + "school_satchel": "๐ŸŽ’", + "thong_sandal": "๐Ÿฉด", + "mans_shoe": "๐Ÿ‘ž", + "shoe": "๐Ÿ‘ž", + "athletic_shoe": "๐Ÿ‘Ÿ", + "hiking_boot": "๐Ÿฅพ", + "flat_shoe": "๐Ÿฅฟ", + "high_heel": "๐Ÿ‘ ", + "sandal": "๐Ÿ‘ก", + "ballet_shoes": "๐Ÿฉฐ", + "boot": "๐Ÿ‘ข", + "hair_pick": "๐Ÿชฎ", + "crown": "๐Ÿ‘‘", + "womans_hat": "๐Ÿ‘’", + "tophat": "๐ŸŽฉ", + "mortar_board": "๐ŸŽ“", + "billed_cap": "๐Ÿงข", + "military_helmet": "๐Ÿช–", + "rescue_worker_helmet": "โ›‘๏ธ", + "prayer_beads": "๐Ÿ“ฟ", + "lipstick": "๐Ÿ’„", + "ring": "๐Ÿ’", + "gem": "๐Ÿ’Ž", + "mute": "๐Ÿ”‡", + "speaker": "๐Ÿ”ˆ", + "sound": "๐Ÿ”‰", + "loud_sound": "๐Ÿ”Š", + "loudspeaker": "๐Ÿ“ข", + "mega": "๐Ÿ“ฃ", + "postal_horn": "๐Ÿ“ฏ", + "bell": "๐Ÿ””", + "no_bell": "๐Ÿ”•", + "musical_score": "๐ŸŽผ", + "musical_note": "๐ŸŽต", + "notes": "๐ŸŽถ", + "studio_microphone": "๐ŸŽ™๏ธ", + "level_slider": "๐ŸŽš๏ธ", + "control_knobs": "๐ŸŽ›๏ธ", + "microphone": "๐ŸŽค", + "headphones": "๐ŸŽง", + "radio": "๐Ÿ“ป", + "saxophone": "๐ŸŽท", + "accordion": "๐Ÿช—", + "guitar": "๐ŸŽธ", + "musical_keyboard": "๐ŸŽน", + "trumpet": "๐ŸŽบ", + "violin": "๐ŸŽป", + "banjo": "๐Ÿช•", + "drum": "๐Ÿฅ", + "long_drum": "๐Ÿช˜", + "maracas": "๐Ÿช‡", + "flute": "๐Ÿชˆ", + "iphone": "๐Ÿ“ฑ", + "calling": "๐Ÿ“ฒ", + "phone": "โ˜Ž๏ธ", + "telephone": "โ˜Ž๏ธ", + "telephone_receiver": "๐Ÿ“ž", + "pager": "๐Ÿ“Ÿ", + "fax": "๐Ÿ“ ", + "battery": "๐Ÿ”‹", + "low_battery": "๐Ÿชซ", + "electric_plug": "๐Ÿ”Œ", + "computer": "๐Ÿ’ป", + "desktop_computer": "๐Ÿ–ฅ๏ธ", + "printer": "๐Ÿ–จ๏ธ", + "keyboard": "โŒจ๏ธ", + "computer_mouse": "๐Ÿ–ฑ๏ธ", + "trackball": "๐Ÿ–ฒ๏ธ", + "minidisc": "๐Ÿ’ฝ", + "floppy_disk": "๐Ÿ’พ", + "cd": "๐Ÿ’ฟ", + "dvd": "๐Ÿ“€", + "abacus": "๐Ÿงฎ", + "movie_camera": "๐ŸŽฅ", + "film_strip": "๐ŸŽž๏ธ", + "film_projector": "๐Ÿ“ฝ๏ธ", + "clapper": "๐ŸŽฌ", + "tv": "๐Ÿ“บ", + "camera": "๐Ÿ“ท", + "camera_flash": "๐Ÿ“ธ", + "video_camera": "๐Ÿ“น", + "vhs": "๐Ÿ“ผ", + "mag": "๐Ÿ”", + "mag_right": "๐Ÿ”Ž", + "candle": "๐Ÿ•ฏ๏ธ", + "bulb": "๐Ÿ’ก", + "flashlight": "๐Ÿ”ฆ", + "izakaya_lantern": "๐Ÿฎ", + "lantern": "๐Ÿฎ", + "diya_lamp": "๐Ÿช”", + "notebook_with_decorative_cover": "๐Ÿ“”", + "closed_book": "๐Ÿ“•", + "book": "๐Ÿ“–", + "open_book": "๐Ÿ“–", + "green_book": "๐Ÿ“—", + "blue_book": "๐Ÿ“˜", + "orange_book": "๐Ÿ“™", + "books": "๐Ÿ“š", + "notebook": "๐Ÿ““", + "ledger": "๐Ÿ“’", + "page_with_curl": "๐Ÿ“ƒ", + "scroll": "๐Ÿ“œ", + "page_facing_up": "๐Ÿ“„", + "newspaper": "๐Ÿ“ฐ", + "newspaper_roll": "๐Ÿ—ž๏ธ", + "bookmark_tabs": "๐Ÿ“‘", + "bookmark": "๐Ÿ”–", + "label": "๐Ÿท๏ธ", + "moneybag": "๐Ÿ’ฐ", + "coin": "๐Ÿช™", + "yen": "๐Ÿ’ด", + "dollar": "๐Ÿ’ต", + "euro": "๐Ÿ’ถ", + "pound": "๐Ÿ’ท", + "money_with_wings": "๐Ÿ’ธ", + "credit_card": "๐Ÿ’ณ", + "receipt": "๐Ÿงพ", + "chart": "๐Ÿ’น", + "envelope": "โœ‰๏ธ", + "email": "๐Ÿ“ง", + "e-mail": "๐Ÿ“ง", + "incoming_envelope": "๐Ÿ“จ", + "envelope_with_arrow": "๐Ÿ“ฉ", + "outbox_tray": "๐Ÿ“ค", + "inbox_tray": "๐Ÿ“ฅ", + "package": "๐Ÿ“ฆ", + "mailbox": "๐Ÿ“ซ", + "mailbox_closed": "๐Ÿ“ช", + "mailbox_with_mail": "๐Ÿ“ฌ", + "mailbox_with_no_mail": "๐Ÿ“ญ", + "postbox": "๐Ÿ“ฎ", + "ballot_box": "๐Ÿ—ณ๏ธ", + "pencil2": "โœ๏ธ", + "black_nib": "โœ’๏ธ", + "fountain_pen": "๐Ÿ–‹๏ธ", + "pen": "๐Ÿ–Š๏ธ", + "paintbrush": "๐Ÿ–Œ๏ธ", + "crayon": "๐Ÿ–๏ธ", + "memo": "๐Ÿ“", + "pencil": "๐Ÿ“", + "briefcase": "๐Ÿ’ผ", + "file_folder": "๐Ÿ“", + "open_file_folder": "๐Ÿ“‚", + "card_index_dividers": "๐Ÿ—‚๏ธ", + "date": "๐Ÿ“…", + "calendar": "๐Ÿ“†", + "spiral_notepad": "๐Ÿ—’๏ธ", + "spiral_calendar": "๐Ÿ—“๏ธ", + "card_index": "๐Ÿ“‡", + "chart_with_upwards_trend": "๐Ÿ“ˆ", + "chart_with_downwards_trend": "๐Ÿ“‰", + "bar_chart": "๐Ÿ“Š", + "clipboard": "๐Ÿ“‹", + "pushpin": "๐Ÿ“Œ", + "round_pushpin": "๐Ÿ“", + "paperclip": "๐Ÿ“Ž", + "paperclips": "๐Ÿ–‡๏ธ", + "straight_ruler": "๐Ÿ“", + "triangular_ruler": "๐Ÿ“", + "scissors": "โœ‚๏ธ", + "card_file_box": "๐Ÿ—ƒ๏ธ", + "file_cabinet": "๐Ÿ—„๏ธ", + "wastebasket": "๐Ÿ—‘๏ธ", + "lock": "๐Ÿ”’", + "unlock": "๐Ÿ”“", + "lock_with_ink_pen": "๐Ÿ”", + "closed_lock_with_key": "๐Ÿ”", + "key": "๐Ÿ”‘", + "old_key": "๐Ÿ—๏ธ", + "hammer": "๐Ÿ”จ", + "axe": "๐Ÿช“", + "pick": "โ›๏ธ", + "hammer_and_pick": "โš’๏ธ", + "hammer_and_wrench": "๐Ÿ› ๏ธ", + "dagger": "๐Ÿ—ก๏ธ", + "crossed_swords": "โš”๏ธ", + "bomb": "๐Ÿ’ฃ", + "boomerang": "๐Ÿชƒ", + "bow_and_arrow": "๐Ÿน", + "shield": "๐Ÿ›ก๏ธ", + "carpentry_saw": "๐Ÿชš", + "wrench": "๐Ÿ”ง", + "screwdriver": "๐Ÿช›", + "nut_and_bolt": "๐Ÿ”ฉ", + "gear": "โš™๏ธ", + "clamp": "๐Ÿ—œ๏ธ", + "balance_scale": "โš–๏ธ", + "probing_cane": "๐Ÿฆฏ", + "link": "๐Ÿ”—", + "chains": "โ›“๏ธ", + "hook": "๐Ÿช", + "toolbox": "๐Ÿงฐ", + "magnet": "๐Ÿงฒ", + "ladder": "๐Ÿชœ", + "alembic": "โš—๏ธ", + "test_tube": "๐Ÿงช", + "petri_dish": "๐Ÿงซ", + "dna": "๐Ÿงฌ", + "microscope": "๐Ÿ”ฌ", + "telescope": "๐Ÿ”ญ", + "satellite": "๐Ÿ“ก", + "syringe": "๐Ÿ’‰", + "drop_of_blood": "๐Ÿฉธ", + "pill": "๐Ÿ’Š", + "adhesive_bandage": "๐Ÿฉน", + "crutch": "๐Ÿฉผ", + "stethoscope": "๐Ÿฉบ", + "x_ray": "๐Ÿฉป", + "door": "๐Ÿšช", + "elevator": "๐Ÿ›—", + "mirror": "๐Ÿชž", + "window": "๐ŸชŸ", + "bed": "๐Ÿ›๏ธ", + "couch_and_lamp": "๐Ÿ›‹๏ธ", + "chair": "๐Ÿช‘", + "toilet": "๐Ÿšฝ", + "plunger": "๐Ÿช ", + "shower": "๐Ÿšฟ", + "bathtub": "๐Ÿ›", + "mouse_trap": "๐Ÿชค", + "razor": "๐Ÿช’", + "lotion_bottle": "๐Ÿงด", + "safety_pin": "๐Ÿงท", + "broom": "๐Ÿงน", + "basket": "๐Ÿงบ", + "roll_of_paper": "๐Ÿงป", + "bucket": "๐Ÿชฃ", + "soap": "๐Ÿงผ", + "bubbles": "๐Ÿซง", + "toothbrush": "๐Ÿชฅ", + "sponge": "๐Ÿงฝ", + "fire_extinguisher": "๐Ÿงฏ", + "shopping_cart": "๐Ÿ›’", + "smoking": "๐Ÿšฌ", + "coffin": "โšฐ๏ธ", + "headstone": "๐Ÿชฆ", + "funeral_urn": "โšฑ๏ธ", + "nazar_amulet": "๐Ÿงฟ", + "hamsa": "๐Ÿชฌ", + "moyai": "๐Ÿ—ฟ", + "placard": "๐Ÿชง", + "identification_card": "๐Ÿชช", + "atm": "๐Ÿง", + "put_litter_in_its_place": "๐Ÿšฎ", + "potable_water": "๐Ÿšฐ", + "wheelchair": "โ™ฟ", + "mens": "๐Ÿšน", + "womens": "๐Ÿšบ", + "restroom": "๐Ÿšป", + "baby_symbol": "๐Ÿšผ", + "wc": "๐Ÿšพ", + "passport_control": "๐Ÿ›‚", + "customs": "๐Ÿ›ƒ", + "baggage_claim": "๐Ÿ›„", + "left_luggage": "๐Ÿ›…", + "warning": "โš ๏ธ", + "children_crossing": "๐Ÿšธ", + "no_entry": "โ›”", + "no_entry_sign": "๐Ÿšซ", + "no_bicycles": "๐Ÿšณ", + "no_smoking": "๐Ÿšญ", + "do_not_litter": "๐Ÿšฏ", + "non-potable_water": "๐Ÿšฑ", + "no_pedestrians": "๐Ÿšท", + "no_mobile_phones": "๐Ÿ“ต", + "underage": "๐Ÿ”ž", + "radioactive": "โ˜ข๏ธ", + "biohazard": "โ˜ฃ๏ธ", + "arrow_up": "โฌ†๏ธ", + "arrow_upper_right": "โ†—๏ธ", + "arrow_right": "โžก๏ธ", + "arrow_lower_right": "โ†˜๏ธ", + "arrow_down": "โฌ‡๏ธ", + "arrow_lower_left": "โ†™๏ธ", + "arrow_left": "โฌ…๏ธ", + "arrow_upper_left": "โ†–๏ธ", + "arrow_up_down": "โ†•๏ธ", + "left_right_arrow": "โ†”๏ธ", + "leftwards_arrow_with_hook": "โ†ฉ๏ธ", + "arrow_right_hook": "โ†ช๏ธ", + "arrow_heading_up": "โคด๏ธ", + "arrow_heading_down": "โคต๏ธ", + "arrows_clockwise": "๐Ÿ”ƒ", + "arrows_counterclockwise": "๐Ÿ”„", + "back": "๐Ÿ”™", + "end": "๐Ÿ”š", + "on": "๐Ÿ”›", + "soon": "๐Ÿ”œ", + "top": "๐Ÿ”", + "place_of_worship": "๐Ÿ›", + "atom_symbol": "โš›๏ธ", + "om": "๐Ÿ•‰๏ธ", + "star_of_david": "โœก๏ธ", + "wheel_of_dharma": "โ˜ธ๏ธ", + "yin_yang": "โ˜ฏ๏ธ", + "latin_cross": "โœ๏ธ", + "orthodox_cross": "โ˜ฆ๏ธ", + "star_and_crescent": "โ˜ช๏ธ", + "peace_symbol": "โ˜ฎ๏ธ", + "menorah": "๐Ÿ•Ž", + "six_pointed_star": "๐Ÿ”ฏ", + "khanda": "๐Ÿชฏ", + "aries": "โ™ˆ", + "taurus": "โ™‰", + "gemini": "โ™Š", + "cancer": "โ™‹", + "leo": "โ™Œ", + "virgo": "โ™", + "libra": "โ™Ž", + "scorpius": "โ™", + "sagittarius": "โ™", + "capricorn": "โ™‘", + "aquarius": "โ™’", + "pisces": "โ™“", + "ophiuchus": "โ›Ž", + "twisted_rightwards_arrows": "๐Ÿ”€", + "repeat": "๐Ÿ”", + "repeat_one": "๐Ÿ”‚", + "arrow_forward": "โ–ถ๏ธ", + "fast_forward": "โฉ", + "next_track_button": "โญ๏ธ", + "play_or_pause_button": "โฏ๏ธ", + "arrow_backward": "โ—€๏ธ", + "rewind": "โช", + "previous_track_button": "โฎ๏ธ", + "arrow_up_small": "๐Ÿ”ผ", + "arrow_double_up": "โซ", + "arrow_down_small": "๐Ÿ”ฝ", + "arrow_double_down": "โฌ", + "pause_button": "โธ๏ธ", + "stop_button": "โน๏ธ", + "record_button": "โบ๏ธ", + "eject_button": "โ๏ธ", + "cinema": "๐ŸŽฆ", + "low_brightness": "๐Ÿ”…", + "high_brightness": "๐Ÿ”†", + "signal_strength": "๐Ÿ“ถ", + "wireless": "๐Ÿ›œ", + "vibration_mode": "๐Ÿ“ณ", + "mobile_phone_off": "๐Ÿ“ด", + "female_sign": "โ™€๏ธ", + "male_sign": "โ™‚๏ธ", + "transgender_symbol": "โšง๏ธ", + "heavy_multiplication_x": "โœ–๏ธ", + "heavy_plus_sign": "โž•", + "heavy_minus_sign": "โž–", + "heavy_division_sign": "โž—", + "heavy_equals_sign": "๐ŸŸฐ", + "infinity": "โ™พ๏ธ", + "bangbang": "โ€ผ๏ธ", + "interrobang": "โ‰๏ธ", + "question": "โ“", + "grey_question": "โ”", + "grey_exclamation": "โ•", + "exclamation": "โ—", + "heavy_exclamation_mark": "โ—", + "wavy_dash": "ใ€ฐ๏ธ", + "currency_exchange": "๐Ÿ’ฑ", + "heavy_dollar_sign": "๐Ÿ’ฒ", + "medical_symbol": "โš•๏ธ", + "recycle": "โ™ป๏ธ", + "fleur_de_lis": "โšœ๏ธ", + "trident": "๐Ÿ”ฑ", + "name_badge": "๐Ÿ“›", + "beginner": "๐Ÿ”ฐ", + "o": "โญ•", + "white_check_mark": "โœ…", + "ballot_box_with_check": "โ˜‘๏ธ", + "heavy_check_mark": "โœ”๏ธ", + "x": "โŒ", + "negative_squared_cross_mark": "โŽ", + "curly_loop": "โžฐ", + "loop": "โžฟ", + "part_alternation_mark": "ใ€ฝ๏ธ", + "eight_spoked_asterisk": "โœณ๏ธ", + "eight_pointed_black_star": "โœด๏ธ", + "sparkle": "โ‡๏ธ", + "copyright": "ยฉ๏ธ", + "registered": "ยฎ๏ธ", + "tm": "โ„ข๏ธ", + "hash": "#๏ธโƒฃ", + "asterisk": "*๏ธโƒฃ", + "zero": "0๏ธโƒฃ", + "one": "1๏ธโƒฃ", + "two": "2๏ธโƒฃ", + "three": "3๏ธโƒฃ", + "four": "4๏ธโƒฃ", + "five": "5๏ธโƒฃ", + "six": "6๏ธโƒฃ", + "seven": "7๏ธโƒฃ", + "eight": "8๏ธโƒฃ", + "nine": "9๏ธโƒฃ", + "keycap_ten": "๐Ÿ”Ÿ", + "capital_abcd": "๐Ÿ” ", + "abcd": "๐Ÿ”ก", + "symbols": "๐Ÿ”ฃ", + "abc": "๐Ÿ”ค", + "a": "๐Ÿ…ฐ๏ธ", + "ab": "๐Ÿ†Ž", + "b": "๐Ÿ…ฑ๏ธ", + "cl": "๐Ÿ†‘", + "cool": "๐Ÿ†’", + "free": "๐Ÿ†“", + "information_source": "โ„น๏ธ", + "id": "๐Ÿ†”", + "m": "โ“‚๏ธ", + "new": "๐Ÿ†•", + "ng": "๐Ÿ†–", + "o2": "๐Ÿ…พ๏ธ", + "ok": "๐Ÿ†—", + "parking": "๐Ÿ…ฟ๏ธ", + "sos": "๐Ÿ†˜", + "up": "๐Ÿ†™", + "vs": "๐Ÿ†š", + "koko": "๐Ÿˆ", + "sa": "๐Ÿˆ‚๏ธ", + "u6708": "๐Ÿˆท๏ธ", + "u6709": "๐Ÿˆถ", + "u6307": "๐Ÿˆฏ", + "ideograph_advantage": "๐Ÿ‰", + "u5272": "๐Ÿˆน", + "u7121": "๐Ÿˆš", + "u7981": "๐Ÿˆฒ", + "accept": "๐Ÿ‰‘", + "u7533": "๐Ÿˆธ", + "u5408": "๐Ÿˆด", + "u7a7a": "๐Ÿˆณ", + "congratulations": "ใŠ—๏ธ", + "secret": "ใŠ™๏ธ", + "u55b6": "๐Ÿˆบ", + "u6e80": "๐Ÿˆต", + "red_circle": "๐Ÿ”ด", + "orange_circle": "๐ŸŸ ", + "yellow_circle": "๐ŸŸก", + "green_circle": "๐ŸŸข", + "large_blue_circle": "๐Ÿ”ต", + "purple_circle": "๐ŸŸฃ", + "brown_circle": "๐ŸŸค", + "black_circle": "โšซ", + "white_circle": "โšช", + "red_square": "๐ŸŸฅ", + "orange_square": "๐ŸŸง", + "yellow_square": "๐ŸŸจ", + "green_square": "๐ŸŸฉ", + "blue_square": "๐ŸŸฆ", + "purple_square": "๐ŸŸช", + "brown_square": "๐ŸŸซ", + "black_large_square": "โฌ›", + "white_large_square": "โฌœ", + "black_medium_square": "โ—ผ๏ธ", + "white_medium_square": "โ—ป๏ธ", + "black_medium_small_square": "โ—พ", + "white_medium_small_square": "โ—ฝ", + "black_small_square": "โ–ช๏ธ", + "white_small_square": "โ–ซ๏ธ", + "large_orange_diamond": "๐Ÿ”ถ", + "large_blue_diamond": "๐Ÿ”ท", + "small_orange_diamond": "๐Ÿ”ธ", + "small_blue_diamond": "๐Ÿ”น", + "small_red_triangle": "๐Ÿ”บ", + "small_red_triangle_down": "๐Ÿ”ป", + "diamond_shape_with_a_dot_inside": "๐Ÿ’ ", + "radio_button": "๐Ÿ”˜", + "white_square_button": "๐Ÿ”ณ", + "black_square_button": "๐Ÿ”ฒ", + "checkered_flag": "๐Ÿ", + "triangular_flag_on_post": "๐Ÿšฉ", + "crossed_flags": "๐ŸŽŒ", + "black_flag": "๐Ÿด", + "white_flag": "๐Ÿณ๏ธ", + "rainbow_flag": "๐Ÿณ๏ธโ€๐ŸŒˆ", + "transgender_flag": "๐Ÿณ๏ธโ€โšง๏ธ", + "pirate_flag": "๐Ÿดโ€โ˜ ๏ธ", + "ascension_island": "๐Ÿ‡ฆ๐Ÿ‡จ", + "andorra": "๐Ÿ‡ฆ๐Ÿ‡ฉ", + "united_arab_emirates": "๐Ÿ‡ฆ๐Ÿ‡ช", + "afghanistan": "๐Ÿ‡ฆ๐Ÿ‡ซ", + "antigua_barbuda": "๐Ÿ‡ฆ๐Ÿ‡ฌ", + "anguilla": "๐Ÿ‡ฆ๐Ÿ‡ฎ", + "albania": "๐Ÿ‡ฆ๐Ÿ‡ฑ", + "armenia": "๐Ÿ‡ฆ๐Ÿ‡ฒ", + "angola": "๐Ÿ‡ฆ๐Ÿ‡ด", + "antarctica": "๐Ÿ‡ฆ๐Ÿ‡ถ", + "argentina": "๐Ÿ‡ฆ๐Ÿ‡ท", + "american_samoa": "๐Ÿ‡ฆ๐Ÿ‡ธ", + "austria": "๐Ÿ‡ฆ๐Ÿ‡น", + "australia": "๐Ÿ‡ฆ๐Ÿ‡บ", + "aruba": "๐Ÿ‡ฆ๐Ÿ‡ผ", + "aland_islands": "๐Ÿ‡ฆ๐Ÿ‡ฝ", + "azerbaijan": "๐Ÿ‡ฆ๐Ÿ‡ฟ", + "bosnia_herzegovina": "๐Ÿ‡ง๐Ÿ‡ฆ", + "barbados": "๐Ÿ‡ง๐Ÿ‡ง", + "bangladesh": "๐Ÿ‡ง๐Ÿ‡ฉ", + "belgium": "๐Ÿ‡ง๐Ÿ‡ช", + "burkina_faso": "๐Ÿ‡ง๐Ÿ‡ซ", + "bulgaria": "๐Ÿ‡ง๐Ÿ‡ฌ", + "bahrain": "๐Ÿ‡ง๐Ÿ‡ญ", + "burundi": "๐Ÿ‡ง๐Ÿ‡ฎ", + "benin": "๐Ÿ‡ง๐Ÿ‡ฏ", + "st_barthelemy": "๐Ÿ‡ง๐Ÿ‡ฑ", + "bermuda": "๐Ÿ‡ง๐Ÿ‡ฒ", + "brunei": "๐Ÿ‡ง๐Ÿ‡ณ", + "bolivia": "๐Ÿ‡ง๐Ÿ‡ด", + "caribbean_netherlands": "๐Ÿ‡ง๐Ÿ‡ถ", + "brazil": "๐Ÿ‡ง๐Ÿ‡ท", + "bahamas": "๐Ÿ‡ง๐Ÿ‡ธ", + "bhutan": "๐Ÿ‡ง๐Ÿ‡น", + "bouvet_island": "๐Ÿ‡ง๐Ÿ‡ป", + "botswana": "๐Ÿ‡ง๐Ÿ‡ผ", + "belarus": "โฌœ๏ธ๐ŸŸฅโฌœ", + "belize": "๐Ÿ‡ง๐Ÿ‡ฟ", + "canada": "๐Ÿ‡จ๐Ÿ‡ฆ", + "cocos_islands": "๐Ÿ‡จ๐Ÿ‡จ", + "congo_kinshasa": "๐Ÿ‡จ๐Ÿ‡ฉ", + "central_african_republic": "๐Ÿ‡จ๐Ÿ‡ซ", + "congo_brazzaville": "๐Ÿ‡จ๐Ÿ‡ฌ", + "switzerland": "๐Ÿ‡จ๐Ÿ‡ญ", + "cote_divoire": "๐Ÿ‡จ๐Ÿ‡ฎ", + "cook_islands": "๐Ÿ‡จ๐Ÿ‡ฐ", + "chile": "๐Ÿ‡จ๐Ÿ‡ฑ", + "cameroon": "๐Ÿ‡จ๐Ÿ‡ฒ", + "cn": "๐Ÿ‡จ๐Ÿ‡ณ", + "colombia": "๐Ÿ‡จ๐Ÿ‡ด", + "clipperton_island": "๐Ÿ‡จ๐Ÿ‡ต", + "costa_rica": "๐Ÿ‡จ๐Ÿ‡ท", + "cuba": "๐Ÿ‡จ๐Ÿ‡บ", + "cape_verde": "๐Ÿ‡จ๐Ÿ‡ป", + "curacao": "๐Ÿ‡จ๐Ÿ‡ผ", + "christmas_island": "๐Ÿ‡จ๐Ÿ‡ฝ", + "cyprus": "๐Ÿ‡จ๐Ÿ‡พ", + "czech_republic": "๐Ÿ‡จ๐Ÿ‡ฟ", + "de": "๐Ÿ‡ฉ๐Ÿ‡ช", + "diego_garcia": "๐Ÿ‡ฉ๐Ÿ‡ฌ", + "djibouti": "๐Ÿ‡ฉ๐Ÿ‡ฏ", + "denmark": "๐Ÿ‡ฉ๐Ÿ‡ฐ", + "dominica": "๐Ÿ‡ฉ๐Ÿ‡ฒ", + "dominican_republic": "๐Ÿ‡ฉ๐Ÿ‡ด", + "algeria": "๐Ÿ‡ฉ๐Ÿ‡ฟ", + "ceuta_melilla": "๐Ÿ‡ช๐Ÿ‡ฆ", + "ecuador": "๐Ÿ‡ช๐Ÿ‡จ", + "estonia": "๐Ÿ‡ช๐Ÿ‡ช", + "egypt": "๐Ÿ‡ช๐Ÿ‡ฌ", + "western_sahara": "๐Ÿ‡ช๐Ÿ‡ญ", + "eritrea": "๐Ÿ‡ช๐Ÿ‡ท", + "es": "๐Ÿ‡ช๐Ÿ‡ธ", + "ethiopia": "๐Ÿ‡ช๐Ÿ‡น", + "eu": "๐Ÿ‡ช๐Ÿ‡บ", + "european_union": "๐Ÿ‡ช๐Ÿ‡บ", + "finland": "๐Ÿ‡ซ๐Ÿ‡ฎ", + "fiji": "๐Ÿ‡ซ๐Ÿ‡ฏ", + "falkland_islands": "๐Ÿ‡ซ๐Ÿ‡ฐ", + "micronesia": "๐Ÿ‡ซ๐Ÿ‡ฒ", + "faroe_islands": "๐Ÿ‡ซ๐Ÿ‡ด", + "fr": "๐Ÿ‡ซ๐Ÿ‡ท", + "gabon": "๐Ÿ‡ฌ๐Ÿ‡ฆ", + "gb": "๐Ÿ‡ฌ๐Ÿ‡ง", + "uk": "๐Ÿ‡ฌ๐Ÿ‡ง", + "grenada": "๐Ÿ‡ฌ๐Ÿ‡ฉ", + "georgia": "๐Ÿ‡ฌ๐Ÿ‡ช", + "french_guiana": "๐Ÿ‡ฌ๐Ÿ‡ซ", + "guernsey": "๐Ÿ‡ฌ๐Ÿ‡ฌ", + "ghana": "๐Ÿ‡ฌ๐Ÿ‡ญ", + "gibraltar": "๐Ÿ‡ฌ๐Ÿ‡ฎ", + "greenland": "๐Ÿ‡ฌ๐Ÿ‡ฑ", + "gambia": "๐Ÿ‡ฌ๐Ÿ‡ฒ", + "guinea": "๐Ÿ‡ฌ๐Ÿ‡ณ", + "guadeloupe": "๐Ÿ‡ฌ๐Ÿ‡ต", + "equatorial_guinea": "๐Ÿ‡ฌ๐Ÿ‡ถ", + "greece": "๐Ÿ‡ฌ๐Ÿ‡ท", + "south_georgia_south_sandwich_islands": "๐Ÿ‡ฌ๐Ÿ‡ธ", + "guatemala": "๐Ÿ‡ฌ๐Ÿ‡น", + "guam": "๐Ÿ‡ฌ๐Ÿ‡บ", + "guinea_bissau": "๐Ÿ‡ฌ๐Ÿ‡ผ", + "guyana": "๐Ÿ‡ฌ๐Ÿ‡พ", + "hong_kong": "๐Ÿ‡ญ๐Ÿ‡ฐ", + "heard_mcdonald_islands": "๐Ÿ‡ญ๐Ÿ‡ฒ", + "honduras": "๐Ÿ‡ญ๐Ÿ‡ณ", + "croatia": "๐Ÿ‡ญ๐Ÿ‡ท", + "haiti": "๐Ÿ‡ญ๐Ÿ‡น", + "hungary": "๐Ÿ‡ญ๐Ÿ‡บ", + "canary_islands": "๐Ÿ‡ฎ๐Ÿ‡จ", + "indonesia": "๐Ÿ‡ฎ๐Ÿ‡ฉ", + "ireland": "๐Ÿ‡ฎ๐Ÿ‡ช", + "israel": "๐Ÿ‡ฎ๐Ÿ‡ฑ", + "isle_of_man": "๐Ÿ‡ฎ๐Ÿ‡ฒ", + "india": "๐Ÿ‡ฎ๐Ÿ‡ณ", + "british_indian_ocean_territory": "๐Ÿ‡ฎ๐Ÿ‡ด", + "iraq": "๐Ÿ‡ฎ๐Ÿ‡ถ", + "iran": "๐Ÿ‡ฎ๐Ÿ‡ท", + "iceland": "๐Ÿ‡ฎ๐Ÿ‡ธ", + "it": "๐Ÿ‡ฎ๐Ÿ‡น", + "jersey": "๐Ÿ‡ฏ๐Ÿ‡ช", + "jamaica": "๐Ÿ‡ฏ๐Ÿ‡ฒ", + "jordan": "๐Ÿ‡ฏ๐Ÿ‡ด", + "jp": "๐Ÿ‡ฏ๐Ÿ‡ต", + "kenya": "๐Ÿ‡ฐ๐Ÿ‡ช", + "kyrgyzstan": "๐Ÿ‡ฐ๐Ÿ‡ฌ", + "cambodia": "๐Ÿ‡ฐ๐Ÿ‡ญ", + "kiribati": "๐Ÿ‡ฐ๐Ÿ‡ฎ", + "comoros": "๐Ÿ‡ฐ๐Ÿ‡ฒ", + "st_kitts_nevis": "๐Ÿ‡ฐ๐Ÿ‡ณ", + "north_korea": "๐Ÿ‡ฐ๐Ÿ‡ต", + "kr": "๐Ÿ‡ฐ๐Ÿ‡ท", + "kuwait": "๐Ÿ‡ฐ๐Ÿ‡ผ", + "cayman_islands": "๐Ÿ‡ฐ๐Ÿ‡พ", + "kazakhstan": "๐Ÿ‡ฐ๐Ÿ‡ฟ", + "laos": "๐Ÿ‡ฑ๐Ÿ‡ฆ", + "lebanon": "๐Ÿ‡ฑ๐Ÿ‡ง", + "st_lucia": "๐Ÿ‡ฑ๐Ÿ‡จ", + "liechtenstein": "๐Ÿ‡ฑ๐Ÿ‡ฎ", + "sri_lanka": "๐Ÿ‡ฑ๐Ÿ‡ฐ", + "liberia": "๐Ÿ‡ฑ๐Ÿ‡ท", + "lesotho": "๐Ÿ‡ฑ๐Ÿ‡ธ", + "lithuania": "๐Ÿ‡ฑ๐Ÿ‡น", + "luxembourg": "๐Ÿ‡ฑ๐Ÿ‡บ", + "latvia": "๐Ÿ‡ฑ๐Ÿ‡ป", + "libya": "๐Ÿ‡ฑ๐Ÿ‡พ", + "morocco": "๐Ÿ‡ฒ๐Ÿ‡ฆ", + "monaco": "๐Ÿ‡ฒ๐Ÿ‡จ", + "moldova": "๐Ÿ‡ฒ๐Ÿ‡ฉ", + "montenegro": "๐Ÿ‡ฒ๐Ÿ‡ช", + "st_martin": "๐Ÿ‡ฒ๐Ÿ‡ซ", + "madagascar": "๐Ÿ‡ฒ๐Ÿ‡ฌ", + "marshall_islands": "๐Ÿ‡ฒ๐Ÿ‡ญ", + "macedonia": "๐Ÿ‡ฒ๐Ÿ‡ฐ", + "mali": "๐Ÿ‡ฒ๐Ÿ‡ฑ", + "myanmar": "๐Ÿ‡ฒ๐Ÿ‡ฒ", + "mongolia": "๐Ÿ‡ฒ๐Ÿ‡ณ", + "macau": "๐Ÿ‡ฒ๐Ÿ‡ด", + "northern_mariana_islands": "๐Ÿ‡ฒ๐Ÿ‡ต", + "martinique": "๐Ÿ‡ฒ๐Ÿ‡ถ", + "mauritania": "๐Ÿ‡ฒ๐Ÿ‡ท", + "montserrat": "๐Ÿ‡ฒ๐Ÿ‡ธ", + "malta": "๐Ÿ‡ฒ๐Ÿ‡น", + "mauritius": "๐Ÿ‡ฒ๐Ÿ‡บ", + "maldives": "๐Ÿ‡ฒ๐Ÿ‡ป", + "malawi": "๐Ÿ‡ฒ๐Ÿ‡ผ", + "mexico": "๐Ÿ‡ฒ๐Ÿ‡ฝ", + "malaysia": "๐Ÿ‡ฒ๐Ÿ‡พ", + "mozambique": "๐Ÿ‡ฒ๐Ÿ‡ฟ", + "namibia": "๐Ÿ‡ณ๐Ÿ‡ฆ", + "new_caledonia": "๐Ÿ‡ณ๐Ÿ‡จ", + "niger": "๐Ÿ‡ณ๐Ÿ‡ช", + "norfolk_island": "๐Ÿ‡ณ๐Ÿ‡ซ", + "nigeria": "๐Ÿ‡ณ๐Ÿ‡ฌ", + "nicaragua": "๐Ÿ‡ณ๐Ÿ‡ฎ", + "netherlands": "๐Ÿ‡ณ๐Ÿ‡ฑ", + "norway": "๐Ÿ‡ณ๐Ÿ‡ด", + "nepal": "๐Ÿ‡ณ๐Ÿ‡ต", + "nauru": "๐Ÿ‡ณ๐Ÿ‡ท", + "niue": "๐Ÿ‡ณ๐Ÿ‡บ", + "new_zealand": "๐Ÿ‡ณ๐Ÿ‡ฟ", + "oman": "๐Ÿ‡ด๐Ÿ‡ฒ", + "panama": "๐Ÿ‡ต๐Ÿ‡ฆ", + "peru": "๐Ÿ‡ต๐Ÿ‡ช", + "french_polynesia": "๐Ÿ‡ต๐Ÿ‡ซ", + "papua_new_guinea": "๐Ÿ‡ต๐Ÿ‡ฌ", + "philippines": "๐Ÿ‡ต๐Ÿ‡ญ", + "pakistan": "๐Ÿ‡ต๐Ÿ‡ฐ", + "poland": "๐Ÿ‡ต๐Ÿ‡ฑ", + "st_pierre_miquelon": "๐Ÿ‡ต๐Ÿ‡ฒ", + "pitcairn_islands": "๐Ÿ‡ต๐Ÿ‡ณ", + "puerto_rico": "๐Ÿ‡ต๐Ÿ‡ท", + "palestinian_territories": "๐Ÿ‡ต๐Ÿ‡ธ", + "portugal": "๐Ÿ‡ต๐Ÿ‡น", + "palau": "๐Ÿ‡ต๐Ÿ‡ผ", + "paraguay": "๐Ÿ‡ต๐Ÿ‡พ", + "qatar": "๐Ÿ‡ถ๐Ÿ‡ฆ", + "reunion": "๐Ÿ‡ท๐Ÿ‡ช", + "romania": "๐Ÿ‡ท๐Ÿ‡ด", + "serbia": "๐Ÿ‡ท๐Ÿ‡ธ", + "ru": "๐Ÿ‡ท๐Ÿ‡บ", + "rwanda": "๐Ÿ‡ท๐Ÿ‡ผ", + "saudi_arabia": "๐Ÿ‡ธ๐Ÿ‡ฆ", + "solomon_islands": "๐Ÿ‡ธ๐Ÿ‡ง", + "seychelles": "๐Ÿ‡ธ๐Ÿ‡จ", + "sudan": "๐Ÿ‡ธ๐Ÿ‡ฉ", + "sweden": "๐Ÿ‡ธ๐Ÿ‡ช", + "singapore": "๐Ÿ‡ธ๐Ÿ‡ฌ", + "st_helena": "๐Ÿ‡ธ๐Ÿ‡ญ", + "slovenia": "๐Ÿ‡ธ๐Ÿ‡ฎ", + "svalbard_jan_mayen": "๐Ÿ‡ธ๐Ÿ‡ฏ", + "slovakia": "๐Ÿ‡ธ๐Ÿ‡ฐ", + "sierra_leone": "๐Ÿ‡ธ๐Ÿ‡ฑ", + "san_marino": "๐Ÿ‡ธ๐Ÿ‡ฒ", + "senegal": "๐Ÿ‡ธ๐Ÿ‡ณ", + "somalia": "๐Ÿ‡ธ๐Ÿ‡ด", + "suriname": "๐Ÿ‡ธ๐Ÿ‡ท", + "south_sudan": "๐Ÿ‡ธ๐Ÿ‡ธ", + "sao_tome_principe": "๐Ÿ‡ธ๐Ÿ‡น", + "el_salvador": "๐Ÿ‡ธ๐Ÿ‡ป", + "sint_maarten": "๐Ÿ‡ธ๐Ÿ‡ฝ", + "syria": "๐Ÿ‡ธ๐Ÿ‡พ", + "swaziland": "๐Ÿ‡ธ๐Ÿ‡ฟ", + "tristan_da_cunha": "๐Ÿ‡น๐Ÿ‡ฆ", + "turks_caicos_islands": "๐Ÿ‡น๐Ÿ‡จ", + "chad": "๐Ÿ‡น๐Ÿ‡ฉ", + "french_southern_territories": "๐Ÿ‡น๐Ÿ‡ซ", + "togo": "๐Ÿ‡น๐Ÿ‡ฌ", + "thailand": "๐Ÿ‡น๐Ÿ‡ญ", + "tajikistan": "๐Ÿ‡น๐Ÿ‡ฏ", + "tokelau": "๐Ÿ‡น๐Ÿ‡ฐ", + "timor_leste": "๐Ÿ‡น๐Ÿ‡ฑ", + "turkmenistan": "๐Ÿ‡น๐Ÿ‡ฒ", + "tunisia": "๐Ÿ‡น๐Ÿ‡ณ", + "tonga": "๐Ÿ‡น๐Ÿ‡ด", + "tr": "๐Ÿ‡น๐Ÿ‡ท", + "trinidad_tobago": "๐Ÿ‡น๐Ÿ‡น", + "tuvalu": "๐Ÿ‡น๐Ÿ‡ป", + "taiwan": "๐Ÿ‡น๐Ÿ‡ผ", + "tanzania": "๐Ÿ‡น๐Ÿ‡ฟ", + "ukraine": "๐Ÿ‡บ๐Ÿ‡ฆ", + "uganda": "๐Ÿ‡บ๐Ÿ‡ฌ", + "us_outlying_islands": "๐Ÿ‡บ๐Ÿ‡ฒ", + "united_nations": "๐Ÿ‡บ๐Ÿ‡ณ", + "us": "๐Ÿ‡บ๐Ÿ‡ธ", + "uruguay": "๐Ÿ‡บ๐Ÿ‡พ", + "uzbekistan": "๐Ÿ‡บ๐Ÿ‡ฟ", + "vatican_city": "๐Ÿ‡ป๐Ÿ‡ฆ", + "st_vincent_grenadines": "๐Ÿ‡ป๐Ÿ‡จ", + "venezuela": "๐Ÿ‡ป๐Ÿ‡ช", + "british_virgin_islands": "๐Ÿ‡ป๐Ÿ‡ฌ", + "us_virgin_islands": "๐Ÿ‡ป๐Ÿ‡ฎ", + "vietnam": "๐Ÿ‡ป๐Ÿ‡ณ", + "vanuatu": "๐Ÿ‡ป๐Ÿ‡บ", + "wallis_futuna": "๐Ÿ‡ผ๐Ÿ‡ซ", + "samoa": "๐Ÿ‡ผ๐Ÿ‡ธ", + "kosovo": "๐Ÿ‡ฝ๐Ÿ‡ฐ", + "yemen": "๐Ÿ‡พ๐Ÿ‡ช", + "mayotte": "๐Ÿ‡พ๐Ÿ‡น", + "south_africa": "๐Ÿ‡ฟ๐Ÿ‡ฆ", + "zambia": "๐Ÿ‡ฟ๐Ÿ‡ฒ", + "zimbabwe": "๐Ÿ‡ฟ๐Ÿ‡ผ", + "england": "๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ", + "scotland": "๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ", + "wales": "๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ" +}; diff --git a/app/vmui/packages/vmui/src/constants/markedPlugins.ts b/app/vmui/packages/vmui/src/constants/markedPlugins.ts new file mode 100644 index 000000000..2a7d046c7 --- /dev/null +++ b/app/vmui/packages/vmui/src/constants/markedPlugins.ts @@ -0,0 +1,5 @@ +import { markedEmoji } from "marked-emoji"; +import { marked } from "marked"; +import emojis from "./emojis"; + +marked.use(markedEmoji({ emojis, renderer: (token) => token.emoji })); diff --git a/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx b/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx index fb930c4ba..c41e4be92 100644 --- a/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx +++ b/app/vmui/packages/vmui/src/hooks/useGetMetricsQL.tsx @@ -54,7 +54,7 @@ const useGetMetricsQL = () => { const processMarkdown = (text: string) => { const div = document.createElement("div"); - div.innerHTML = marked(text); + div.innerHTML = marked(text) as string; const groups = div.querySelectorAll(`${CATEGORY_TAG}, ${FUNCTION_TAG}`); return processGroups(groups); }; diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx index 8696531e4..9dbebedb6 100644 --- a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx +++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogs.tsx @@ -26,6 +26,7 @@ const ExploreLogs: FC = () => { const { logs, isLoading, error, fetchLogs } = useFetchLogs(serverUrl, query, limit); const [queryError, setQueryError] = useState(""); const [loaded, isLoaded] = useState(false); + const [markdownParsing, setMarkdownParsing] = useState(getFromStorage("LOGS_MARKDOWN") === "true"); const handleRunQuery = () => { if (!query) { @@ -51,6 +52,11 @@ const ExploreLogs: FC = () => { saveToStorage("LOGS_LIMIT", `${limit}`); }; + const handleChangeMarkdownParsing = (val: boolean) => { + saveToStorage("LOGS_MARKDOWN", `${val}`); + setMarkdownParsing(val); + }; + useEffect(() => { if (query) handleRunQuery(); }, [period]); @@ -65,15 +71,18 @@ const ExploreLogs: FC = () => { query={query} error={queryError} limit={limit} + markdownParsing={markdownParsing} onChange={setQuery} onChangeLimit={handleChangeLimit} onRun={handleRunQuery} + onChangeMarkdownParsing={handleChangeMarkdownParsing} /> {isLoading && } {error && {error}} ); diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx index 7538a0e14..3a66a3503 100644 --- a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx +++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsBody/ExploreLogsBody.tsx @@ -15,10 +15,12 @@ import useBoolean from "../../../hooks/useBoolean"; import TableLogs from "./TableLogs"; import GroupLogs from "../GroupLogs/GroupLogs"; import { DATE_TIME_FORMAT } from "../../../constants/date"; +import { marked } from "marked"; export interface ExploreLogBodyProps { data: Logs[]; loaded?: boolean; + markdownParsing: boolean; } enum DisplayType { @@ -33,7 +35,7 @@ const tabs = [ { label: "JSON", value: DisplayType.json, icon: }, ]; -const ExploreLogsBody: FC = ({ data, loaded }) => { +const ExploreLogsBody: FC = ({ data, loaded, markdownParsing }) => { const { isMobile } = useDeviceDetect(); const { timezone } = useTimeState(); const { setSearchParamsFromKeys } = useSearchParamsFromObject(); @@ -46,11 +48,12 @@ const ExploreLogsBody: FC = ({ data, loaded }) => { ...item, _vmui_time: item._time ? dayjs(item._time).tz().format(`${DATE_TIME_FORMAT}.SSS`) : "", _vmui_data: JSON.stringify(item, null, 2), + _vmui_markdown: marked(item._msg.replace(/```/g, "\n```\n")) as string, })) as Logs[], [data, timezone]); const columns = useMemo(() => { if (!logs?.length) return []; - const hideColumns = ["_vmui_data", "_vmui_time"]; + const hideColumns = ["_vmui_data", "_vmui_time", "_vmui_markdown"]; const keys = new Set(); for (const item of logs) { for (const key in item) { @@ -125,6 +128,7 @@ const ExploreLogsBody: FC = ({ data, loaded }) => { )} {activeTab === DisplayType.json && ( diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx index 5a7c54973..aed3af35b 100644 --- a/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx +++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/ExploreLogsHeader/ExploreLogsHeader.tsx @@ -6,17 +6,29 @@ import useDeviceDetect from "../../../hooks/useDeviceDetect"; import Button from "../../../components/Main/Button/Button"; import QueryEditor from "../../../components/Configurators/QueryEditor/QueryEditor"; import TextField from "../../../components/Main/TextField/TextField"; +import Switch from "../../../components/Main/Switch/Switch"; export interface ExploreLogHeaderProps { query: string; limit: number; error?: string; + markdownParsing: boolean; onChange: (val: string) => void; onChangeLimit: (val: number) => void; onRun: () => void; + onChangeMarkdownParsing: (val: boolean) => void; } -const ExploreLogsHeader: FC = ({ query, limit, error, onChange, onChangeLimit, onRun }) => { +const ExploreLogsHeader: FC = ({ + query, + limit, + error, + markdownParsing, + onChange, + onChangeLimit, + onRun, + onChangeMarkdownParsing, +}) => { const { isMobile } = useDeviceDetect(); const [errorLimit, setErrorLimit] = useState(""); @@ -66,6 +78,14 @@ const ExploreLogsHeader: FC = ({ query, limit, error, onC />
+
+ +
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx index 7208de932..64539db0e 100644 --- a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx +++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/GroupLogsItem.tsx @@ -10,15 +10,16 @@ import classNames from "classnames"; interface Props { log: Logs; + markdownParsing: boolean; } -const GroupLogsItem: FC = ({ log }) => { +const GroupLogsItem: FC = ({ log, markdownParsing }) => { const { value: isOpenFields, toggle: toggleOpenFields, } = useBoolean(false); - const excludeKeys = ["_stream", "_msg", "_time", "_vmui_time", "_vmui_data"]; + const excludeKeys = ["_stream", "_msg", "_time", "_vmui_time", "_vmui_data", "_vmui_markdown"]; const fields = Object.entries(log).filter(([key]) => !excludeKeys.includes(key)); const hasFields = fields.length > 0; @@ -71,6 +72,7 @@ const GroupLogsItem: FC = ({ log }) => { "vm-group-logs-row-content__msg": true, "vm-group-logs-row-content__msg_missing": !log._msg })} + dangerouslySetInnerHTML={markdownParsing && log._vmui_markdown ? { __html: log._vmui_markdown } : undefined} > {log._msg || "message missing"}
diff --git a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss index 0710a3f8e..71ee06179 100644 --- a/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss +++ b/app/vmui/packages/vmui/src/pages/ExploreLogs/GroupLogs/style.scss @@ -96,6 +96,65 @@ font-style: italic; text-align: center; } + + /* styles for markdown */ + p, pre, code { + white-space: pre-wrap; + word-wrap: break-word; + word-break: normal; + } + + code:not(pre code), pre { + display: inline-block; + background: $color-hover-black; + border: 1px solid $color-hover-black; + border-radius: $border-radius-small; + tab-size: 4; + font-variant-ligatures: none; + margin: calc($padding-small/4) 0; + } + + p { + font-family: $font-family-global; + line-height: 1.4; + } + + pre { + padding: $padding-small; + } + + code { + font-size: $font-size-small; + padding: calc($padding-small / 4) calc($padding-small / 2); + } + + a { + color: $color-primary; + cursor: pointer; + + &:hover { + text-decoration: underline; + } + } + + strong { + font-weight: bold; + } + + em { + font-style: italic; + } + + blockquote { + border-left: 4px solid $color-hover-black; + margin: calc($padding-small/2) $padding-small; + padding: calc($padding-small/2) $padding-small; + } + + ul, ol { + list-style-position: inside; + } + /* end styles for markdown */ } } diff --git a/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx b/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx index 268d51a93..3c2dce8e1 100644 --- a/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx +++ b/app/vmui/packages/vmui/src/pages/PredefinedPanels/PredefinedPanel/PredefinedPanel.tsx @@ -89,7 +89,7 @@ const PredefinedPanel: FC = ({ <>
Description: -
+

diff --git a/app/vmui/packages/vmui/src/utils/storage.ts b/app/vmui/packages/vmui/src/utils/storage.ts index 995cf7772..7c5ee7109 100644 --- a/app/vmui/packages/vmui/src/utils/storage.ts +++ b/app/vmui/packages/vmui/src/utils/storage.ts @@ -7,6 +7,7 @@ export type StorageKeys = "AUTOCOMPLETE" | "DISABLED_DEFAULT_TIMEZONE" | "THEME" | "LOGS_LIMIT" + | "LOGS_MARKDOWN" | "EXPLORE_METRICS_TIPS" | "QUERY_HISTORY" | "QUERY_FAVORITES" diff --git a/docs/VictoriaLogs/CHANGELOG.md b/docs/VictoriaLogs/CHANGELOG.md index 89fa29625..acc752f8e 100644 --- a/docs/VictoriaLogs/CHANGELOG.md +++ b/docs/VictoriaLogs/CHANGELOG.md @@ -19,6 +19,8 @@ according to [these docs](https://docs.victoriametrics.com/victorialogs/quicksta ## tip +* FEATURE: [web UI](https://docs.victoriametrics.com/VictoriaLogs/querying/#web-ui): add markdown support to the `Group` view. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/6292). + ## [v0.18.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v0.18.0-victorialogs) Released at 2024-06-06