diff --git a/.electron-vue/webpack.renderer.config.js b/.electron-vue/webpack.renderer.config.js index c67c6496..13efc531 100644 --- a/.electron-vue/webpack.renderer.config.js +++ b/.electron-vue/webpack.renderer.config.js @@ -45,7 +45,7 @@ const rendererConfig = { } }, { - test: /(katex|github\-markdown|highlight\.js\/styles\/default)\.css$/, + test: /(katex|github\-markdown|prism[\-a-z]*)\.css$/, use: [ 'to-string-loader', 'css-loader' @@ -53,7 +53,7 @@ const rendererConfig = { }, { test: /\.css$/, - exclude: /(katex|github\-markdown|highlight\.js\/styles\/default)\.css$/, + exclude: /(katex|github\-markdown|prism[\-a-z]*)\.css$/, use: [ proMode ? MiniCssExtractPlugin.loader : 'style-loader', { loader: 'css-loader', options: { importLoader: 1 } }, diff --git a/.electron-vue/webpack.web.config.js b/.electron-vue/webpack.web.config.js index 223769a7..261e9baf 100644 --- a/.electron-vue/webpack.web.config.js +++ b/.electron-vue/webpack.web.config.js @@ -34,7 +34,7 @@ const webConfig = { } }, { - test: /(katex|github\-markdown|highlight\.js\/styles\/default)\.css$/, + test: /(katex|github\-markdown|prism[\-a-z]*)\.css$/, use: [ 'to-string-loader', 'css-loader' @@ -42,7 +42,7 @@ const webConfig = { }, { test: /\.css$/, - exclude: /(katex|github\-markdown|highlight\.js\/styles\/default)\.css$/, + exclude: /(katex|github\-markdown|prism[\-a-z]*)\.css$/, use: [ proMode ? MiniCssExtractPlugin.loader : 'style-loader', { loader: 'css-loader', options: { importLoader: 1 } }, diff --git a/README.md b/README.md index f6e5c806..47f9bdd2 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ :es: - Portuguese + :portugal: diff --git a/package-lock.json b/package-lock.json index 8045ec87..6b5e6ce4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -192,6 +192,12 @@ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", "dev": true }, + "@types/node": { + "version": "8.10.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.36.tgz", + "integrity": "sha512-SL6KhfM7PTqiFmbCW3eVNwVBZ+88Mrzbuvn9olPsfv43mbiWaFY+nRcz/TGGku0/lc2FepdMbImdMY1JrQ+zbw==", + "dev": true + }, "@vue/component-compiler-utils": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.2.0.tgz", @@ -2860,6 +2866,17 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "clipboard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz", + "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -3841,6 +3858,12 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -4167,22 +4190,14 @@ "dev": true }, "electron": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-3.0.3.tgz", - "integrity": "sha512-5ypkMO368UbWd1e0ZwKaflYLXSHSw2wAvC5/yApv03pX/KV3uD/2/qF7rW841H9I3QPmS03YZ6UZmlQV/fNczw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-3.0.5.tgz", + "integrity": "sha512-rcHNbhSGfj80Av5p06LgIUxN8wQbrdx8yblikJamDezqxe0B11CJSEJuidz6TJoCRDZuWHt+P5xMAEhp92ZUcA==", "dev": true, "requires": { "@types/node": "^8.0.24", "electron-download": "^4.1.0", "extract-zip": "^1.0.3" - }, - "dependencies": { - "@types/node": { - "version": "8.10.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.34.tgz", - "integrity": "sha512-alypNiaAEd0RBGXoWehJ2gchPYCITmw4CYBoB5nDlji8l8on7FsklfdfIs4DDmgpKLSX3OF3ha6SV+0W7cTzUA==", - "dev": true - } } }, "electron-builder": { @@ -6514,6 +6529,15 @@ "minimatch": "~3.0.2" } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, "got": { "version": "6.7.1", "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -6819,7 +6843,8 @@ "highlight.js": { "version": "9.12.0", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=" + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", + "dev": true }, "hmac-drbg": { "version": "1.0.1", @@ -6895,14 +6920,6 @@ "uglify-js": "3.3.x" } }, - "html-parse-stringify2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz", - "integrity": "sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o=", - "requires": { - "void-elements": "^2.0.1" - } - }, "html-tags": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", @@ -15100,6 +15117,14 @@ "utila": "~0.4" } }, + "prismjs2": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/prismjs2/-/prismjs2-1.15.0.tgz", + "integrity": "sha512-/DT77JC3sLzWSpD4WOpIanoMuirt1KkqeFKAmTO4budSjrMwTvQgeeNECPuUm0uYQbH8fDe39s6QMFs6VR1GhQ==", + "requires": { + "clipboard": "^2.0.0" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -16052,6 +16077,12 @@ } } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -16324,14 +16355,6 @@ "parse-sel": "^1.0.0" } }, - "snabbdom-virtualize": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/snabbdom-virtualize/-/snabbdom-virtualize-0.7.0.tgz", - "integrity": "sha1-MfaDM4tmRXve2MHiLN2O1DjCo4c=", - "requires": { - "html-parse-stringify2": "^2" - } - }, "snake-case": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", @@ -17614,6 +17637,12 @@ "setimmediate": "^1.0.4" } }, + "tiny-emitter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", + "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==", + "optional": true + }, "title-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", @@ -18317,7 +18346,8 @@ "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true }, "vue": { "version": "2.5.17", diff --git a/package.json b/package.json index c83e20a0..65f32d41 100644 --- a/package.json +++ b/package.json @@ -132,14 +132,13 @@ "fs-extra": "^7.0.0", "fuzzaldrin": "^2.1.0", "github-markdown-css": "^2.10.0", - "highlight.js": "^9.12.0", "html-tags": "^2.0.0", "katex": "^0.10.0-rc.1", "markdown-toc": "^1.2.0", "popper.js": "^1.14.4", + "prismjs2": "^1.15.0", "snabbdom": "^0.7.2", "snabbdom-to-html": "^5.1.1", - "snabbdom-virtualize": "^0.7.0", "turndown": "^5.0.1", "turndown-plugin-gfm": "^1.0.2", "vue": "^2.5.17", @@ -164,7 +163,7 @@ "css-loader": "^1.0.0", "del": "^3.0.0", "devtron": "^1.4.0", - "electron": "^3.0.3", + "electron": "^3.0.5", "electron-builder": "^20.28.4", "electron-debug": "^2.0.0", "electron-devtools-installer": "^2.2.4", diff --git a/src/main/actions/paragraph.js b/src/main/actions/paragraph.js index efd44e1e..960dda8b 100644 --- a/src/main/actions/paragraph.js +++ b/src/main/actions/paragraph.js @@ -66,10 +66,10 @@ const setCheckedMenuItem = affiliation => { } else if (b.type === 'pre' && b.functionType) { if (b.functionType === 'frontmatter') { return item.id === 'frontMatterMenuItem' - } else if (b.functionType === 'code') { + } else if (/code$/.test(b.functionType)) { return item.id === 'codeFencesMenuItem' } else if (b.functionType === 'html') { - return false + return item.id === 'htmlBlockMenuItem' } else if (b.functionType === 'multiplemath') { return item.id === 'mathBlockMenuItem' } @@ -101,12 +101,8 @@ ipcMain.on('AGANI::selection-change', (e, { start, end, affiliation }) => { if ( (/th|td/.test(start.type) && /th|td/.test(end.type)) || - (start.type === 'span' && start.block.functionType === 'frontmatter') || - (end.type === 'span' && end.block.functionType === 'frontmatter') || - (start.type === 'span' && start.block.functionType === 'multiplemath') || - (end.type === 'span' && end.block.functionType === 'multiplemath') || - (start.type === 'pre' && start.block.functionType === 'html') || - (end.type === 'pre' && end.block.functionType === 'html') + (start.type === 'span' && start.block.functionType === 'codeLine') || + (end.type === 'span' && end.block.functionType === 'codeLine') ) { setParagraphMenuItemStatus(false) } else if (start.key !== end.key) { diff --git a/src/muya/lib/assets/styles/index.css b/src/muya/lib/assets/styles/index.css index 4ce7ba49..7c25cd84 100644 --- a/src/muya/lib/assets/styles/index.css +++ b/src/muya/lib/assets/styles/index.css @@ -1,3 +1,4 @@ +/* Common CSS use by both light and dark themes */ :root { --brandColor: #5b3cc4; --successColor: rgb(23, 201, 100); @@ -119,6 +120,9 @@ div.ag-function-html pre.ag-html-block { opacity: 0; z-index: -1; position: absolute; + margin-top: 0; + margin-bottom: 0; + overflow: visible; } div.ag-function-html.ag-active pre.ag-html-block, @@ -431,12 +435,17 @@ pre.ag-front-matter { margin: 1rem 0; } -span.ag-front-matter-line:first-of-type:empty::after { +pre.ag-front-matter span.ag-code-line:first-of-type:empty::after { content: 'Input YAML Front Matter...'; color: var(--placeholerColor); } -span.ag-multiple-math-line:first-of-type:empty::after { +pre[data-role$='code'] span.ag-language-input:empty::after { + content: 'Input Language...'; + color: var(--placeholerColor); +} + +pre.ag-multiple-math span.ag-code-line:first-of-type:empty::after { content: 'Input Mathematical Formula...'; color: var(--placeholerColor); } @@ -444,7 +453,8 @@ span.ag-multiple-math-line:first-of-type:empty::after { figure, pre.ag-html-block, div.ag-function-html, -pre.ag-code-block, +pre.ag-fence-code, +pre.ag-indent-code, li.ag-list-item > p.ag-paragraph { position: relative; display: inline-flex; @@ -460,9 +470,14 @@ li.ag-list-item > p.ag-paragraph > span { width: 100%; } -pre.ag-code-block { +pre.ag-fence-code, +pre.ag-indent-code { margin: 1rem 0; - padding: 0 .5rem; +} + +pre > code { + width: 100%; + display: block; } pre.ag-active.ag-front-matter::before, @@ -475,15 +490,19 @@ pre.ag-active.ag-multiple-math::after { content: '$$'; } -pre.ag-active.ag-code-block::before, -pre.ag-active.ag-code-block::after { +pre.ag-active.ag-fence-code::before, +pre.ag-active.ag-indent-code::after, +pre.ag-active.ag-fence-code::after, +pre.ag-active.ag-indent-code::before { content: '```'; } pre.ag-active.ag-front-matter::before, pre.ag-active.ag-front-matter::after, -pre.ag-active.ag-code-block::before, -pre.ag-active.ag-code-block::after, +pre.ag-active.ag-fence-code::before, +pre.ag-active.ag-fence-code::after, +pre.ag-active.ag-indent-code::before, +pre.ag-active.ag-indent-code::after, pre.ag-active.ag-multiple-math::before, pre.ag-active.ag-multiple-math::after { color: var(--regularColor); @@ -495,13 +514,15 @@ pre.ag-active.ag-multiple-math::after { pre.ag-active.ag-front-matter::before, pre.ag-active.ag-multiple-math::before, -pre.ag-active.ag-code-block::before { +pre.ag-active.ag-indent-code::before, +pre.ag-active.ag-fence-code::before { top: -20px; } pre.ag-active.ag-front-matter::after, pre.ag-active.ag-multiple-math::after, -pre.ag-active.ag-code-block::after { +pre.ag-active.ag-fence-code::after, +pre.ag-active.ag-indent-code::after { bottom: -23px; } @@ -520,7 +541,7 @@ figure.ag-active div.ag-math-preview { top: calc(100% + 8px); left: 50%; width: auto; - z-index: 1; + z-index: 10000; transform: translateX(-50%); padding: .5rem; background: #fff; @@ -534,10 +555,6 @@ div.ag-html-preview { width: 100%; } -pre .CodeMirror { - width: 100%; -} - img { max-width: 100%; } @@ -595,12 +612,12 @@ span.ag-emoji-marked-text { } .ag-language-input { - outline: none; + padding: 0 1rem; display: none; min-width: 80px; position: absolute; - top: -20px; - left: 30px; + top: -23px; + left: 20px; font-size: 14px; font-family: monospace; font-weight: 600; @@ -618,6 +635,13 @@ pre.ag-active .ag-language-input { display: block; } +.ag-language { + color: var(--activeColor); + font-weight: 600; + text-decoration: none; + font-family: monospace; +} + span.ag-image-marked-text, span.ag-link-in-bracket, span.ag-link-in-bracket .ag-backlash { color: var(--regularColor); font-size: 16px; @@ -625,11 +649,6 @@ span.ag-image-marked-text, span.ag-link-in-bracket, span.ag-link-in-bracket .ag- font-family: monospace; } -.ag-language { - color: var(--dangerColor); - text-decoration: none; - font-family: monospace; -} .ag-backlash { text-decoration: none; color: rgb(51, 51, 51); diff --git a/src/muya/lib/codeMirror/language.js b/src/muya/lib/codeMirror/language.js deleted file mode 100644 index a0f870d7..00000000 --- a/src/muya/lib/codeMirror/language.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * check edit language - */ -export const checkEditLanguage = (paragraph, selectionState) => { - const text = paragraph.textContent - const { start } = selectionState - const token = text.match(/(^`{3,})([^`]+)/) - - if (token) { - const len = token[1].length - const lang = token[2].trim() - if (start < len) return false - if (!lang) return false - return lang - } else { - return false - } -} diff --git a/src/muya/lib/config/index.js b/src/muya/lib/config/index.js index 5e28d3bd..3d3d40f0 100644 --- a/src/muya/lib/config/index.js +++ b/src/muya/lib/config/index.js @@ -6,7 +6,7 @@ import voidHtmlTags from 'html-tags/void' // Electron 2.0.2 not support yet! So give a default value 4 export const DEVICE_MEMORY = navigator.deviceMemory || 4 // Get the divice memory number(Chrome >= 63) export const UNDO_DEPTH = DEVICE_MEMORY >= 4 ? 100 : 50 -export const HAS_TEXT_BLOCK_REG = /^(h\d|span|th|td|hr|pre)/i +export const HAS_TEXT_BLOCK_REG = /^(h\d|span|th|td|hr)/i export const VOID_HTML_TAGS = voidHtmlTags export const HTML_TAGS = htmlTags // TYPE1 ~ TYPE7 according to https://github.github.com/gfm/#html-blocks @@ -68,21 +68,15 @@ export const CLASS_OR_ID = genUpper2LowerKeyHash([ 'AG_LINE', 'AG_ACTIVE', 'AG_EDITOR_ID', - 'AG_FLOAT_BOX_ID', - 'AG_FUNCTION_HTML', - 'AG_FLOAT_BOX', - 'AG_SHOW_FLOAT_BOX', - 'AG_FLOAT_ITEM', // LI element - 'AG_FLOAT_ITEM_ACTIVE', - 'AG_FLOAT_ITEM_ICON', // icon wrapper in li 'AG_EMOJI_MARKED_TEXT', - 'AG_CODE_BLOCK', + 'AG_FENCE_CODE', + 'AG_INDENT_CODE', 'AG_HTML_BLOCK', 'AG_HTML_ESCAPE', 'AG_FRONT_MATTER', - 'AG_FRONT_MATTER_LINE', - 'AG_MULTIPLE_MATH_LINE', - 'AG_CODEMIRROR_BLOCK', + 'AG_CODE_LINE', + 'AG_CODE_LINE_ADD', + 'AG_CODE_LINE_MINUS', 'AG_SHOW_PREVIEW', 'AG_HTML_PREVIEW', 'AG_LANGUAGE', @@ -134,20 +128,6 @@ export const CLASS_OR_ID = genUpper2LowerKeyHash([ 'AG_REFERENCE_LINK' ]) -export const codeMirrorConfig = { - // theme: 'railscasts', - lineWrapping: true, - autoCloseBrackets: true, - lineWiseCopyCut: false, - autoCloseTags: true, - autofocus: true, - tabSize: 2, - extraKeys: { - 'Cmd-Z': false, - 'Cmd-Y': false - } -} - export const DAED_REMOVE_SELECTOR = new Set([ '.ag-image-marked-text::before', '.ag-image-marked-text.ag-image-fail::before', @@ -209,7 +189,8 @@ export const HTML_TOOLS = [{ export const LINE_BREAK = '\n' export const PREVIEW_DOMPURIFY_CONFIG = { - FORBID_ATTR: ['style', 'class', 'contenteditable'], + // do not forbit `class` because `code` element use class to present language + FORBID_ATTR: ['style', 'contenteditable'], ALLOW_DATA_ATTR: false, USE_PROFILES: { html: true, diff --git a/src/muya/lib/contentState/arrowCtrl.js b/src/muya/lib/contentState/arrowCtrl.js index 4b30838b..cc7407a2 100644 --- a/src/muya/lib/contentState/arrowCtrl.js +++ b/src/muya/lib/contentState/arrowCtrl.js @@ -1,12 +1,4 @@ import { EVENT_KEYS, CLASS_OR_ID } from '../config' -import { - isCursorAtFirstLine, - isCursorAtLastLine, - isCursorAtBegin, - isCursorAtEnd, - getBeginPosition, - getEndPosition -} from '../codeMirror' import { findNearestParagraph } from '../selection/dom' import selection from '../selection' @@ -59,7 +51,6 @@ const arrowCtrl = ContentState => { const preBlock = this.findPreBlockInLocation(block) const nextBlock = this.findNextBlockInLocation(block) - const { left, right } = selection.getCaretOffsets(paragraph) const { start, end } = selection.getCursorRange() const { topOffset, bottomOffset } = selection.getCursorYOffset(paragraph) @@ -89,60 +80,6 @@ const arrowCtrl = ContentState => { } } - // handle `html` and `code` block when press arrow key - if (block.type === 'pre' && /code|html/.test(block.functionType)) { - // handle cursor in code block. the case at firstline or lastline. - const cm = this.codeBlocks.get(id) - const anchorBlock = block.functionType === 'html' ? this.getParent(this.getParent(block)) : block - let activeBlock - event.preventDefault() - event.stopPropagation() - switch (event.key) { - case EVENT_KEYS.ArrowLeft: // fallthrough - case EVENT_KEYS.ArrowUp: - if ( - (event.key === EVENT_KEYS.ArrowUp && isCursorAtFirstLine(cm) && preBlock) || - (event.key === EVENT_KEYS.ArrowLeft && isCursorAtBegin(cm) && preBlock) - ) { - activeBlock = preBlock - } - break - case EVENT_KEYS.ArrowRight: // fallthrough - case EVENT_KEYS.ArrowDown: - if ( - (event.key === EVENT_KEYS.ArrowDown && isCursorAtLastLine(cm)) || - (event.key === EVENT_KEYS.ArrowRight && isCursorAtEnd(cm)) - ) { - if (nextBlock) { - activeBlock = nextBlock - } else { - activeBlock = this.createBlockP() - this.insertAfter(activeBlock, anchorBlock) - } - } - break - } - - if (activeBlock) { - const cursorBlock = activeBlock.type === 'p' ? activeBlock.children[0] : activeBlock - const offset = cursorBlock.text.length - const key = cursorBlock.key - this.cursor = { - start: { - key, - offset - }, - end: { - key, - offset - } - } - - return this.partialRender() - } - return - } - if (/th|td/.test(block.type)) { let activeBlock const cellInNextRow = this.findNextRowCell(block) @@ -193,39 +130,6 @@ const arrowCtrl = ContentState => { } if ( - (preBlock && preBlock.type === 'pre' && /code|html/.test(preBlock.functionType) && event.key === EVENT_KEYS.ArrowUp) || - (preBlock && preBlock.type === 'pre' && /code|html/.test(preBlock.functionType) && event.key === EVENT_KEYS.ArrowLeft && left === 0) - ) { - event.preventDefault() - event.stopPropagation() - const key = preBlock.key - const offset = 0 - this.cursor = { - start: { key, offset }, - end: { key, offset } - } - - const cm = this.codeBlocks.get(preBlock.key) - preBlock.selection = getEndPosition(cm) - - return this.partialRender() - } else if ( - (nextBlock && nextBlock.type === 'pre' && /code|html/.test(nextBlock.functionType) && event.key === EVENT_KEYS.ArrowDown) || - (nextBlock && nextBlock.type === 'pre' && /code|html/.test(nextBlock.functionType) && event.key === EVENT_KEYS.ArrowRight && right === 0) - ) { - event.preventDefault() - event.stopPropagation() - const key = nextBlock.key - const offset = 0 - this.cursor = { - start: { key, offset }, - end: { key, offset } - } - - nextBlock.selection = getBeginPosition() - - return this.partialRender() - } else if ( (event.key === EVENT_KEYS.ArrowUp) || (event.key === EVENT_KEYS.ArrowLeft && start.offset === 0) ) { diff --git a/src/muya/lib/contentState/backspaceCtrl.js b/src/muya/lib/contentState/backspaceCtrl.js index 2ba6130f..971563d5 100644 --- a/src/muya/lib/contentState/backspaceCtrl.js +++ b/src/muya/lib/contentState/backspaceCtrl.js @@ -1,6 +1,5 @@ import selection from '../selection' import { findNearestParagraph, findOutMostParagraph } from '../selection/dom' -import { isCursorAtBegin, onlyHaveOneLine, getEndPosition } from '../codeMirror' const backspaceCtrl = ContentState => { ContentState.prototype.checkBackspaceCase = function () { @@ -128,6 +127,10 @@ const backspaceCtrl = ContentState => { return this.render() } + if (startBlock.functionType === 'languageInput' && start.offset === 0) { + return event.preventDefault() + } + // If select multiple paragraph or multiple characters in one paragraph, just let // updateCtrl to handle this case. if (start.key !== end.key || start.offset !== end.offset) { @@ -151,19 +154,39 @@ const backspaceCtrl = ContentState => { return tHeadHasContent || tBodyHasContent } - if (block.type === 'pre' && /code|html/.test(block.functionType)) { - const cm = this.codeBlocks.get(id) - // if event.preventDefault(), you can not use backspace in language input. - if (isCursorAtBegin(cm) && onlyHaveOneLine(cm)) { - const anchorBlock = block.functionType === 'html' ? this.getParent(this.getParent(block)) : block - event.preventDefault() - const value = cm.getValue() - const newBlock = this.createBlockP(value) - this.insertBefore(newBlock, anchorBlock) - this.removeBlock(anchorBlock) - this.codeBlocks.delete(id) - const key = newBlock.children[0].key + if ( + block.type === 'span' && + block.functionType === 'codeLine' && + left === 0 && + !block.preSibling + ) { + event.preventDefault() + event.stopPropagation() + if ( + !block.nextSibling + ) { + const preBlock = this.getParent(parent) + const pBlock = this.createBlock('p') + const lineBlock = this.createBlock('span', block.text) + const key = lineBlock.key const offset = 0 + this.appendChild(pBlock, lineBlock) + let referenceBlock = null + switch (preBlock.functionType) { + case 'fencecode': + case 'indentcode': + case 'frontmatter': + referenceBlock = preBlock + break + case 'multiplemath': + referenceBlock = this.getParent(preBlock) + break + case 'html': + referenceBlock = this.getParent(this.getParent(preBlock)) + break + } + this.insertBefore(pBlock, referenceBlock) + this.removeBlock(referenceBlock) this.cursor = { start: { key, offset }, @@ -171,31 +194,6 @@ const backspaceCtrl = ContentState => { } this.partialRender() } - } else if ( - block.type === 'span' && /frontmatter|multiplemath/.test(block.functionType) && - left === 0 && !block.preSibling - ) { - const isMathLine = block.functionType === 'multiplemath' - event.preventDefault() - event.stopPropagation() - const { key } = block - const offset = 0 - const pBlock = this.createBlock('p') - for (const line of parent.children) { - delete line.functionType - this.appendChild(pBlock, line) - } - if (isMathLine) { - parent = this.getParent(parent) - } - this.insertBefore(pBlock, parent) - this.removeBlock(parent) - - this.cursor = { - start: { key, offset }, - end: { key, offset } - } - this.partialRender() } else if (left === 0 && /th|td/.test(block.type)) { event.preventDefault() event.stopPropagation() @@ -298,19 +296,7 @@ const backspaceCtrl = ContentState => { const { text } = block const key = preBlock.key const offset = preBlock.text.length - if (preBlock.type === 'pre' && /code|html/.test(preBlock.functionType)) { - const cm = this.codeBlocks.get(key) - const value = cm.getValue() + text - cm.setValue(value) - const { line, ch } = getEndPosition(cm).anchor - - preBlock.selection = { - anchor: { line, ch: ch - text.length }, - head: { line, ch: ch - text.length } - } - } else { - preBlock.text += text - } + preBlock.text += text // If block is a line block and its parent paragraph only has one text line, // also need to remove the paragrah if (this.isOnlyChild(block) && block.type === 'span') { diff --git a/src/muya/lib/contentState/clickCtrl.js b/src/muya/lib/contentState/clickCtrl.js index 6fed767f..b053cfe7 100644 --- a/src/muya/lib/contentState/clickCtrl.js +++ b/src/muya/lib/contentState/clickCtrl.js @@ -1,6 +1,59 @@ +import selection from '../selection' +import { HAS_TEXT_BLOCK_REG } from '../config' + const clickCtrl = ContentState => { ContentState.prototype.clickHandler = function (event) { - // todo + const { eventCenter } = this.muya + const { start, end } = selection.getCursorRange() + const block = this.getBlock(start.key) + let needRender = false + // is show format float box? + if ( + start.key === end.key && + start.offset !== end.offset && + HAS_TEXT_BLOCK_REG.test(block.type) && + block.functionType !== 'codeLine' + ) { + const reference = this.getPositionReference() + const { formats } = this.selectionFormats() + eventCenter.dispatch('muya-format-picker', { reference, formats }) + } + // bugfix: #67 problem 1 + if (block && block.icon) return event.preventDefault() + // bugfix: figure block click + if (event.type === 'click' && block.type === 'figure' && block.functionType === 'table') { + // first cell in thead + const cursorBlock = block.children[1].children[0].children[0].children[0] + const offset = cursorBlock.text.length + const key = cursorBlock.key + this.cursor = { + start: { key, offset }, + end: { key, offset } + } + needRender = true + } + + // update '```xxx' to code block when you click other place or use press arrow key. + if (block && start.key !== this.cursor.start.key) { + const oldBlock = this.getBlock(this.cursor.start.key) + if (oldBlock) { + needRender = needRender || this.codeBlockUpdate(oldBlock) + } + } + + // change active status when paragraph changed + if ( + start.key !== this.cursor.start.key || + end.key !== this.cursor.end.key + ) { + needRender = true + } + + const needMarkedUpdate = this.checkNeedRender(this.cursor) || this.checkNeedRender({ start, end }) + this.cursor = { start, end } + if (needMarkedUpdate || needRender) { + return this.partialRender() + } } } diff --git a/src/muya/lib/contentState/codeBlockCtrl.js b/src/muya/lib/contentState/codeBlockCtrl.js index d5f187b4..e2882a0c 100644 --- a/src/muya/lib/contentState/codeBlockCtrl.js +++ b/src/muya/lib/contentState/codeBlockCtrl.js @@ -1,44 +1,32 @@ -import codeMirror, { setMode, setCursorAtLastLine } from '../codeMirror' -import { createInputInCodeBlock } from '../utils/domManipulate' -import { sanitize, getParagraphReference } from '../utils' -import { codeMirrorConfig, BLOCK_TYPE7, PREVIEW_DOMPURIFY_CONFIG, CLASS_OR_ID } from '../config' +import { loadLanguage } from '../prism/index' const CODE_UPDATE_REP = /^`{3,}(.*)/ -const beautifyHtml = html => { - const HTML_REG = /^<([a-zA-Z\d-]+)(?=\s|>).*?>/ - const HTML_NEWLINE_REG = /^<([a-zA-Z\d-]+)(?=\s|>).*?>\n/ - const match = HTML_REG.exec(html) - const tag = match ? match[1] : null - // no empty line in block html - let result = html // .split(/\n/).filter(line => /\S/.test(line)).join('\n') - // start inline tag must ends with `\n` - if (tag) { - if (BLOCK_TYPE7.indexOf(tag) > -1 && !HTML_NEWLINE_REG.test(html)) { - result = result.replace(HTML_REG, (m, p) => `${m}\n`) - } - } - return result -} - const codeBlockCtrl = ContentState => { ContentState.prototype.selectLanguage = function (paragraph, name) { const block = this.getBlock(paragraph.id) - block.text = block.text.replace(/^(`+)([^`]+$)/g, `$1${name}`) - this.codeBlockUpdate(block) - this.partialRender() - } - // Fix bug: when click the edge at the code block, the code block will be not focused. - ContentState.prototype.focusCodeBlock = function (event) { - const key = event.target.id - const offset = 0 - - this.cursor = { - start: { key, offset }, - end: { key, offset } + loadLanguage(name) + if (block.functionType === 'languageInput') { + block.text = name + const preBlock = this.getParent(block) + const nextSibling = this.getNextSibling(block) + preBlock.lang = name + preBlock.functionType = 'fencecode' + nextSibling.lang = name + nextSibling.children.forEach(c => (c.lang = name)) + const { key } = nextSibling.children[0] + const offset = 0 + this.cursor = { + start: { key, offset }, + end: { key, offset } + } + } else { + block.text = block.text.replace(/^(`+)([^`]+$)/g, `$1${name}`) + this.codeBlockUpdate(block) } this.partialRender() } + /** * [codeBlockUpdate if block updated to `pre` return true, else return false] */ @@ -53,15 +41,26 @@ const codeBlockCtrl = ContentState => { const { text } = block.children[0] const match = CODE_UPDATE_REP.exec(text) if (match || lang) { + const codeBlock = this.createBlock('code') + const firstLine = this.createBlock('span', code) + const language = lang || (match ? match[1] : '') + const inputBlock = this.createBlock('span', language) + loadLanguage(language) + inputBlock.functionType = 'languageInput' block.type = 'pre' - block.functionType = 'code' - block.codeBlockStyle = 'fenced' - block.text = code + block.functionType = 'fencecode' + block.lang = language + block.text = '' block.history = null - block.lang = lang || (match ? match[1] : '') block.children = [] - const { key } = block - const offset = 0 + codeBlock.lang = language + firstLine.lang = language + firstLine.functionType = 'codeLine' + this.appendChild(codeBlock, firstLine) + this.appendChild(block, inputBlock) + this.appendChild(block, codeBlock) + const { key } = firstLine + const offset = code.length this.cursor = { start: { key, offset }, end: { key, offset } @@ -70,138 +69,6 @@ const codeBlockCtrl = ContentState => { } return false } - - ContentState.prototype.pre2CodeMirror = function (isRenderCursor, blocks) { - const { eventCenter } = this.muya - let selector = '' - if (blocks) { - selector = blocks.map(({ type, key }) => { - if (type === 'pre') { - return `pre#${key}.${CLASS_OR_ID['AG_CODEMIRROR_BLOCK']}` - } else { - return `#${key} pre.${CLASS_OR_ID['AG_CODEMIRROR_BLOCK']}` - } - }).join(', ') - } else { - selector = `pre.${CLASS_OR_ID['AG_CODEMIRROR_BLOCK']}` - } - - const pres = document.querySelectorAll(selector) - - Array.from(pres).forEach(pre => { - // If pre element has children, means that this code block is not editing, - // and don't need to update to codeMirror. - if (pre.children.length) return - const id = pre.id - const block = this.getBlock(id) - const value = block.text - const autofocus = id === this.cursor.start.key && isRenderCursor - const config = Object.assign(codeMirrorConfig, { autofocus, value }) - const codeBlock = codeMirror(pre, config) - const mode = pre.getAttribute('data-lang') - let input - if (block.functionType === 'code') { - input = createInputInCodeBlock(pre) - } - - const handler = ({ name }) => { - setMode(codeBlock, name) - .then(m => { - pre.setAttribute('data-lang', m.name) - block.lang = m.name.toLowerCase() - // change indent code block to fence code block - if (block.codeBlockStyle !== 'fenced') { - block.codeBlockStyle = 'fenced' - } - if (input) { - input.value = m.name - input.blur() - } - if (this.cursor.start.key === block.key && isRenderCursor) { - if (block.selection) { - codeBlock.focus() - const { anchor, head } = block.selection - codeBlock.setSelection(anchor, head) - } else { - setCursorAtLastLine(codeBlock) - } - } - }) - .catch(err => { - console.warn(err) - }) - } - - this.codeBlocks.set(id, codeBlock) - - if (mode) { - handler({ name: mode }) - } - - if (block.selection && this.cursor.start.key === block.key && isRenderCursor) { - const { anchor, head } = block.selection - codeBlock.focus() - codeBlock.setSelection(anchor, head) - } - - if (block.history) { - codeBlock.setHistory(block.history) - } - - if (input) { - eventCenter.attachDOMEvent(input, 'input', () => { - const value = input.value - eventCenter.dispatch('muya-code-picker', { - reference: getParagraphReference(input, id), - lang: value.trim(), - cb: handler - }) - }) - } - - codeBlock.on('focus', (cm, event) => { - block.selection = cm.listSelections()[0] - }) - - codeBlock.on('blur', (cm, event) => { - block.selection = cm.listSelections()[0] - if (block.functionType === 'html') { - const value = cm.getValue() - - block.text = beautifyHtml(value) - } - }) - - codeBlock.on('cursorActivity', (cm, event) => { - block.coords = cm.cursorCoords() - block.selection = cm.listSelections()[0] - }) - - let lastUndoLength = 0 - codeBlock.on('change', (cm, change) => { - const value = cm.getValue() - block.text = value - block.history = cm.getHistory() - if (block.functionType === 'html') { - const preBlock = this.getNextSibling(block) - const htmlBlock = this.getParent(this.getParent(block)) - const escapedHtml = sanitize(block.text, PREVIEW_DOMPURIFY_CONFIG) - htmlBlock.text = block.text - const preEle = document.querySelector(`#${preBlock.key}`) - preEle.innerHTML = escapedHtml - preBlock.htmlContent = escapedHtml - } - const { undo } = cm.historySize() - if (undo > lastUndoLength) { - this.history.push({ - type: 'codeBlock', - id - }) - lastUndoLength = undo - } - }) - }) - } } export default codeBlockCtrl diff --git a/src/muya/lib/contentState/copyCutCtrl.js b/src/muya/lib/contentState/copyCutCtrl.js index 3a0fe21f..58b07233 100644 --- a/src/muya/lib/contentState/copyCutCtrl.js +++ b/src/muya/lib/contentState/copyCutCtrl.js @@ -5,9 +5,6 @@ import ExportMarkdown from '../utils/exportMarkdown' const copyCutCtrl = ContentState => { ContentState.prototype.cutHandler = function () { - if (this.checkInCodeBlock()) { - return - } const { start, end } = this.cursor const startBlock = this.getBlock(start.key) const endBlock = this.getBlock(end.key) @@ -22,16 +19,6 @@ const copyCutCtrl = ContentState => { this.partialRender() } - ContentState.prototype.checkInCodeBlock = function () { - const { start, end } = selection.getCursorRange() - const { type, functionType } = this.getBlock(start.key) - - if (start.key === end.key && type === 'pre' && /code|html/.test(functionType)) { - return true - } - return false - } - ContentState.prototype.getClipBoradData = function () { const html = selection.getSelectionHtml() const wrapper = document.createElement('div') @@ -41,7 +28,9 @@ const copyCutCtrl = ContentState => { .${CLASS_OR_ID['AG_MATH_RENDER']}, .${CLASS_OR_ID['AG_HTML_PREVIEW']}, .${CLASS_OR_ID['AG_MATH_PREVIEW']}, - .${CLASS_OR_ID['AG_COPY_REMOVE']}` + .${CLASS_OR_ID['AG_COPY_REMOVE']}, + .${CLASS_OR_ID['AG_LANGUAGE_INPUT']}` + ) ;[...removedElements].forEach(e => e.remove()) @@ -78,31 +67,32 @@ const copyCutCtrl = ContentState => { l.replaceWith(span) }) - const codefense = wrapper.querySelectorAll(`pre.${CLASS_OR_ID['AG_CODE_BLOCK']}`) + const codefense = wrapper.querySelectorAll(`pre[data-role$='code']`) ;[...codefense].forEach(cf => { const id = cf.id - const language = cf.getAttribute('data-lang') || '' - const cm = this.codeBlocks.get(id) - const value = cm.getValue() - cf.innerHTML = `${value}` + const block = this.getBlock(id) + const language = block.lang || '' + const selectedCodeLines = cf.querySelectorAll('.ag-code-line') + const value = [...selectedCodeLines].map(codeLine => codeLine.textContent).join('\n') + cf.innerHTML = `${value}` }) const htmlBlock = wrapper.querySelectorAll(`figure[data-role='HTML']`) ;[...htmlBlock].forEach(hb => { - const id = hb.id - const { text } = this.getBlock(id) + const selectedCodeLines = hb.querySelectorAll('span.ag-code-line') + const value = [...selectedCodeLines].map(codeLine => codeLine.textContent).join('\n') const pre = document.createElement('pre') - pre.textContent = text + pre.textContent = value hb.replaceWith(pre) }) const mathBlock = wrapper.querySelectorAll(`figure.ag-multiple-math-block`) ;[...mathBlock].forEach(mb => { - const id = mb.id - const { math } = this.getBlock(id).children[1] + const selectedCodeLines = mb.querySelectorAll('span.ag-code-line') + const value = [...selectedCodeLines].map(codeLine => codeLine.textContent).join('\n') const pre = document.createElement('pre') pre.classList.add('multiple-math') - pre.textContent = math + pre.textContent = value mb.replaceWith(pre) }) @@ -113,9 +103,6 @@ const copyCutCtrl = ContentState => { } ContentState.prototype.copyHandler = function (event, type) { - if (this.checkInCodeBlock()) { - return - } event.preventDefault() const { html, text } = this.getClipBoradData() diff --git a/src/muya/lib/contentState/enterCtrl.js b/src/muya/lib/contentState/enterCtrl.js index 011cca6c..84d4470b 100644 --- a/src/muya/lib/contentState/enterCtrl.js +++ b/src/muya/lib/contentState/enterCtrl.js @@ -1,5 +1,13 @@ import selection from '../selection' +const checkAutoIndent = (text, offset) => { + const pairStr = text.substring(offset - 1, offset + 1) + return /^(\{\}|\[\]|\(\)|><)$/.test(pairStr) +} +const getIndentSpace = text => { + return /^(\s*)\S/.exec(text)[1] +} + const enterCtrl = ContentState => { ContentState.prototype.chopBlockByCursor = function (block, key, offset) { const newBlock = this.createBlock('p') @@ -140,25 +148,15 @@ const enterCtrl = ContentState => { const endBlock = this.getBlock(end.key) let parent = this.getParent(block) - // handle cursor in code block - if (block.type === 'pre' && block.functionType === 'code') { - return - } - event.preventDefault() - // handle select multiple blocks if (start.key !== end.key) { const key = start.key const offset = start.offset - const startRemainText = block.type === 'pre' - ? block.text.substring(0, start.offset - 1) - : block.text.substring(0, start.offset) + const startRemainText = block.text.substring(0, start.offset) - const endRemainText = endBlock.type === 'pre' - ? endBlock.text.substring(end.offset - 1) - : endBlock.text.substring(end.offset) + const endRemainText = endBlock.text.substring(end.offset) block.text = startRemainText + endRemainText @@ -186,18 +184,31 @@ const enterCtrl = ContentState => { // handle `shift + enter` insert `soft line break` or `hard line break` // only cursor in `line block` can create `soft line break` and `hard line break` + // handle line in code block if ( (event.shiftKey && block.type === 'span') || - (block.type === 'span' && /frontmatter|multiplemath/.test(block.functionType)) + (block.type === 'span' && block.functionType === 'codeLine') ) { const { text } = block const newLineText = text.substring(start.offset) + const autoIndent = checkAutoIndent(text, start.offset) + const indent = getIndentSpace(text) block.text = text.substring(0, start.offset) - const newLine = this.createBlock('span', newLineText) + const newLine = this.createBlock('span', `${indent}${newLineText}`) newLine.functionType = block.functionType + newLine.lang = block.lang this.insertAfter(newLine, block) - const { key } = newLine - const offset = 0 + let { key } = newLine + let offset = indent.length + if (autoIndent) { + const emptyLine = this.createBlock('span', indent + ' '.repeat(this.tabSize)) + emptyLine.functionType = block.functionType + emptyLine.lang = block.lang + this.insertAfter(emptyLine, block) + key = emptyLine.key + offset = indent.length + this.tabSize + } + this.cursor = { start: { key, offset }, end: { key, offset } @@ -374,7 +385,7 @@ const enterCtrl = ContentState => { cursorBlock = tableNeedFocus break case !!htmlNeedFocus: - cursorBlock = htmlNeedFocus + cursorBlock = htmlNeedFocus.children[0].children[1] // the second line break case !!mathNeedFocus: cursorBlock = mathNeedFocus diff --git a/src/muya/lib/contentState/history.js b/src/muya/lib/contentState/history.js index bf12d4df..2cc86093 100644 --- a/src/muya/lib/contentState/history.js +++ b/src/muya/lib/contentState/history.js @@ -13,22 +13,12 @@ export class History { this.index = this.index - 1 const state = deepCopy(this.stack[this.index]) - switch (state.type) { - case 'normal': - const { blocks, cursor, renderRange } = state - cursor.noHistory = true - this.contentState.blocks = blocks - this.contentState.renderRange = renderRange - this.contentState.cursor = cursor - this.contentState.render() - break - case 'codeBlock': - const id = state.id - const codeBlock = this.contentState.codeBlocks.get(id) - codeBlock.focus() - codeBlock.undo() - break - } + const { blocks, cursor, renderRange } = state + cursor.noHistory = true + this.contentState.blocks = blocks + this.contentState.renderRange = renderRange + this.contentState.cursor = cursor + this.contentState.render() } } @@ -38,22 +28,12 @@ export class History { if (index < len - 1) { this.index = index + 1 const state = deepCopy(stack[this.index]) - switch (state.type) { - case 'normal': - const { blocks, cursor, renderRange } = state - cursor.noHistory = true - this.contentState.blocks = blocks - this.contentState.renderRange = renderRange - this.contentState.cursor = cursor - this.contentState.render() - break - case 'codeBlock': - const id = state.id - const codeBlock = this.contentState.codeBlocks.get(id) - codeBlock.focus() - codeBlock.redo() - break - } + const { blocks, cursor, renderRange } = state + cursor.noHistory = true + this.contentState.blocks = blocks + this.contentState.renderRange = renderRange + this.contentState.cursor = cursor + this.contentState.render() } } diff --git a/src/muya/lib/contentState/htmlBlock.js b/src/muya/lib/contentState/htmlBlock.js index 292b764f..d4288346 100644 --- a/src/muya/lib/contentState/htmlBlock.js +++ b/src/muya/lib/contentState/htmlBlock.js @@ -1,7 +1,7 @@ -import { sanitize } from '../utils' -import { VOID_HTML_TAGS, HTML_TAGS, HTML_TOOLS, PREVIEW_DOMPURIFY_CONFIG } from '../config' +import { VOID_HTML_TAGS, HTML_TAGS, HTML_TOOLS } from '../config' const HTML_BLOCK_REG = /^<([a-zA-Z\d-]+)(?=\s|>)[^<>]*?>$/ +const LINE_BREAKS = /\n/ const htmlBlock = ContentState => { ContentState.prototype.createToolBar = function (tools, toolBarType) { @@ -22,28 +22,36 @@ const htmlBlock = ContentState => { return toolBar } - ContentState.prototype.createCodeInHtml = function (code, selection) { + ContentState.prototype.createCodeInHtml = function (code) { const codeContainer = this.createBlock('div') codeContainer.functionType = 'html' const preview = this.createBlock('div', '', false) - preview.htmlContent = sanitize(code, PREVIEW_DOMPURIFY_CONFIG) preview.functionType = 'preview' - const codePre = this.createBlock('pre') - codePre.lang = 'html' - codePre.functionType = 'html' - codePre.text = code - if (selection) { - codePre.selection = selection - } - this.appendChild(codeContainer, codePre) + const preBlock = this.createBlock('pre') + const codeBlock = this.createBlock('code') + code.split(LINE_BREAKS).forEach(line => { + const codeLine = this.createBlock('span', line) + codeLine.functionType = 'codeLine' + codeLine.lang = 'markup' + this.appendChild(codeBlock, codeLine) + }) + this.codeBlocks.set(preBlock.key, code) + preBlock.lang = 'markup' + codeBlock.lang = 'markup' + preBlock.functionType = 'html' + this.codeBlocks.set(preBlock.key, code) + this.appendChild(preBlock, codeBlock) + this.appendChild(codeContainer, preBlock) this.appendChild(codeContainer, preview) return codeContainer } ContentState.prototype.htmlToolBarClick = function (type) { const { start: { key } } = this.cursor - const block = this.getBlock(key) - const codeBlockContainer = this.getParent(block) + const codeLine = this.getBlock(key) + const codeBlock = this.getParent(codeLine) + const preBlock = this.getParent(codeBlock) + const codeBlockContainer = this.getParent(preBlock) const htmlBlock = this.getParent(codeBlockContainer) switch (type) { @@ -79,7 +87,6 @@ const htmlBlock = ContentState => { ContentState.prototype.createHtmlBlock = function (code) { const block = this.createBlock('figure') block.functionType = 'html' - block.text = code const toolBar = this.createToolBar(HTML_TOOLS, 'html') const htmlBlock = this.createCodeInHtml(code) this.appendChild(block, toolBar) @@ -91,24 +98,15 @@ const htmlBlock = ContentState => { const isVoidTag = VOID_HTML_TAGS.indexOf(tagName) > -1 const { text } = block.children[0] const htmlContent = isVoidTag ? text : `${text}\n\n` - - const pos = { - line: isVoidTag ? 0 : 1, - ch: isVoidTag ? text.length : 0 - } - const range = { - anchor: pos, - head: pos - } block.type = 'figure' block.functionType = 'html' block.text = htmlContent block.children = [] const toolBar = this.createToolBar(HTML_TOOLS, 'html') - const codeContainer = this.createCodeInHtml(htmlContent, range) + const codeContainer = this.createCodeInHtml(htmlContent) this.appendChild(block, toolBar) this.appendChild(block, codeContainer) - return codeContainer.children[0] + return codeContainer.children[0] // preBlock } ContentState.prototype.updateHtmlBlock = function (block) { diff --git a/src/muya/lib/contentState/index.js b/src/muya/lib/contentState/index.js index 2137e4b4..077f5466 100644 --- a/src/muya/lib/contentState/index.js +++ b/src/muya/lib/contentState/index.js @@ -1,5 +1,4 @@ import { HAS_TEXT_BLOCK_REG, DEFAULT_TURNDOWN_CONFIG } from '../config' -import { setCursorAtLastLine } from '../codeMirror' import { getUniqueId } from '../utils' import selection from '../selection' import StateRender from '../parser/render' @@ -21,6 +20,8 @@ import searchCtrl from './searchCtrl' import mathCtrl from './mathCtrl' import imagePathCtrl from './imagePathCtrl' import htmlBlockCtrl from './htmlBlock' +import clickCtrl from './clickCtrl' +import inputCtrl from './inputCtrl' import importMarkdown from '../utils/importMarkdown' const prototypes = [ @@ -41,12 +42,13 @@ const prototypes = [ mathCtrl, imagePathCtrl, htmlBlockCtrl, + clickCtrl, + inputCtrl, importMarkdown ] class ContentState { constructor (muya, options) { - const { eventCenter } = muya const { bulletListMarker } = options this.muya = muya @@ -55,7 +57,7 @@ class ContentState { // Use to cache the keys which you don't want to remove. this.exemption = new Set() this.blocks = [ this.createBlockP() ] - this.stateRender = new StateRender(eventCenter) + this.stateRender = new StateRender(muya) this.codeBlocks = new Map() this.renderRange = [ null, null ] this.currentCursor = null @@ -69,22 +71,9 @@ class ContentState { } set cursor (cursor) { - // if (this.currentCursor) { - // const { start, end } = this.currentCursor - // if ( - // start.key === cursor.start.key && - // start.offset === cursor.start.offset && - // end.key === cursor.end.key && - // end.offset === cursor.end.offset - // ) { - // return - // } - // } - const handler = () => { const { blocks, renderRange, currentCursor } = this this.history.push({ - type: 'normal', blocks, renderRange, cursor: currentCursor @@ -136,34 +125,20 @@ class ContentState { } setCursor () { - const { start: { key } } = this.cursor - const block = this.getBlock(key) - if (block.type === 'pre' && /code|html/.test(block.functionType)) { - const cm = this.codeBlocks.get(key) - const { selection: codeSel } = block - if (codeSel) { - const { anchor, head } = codeSel - cm.focus() - cm.setSelection(anchor, head) - } else { - setCursorAtLastLine(cm) - } - } else { - selection.setCursorRange(this.cursor) - } + selection.setCursorRange(this.cursor) } setNextRenderRange () { const { start, end } = this.cursor - // console.log(JSON.stringify(this.cursor, null, 2)) const startBlock = this.getBlock(start.key) const endBlock = this.getBlock(end.key) const startOutMostBlock = this.findOutMostBlock(startBlock) const endOutMostBlock = this.findOutMostBlock(endBlock) + this.renderRange = [ startOutMostBlock.preSibling, endOutMostBlock.nextSibling ] } - render (isRenderCursor = true, refreshCodeBlock = false) { + render (isRenderCursor = true) { const { blocks, cursor, searchMatches: { matches, index } } = this const activeBlocks = this.getActiveBlocks() matches.forEach((m, i) => { @@ -171,15 +146,13 @@ class ContentState { }) this.setNextRenderRange() this.stateRender.collectLabels(blocks) - this.stateRender.render(blocks, cursor, activeBlocks, matches, refreshCodeBlock) - this.pre2CodeMirror(isRenderCursor) + this.stateRender.render(blocks, cursor, activeBlocks, matches) if (isRenderCursor) this.setCursor() } partialRender () { const { blocks, cursor, searchMatches: { matches, index } } = this const activeBlocks = this.getActiveBlocks() - const cursorOutMostBlock = activeBlocks[activeBlocks.length - 1] const [ startKey, endKey ] = this.renderRange matches.forEach((m, i) => { m.active = i === index @@ -191,7 +164,6 @@ class ContentState { this.setNextRenderRange() this.stateRender.collectLabels(blocks) this.stateRender.partialRender(needRenderBlocks, cursor, activeBlocks, matches, startKey, endKey) - this.pre2CodeMirror(true, [...new Set([cursorOutMostBlock, ...needRenderBlocks])]) this.setCursor() } @@ -299,6 +271,7 @@ class ContentState { } removeTextOrBlock (block) { + if (block.functionType === 'languageInput') return const checkerIn = block => { if (this.exemption.has(block.key)) { return true @@ -382,7 +355,7 @@ class ContentState { if (!afterEnd) { const parent = this.getParent(after) if (parent) { - const removeAfter = isRemoveAfter && this.isOnlyEditableChild(after) + const removeAfter = isRemoveAfter && (this.isOnlyRemoveableChild(after)) this.removeBlocks(before, parent, removeAfter, true) } } @@ -395,12 +368,6 @@ class ContentState { } removeBlock (block, fromBlocks = this.blocks) { - if (block.type === 'pre') { - const codeBlockId = block.key - if (this.codeBlocks.has(codeBlockId)) { - this.codeBlocks.delete(codeBlockId) - } - } const remove = (blocks, block) => { const len = blocks.length let i @@ -531,11 +498,11 @@ class ContentState { return !block.nextSibling && !block.preSibling } - isOnlyEditableChild (block) { + isOnlyRemoveableChild (block) { if (block.editable === false) return false const parent = this.getParent(block) - if (!parent) throw new Error('isOnlyEditableChild method only apply for child block') - return parent.children.filter(child => child.editable).length === 1 + if (!parent) throw new Error('isOnlyRemoveableChild method only apply for child block') + return parent.children.filter(child => child.editable && child.functionType !== 'languageInput').length === 1 } getLastChild (block) { @@ -553,7 +520,11 @@ class ContentState { if (block.children.length === 0 && HAS_TEXT_BLOCK_REG.test(block.type)) { return block } else if (children.length) { - if (children[0].type === 'input' || (children[0].type === 'div' && children[0].editable === false)) { // handle task item + if ( + children[0].type === 'input' || + (children[0].type === 'div' && children[0].editable === false) || + (children[0].type === 'span' && children[0].functionType === 'languageInput') + ) { // handle task item return this.firstInDescendant(children[1]) } else { return this.firstInDescendant(children[0]) @@ -577,7 +548,13 @@ class ContentState { findPreBlockInLocation (block) { const parent = this.getParent(block) const preBlock = this.getPreSibling(block) - if (block.preSibling && preBlock.type !== 'input' && preBlock.type !== 'div' && preBlock.editable !== false) { // handle task item and table + if ( + block.preSibling && + preBlock.type !== 'input' && + preBlock.type !== 'div' && + preBlock.editable !== false && + preBlock.functionType !== 'languageInput' + ) { // handle task item and table return this.lastInDescendant(preBlock) } else if (parent) { return this.findPreBlockInLocation(parent) @@ -590,7 +567,9 @@ class ContentState { const parent = this.getParent(block) const nextBlock = this.getNextSibling(block) - if (nextBlock && nextBlock.editable !== false) { + if ( + nextBlock && nextBlock.editable !== false + ) { return this.firstInDescendant(nextBlock) } else if (parent) { return this.findNextBlockInLocation(parent) @@ -627,7 +606,7 @@ class ContentState { } clear () { - this.codeBlocks.clear() + this.history.clearHistory() } } diff --git a/src/muya/lib/contentState/inputCtrl.js b/src/muya/lib/contentState/inputCtrl.js index be245d51..0c2b89c4 100644 --- a/src/muya/lib/contentState/inputCtrl.js +++ b/src/muya/lib/contentState/inputCtrl.js @@ -1,6 +1,123 @@ +import selection from '../selection' +import { getTextContent } from '../selection/dom' +import { beginRules } from '../parser/rules' +import { CLASS_OR_ID } from '../config' + +const BRACKET_HASH = { + '{': '}', + '[': ']', + '(': ')', + '*': '*', + '_': '_', + '"': '"', + '\'': '\'' +} + const inputCtrl = ContentState => { + // Input @ to quick insert paragraph + ContentState.prototype.checkQuickInsert = function (block) { + const { type, text, functionType } = block + if (type !== 'span' || functionType) return false + return /^@[a-zA-Z\d]*$/.test(text) + } ContentState.prototype.inputHandler = function (event) { - // todo + const { start, end } = selection.getCursorRange() + const { start: oldStart, end: oldEnd } = this.cursor + const key = start.key + const block = this.getBlock(key) + const paragraph = document.querySelector(`#${key}`) + let text = getTextContent(paragraph, [ CLASS_OR_ID['AG_MATH_RENDER'] ]) + let needRender = false + let needRenderAll = false + + if (oldStart.key !== oldEnd.key) { + const startBlock = this.getBlock(oldStart.key) + const endBlock = this.getBlock(oldEnd.key) + this.removeBlocks(startBlock, endBlock) + needRender = true + } + + // auto pair (not need to auto pair in math block) + if (block && block.text !== text) { + if ( + start.key === end.key && + start.offset === end.offset + ) { + const { offset } = start + const { autoPairBracket, autoPairMarkdownSyntax, autoPairQuote } = this + const inputChar = text.charAt(+offset - 1) + const preInputChar = text.charAt(+offset - 2) + const postInputChar = text.charAt(+offset) + /* eslint-disable no-useless-escape */ + if ( + (event.inputType.indexOf('delete') === -1) && + (inputChar === postInputChar) && + ( + (autoPairQuote && /[']{1}/.test(inputChar)) || + (autoPairQuote && /["]{1}/.test(inputChar)) || + (autoPairBracket && /[\}\]\)]{1}/.test(inputChar)) || + (autoPairMarkdownSyntax && /[*_]{1}/.test(inputChar)) + ) + ) { + text = text.substring(0, offset) + text.substring(offset + 1) + } else { + /* eslint-disable no-useless-escape */ + // Not Unicode aware, since things like \p{Alphabetic} or \p{L} are not supported yet + if ( + (autoPairQuote && /[']{1}/.test(inputChar) && !(/[a-zA-Z\d]{1}/.test(preInputChar))) || + (autoPairQuote && /["]{1}/.test(inputChar)) || + (autoPairBracket && /[\{\[\(]{1}/.test(inputChar)) || + (block.functionType !== 'codeLine' && autoPairMarkdownSyntax && /[*_]{1}/.test(inputChar)) + ) { + needRender = true + text = BRACKET_HASH[event.data] + ? text.substring(0, offset) + BRACKET_HASH[inputChar] + text.substring(offset) + : text + } + /* eslint-enable no-useless-escape */ + if (/\s/.test(event.data) && preInputChar === '*' && postInputChar === '*') { + text = text.substring(0, offset) + text.substring(offset + 1) + } + } + } + block.text = text + if (beginRules['reference_definition'].test(text)) { + needRenderAll = true + } + } + + // show quick insert + const rect = paragraph.getBoundingClientRect() + const checkQuickInsert = this.checkQuickInsert(block) + const reference = this.getPositionReference() + reference.getBoundingClientRect = function () { + const { x, y, left, top, height, bottom } = rect + + return Object.assign({}, { + left, + x, + top, + y, + bottom, + height, + width: 0, + right: left + }) + } + this.muya.eventCenter.dispatch('muya-quick-insert', reference, block, checkQuickInsert) + + // Update preview content of math block + if (block && block.type === 'span' && block.functionType === 'codeLine') { + needRender = true + this.updateCodeBlocks(block) + } + + this.cursor = { start, end } + const checkMarkedUpdate = this.checkNeedRender() + const inlineUpdatedBlock = this.isCollapse() && this.checkInlineUpdate(block) + if (checkMarkedUpdate || inlineUpdatedBlock || needRender) { + return needRenderAll ? this.render() : this.partialRender() + } } } diff --git a/src/muya/lib/contentState/mathCtrl.js b/src/muya/lib/contentState/mathCtrl.js index c159d513..3e5e70c8 100644 --- a/src/muya/lib/contentState/mathCtrl.js +++ b/src/muya/lib/contentState/mathCtrl.js @@ -5,44 +5,54 @@ const mathCtrl = ContentState => { ContentState.prototype.createMathBlock = function (value = '') { const FUNCTION_TYPE = 'multiplemath' const mathBlock = this.createBlock('figure') - const textArea = this.createBlock('pre') - const mathPreview = this.createBlock('div', '', false) + mathBlock.functionType = FUNCTION_TYPE + const { preBlock, mathPreview } = this.createMathAndPreview(value) + this.appendChild(mathBlock, preBlock) + this.appendChild(mathBlock, mathPreview) + this.codeBlocks.set(preBlock.key, value) + return mathBlock + } + + ContentState.prototype.createMathAndPreview = function (value = '') { + const FUNCTION_TYPE = 'multiplemath' + const preBlock = this.createBlock('pre') + const codeBlock = this.createBlock('code') + preBlock.functionType = FUNCTION_TYPE + preBlock.lang = codeBlock.lang = 'latex' + this.appendChild(preBlock, codeBlock) + if (typeof value === 'string' && value) { - const lines = value.replace(/^\s+/, '').split(LINE_BREAKS_REG).map(line => this.createBlock('span', line)) - for (const line of lines) { - line.functionType = FUNCTION_TYPE - this.appendChild(textArea, line) - } + value.replace(/^\s+/, '').split(LINE_BREAKS_REG).forEach(line => { + const codeLine = this.createBlock('span', line) + codeLine.functionType = 'codeLine' + codeLine.lang = 'latex' + this.appendChild(codeBlock, codeLine) + }) } else { const emptyLine = this.createBlock('span') - emptyLine.functionType = FUNCTION_TYPE - this.appendChild(textArea, emptyLine) + emptyLine.functionType = 'codeLine' + emptyLine.lang = 'latex' + this.appendChild(codeBlock, emptyLine) } - mathBlock.functionType = textArea.functionType = mathPreview.functionType = FUNCTION_TYPE - mathPreview.math = value - this.appendChild(mathBlock, textArea) - this.appendChild(mathBlock, mathPreview) - return mathBlock + const mathPreview = this.createBlock('div', '', false) + this.codeBlocks.set(preBlock.key, '') + mathPreview.functionType = FUNCTION_TYPE + + return { preBlock, mathPreview } } ContentState.prototype.initMathBlock = function (block) { // p block const FUNCTION_TYPE = 'multiplemath' - const textArea = this.createBlock('pre') - const emptyLine = this.createBlock('span') - textArea.functionType = emptyLine.functionType = FUNCTION_TYPE - this.appendChild(textArea, emptyLine) block.type = 'figure' block.functionType = FUNCTION_TYPE block.children = [] - const mathPreview = this.createBlock('div', '', false) - mathPreview.math = '' - mathPreview.functionType = FUNCTION_TYPE + const { preBlock, mathPreview } = this.createMathAndPreview() - this.appendChild(block, textArea) + this.appendChild(block, preBlock) this.appendChild(block, mathPreview) - return emptyLine + return preBlock.children[0].children[0] } ContentState.prototype.handleMathBlockClick = function (mathFigure) { diff --git a/src/muya/lib/contentState/paragraphCtrl.js b/src/muya/lib/contentState/paragraphCtrl.js index 3327da35..3028b2ac 100644 --- a/src/muya/lib/contentState/paragraphCtrl.js +++ b/src/muya/lib/contentState/paragraphCtrl.js @@ -17,7 +17,6 @@ const getCurrentLevel = type => { const paragraphCtrl = ContentState => { ContentState.prototype.selectionChange = function (cursor) { - const { fontSize, lineHeight } = this const { start, end } = cursor || selection.getCursorRange() const cursorCoords = selection.getCursorCoords() const startBlock = this.getBlock(start.key) @@ -33,13 +32,6 @@ const paragraphCtrl = ContentState => { end.type = endBlock.type end.block = endBlock - if (start.type === 'pre' && end.type === 'pre' && startBlock.functionType !== 'frontmatter') { - const preElement = document.querySelector(`#${start.key}`) - const { top } = preElement.getBoundingClientRect() - const { line } = start.block.selection.anchor - cursorCoords.y = top + line * lineHeight * fontSize - } - return { start, end, @@ -73,10 +65,13 @@ const paragraphCtrl = ContentState => { const firstBlock = this.blocks[0] if (firstBlock.type === 'pre' && firstBlock.functionType === 'frontmatter') return const frontMatter = this.createBlock('pre') + const codeBlock = this.createBlock('code') const emptyLine = this.createBlock('span') - emptyLine.functionType = 'frontmatter' + frontMatter.lang = codeBlock.lang = emptyLine.lang = 'yaml' + emptyLine.functionType = 'codeLine' frontMatter.functionType = 'frontmatter' - this.appendChild(frontMatter, emptyLine) + this.appendChild(codeBlock, emptyLine) + this.appendChild(frontMatter, codeBlock) this.insertBefore(frontMatter, firstBlock) const { key } = emptyLine const offset = 0 @@ -197,70 +192,75 @@ const paragraphCtrl = ContentState => { const startParents = this.getParents(startBlock) const endParents = this.getParents(endBlock) const hasFencedCodeBlockParent = () => { - return startParents.some(b => b.type === 'pre' && b.functionType === 'code') || - endParents.some(b => b.type === 'pre' && b.functionType === 'code') + return startParents.some(b => b.type === 'pre' && /code/.test(b.functionType)) || + endParents.some(b => b.type === 'pre' && /code/.test(b.functionType)) } // change fenced code block to p paragraph - if (affiliation.length && affiliation[0].type === 'pre' && affiliation[0].functionType === 'code') { - const codeBlock = affiliation[0] - this.codeBlocks.delete(codeBlock.key) - codeBlock.type = 'p' - codeBlock.children = [] - const lines = codeBlock.text.split(LINE_BREAKS_REG).map(line => this.createBlock('span', line)) - for (const line of lines) { - this.appendChild(codeBlock, line) + if (affiliation.length && affiliation[0].type === 'pre' && /code/.test(affiliation[0].functionType)) { + const preBlock = affiliation[0] + const codeLines = preBlock.children[1].children + this.codeBlocks.delete(preBlock.key) + preBlock.type = 'p' + preBlock.children = [] + + for (const line of codeLines) { + delete line.lang + delete line.functionType + this.appendChild(preBlock, line) } - const { key } = codeBlock.children[codeBlock.selection.anchor.line] - const offset = codeBlock.selection.anchor.ch - delete codeBlock.selection - delete codeBlock.history - delete codeBlock.lang - delete codeBlock.coords - delete codeBlock.text - delete codeBlock.codeBlockStyle - delete codeBlock.functionType + delete preBlock.lang + delete preBlock.functionType this.cursor = { - start: { key, offset }, - end: { key, offset } + start: this.cursor.start, + end: this.cursor.end } } else { if (start.key === end.key) { if (startBlock.type === 'span') { startBlock = this.getParent(startBlock) - startBlock.text = startBlock.children.map(line => line.text).join('\n') - const line = startBlock.children.findIndex(line => line.key === start.key) - const ch = start.offset - startBlock.selection = { - anchor: { line, ch }, - head: { line, ch } - } + startBlock.type = 'pre' + const codeBlock = this.createBlock('code') + const inputBlock = this.createBlock('span', '') + inputBlock.functionType = 'languageInput' + startBlock.functionType = 'fencecode' + startBlock.lang = codeBlock.lang = '' + const codeLines = startBlock.children startBlock.children = [] + codeLines.forEach(line => { + line.functionType = 'codeLine' + line.lang = '' + this.appendChild(codeBlock, line) + }) + this.appendChild(startBlock, inputBlock) + this.appendChild(startBlock, codeBlock) } - const { key } = startBlock - const offset = 0 - startBlock.type = 'pre' - startBlock.codeBlockStyle = 'fenced' - startBlock.functionType = 'code' - startBlock.history = null - startBlock.lang = '' + this.cursor = { - start: { key, offset }, - end: { key, offset } + start: this.cursor.start, + end: this.cursor.end } } else if (!hasFencedCodeBlockParent()) { const { parent, startIndex, endIndex } = this.getCommonParent() const children = parent ? parent.children : this.blocks const referBlock = children[endIndex] - const codeBlock = this.createBlock('pre') - codeBlock.codeBlockStyle = 'fenced' - codeBlock.functionType = 'code' - codeBlock.history = null - codeBlock.lang = '' + const preBlock = this.createBlock('pre') + const codeBlock = this.createBlock('code') + preBlock.functionType = 'fencecode' + preBlock.lang = codeBlock.lang = '' const markdown = new ExportMarkdown(children.slice(startIndex, endIndex + 1)).generate() - codeBlock.text = markdown - this.insertAfter(codeBlock, referBlock) + markdown.split(LINE_BREAKS_REG).forEach(text => { + const codeLine = this.createBlock('span', text) + codeLine.lang = '' + codeLine.functionType = 'codeLine' + this.appendChild(codeBlock, codeLine) + }) + const inputBlock = this.createBlock('span', '') + inputBlock.functionType = 'languageInput' + this.appendChild(preBlock, inputBlock) + this.appendChild(preBlock, codeBlock) + this.insertAfter(preBlock, referBlock) let i const removeCache = [] for (i = startIndex; i <= endIndex; i++) { @@ -268,7 +268,7 @@ const paragraphCtrl = ContentState => { removeCache.push(child) } removeCache.forEach(b => this.removeBlock(b)) - const key = codeBlock.key + const key = codeBlock.children[0].key const offset = 0 this.cursor = { start: { key, offset }, @@ -353,8 +353,8 @@ const paragraphCtrl = ContentState => { ContentState.prototype.insertHtmlBlock = function (block) { const parentBlock = this.getParent(block) block.text = '
' - const cursorBlock = this.initHtmlBlock(parentBlock, 'div') - const key = cursorBlock.key + const preBlock = this.initHtmlBlock(parentBlock, 'div') + const key = preBlock.children[0].children[1].key const offset = 0 this.cursor = { start: { key, offset }, @@ -519,8 +519,30 @@ const paragraphCtrl = ContentState => { // if cursor is not in one line or paragraph, can not insert paragraph if (start.key !== end.key) return let block = this.getBlock(start.key) - if (block.type === 'span') { + if (block.type === 'span' && !block.functionType) { block = this.getParent(block) + } else if (block.type === 'span' && block.functionType === 'codeLine') { + const preBlock = this.getParent(this.getParent(block)) + switch (preBlock.functionType) { + case 'fencecode': + case 'indentcode': + case 'frontmatter': { + // You can not insert paragraph before frontmatter + if (preBlock.functionType === 'frontmatter' && location === 'before') { + return + } + block = preBlock + break + } + case 'html': { + block = this.getParent(this.getParent(preBlock)) + break + } + case 'multiplemath': { + block = this.getParent(preBlock) + break + } + } } else if (/th|td/.test(block.type)) { // get figure block from table cell block = this.getParent(this.getParent(this.getParent(this.getParent(block)))) diff --git a/src/muya/lib/contentState/pasteCtrl.js b/src/muya/lib/contentState/pasteCtrl.js index c15d6d2d..09ec23be 100644 --- a/src/muya/lib/contentState/pasteCtrl.js +++ b/src/muya/lib/contentState/pasteCtrl.js @@ -43,6 +43,7 @@ const pasteCtrl = ContentState => { const sanitizedHtml = sanitize(html, PREVIEW_DOMPURIFY_CONFIG) const tempWrapper = document.createElement('div') tempWrapper.innerHTML = sanitizedHtml + // special process for Number app in macOs const tables = Array.from(tempWrapper.querySelectorAll('table')) for (const table of tables) { const row = table.querySelector('tr') @@ -66,15 +67,11 @@ const pasteCtrl = ContentState => { // handle `normal` and `pasteAsPlainText` paste ContentState.prototype.pasteHandler = function (event, type) { - if (this.checkInCodeBlock()) { - return - } event.preventDefault() const text = event.clipboardData.getData('text/plain') let html = event.clipboardData.getData('text/html') + html = this.standardizeHTML(html) - // console.log(text) - // console.log(html) const copyType = this.checkCopyType(html, text) const { start, end } = this.cursor const startBlock = this.getBlock(start.key) @@ -95,6 +92,31 @@ const pasteCtrl = ContentState => { } } + if (startBlock.type === 'span' && startBlock.functionType === 'codeLine') { + let referenceBlock = startBlock + const textList = text.split(LINE_BREAKS_REG) + textList.forEach((line, i) => { + if (i === 0) { + startBlock.text += line + } else { + const lineBlock = this.createBlock('span', line) + lineBlock.functionType = startBlock.functionType + lineBlock.lang = startBlock.lang + this.insertAfter(lineBlock, referenceBlock) + referenceBlock = lineBlock + if (i === textList.length - 1) { + const { key } = lineBlock + const offset = line.length + this.cursor = { + start: { key, offset }, + end: { key, offset } + } + } + } + }) + return this.partialRender() + } + // handle copyAsHtml if (copyType === 'copyAsHtml') { switch (type) { @@ -196,6 +218,7 @@ const pasteCtrl = ContentState => { startBlock.text += firstFragment.children[0].text firstFragment.children.slice(1).forEach(line => { if (startBlock.functionType) line.functionType = startBlock.functionType + if (startBlock.lang) line.lang = startBlock.lang this.appendChild(parent, line) }) } else if (/^h\d$/.test(firstFragment.type)) { @@ -234,8 +257,8 @@ const pasteCtrl = ContentState => { cursorBlock = startBlock } // TODO @Jocs duplicate with codes in updateCtrl.js - if (cursorBlock && cursorBlock.type === 'span' && cursorBlock.functionType === 'multiplemath') { - this.updateMathContent(cursorBlock) + if (cursorBlock && cursorBlock.type === 'span' && cursorBlock.functionType === 'codeLine') { + this.updateCodeBlocks(cursorBlock) } this.cursor = { start: { diff --git a/src/muya/lib/contentState/tabCtrl.js b/src/muya/lib/contentState/tabCtrl.js index 1ecfcb97..0ff7269d 100644 --- a/src/muya/lib/contentState/tabCtrl.js +++ b/src/muya/lib/contentState/tabCtrl.js @@ -123,7 +123,7 @@ const tabCtrl = ContentState => { ContentState.prototype.insertTab = function () { const tabSize = this.tabSize - const tabCharacter = ' '.repeat(tabSize) + const tabCharacter = String.fromCharCode(160).repeat(tabSize) const { start, end } = this.cursor const startBlock = this.getBlock(start.key) const endBlock = this.getBlock(end.key) diff --git a/src/muya/lib/contentState/updateCtrl.js b/src/muya/lib/contentState/updateCtrl.js index 1c581807..2abf864b 100644 --- a/src/muya/lib/contentState/updateCtrl.js +++ b/src/muya/lib/contentState/updateCtrl.js @@ -1,9 +1,6 @@ -import selection from '../selection' import { tokenizer } from '../parser/parse' import { conflict } from '../utils' -import { getTextContent } from '../selection/dom' import { CLASS_OR_ID, DEFAULT_TURNDOWN_CONFIG } from '../config' -import { beginRules } from '../parser/rules' const INLINE_UPDATE_FRAGMENTS = [ '^([*+-]\\s)', // Bullet list @@ -16,8 +13,6 @@ const INLINE_UPDATE_FRAGMENTS = [ const INLINE_UPDATE_REG = new RegExp(INLINE_UPDATE_FRAGMENTS.join('|'), 'i') -let lastCursor = null - const updateCtrl = ContentState => { // handle task list item checkbox click ContentState.prototype.listItemCheckBoxClick = function (checkbox) { @@ -32,29 +27,41 @@ const updateCtrl = ContentState => { return list.children[0].isLooseListItem === isLooseType } - ContentState.prototype.checkNeedRender = function (block) { - const { start: cStart, end: cEnd } = this.cursor + ContentState.prototype.checkNeedRender = function (cursor = this.cursor) { + const { start: cStart, end: cEnd } = cursor + const startBlock = this.getBlock(cStart.key) + const endBlock = this.getBlock(cEnd.key) const startOffset = cStart.offset const endOffset = cEnd.offset - const tokens = tokenizer(block.text) - const textLen = block.text.length - for (const token of tokens) { + for (const token of tokenizer(startBlock.text)) { if (token.type === 'text') continue const { start, end } = token.range + const textLen = startBlock.text.length + if ( + conflict([Math.max(0, start - 1), Math.min(textLen, end + 1)], [startOffset, startOffset]) + ) { + return true + } + } + for (const token of tokenizer(endBlock.text)) { + if (token.type === 'text') continue + const { start, end } = token.range + const textLen = endBlock.text.length if ( - conflict([Math.max(0, start - 1), Math.min(textLen, end + 1)], [startOffset, startOffset]) || conflict([Math.max(0, start - 1), Math.min(textLen, end + 1)], [endOffset, endOffset]) ) { return true } } + return false } ContentState.prototype.checkInlineUpdate = function (block) { // table cell can not have blocks in it if (/th|td|figure/.test(block.type)) return false + if (/codeLine|languageInput/.test(block.functionType)) return false // only first line block can update to other block if (block.type === 'span' && block.preSibling) return false if (block.type === 'span') { @@ -90,13 +97,6 @@ const updateCtrl = ContentState => { } } - // Input @ to quick insert paragraph - ContentState.prototype.checkQuickInsert = function (block) { - const { type, text, functionType } = block - if (type !== 'span' || functionType) return false - return /^@[a-zA-Z\d]*$/.test(text) - } - // thematic break ContentState.prototype.updateHr = function (block, marker) { if (block.type !== 'hr') { @@ -293,192 +293,11 @@ const updateCtrl = ContentState => { return null } - ContentState.prototype.updateMathContent = function (block) { - const preBlock = this.getParent(block) - const mathPreview = this.getNextSibling(preBlock) - const math = preBlock.children.map(line => line.text).join('\n') - mathPreview.math = math - } - - ContentState.prototype.updateState = function (event) { - const { start, end } = selection.getCursorRange() - const key = start.key - const block = this.getBlock(key) - - // bugfix: #67 problem 1 - if (block && block.icon) return event.preventDefault() - - if (event.type === 'click' && start.key !== end.key) { - setTimeout(() => { - this.updateState(event) - }) - } - - const { start: oldStart, end: oldEnd } = this.cursor - if (event.type === 'input' && oldStart.key !== oldEnd.key) { - const startBlock = this.getBlock(oldStart.key) - const endBlock = this.getBlock(oldEnd.key) - this.removeBlocks(startBlock, endBlock) - // there still has little bug, when the oldstart block is `pre`, the input value will be ignored. - // and act as `backspace` - if (startBlock.type === 'pre' && /code|html/.test(startBlock.functionType)) { - event.preventDefault() - const startRemainText = startBlock.type === 'pre' - ? startBlock.text.substring(0, oldStart.offset - 1) - : startBlock.text.substring(0, oldStart.offset) - - const endRemainText = endBlock.type === 'pre' - ? endBlock.text.substring(oldEnd.offset - 1) - : endBlock.text.substring(oldEnd.offset) - - startBlock.text = startRemainText + endRemainText - const key = oldStart.key - const offset = oldStart.offset - this.cursor = { - start: { key, offset }, - end: { key, offset } - } - return this.partialRender() - } - } - - if (start.key !== end.key) { - if ( - start.key !== oldStart.key || - end.key !== oldEnd.key || - start.offset !== oldStart.offset || - end.offset !== oldEnd.offset - ) { - this.cursor = { start, end } - return this.partialRender() - } - } - - const oldKey = lastCursor ? lastCursor.start.key : null - const paragraph = document.querySelector(`#${key}`) - let text = getTextContent(paragraph, [ CLASS_OR_ID['AG_MATH_RENDER'] ]) - let needRender = false - let needRenderAll = false - if (event.type === 'click' && block.type === 'figure' && block.functionType === 'table') { - // first cell in thead - const cursorBlock = block.children[1].children[0].children[0].children[0] - const offset = cursorBlock.text.length - const key = cursorBlock.key - this.cursor = { - start: { key, offset }, - end: { key, offset } - } - return this.partialRender() - } - - // update '```xxx' to code block when you click other place or use press arrow key. - if (block && key !== oldKey) { - const oldBlock = this.getBlock(oldKey) - if (oldBlock) this.codeBlockUpdate(oldBlock) - } - - if (block && block.type === 'pre' && /code|html/.test(block.functionType)) { - if (block.key !== oldKey) { - this.cursor = lastCursor = { start, end } - if (event.type === 'click' && oldKey) { - this.partialRender() - } - } - return - } - - // auto pair (not need to auto pair in math block) - if (block && block.text !== text) { - const BRACKET_HASH = { - '{': '}', - '[': ']', - '(': ')', - '*': '*', - '_': '_', - '"': '"', - '\'': '\'' - } - - if (start.key === end.key && start.offset === end.offset && event.type === 'input' && block.functionType !== 'multiplemath') { - const { offset } = start - const { autoPairBracket, autoPairMarkdownSyntax, autoPairQuote } = this - const inputChar = text.charAt(+offset - 1) - const preInputChar = text.charAt(+offset - 2) - const postInputChar = text.charAt(+offset) - /* eslint-disable no-useless-escape */ - if ( - (event.inputType.indexOf('delete') === -1) && - (inputChar === postInputChar) && - ( - (autoPairQuote && /[']{1}/.test(inputChar)) || - (autoPairQuote && /["]{1}/.test(inputChar)) || - (autoPairBracket && /[\}\]\)]{1}/.test(inputChar)) || - (autoPairMarkdownSyntax && /[*_]{1}/.test(inputChar)) - ) - ) { - text = text.substring(0, offset) + text.substring(offset + 1) - } else { - /* eslint-disable no-useless-escape */ - // Not Unicode aware, since things like \p{Alphabetic} or \p{L} are not supported yet - if ( - (autoPairQuote && /[']{1}/.test(inputChar) && !(/[a-zA-Z\d]{1}/.test(preInputChar))) || - (autoPairQuote && /["]{1}/.test(inputChar)) || - (autoPairBracket && /[\{\[\(]{1}/.test(inputChar)) || - (autoPairMarkdownSyntax && /[*_]{1}/.test(inputChar)) - ) { - text = BRACKET_HASH[event.data] - ? text.substring(0, offset) + BRACKET_HASH[inputChar] + text.substring(offset) - : text - } - /* eslint-enable no-useless-escape */ - if (/\s/.test(event.data) && preInputChar === '*' && postInputChar === '*') { - text = text.substring(0, offset) + text.substring(offset + 1) - } - } - } - block.text = text - if (beginRules['reference_definition'].test(text)) { - needRenderAll = true - } - } - - // Update preview content of math block - if (block && block.type === 'span' && block.functionType === 'multiplemath') { - this.updateMathContent(block) - } - - if (oldKey !== key || oldStart.offset !== start.offset || oldEnd.offset !== end.offset) { - needRender = true - } - - this.cursor = lastCursor = { start, end } - const checkMarkedUpdate = this.checkNeedRender(block) - - if (event.type === 'input') { - const rect = paragraph.getBoundingClientRect() - const checkQuickInsert = this.checkQuickInsert(block) - const reference = this.getPositionReference() - reference.getBoundingClientRect = function () { - const { x, y, left, top, height, bottom } = rect - - return Object.assign({}, { - left, - x, - top, - y, - bottom, - height, - width: 0, - right: left - }) - } - this.muya.eventCenter.dispatch('muya-quick-insert', reference, block, checkQuickInsert) - } - - const inlineUpdatedBlock = this.isCollapse() && !/frontmatter|multiplemath/.test(block.functionType) && this.checkInlineUpdate(block) - if (checkMarkedUpdate || inlineUpdatedBlock || needRender) { - needRenderAll ? this.render() : this.partialRender() - } + ContentState.prototype.updateCodeBlocks = function (block) { + const codeBlock = this.getParent(block) + const preBlock = this.getParent(codeBlock) + const code = codeBlock.children.map(line => line.text).join('\n') + this.codeBlocks.set(preBlock.key, code) } } diff --git a/src/muya/lib/eventHandler/clickEvent.js b/src/muya/lib/eventHandler/clickEvent.js index d1deb1e1..c4151810 100644 --- a/src/muya/lib/eventHandler/clickEvent.js +++ b/src/muya/lib/eventHandler/clickEvent.js @@ -12,10 +12,6 @@ class ClickEvent { const { container, eventCenter, contentState } = this.muya const handler = event => { const { target } = event - // handler code block click. - if (target.tagName === 'PRE' && target.classList.contains(CLASS_OR_ID['AG_CODE_BLOCK'])) { - contentState.focusCodeBlock(event) - } // handler table | html toolbar click const toolItem = getToolItem(target) if (toolItem) { @@ -56,13 +52,7 @@ class ClickEvent { if (target.tagName === 'INPUT' && target.classList.contains(CLASS_OR_ID['AG_TASK_LIST_ITEM_CHECKBOX'])) { contentState.listItemCheckBoxClick(target) } - // is show format float box? - const { start, end } = selection.getCursorRange() - if (start.key === end.key && start.offset !== end.offset) { - const reference = contentState.getPositionReference() - const { formats } = contentState.selectionFormats() - eventCenter.dispatch('muya-format-picker', { reference, formats }) - } + contentState.clickHandler(event) } eventCenter.attachDOMEvent(container, 'click', handler) diff --git a/src/muya/lib/eventHandler/keyboard.js b/src/muya/lib/eventHandler/keyboard.js index 971bf05e..d5ae96d9 100644 --- a/src/muya/lib/eventHandler/keyboard.js +++ b/src/muya/lib/eventHandler/keyboard.js @@ -1,8 +1,8 @@ -import { EVENT_KEYS, CLASS_OR_ID } from '../config' +import { EVENT_KEYS } from '../config' import selection from '../selection' import { findNearestParagraph } from '../selection/dom' import { getParagraphReference } from '../utils' -import { checkEditLanguage } from '../codeMirror/language' +import { checkEditLanguage } from '../prism/index' import { checkEditEmoji } from '../ui/emojis' class Keyboard { @@ -11,7 +11,7 @@ class Keyboard { this._isEditChinese = false this.shownFloat = new Set() this.recordEditChinese() - this.dispatchUpdateState() + this.dispatchEditorState() this.keydownBinding() this.keyupBinding() this.inputBinding() @@ -39,32 +39,25 @@ class Keyboard { eventCenter.attachDOMEvent(container, 'compositionstart', handler) } - dispatchUpdateState () { + dispatchEditorState () { const { container, eventCenter, contentState } = this.muya let timer = null const changeHandler = event => { - const target = event.target - if (event.type === 'click' && target.classList.contains(CLASS_OR_ID['AG_FUNCTION_HTML'])) return if (event.type === 'keyup' && (event.key === EVENT_KEYS.ArrowUp || event.key === EVENT_KEYS.ArrowDown) && this.shownFloat.size > 0) return - if (!this._isEditChinese) { - contentState.updateState(event) - } - if (event.type === 'click' || event.type === 'keyup') { - if (timer) clearTimeout(timer) - timer = setTimeout(() => { - const selectionChanges = contentState.selectionChange() - const { formats } = contentState.selectionFormats() - eventCenter.dispatch('selectionChange', selectionChanges) - eventCenter.dispatch('selectionFormats', formats) - this.muya.dispatchChange() - }) - } + + if (timer) clearTimeout(timer) + timer = setTimeout(() => { + const selectionChanges = contentState.selectionChange() + const { formats } = contentState.selectionFormats() + eventCenter.dispatch('selectionChange', selectionChanges) + eventCenter.dispatch('selectionFormats', formats) + this.muya.dispatchChange() + }) } eventCenter.attachDOMEvent(container, 'click', changeHandler) eventCenter.attachDOMEvent(container, 'keyup', changeHandler) - eventCenter.attachDOMEvent(container, 'input', changeHandler) } keydownBinding () { @@ -123,7 +116,7 @@ class Keyboard { inputBinding () { const { container, eventCenter, contentState } = this.muya - const inputHandler = _ => { + const inputHandler = event => { const node = selection.getSelectionStart() const paragraph = findNearestParagraph(node) const selectionState = selection.exportSelection(paragraph) @@ -136,6 +129,12 @@ class Keyboard { contentState.selectLanguage(paragraph, item.name) } }) + } else { + // hide code picker float box + eventCenter.dispatch('muya-code-picker', { reference: null }) + } + if (!this._isEditChinese) { + contentState.inputHandler(event) } } @@ -154,7 +153,9 @@ class Keyboard { emojiNode && event.key !== EVENT_KEYS.Enter && event.key !== EVENT_KEYS.ArrowDown && - event.key !== EVENT_KEYS.ArrowUp + event.key !== EVENT_KEYS.ArrowUp && + event.key !== EVENT_KEYS.Tab && + event.key !== EVENT_KEYS.Escape ) { const reference = getParagraphReference(emojiNode, paragraph.id) eventCenter.dispatch('muya-emoji-picker', { @@ -169,7 +170,8 @@ class Keyboard { } // is show format float box? const { start, end } = selection.getCursorRange() - if (start.key === end.key && start.offset !== end.offset) { + const block = contentState.getBlock(start.key) + if (start.key === end.key && start.offset !== end.offset && block.functionType !== 'codeLine') { const reference = contentState.getPositionReference() const { formats } = contentState.selectionFormats() eventCenter.dispatch('muya-format-picker', { reference, formats }) diff --git a/src/muya/lib/index.js b/src/muya/lib/index.js index 6df9d3d3..5573be93 100644 --- a/src/muya/lib/index.js +++ b/src/muya/lib/index.js @@ -3,7 +3,7 @@ import EventCenter from './eventHandler/event' import Clipboard from './eventHandler/clipboard' import Keyboard from './eventHandler/keyboard' import ClickEvent from './eventHandler/clickEvent' -import { CLASS_OR_ID, codeMirrorConfig } from './config' +import { CLASS_OR_ID } from './config' import { wordCount } from './utils' import ExportMarkdown from './utils/exportMarkdown' import ExportHtml from './utils/exportHtml' @@ -137,14 +137,10 @@ class Muya { setTheme (name) { if (!name) return const { eventCenter } = this - if (name === 'dark') { - codeMirrorConfig.theme = 'railscasts' - } else { - delete codeMirrorConfig.theme - } this.theme = name // Render cursor and refresh code block - this.contentState.render(true, true) + this.contentState.render(true) + // notice the ui components to change theme eventCenter.dispatch('theme-change', name) } diff --git a/src/muya/lib/parser/render/index.js b/src/muya/lib/parser/render/index.js index ad698d9b..b12b0417 100644 --- a/src/muya/lib/parser/render/index.js +++ b/src/muya/lib/parser/render/index.js @@ -7,9 +7,9 @@ import renderInlines from './renderInlines' import renderBlock from './renderBlock' class StateRender { - constructor (eventCenter) { - this.eventCenter = eventCenter - this.refreshCodeBlock = false + constructor (muya) { + this.muya = muya + this.eventCenter = muya.eventCenter this.loadImageMap = new Map() this.loadMathMap = new Map() this.tokenCache = new Map() @@ -81,14 +81,10 @@ class StateRender { if (type === 'span') { selector += `.${CLASS_OR_ID['AG_LINE']}` } - if (block.temp) { - selector += `.${CLASS_OR_ID['AG_TEMP']}` - } return selector } - render (blocks, cursor, activeBlocks, matches, refreshCodeBlock) { - this.refreshCodeBlock = refreshCodeBlock + render (blocks, cursor, activeBlocks, matches) { const selector = `div#${CLASS_OR_ID['AG_EDITOR_ID']}` const children = blocks.map(block => { diff --git a/src/muya/lib/parser/render/renderBlock/renderContainerBlock.js b/src/muya/lib/parser/render/renderBlock/renderContainerBlock.js index e8c2bc61..6db7e350 100644 --- a/src/muya/lib/parser/render/renderBlock/renderContainerBlock.js +++ b/src/muya/lib/parser/render/renderBlock/renderContainerBlock.js @@ -1,6 +1,14 @@ import { CLASS_OR_ID } from '../../../config' import { h } from '../snabbdom' +const PRE_BLOCK_HASH = { + 'fencecode': `.${CLASS_OR_ID['AG_FENCE_CODE']}`, + 'indentcode': `.${CLASS_OR_ID['AG_INDENT_CODE']}`, + 'html': `.${CLASS_OR_ID['AG_HTML_BLOCK']}`, + 'frontmatter': `.${CLASS_OR_ID['AG_FRONT_MATTER']}`, + 'multiplemath': `.${CLASS_OR_ID['AG_MULTIPLE_MATH']}` +} + export default function renderContainerBlock (block, cursor, activeBlocks, matches, useCache = false) { let selector = this.getSelector(block, cursor, activeBlocks) const data = { @@ -76,11 +84,19 @@ export default function renderContainerBlock (block, cursor, activeBlocks, match if (block.type === 'ol') { Object.assign(data.attrs, { start: block.start }) } - if (block.type === 'pre' && /frontmatter|multiplemath/.test(block.functionType)) { - const role = block.functionType === 'frontmatter' ? 'YAML' : 'MATH' - const className = block.functionType === 'frontmatter' ? CLASS_OR_ID['AG_FRONT_MATTER'] : CLASS_OR_ID['AG_MULTIPLE_MATH'] - Object.assign(data.dataset, { role }) - selector += `.${className}` + if (block.type === 'code') { + const { lang } = block + if (lang) { + selector += `.language-${lang}` + } + } + if (block.type === 'pre') { + const { lang, functionType } = block + if (lang) { + selector += `.language-${lang}` + } + Object.assign(data.dataset, { role: functionType }) + selector += PRE_BLOCK_HASH[block.functionType] } return h(selector, data, block.children.map(child => this.renderBlock(child, cursor, activeBlocks, matches, useCache))) diff --git a/src/muya/lib/parser/render/renderBlock/renderLeafBlock.js b/src/muya/lib/parser/render/renderBlock/renderLeafBlock.js index e612f94d..2a2b0bc3 100644 --- a/src/muya/lib/parser/render/renderBlock/renderLeafBlock.js +++ b/src/muya/lib/parser/render/renderBlock/renderLeafBlock.js @@ -1,17 +1,28 @@ import katex from 'katex' -import { CLASS_OR_ID, DEVICE_MEMORY, isInElectron } from '../../../config' +import prism, { loadedCache } from '../../../prism/' +import { CLASS_OR_ID, DEVICE_MEMORY, isInElectron, PREVIEW_DOMPURIFY_CONFIG } from '../../../config' import { tokenizer } from '../../parse' -import { snakeToCamel } from '../../../utils' +import { snakeToCamel, sanitize, escapeHtml } from '../../../utils' import { h, htmlToVNode } from '../snabbdom' -const PRE_BLOCK_HASH = { - 'code': `.${CLASS_OR_ID['AG_CODE_BLOCK']}`, - 'html': `.${CLASS_OR_ID['AG_HTML_BLOCK']}`, - 'frontmatter': `.${CLASS_OR_ID['AG_FRONT_MATTER']}` +const getHighlightHtml = (text, highlights) => { + let code = '' + let pos = 0 + for (const highlight of highlights) { + const { start, end, active } = highlight + code += text.substring(pos, start) + const className = active ? 'ag-highlight' : 'ag-selection' + code += `${text.substring(start, end)}` + pos = end + } + if (pos !== text.length) { + code += text.substring(pos) + } + return code } export default function renderLeafBlock (block, cursor, activeBlocks, matches, useCache = false) { - const { loadMathMap, refreshCodeBlock } = this + const { loadMathMap } = this let selector = this.getSelector(block, cursor, activeBlocks) // highlight search key in block const highlights = matches.filter(m => m.key === block.key) @@ -20,17 +31,15 @@ export default function renderLeafBlock (block, cursor, activeBlocks, matches, u type, headingStyle, align, - htmlContent, icon, checked, key, lang, functionType, - codeBlockStyle, - math, editable } = block const data = { + props: {}, attrs: {}, dataset: {} } @@ -57,15 +66,17 @@ export default function renderLeafBlock (block, cursor, activeBlocks, matches, u style: `text-align:${align}` }) } else if (type === 'div') { - if (typeof htmlContent === 'string') { + if (functionType === 'preview') { selector += `.${CLASS_OR_ID['AG_HTML_PREVIEW']}` + const htmlContent = sanitize(this.muya.contentState.codeBlocks.get(block.preSibling), PREVIEW_DOMPURIFY_CONFIG) // handle empty html bock if (/<([a-z][a-z\d]*).*>\s*<\/\1>/.test(htmlContent)) { children = htmlToVNode('
<Empty HTML Block>
') } else { children = htmlToVNode(htmlContent) } - } else if (typeof math === 'string') { + } else if (functionType === 'multiplemath') { + const math = this.muya.contentState.codeBlocks.get(block.preSibling) const key = `${math}_display_math` selector += `.${CLASS_OR_ID['AG_MATH_PREVIEW']}` if (math === '') { @@ -122,42 +133,32 @@ export default function renderLeafBlock (block, cursor, activeBlocks, matches, u selector += `.${CLASS_OR_ID['AG_CHECKBOX_CHECKED']}` } children = '' - } else if (type === 'pre') { - selector += `.${CLASS_OR_ID['AG_CODEMIRROR_BLOCK']}` - selector += PRE_BLOCK_HASH[functionType] - Object.assign(data.attrs, { contenteditable: 'false' }) - data.hook = { - prepatch (oldvnode, vnode) { - // cheat snabbdom that the pre block is not changed!!! - if (!refreshCodeBlock) { - vnode.children = oldvnode.children - } - } - } - if (lang) { - Object.assign(data.dataset, { - lang - }) + } else if (type === 'span' && functionType === 'codeLine') { + let code + if (lang && lang === 'markup') { + code = getHighlightHtml(escapeHtml(text), highlights) + } else { + code = getHighlightHtml(text, highlights) } - if (codeBlockStyle) { - Object.assign(data.dataset, { - codeBlockStyle - }) - } + selector += `.${CLASS_OR_ID['AG_CODE_LINE']}` - if (/code|html/.test(functionType)) { - // do not set it to '' (empty string) - children = [] + if (lang && /\S/.test(code) && loadedCache.has(lang)) { + const wrapper = document.createElement('div') + wrapper.classList.add(`language-${lang}`) + wrapper.innerHTML = code + prism.highlightElement(wrapper, false, function () { + const highlightedCode = this.innerHTML + selector += `.language-${lang}` + children = htmlToVNode(highlightedCode) + }) + } else { + children = htmlToVNode(code) } - } else if (type === 'span' && /frontmatter|multiplemath/.test(functionType)) { - if (functionType === 'frontmatter') { - selector += `.${CLASS_OR_ID['AG_FRONT_MATTER_LINE']}` - } - if (functionType === 'multiplemath') { - selector += `.${CLASS_OR_ID['AG_MULTIPLE_MATH_LINE']}` - } - children = text + } else if (type === 'span' && functionType === 'languageInput') { + const html = getHighlightHtml(text, highlights) + selector += `.${CLASS_OR_ID['AG_LANGUAGE_INPUT']}` + children = htmlToVNode(html) } return h(selector, data, children) diff --git a/src/muya/lib/parser/render/snabbdom.js b/src/muya/lib/parser/render/snabbdom.js index 924e7601..beaad9b8 100644 --- a/src/muya/lib/parser/render/snabbdom.js +++ b/src/muya/lib/parser/render/snabbdom.js @@ -1,4 +1,4 @@ -import virtualize from 'snabbdom-virtualize/strings' +// import virtualize from 'snabbdom-virtualize/strings' const snabbdom = require('snabbdom') export const patch = snabbdom.init([ // Init patch function with chosen modules @@ -10,6 +10,10 @@ export const patch = snabbdom.init([ // Init patch function with chosen modules require('snabbdom/modules/eventlisteners').default // attaches event listeners ]) export const h = require('snabbdom/h').default // helper function for creating vnodes -export const toHTML = require('snabbdom-to-html') // helper function for convert DOM to HTML string +export const toHTML = require('snabbdom-to-html') // helper function for convert vnode to HTML string export const toVNode = require('snabbdom/tovnode').default // helper function for convert DOM to vnode -export const htmlToVNode = virtualize // helper function for convert HTML string to vnode +export const htmlToVNode = html => { // helper function for convert html to vnode + const wrapper = document.createElement('div') + wrapper.innerHTML = html + return toVNode(wrapper).children +} diff --git a/src/muya/lib/prism/index.js b/src/muya/lib/prism/index.js new file mode 100644 index 00000000..f554a8f8 --- /dev/null +++ b/src/muya/lib/prism/index.js @@ -0,0 +1,49 @@ +import Prism from 'prismjs2' +import { filter } from 'fuzzaldrin' +import initLoadLanguage, { loadedCache } from './loadLanguage' +import languages from './languages' + +const prism = Prism +window.Prism = Prism +import('prismjs2/plugins/keep-markup/prism-keep-markup') +const langs = Object.keys(languages).map(name => (languages[name])) +const loadLanguage = initLoadLanguage(Prism) + +/** + * check edit language + */ +const checkEditLanguage = (paragraph, selectionState) => { + const text = paragraph.textContent + const { start } = selectionState + const token = text.match(/(^`{3,})([^`]+)/) + if (paragraph.tagName !== 'SPAN') return false + if (token) { + const len = token[1].length + const lang = token[2].trim() + if (start < len) return false + if (!lang) return false + return lang + } else if (paragraph.classList.contains('ag-language-input')) { + return text.trim() + } else { + return false + } +} + +const search = text => { + return filter(langs, text, { key: 'name' }) +} + +// pre load latex and yaml and html for `math block` \ `front matter` and `html block` +loadLanguage('latex') +loadLanguage('yaml') + +export { + search, + loadLanguage, + loadedCache, + languages, + checkEditLanguage +} + +export default prism diff --git a/src/muya/lib/prism/languages.json b/src/muya/lib/prism/languages.json new file mode 100644 index 00000000..6dd6ef87 --- /dev/null +++ b/src/muya/lib/prism/languages.json @@ -0,0 +1,1135 @@ +{ + "markup": { + "title": "Markup", + "alias": [ + "html", + "xml", + "svg", + "mathml" + ], + "aliasTitles": { + "html": "HTML", + "xml": "XML", + "svg": "SVG", + "mathml": "MathML" + }, + "option": "default", + "name": "markup", + "ext": ["html"] + }, + "css": { + "title": "CSS", + "option": "default", + "peerDependencies": "markup", + "name": "css", + "ext": [ + "css" + ] + }, + "clike": { + "title": "C-like", + "option": "default", + "overrideExampleHeader": true, + "name": "clike", + "ext": [ + "c", + "h", + "ino" + ] + }, + "javascript": { + "title": "JavaScript", + "require": "clike", + "peerDependencies": "markup", + "alias": "js", + "option": "default", + "name": "javascript", + "ext": [ + "js" + ] + }, + "abap": { + "title": "ABAP", + "name": "abap", + "ext": ["absp"] + }, + "actionscript": { + "title": "ActionScript", + "require": "javascript", + "peerDependencies": "markup", + "name": "actionscript", + "ext": ["as"] + }, + "ada": { + "title": "Ada", + "name": "ada", + "ext": [] + }, + "apacheconf": { + "title": "Apache Configuration", + "name": "apacheconf", + "ext": [] + }, + "apl": { + "title": "APL", + "name": "apl", + "ext": [ + "dyalog", + "apl" + ] + }, + "applescript": { + "title": "AppleScript", + "name": "applescript", + "ext": [] + }, + "arduino": { + "title": "Arduino", + "require": "cpp", + "name": "arduino", + "ext": [] + }, + "arff": { + "title": "ARFF", + "name": "arff", + "ext": [] + }, + "asciidoc": { + "title": "AsciiDoc", + "name": "asciidoc", + "ext": [] + }, + "asm6502": { + "title": "6502 Assembly", + "name": "asm6502", + "ext": [] + }, + "aspnet": { + "title": "ASP.NET (C#)", + "require": [ + "markup", + "csharp" + ], + "name": "aspnet", + "ext": [] + }, + "autohotkey": { + "title": "AutoHotkey", + "name": "autohotkey", + "ext": [] + }, + "autoit": { + "title": "AutoIt", + "name": "autoit", + "ext": [] + }, + "bash": { + "title": "Bash", + "name": "bash", + "ext": [ + "sh", + "ksh", + "bash" + ] + }, + "basic": { + "title": "BASIC", + "name": "basic", + "ext": [] + }, + "batch": { + "title": "Batch", + "alias": "shell", + "name": "batch", + "ext": [] + }, + "bison": { + "title": "Bison", + "require": "c", + "name": "bison", + "ext": [] + }, + "brainfuck": { + "title": "Brainfuck", + "name": "brainfuck", + "ext": [ + "b", + "bf" + ] + }, + "bro": { + "title": "Bro", + "name": "bro", + "ext": [] + }, + "c": { + "title": "C", + "require": "clike", + "name": "c", + "ext": [ + "c", + "h", + "ino" + ] + }, + "csharp": { + "title": "C#", + "require": "clike", + "alias": "dotnet", + "name": "csharp", + "ext": [ + "cs" + ] + }, + "cpp": { + "title": "C++", + "require": "c", + "name": "cpp", + "ext": [ + "cpp", + "c++", + "cc", + "cxx", + "hpp", + "h++", + "hh", + "hxx" + ] + }, + "coffeescript": { + "title": "CoffeeScript", + "require": "javascript", + "name": "coffeescript", + "ext": [ + "coffee" + ] + }, + "clojure": { + "title": "Clojure", + "name": "clojure", + "ext": [ + "clj", + "cljc", + "cljx" + ] + }, + "crystal": { + "title": "Crystal", + "require": "ruby", + "name": "crystal", + "ext": [ + "cr" + ] + }, + "csp": { + "title": "Content-Security-Policy", + "name": "csp", + "ext": [] + }, + "css-extras": { + "title": "CSS Extras", + "require": "css", + "name": "css-extras", + "ext": [] + }, + "d": { + "title": "D", + "require": "clike", + "name": "d", + "ext": [ + "d" + ] + }, + "dart": { + "title": "Dart", + "require": "clike", + "name": "dart", + "ext": [ + "dart" + ] + }, + "diff": { + "title": "Diff", + "name": "diff", + "ext": [ + "diff", + "patch" + ] + }, + "django": { + "title": "Django/Jinja2", + "require": "markup", + "peerDependencies": [ + "css", + "javascript" + ], + "alias": "jinja2", + "name": "django", + "ext": [] + }, + "docker": { + "title": "Docker", + "name": "docker", + "ext": [] + }, + "eiffel": { + "title": "Eiffel", + "name": "eiffel", + "ext": [ + "e" + ] + }, + "elixir": { + "title": "Elixir", + "name": "elixir", + "ext": [] + }, + "elm": { + "title": "Elm", + "name": "elm", + "ext": [ + "elm" + ] + }, + "erb": { + "title": "ERB", + "require": [ + "ruby", + "markup-templating" + ], + "name": "erb", + "ext": [ + "erb" + ] + }, + "erlang": { + "title": "Erlang", + "name": "erlang", + "ext": [ + "erl" + ] + }, + "fsharp": { + "title": "F#", + "require": "clike", + "name": "fsharp", + "ext": [ + "fs" + ] + }, + "flow": { + "title": "Flow", + "require": "javascript", + "name": "flow", + "ext": [] + }, + "fortran": { + "title": "Fortran", + "name": "fortran", + "ext": [ + "f", + "for", + "f77", + "f90" + ] + }, + "gedcom": { + "title": "GEDCOM", + "name": "gedcom", + "ext": [] + }, + "gherkin": { + "title": "Gherkin", + "name": "gherkin", + "ext": [ + "feature" + ] + }, + "git": { + "title": "Git", + "name": "git", + "ext": [] + }, + "glsl": { + "title": "GLSL", + "require": "clike", + "name": "glsl", + "ext": [] + }, + "go": { + "title": "Go", + "require": "clike", + "name": "go", + "ext": [ + "go" + ] + }, + "graphql": { + "title": "GraphQL", + "name": "graphql", + "ext": [] + }, + "groovy": { + "title": "Groovy", + "require": "clike", + "name": "groovy", + "ext": [ + "groovy", + "gradle" + ] + }, + "haml": { + "title": "Haml", + "require": "ruby", + "peerDependencies": [ + "css", + "coffeescript", + "erb", + "javascript", + "less", + "markdown", + "ruby", + "scss", + "textile" + ], + "name": "haml", + "ext": [ + "haml" + ] + }, + "handlebars": { + "title": "Handlebars", + "require": "markup-templating", + "name": "handlebars", + "ext": [ + "html", + "htm", + "handlebars", + "hbs" + ] + }, + "haskell": { + "title": "Haskell", + "name": "haskell", + "ext": [ + "hs" + ] + }, + "haxe": { + "title": "Haxe", + "require": "clike", + "name": "haxe", + "ext": [ + "hx" + ] + }, + "http": { + "title": "HTTP", + "peerDependencies": [ + "javascript", + "markup" + ], + "name": "http", + "ext": [] + }, + "hpkp": { + "title": "HTTP Public-Key-Pins", + "name": "hpkp", + "ext": [] + }, + "hsts": { + "title": "HTTP Strict-Transport-Security", + "name": "hsts", + "ext": [] + }, + "ichigojam": { + "title": "IchigoJam", + "name": "ichigojam", + "ext": [] + }, + "icon": { + "title": "Icon", + "name": "icon", + "ext": [] + }, + "inform7": { + "title": "Inform 7", + "name": "inform7", + "ext": [] + }, + "ini": { + "title": "Ini", + "name": "ini", + "ext": [ + "properties", + "ini", + "in" + ] + }, + "io": { + "title": "Io", + "name": "io", + "ext": [] + }, + "j": { + "title": "J", + "name": "j", + "ext": [] + }, + "java": { + "title": "Java", + "require": "clike", + "name": "java", + "ext": [ + "java" + ] + }, + "jolie": { + "title": "Jolie", + "require": "clike", + "name": "jolie", + "ext": [] + }, + "json": { + "title": "JSON", + "name": "json", + "ext": [ + "json", + "map" + ] + }, + "julia": { + "title": "Julia", + "name": "julia", + "ext": [ + "jl" + ] + }, + "keyman": { + "title": "Keyman", + "name": "keyman", + "ext": [] + }, + "kotlin": { + "title": "Kotlin", + "require": "clike", + "name": "kotlin", + "ext": [ + "kt" + ] + }, + "latex": { + "title": "LaTeX", + "name": "latex", + "ext": [ + "text", + "ltx", + "tex" + ] + }, + "less": { + "title": "Less", + "require": "css", + "name": "less", + "ext": [ + "less" + ] + }, + "liquid": { + "title": "Liquid", + "name": "liquid", + "ext": [] + }, + "lisp": { + "title": "Lisp", + "alias": [ + "emacs", + "elisp", + "emacs-lisp" + ], + "name": "lisp", + "ext": [ + "cl", + "lisp", + "el" + ] + }, + "livescript": { + "title": "LiveScript", + "name": "livescript", + "ext": [ + "ls" + ] + }, + "lolcode": { + "title": "LOLCODE", + "name": "lolcode", + "ext": [] + }, + "lua": { + "title": "Lua", + "name": "lua", + "ext": [ + "lua" + ] + }, + "makefile": { + "title": "Makefile", + "name": "makefile", + "ext": [] + }, + "markdown": { + "title": "Markdown", + "require": "markup", + "name": "markdown", + "ext": [ + "markdown", + "md", + "mkd" + ] + }, + "markup-templating": { + "title": "Markup templating", + "require": "markup", + "name": "markup-templating", + "ext": [] + }, + "matlab": { + "title": "MATLAB", + "name": "matlab", + "ext": [] + }, + "mel": { + "title": "MEL", + "name": "mel", + "ext": [] + }, + "mizar": { + "title": "Mizar", + "name": "mizar", + "ext": [] + }, + "monkey": { + "title": "Monkey", + "name": "monkey", + "ext": [] + }, + "n4js": { + "title": "N4JS", + "require": "javascript", + "name": "n4js", + "ext": [] + }, + "nasm": { + "title": "NASM", + "name": "nasm", + "ext": [] + }, + "nginx": { + "title": "nginx", + "require": "clike", + "name": "nginx", + "ext": [] + }, + "nim": { + "title": "Nim", + "name": "nim", + "ext": [] + }, + "nix": { + "title": "Nix", + "name": "nix", + "ext": [] + }, + "nsis": { + "title": "NSIS", + "name": "nsis", + "ext": [ + "nsh", + "nsi" + ] + }, + "objectivec": { + "title": "Objective-C", + "require": "c", + "name": "objectivec", + "ext": [ + "m", + "mm" + ] + }, + "ocaml": { + "title": "OCaml", + "name": "ocaml", + "ext": [ + "ml", + "mli", + "mll", + "mly" + ] + }, + "opencl": { + "title": "OpenCL", + "require": "cpp", + "peerDependencies": [ + "c", + "cpp" + ], + "overrideExampleHeader": true, + "name": "opencl", + "ext": [] + }, + "oz": { + "title": "Oz", + "name": "oz", + "ext": [ + "oz" + ] + }, + "parigp": { + "title": "PARI/GP", + "name": "parigp", + "ext": [] + }, + "parser": { + "title": "Parser", + "require": "markup", + "name": "parser", + "ext": [] + }, + "pascal": { + "title": "Pascal", + "alias": "objectpascal", + "aliasTitles": { + "objectpascal": "Object Pascal" + }, + "name": "pascal", + "ext": [ + "p", + "pas" + ] + }, + "perl": { + "title": "Perl", + "name": "perl", + "ext": [ + "pl", + "pm" + ] + }, + "php": { + "title": "PHP", + "require": [ + "clike", + "markup-templating" + ], + "name": "php", + "ext": [ + "php", + "php3", + "php4", + "php5", + "php7", + "phtml" + ] + }, + "php-extras": { + "title": "PHP Extras", + "require": "php", + "name": "php-extras", + "ext": [] + }, + "plsql": { + "title": "PL/SQL", + "require": "sql", + "name": "plsql", + "ext": [ + "pls" + ] + }, + "powershell": { + "title": "PowerShell", + "name": "powershell", + "ext": [ + "ps1", + "psd1", + "psm1" + ] + }, + "processing": { + "title": "Processing", + "require": "clike", + "name": "processing", + "ext": [] + }, + "prolog": { + "title": "Prolog", + "name": "prolog", + "ext": [] + }, + "properties": { + "title": ".properties", + "name": "properties", + "ext": [ + "properties", + "ini", + "in" + ] + }, + "protobuf": { + "title": "Protocol Buffers", + "require": "clike", + "name": "protobuf", + "ext": [ + "proto" + ] + }, + "pug": { + "title": "Pug", + "require": "javascript", + "peerDependencies": [ + "coffeescript", + "ejs", + "handlebars", + "hogan", + "less", + "livescript", + "markdown", + "mustache", + "plates", + "scss", + "stylus", + "swig" + ], + "name": "pug", + "ext": [ + "jade", + "pug" + ] + }, + "puppet": { + "title": "Puppet", + "name": "puppet", + "ext": [ + "pp" + ] + }, + "pure": { + "title": "Pure", + "peerDependencies": [ + "c", + "cpp", + "fortran", + "ats", + "dsp" + ], + "name": "pure", + "ext": [] + }, + "python": { + "title": "Python", + "name": "python", + "ext": [ + "pyx", + "pxd", + "pxi" + ] + }, + "q": { + "title": "Q (kdb+ database)", + "name": "q", + "ext": [ + "q" + ] + }, + "qore": { + "title": "Qore", + "require": "clike", + "name": "qore", + "ext": [] + }, + "r": { + "title": "R", + "name": "r", + "ext": [ + "r", + "R" + ] + }, + "jsx": { + "title": "React JSX", + "require": [ + "markup", + "javascript" + ], + "name": "jsx", + "ext": [ + "jsx" + ] + }, + "tsx": { + "title": "React TSX", + "require": [ + "jsx", + "typescript" + ], + "name": "tsx", + "ext": [ + "tsx" + ] + }, + "renpy": { + "title": "Ren\"py", + "name": "renpy", + "ext": [] + }, + "reason": { + "title": "Reason", + "require": "clike", + "name": "reason", + "ext": [] + }, + "rest": { + "title": "reST (reStructuredText)", + "name": "rest", + "ext": [] + }, + "rip": { + "title": "Rip", + "name": "rip", + "ext": [] + }, + "roboconf": { + "title": "Roboconf", + "name": "roboconf", + "ext": [] + }, + "ruby": { + "title": "Ruby", + "require": "clike", + "name": "ruby", + "ext": [ + "rb" + ] + }, + "rust": { + "title": "Rust", + "name": "rust", + "ext": [ + "rs" + ] + }, + "sas": { + "title": "SAS", + "name": "sas", + "ext": [ + "sas" + ] + }, + "sass": { + "title": "Sass (Sass)", + "require": "css", + "name": "sass", + "ext": [ + "sass" + ] + }, + "scss": { + "title": "Sass (Scss)", + "require": "css", + "name": "scss", + "ext": [ + "scss" + ] + }, + "scala": { + "title": "Scala", + "require": "java", + "name": "scala", + "ext": [ + "scala" + ] + }, + "scheme": { + "title": "Scheme", + "name": "scheme", + "ext": [ + "scm", + "ss" + ] + }, + "smalltalk": { + "title": "Smalltalk", + "name": "smalltalk", + "ext": [ + "st" + ] + }, + "smarty": { + "title": "Smarty", + "require": "markup-templating", + "name": "smarty", + "ext": [ + "tpl" + ] + }, + "sql": { + "title": "SQL", + "name": "sql", + "ext": [ + "cql" + ] + }, + "soy": { + "title": "Soy (Closure Template)", + "require": "markup-templating", + "name": "soy", + "ext": [ + "soy" + ] + }, + "stylus": { + "title": "Stylus", + "name": "stylus", + "ext": [ + "styl" + ] + }, + "swift": { + "title": "Swift", + "require": "clike", + "name": "swift", + "ext": [ + "swift" + ] + }, + "tap": { + "title": "TAP", + "require": "yaml", + "name": "tap", + "ext": [] + }, + "tcl": { + "title": "Tcl", + "name": "tcl", + "ext": [ + "tcl" + ] + }, + "textile": { + "title": "Textile", + "require": "markup", + "peerDependencies": "css", + "name": "textile", + "ext": [ + "textile" + ] + }, + "tt2": { + "title": "Template Toolkit 2", + "require": [ + "clike", + "markup-templating" + ], + "name": "tt2", + "ext": [] + }, + "twig": { + "title": "Twig", + "require": "markup", + "name": "twig", + "ext": [] + }, + "typescript": { + "title": "TypeScript", + "require": "javascript", + "alias": "ts", + "name": "typescript", + "ext": [ + "ts" + ] + }, + "vbnet": { + "title": "VB.Net", + "require": "basic", + "name": "vbnet", + "ext": [ + "vb" + ] + }, + "velocity": { + "title": "Velocity", + "require": "markup", + "name": "velocity", + "ext": [ + "vtl" + ] + }, + "verilog": { + "title": "Verilog", + "name": "verilog", + "ext": [ + "v", + "sv", + "svh" + ] + }, + "vhdl": { + "title": "VHDL", + "name": "vhdl", + "ext": [ + "vhd", + "vhdl" + ] + }, + "vim": { + "title": "vim", + "name": "vim", + "ext": [] + }, + "visual-basic": { + "title": "Visual Basic", + "alias": "vb", + "name": "visual-basic", + "ext": [] + }, + "wasm": { + "title": "WebAssembly", + "name": "wasm", + "ext": [] + }, + "wiki": { + "title": "Wiki markup", + "require": "markup", + "name": "wiki", + "ext": [] + }, + "xeora": { + "title": "Xeora", + "require": "markup", + "name": "xeora", + "ext": [] + }, + "xojo": { + "title": "Xojo (REALbasic)", + "name": "xojo", + "ext": [] + }, + "xquery": { + "title": "XQuery", + "require": "markup", + "name": "xquery", + "ext": [ + "xy", + "xquery" + ] + }, + "yaml": { + "title": "YAML", + "name": "yaml", + "ext": [ + "yaml", + "yml" + ] + } +} diff --git a/src/muya/lib/prism/loadLanguage.js b/src/muya/lib/prism/loadLanguage.js new file mode 100644 index 00000000..1dc41423 --- /dev/null +++ b/src/muya/lib/prism/loadLanguage.js @@ -0,0 +1,87 @@ +import languages from './languages' +let peerDependentsMap = null +export const loadedCache = new Set(['markup', 'css', 'clike', 'javascript']) + +function getPeerDependentsMap () { + const peerDependentsMap = {} + Object.keys(languages).forEach(function (language) { + if (language === 'meta') { + return false + } + if (languages[language].peerDependencies) { + let peerDependencies = languages[language].peerDependencies + if (!Array.isArray(peerDependencies)) { + peerDependencies = [peerDependencies] + } + peerDependencies.forEach(function (peerDependency) { + if (!peerDependentsMap[peerDependency]) { + peerDependentsMap[peerDependency] = [] + } + peerDependentsMap[peerDependency].push(language) + }) + } + }) + return peerDependentsMap +} + +function getPeerDependents (mainLanguage) { + if (!peerDependentsMap) { + peerDependentsMap = getPeerDependentsMap() + } + return peerDependentsMap[mainLanguage] || [] +} + +function initLoadLanguage (Prism) { + return function loadLanguages (arr, withoutDependencies) { + // If no argument is passed, load all components + if (!arr) { + arr = Object.keys(languages).filter(function (language) { + return language !== 'meta' + }) + } + if (arr && !arr.length) { + return + } + + if (!Array.isArray(arr)) { + arr = [arr] + } + + arr.forEach(function (language) { + if (!languages[language]) { + console.warn('Language does not exist ' + language) + return + } + if (loadedCache.has(language)) { + return + } + + // Load dependencies first + if (!withoutDependencies && languages[language].require) { + loadLanguages(languages[language].require) + } + + delete Prism.languages[language] + import('prismjs2/components/prism-' + language) + .then(_ => { + loadedCache.add(language) + }) + + // Reload dependents + const dependents = getPeerDependents(language).filter(function (dependent) { + // If dependent language was already loaded, + // we want to reload it. + if (Prism.languages[dependent]) { + delete Prism.languages[dependent] + return true + } + return false + }) + if (dependents.length) { + loadLanguages(dependents, true) + } + }) + } +} + +export default initLoadLanguage diff --git a/src/muya/lib/selection/index.js b/src/muya/lib/selection/index.js index 08b5e25b..9ec1c2c9 100644 --- a/src/muya/lib/selection/index.js +++ b/src/muya/lib/selection/index.js @@ -842,7 +842,6 @@ class Selection { if (range.getClientRects) { range.collapse(true) const rects = range.getClientRects() - if (rects.length) { const { left, top, x: rectX, y: rectY } = rects[0] x = rectX || left diff --git a/src/muya/lib/ui/codePicker/index.js b/src/muya/lib/ui/codePicker/index.js index 9c31b449..53045ea4 100644 --- a/src/muya/lib/ui/codePicker/index.js +++ b/src/muya/lib/ui/codePicker/index.js @@ -1,6 +1,6 @@ import BaseScrollFloat from '../baseScrollFloat' import { patch, h } from '../../parser/render/snabbdom' -import { search } from '../../codeMirror' +import { search } from '../../prism/index' import fileIcons from '../fileIcons' import './index.css' @@ -19,10 +19,8 @@ class CodePicker extends BaseScrollFloat { super.listen() const { eventCenter } = this.muya eventCenter.subscribe('muya-code-picker', ({ reference, lang, cb }) => { - const modes = search(lang).map(mode => { - return Object.assign(mode, { text: mode.name }) - }) - if (modes.length) { + const modes = search(lang) + if (modes.length && reference) { this.show(reference, cb) this.renderArray = modes this.activeItem = modes[0] @@ -37,19 +35,19 @@ class CodePicker extends BaseScrollFloat { const { renderArray, oldVnode, scrollElement, activeItem } = this let children = renderArray.map(item => { let iconClassNames - if (item.mode.ext && Array.isArray(item.mode.ext)) { - for (const ext of item.mode.ext) { + if (item.ext && Array.isArray(item.ext)) { + for (const ext of item.ext) { iconClassNames = fileIcons.getClassWithColor(`fackname.${ext}`) if (iconClassNames) break } - } else if (item.mode.name) { - iconClassNames = fileIcons.getClassWithColor(item.mode.name) + } else if (item.name) { + iconClassNames = fileIcons.getClassWithColor(item.name) } // Because `markdown mode in Codemirror` don't have extensions. // if still can not get the className, add a common className 'atom-icon light-cyan' if (!iconClassNames) { - iconClassNames = item.text === 'markdown' ? fileIcons.getClassWithColor('fackname.md') : 'atom-icon light-cyan' + iconClassNames = item.name === 'markdown' ? fileIcons.getClassWithColor('fackname.md') : 'atom-icon light-cyan' } const iconSelector = 'span' + iconClassNames.split(/\s/).map(s => `.${s}`).join('') const icon = h('div.icon-wrapper', h(iconSelector)) diff --git a/src/muya/lib/ui/emojis/emojisJson.js b/src/muya/lib/ui/emojis/emojisJson.js deleted file mode 100644 index d3404862..00000000 --- a/src/muya/lib/ui/emojis/emojisJson.js +++ /dev/null @@ -1,13960 +0,0 @@ -const emojis = [ - { - 'emoji': '๐Ÿ˜€', - 'description': 'grinning face', - 'category': 'People', - 'aliases': [ - 'grinning' - ], - 'tags': [ - 'smile', - 'happy' - ] - }, - { - 'emoji': '๐Ÿ˜ƒ', - 'description': 'smiling face with open mouth', - 'category': 'People', - 'aliases': [ - 'smiley' - ], - 'tags': [ - 'happy', - 'joy', - 'haha' - ] - }, - { - 'emoji': '๐Ÿ˜„', - 'description': 'smiling face with open mouth & smiling eyes', - 'category': 'People', - 'aliases': [ - 'smile' - ], - 'tags': [ - 'happy', - 'joy', - 'laugh', - 'pleased' - ] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'grinning face with smiling eyes', - 'category': 'People', - 'aliases': [ - 'grin' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜†', - 'description': 'smiling face with open mouth & closed eyes', - 'category': 'People', - 'aliases': [ - 'laughing', - 'satisfied' - ], - 'tags': [ - 'happy', - 'haha' - ] - }, - { - 'emoji': '๐Ÿ˜…', - 'description': 'smiling face with open mouth & cold sweat', - 'category': 'People', - 'aliases': [ - 'sweat_smile' - ], - 'tags': [ - 'hot' - ] - }, - { - 'emoji': '๐Ÿ˜‚', - 'description': 'face with tears of joy', - 'category': 'People', - 'aliases': [ - 'joy' - ], - 'tags': [ - 'tears' - ] - }, - { - 'emoji': '๐Ÿคฃ', - 'description': 'rolling on the floor laughing', - 'category': 'People', - 'aliases': [ - 'rofl' - ], - 'tags': [ - 'lol', - 'laughing' - ] - }, - { - 'emoji': 'โ˜บ๏ธ', - 'description': 'smiling face', - 'category': 'People', - 'aliases': [ - 'relaxed' - ], - 'tags': [ - 'blush', - 'pleased' - ] - }, - { - 'emoji': '๐Ÿ˜Š', - 'description': 'smiling face with smiling eyes', - 'category': 'People', - 'aliases': [ - 'blush' - ], - 'tags': [ - 'proud' - ] - }, - { - 'emoji': '๐Ÿ˜‡', - 'description': 'smiling face with halo', - 'category': 'People', - 'aliases': [ - 'innocent' - ], - 'tags': [ - 'angel' - ] - }, - { - 'emoji': '๐Ÿ™‚', - 'description': 'slightly smiling face', - 'category': 'People', - 'aliases': [ - 'slightly_smiling_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™ƒ', - 'description': 'upside-down face', - 'category': 'People', - 'aliases': [ - 'upside_down_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜‰', - 'description': 'winking face', - 'category': 'People', - 'aliases': [ - 'wink' - ], - 'tags': [ - 'flirt' - ] - }, - { - 'emoji': '๐Ÿ˜Œ', - 'description': 'relieved face', - 'category': 'People', - 'aliases': [ - 'relieved' - ], - 'tags': [ - 'whew' - ] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'smiling face with heart-eyes', - 'category': 'People', - 'aliases': [ - 'heart_eyes' - ], - 'tags': [ - 'love', - 'crush' - ] - }, - { - 'emoji': '๐Ÿ˜˜', - 'description': 'face blowing a kiss', - 'category': 'People', - 'aliases': [ - 'kissing_heart' - ], - 'tags': [ - 'flirt' - ] - }, - { - 'emoji': '๐Ÿ˜—', - 'description': 'kissing face', - 'category': 'People', - 'aliases': [ - 'kissing' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜™', - 'description': 'kissing face with smiling eyes', - 'category': 'People', - 'aliases': [ - 'kissing_smiling_eyes' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜š', - 'description': 'kissing face with closed eyes', - 'category': 'People', - 'aliases': [ - 'kissing_closed_eyes' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜‹', - 'description': 'face savouring delicious food', - 'category': 'People', - 'aliases': [ - 'yum' - ], - 'tags': [ - 'tongue', - 'lick' - ] - }, - { - 'emoji': '๐Ÿ˜œ', - 'description': 'face with stuck-out tongue & winking eye', - 'category': 'People', - 'aliases': [ - 'stuck_out_tongue_winking_eye' - ], - 'tags': [ - 'prank', - 'silly' - ] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'face with stuck-out tongue & closed eyes', - 'category': 'People', - 'aliases': [ - 'stuck_out_tongue_closed_eyes' - ], - 'tags': [ - 'prank' - ] - }, - { - 'emoji': '๐Ÿ˜›', - 'description': 'face with stuck-out tongue', - 'category': 'People', - 'aliases': [ - 'stuck_out_tongue' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค‘', - 'description': 'money-mouth face', - 'category': 'People', - 'aliases': [ - 'money_mouth_face' - ], - 'tags': [ - 'rich' - ] - }, - { - 'emoji': '๐Ÿค—', - 'description': 'hugging face', - 'category': 'People', - 'aliases': [ - 'hugs' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค“', - 'description': 'nerd face', - 'category': 'People', - 'aliases': [ - 'nerd_face' - ], - 'tags': [ - 'geek', - 'glasses' - ] - }, - { - 'emoji': '๐Ÿ˜Ž', - 'description': 'smiling face with sunglasses', - 'category': 'People', - 'aliases': [ - 'sunglasses' - ], - 'tags': [ - 'cool' - ] - }, - { - 'emoji': '๐Ÿคก', - 'description': 'clown face', - 'category': 'People', - 'aliases': [ - 'clown_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค ', - 'description': 'cowboy hat face', - 'category': 'People', - 'aliases': [ - 'cowboy_hat_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'smirking face', - 'category': 'People', - 'aliases': [ - 'smirk' - ], - 'tags': [ - 'smug' - ] - }, - { - 'emoji': '๐Ÿ˜’', - 'description': 'unamused face', - 'category': 'People', - 'aliases': [ - 'unamused' - ], - 'tags': [ - 'meh' - ] - }, - { - 'emoji': '๐Ÿ˜ž', - 'description': 'disappointed face', - 'category': 'People', - 'aliases': [ - 'disappointed' - ], - 'tags': [ - 'sad' - ] - }, - { - 'emoji': '๐Ÿ˜”', - 'description': 'pensive face', - 'category': 'People', - 'aliases': [ - 'pensive' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜Ÿ', - 'description': 'worried face', - 'category': 'People', - 'aliases': [ - 'worried' - ], - 'tags': [ - 'nervous' - ] - }, - { - 'emoji': '๐Ÿ˜•', - 'description': 'confused face', - 'category': 'People', - 'aliases': [ - 'confused' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™', - 'description': 'slightly frowning face', - 'category': 'People', - 'aliases': [ - 'slightly_frowning_face' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜น๏ธ', - 'description': 'frowning face', - 'category': 'People', - 'aliases': [ - 'frowning_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ฃ', - 'description': 'persevering face', - 'category': 'People', - 'aliases': [ - 'persevere' - ], - 'tags': [ - 'struggling' - ] - }, - { - 'emoji': '๐Ÿ˜–', - 'description': 'confounded face', - 'category': 'People', - 'aliases': [ - 'confounded' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ซ', - 'description': 'tired face', - 'category': 'People', - 'aliases': [ - 'tired_face' - ], - 'tags': [ - 'upset', - 'whine' - ] - }, - { - 'emoji': '๐Ÿ˜ฉ', - 'description': 'weary face', - 'category': 'People', - 'aliases': [ - 'weary' - ], - 'tags': [ - 'tired' - ] - }, - { - 'emoji': '๐Ÿ˜ค', - 'description': 'face with steam from nose', - 'category': 'People', - 'aliases': [ - 'triumph' - ], - 'tags': [ - 'smug' - ] - }, - { - 'emoji': '๐Ÿ˜ ', - 'description': 'angry face', - 'category': 'People', - 'aliases': [ - 'angry' - ], - 'tags': [ - 'mad', - 'annoyed' - ] - }, - { - 'emoji': '๐Ÿ˜ก', - 'description': 'pouting face', - 'category': 'People', - 'aliases': [ - 'rage', - 'pout' - ], - 'tags': [ - 'angry' - ] - }, - { - 'emoji': '๐Ÿ˜ถ', - 'description': 'face without mouth', - 'category': 'People', - 'aliases': [ - 'no_mouth' - ], - 'tags': [ - 'mute', - 'silence' - ] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'neutral face', - 'category': 'People', - 'aliases': [ - 'neutral_face' - ], - 'tags': [ - 'meh' - ] - }, - { - 'emoji': '๐Ÿ˜‘', - 'description': 'expressionless face', - 'category': 'People', - 'aliases': [ - 'expressionless' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ฏ', - 'description': 'hushed face', - 'category': 'People', - 'aliases': [ - 'hushed' - ], - 'tags': [ - 'silence', - 'speechless' - ] - }, - { - 'emoji': '๐Ÿ˜ฆ', - 'description': 'frowning face with open mouth', - 'category': 'People', - 'aliases': [ - 'frowning' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ง', - 'description': 'anguished face', - 'category': 'People', - 'aliases': [ - 'anguished' - ], - 'tags': [ - 'stunned' - ] - }, - { - 'emoji': '๐Ÿ˜ฎ', - 'description': 'face with open mouth', - 'category': 'People', - 'aliases': [ - 'open_mouth' - ], - 'tags': [ - 'surprise', - 'impressed', - 'wow' - ] - }, - { - 'emoji': '๐Ÿ˜ฒ', - 'description': 'astonished face', - 'category': 'People', - 'aliases': [ - 'astonished' - ], - 'tags': [ - 'amazed', - 'gasp' - ] - }, - { - 'emoji': '๐Ÿ˜ต', - 'description': 'dizzy face', - 'category': 'People', - 'aliases': [ - 'dizzy_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ณ', - 'description': 'flushed face', - 'category': 'People', - 'aliases': [ - 'flushed' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ฑ', - 'description': 'face screaming in fear', - 'category': 'People', - 'aliases': [ - 'scream' - ], - 'tags': [ - 'horror', - 'shocked' - ] - }, - { - 'emoji': '๐Ÿ˜จ', - 'description': 'fearful face', - 'category': 'People', - 'aliases': [ - 'fearful' - ], - 'tags': [ - 'scared', - 'shocked', - 'oops' - ] - }, - { - 'emoji': '๐Ÿ˜ฐ', - 'description': 'face with open mouth & cold sweat', - 'category': 'People', - 'aliases': [ - 'cold_sweat' - ], - 'tags': [ - 'nervous' - ] - }, - { - 'emoji': '๐Ÿ˜ข', - 'description': 'crying face', - 'category': 'People', - 'aliases': [ - 'cry' - ], - 'tags': [ - 'sad', - 'tear' - ] - }, - { - 'emoji': '๐Ÿ˜ฅ', - 'description': 'disappointed but relieved face', - 'category': 'People', - 'aliases': [ - 'disappointed_relieved' - ], - 'tags': [ - 'phew', - 'sweat', - 'nervous' - ] - }, - { - 'emoji': '๐Ÿคค', - 'description': 'drooling face', - 'category': 'People', - 'aliases': [ - 'drooling_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ญ', - 'description': 'loudly crying face', - 'category': 'People', - 'aliases': [ - 'sob' - ], - 'tags': [ - 'sad', - 'cry', - 'bawling' - ] - }, - { - 'emoji': '๐Ÿ˜“', - 'description': 'face with cold sweat', - 'category': 'People', - 'aliases': [ - 'sweat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ช', - 'description': 'sleepy face', - 'category': 'People', - 'aliases': [ - 'sleepy' - ], - 'tags': [ - 'tired' - ] - }, - { - 'emoji': '๐Ÿ˜ด', - 'description': 'sleeping face', - 'category': 'People', - 'aliases': [ - 'sleeping' - ], - 'tags': [ - 'zzz' - ] - }, - { - 'emoji': '๐Ÿ™„', - 'description': 'face with rolling eyes', - 'category': 'People', - 'aliases': [ - 'roll_eyes' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค”', - 'description': 'thinking face', - 'category': 'People', - 'aliases': [ - 'thinking' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคฅ', - 'description': 'lying face', - 'category': 'People', - 'aliases': [ - 'lying_face' - ], - 'tags': [ - 'liar' - ] - }, - { - 'emoji': '๐Ÿ˜ฌ', - 'description': 'grimacing face', - 'category': 'People', - 'aliases': [ - 'grimacing' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค', - 'description': 'zipper-mouth face', - 'category': 'People', - 'aliases': [ - 'zipper_mouth_face' - ], - 'tags': [ - 'silence', - 'hush' - ] - }, - { - 'emoji': '๐Ÿคข', - 'description': 'nauseated face', - 'category': 'People', - 'aliases': [ - 'nauseated_face' - ], - 'tags': [ - 'sick', - 'barf', - 'disgusted' - ] - }, - { - 'emoji': '๐Ÿคง', - 'description': 'sneezing face', - 'category': 'People', - 'aliases': [ - 'sneezing_face' - ], - 'tags': [ - 'achoo', - 'sick' - ] - }, - { - 'emoji': '๐Ÿ˜ท', - 'description': 'face with medical mask', - 'category': 'People', - 'aliases': [ - 'mask' - ], - 'tags': [ - 'sick', - 'ill' - ] - }, - { - 'emoji': '๐Ÿค’', - 'description': 'face with thermometer', - 'category': 'People', - 'aliases': [ - 'face_with_thermometer' - ], - 'tags': [ - 'sick' - ] - }, - { - 'emoji': '๐Ÿค•', - 'description': 'face with head-bandage', - 'category': 'People', - 'aliases': [ - 'face_with_head_bandage' - ], - 'tags': [ - 'hurt' - ] - }, - { - 'emoji': '๐Ÿ˜ˆ', - 'description': 'smiling face with horns', - 'category': 'People', - 'aliases': [ - 'smiling_imp' - ], - 'tags': [ - 'devil', - 'evil', - 'horns' - ] - }, - { - 'emoji': '๐Ÿ‘ฟ', - 'description': 'angry face with horns', - 'category': 'People', - 'aliases': [ - 'imp' - ], - 'tags': [ - 'angry', - 'devil', - 'evil', - 'horns' - ] - }, - { - 'emoji': '๐Ÿ‘น', - 'description': 'ogre', - 'category': 'People', - 'aliases': [ - 'japanese_ogre' - ], - 'tags': [ - 'monster' - ] - }, - { - 'emoji': '๐Ÿ‘บ', - 'description': 'goblin', - 'category': 'People', - 'aliases': [ - 'japanese_goblin' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ฉ', - 'description': 'pile of poo', - 'category': 'People', - 'aliases': [ - 'hankey', - 'poop', - 'shit' - ], - 'tags': [ - 'crap' - ] - }, - { - 'emoji': '๐Ÿ‘ป', - 'description': 'ghost', - 'category': 'People', - 'aliases': [ - 'ghost' - ], - 'tags': [ - 'halloween' - ] - }, - { - 'emoji': '๐Ÿ’€', - 'description': 'skull', - 'category': 'People', - 'aliases': [ - 'skull' - ], - 'tags': [ - 'dead', - 'danger', - 'poison' - ] - }, - { - 'emoji': 'โ˜ ๏ธ', - 'description': 'skull and crossbones', - 'category': 'People', - 'aliases': [ - 'skull_and_crossbones' - ], - 'tags': [ - 'danger', - 'pirate' - ] - }, - { - 'emoji': '๐Ÿ‘ฝ', - 'description': 'alien', - 'category': 'People', - 'aliases': [ - 'alien' - ], - 'tags': [ - 'ufo' - ] - }, - { - 'emoji': '๐Ÿ‘พ', - 'description': 'alien monster', - 'category': 'People', - 'aliases': [ - 'space_invader' - ], - 'tags': [ - 'game', - 'retro' - ] - }, - { - 'emoji': '๐Ÿค–', - 'description': 'robot face', - 'category': 'People', - 'aliases': [ - 'robot' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽƒ', - 'description': 'jack-o-lantern', - 'category': 'People', - 'aliases': [ - 'jack_o_lantern' - ], - 'tags': [ - 'halloween' - ] - }, - { - 'emoji': '๐Ÿ˜บ', - 'description': 'smiling cat face with open mouth', - 'category': 'People', - 'aliases': [ - 'smiley_cat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ธ', - 'description': 'grinning cat face with smiling eyes', - 'category': 'People', - 'aliases': [ - 'smile_cat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜น', - 'description': 'cat face with tears of joy', - 'category': 'People', - 'aliases': [ - 'joy_cat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ป', - 'description': 'smiling cat face with heart-eyes', - 'category': 'People', - 'aliases': [ - 'heart_eyes_cat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ผ', - 'description': 'cat face with wry smile', - 'category': 'People', - 'aliases': [ - 'smirk_cat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜ฝ', - 'description': 'kissing cat face with closed eyes', - 'category': 'People', - 'aliases': [ - 'kissing_cat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™€', - 'description': 'weary cat face', - 'category': 'People', - 'aliases': [ - 'scream_cat' - ], - 'tags': [ - 'horror' - ] - }, - { - 'emoji': '๐Ÿ˜ฟ', - 'description': 'crying cat face', - 'category': 'People', - 'aliases': [ - 'crying_cat_face' - ], - 'tags': [ - 'sad', - 'tear' - ] - }, - { - 'emoji': '๐Ÿ˜พ', - 'description': 'pouting cat face', - 'category': 'People', - 'aliases': [ - 'pouting_cat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'open hands', - 'category': 'People', - 'aliases': [ - 'open_hands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™Œ', - 'description': 'raising hands', - 'category': 'People', - 'aliases': [ - 'raised_hands' - ], - 'tags': [ - 'hooray' - ] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'clapping hands', - 'category': 'People', - 'aliases': [ - 'clap' - ], - 'tags': [ - 'praise', - 'applause' - ] - }, - { - 'emoji': '๐Ÿ™', - 'description': 'folded hands', - 'category': 'People', - 'aliases': [ - 'pray' - ], - 'tags': [ - 'please', - 'hope', - 'wish' - ] - }, - { - 'emoji': '๐Ÿค', - 'description': 'handshake', - 'category': 'People', - 'aliases': [ - 'handshake' - ], - 'tags': [ - 'deal' - ] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'thumbs up', - 'category': 'People', - 'aliases': [ - '+1', - 'thumbsup' - ], - 'tags': [ - 'approve', - 'ok' - ] - }, - { - 'emoji': '๐Ÿ‘Ž', - 'description': 'thumbs down', - 'category': 'People', - 'aliases': [ - '-1', - 'thumbsdown' - ], - 'tags': [ - 'disapprove', - 'bury' - ] - }, - { - 'emoji': '๐Ÿ‘Š', - 'description': 'oncoming fist', - 'category': 'People', - 'aliases': [ - 'fist_oncoming', - 'facepunch', - 'punch' - ], - 'tags': [ - 'attack' - ] - }, - { - 'emoji': 'โœŠ', - 'description': 'raised fist', - 'category': 'People', - 'aliases': [ - 'fist_raised', - 'fist' - ], - 'tags': [ - 'power' - ] - }, - { - 'emoji': '๐Ÿค›', - 'description': 'left-facing fist', - 'category': 'People', - 'aliases': [ - 'fist_left' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคœ', - 'description': 'right-facing fist', - 'category': 'People', - 'aliases': [ - 'fist_right' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคž', - 'description': 'crossed fingers', - 'category': 'People', - 'aliases': [ - 'crossed_fingers' - ], - 'tags': [ - 'luck', - 'hopeful' - ] - }, - { - 'emoji': 'โœŒ๏ธ', - 'description': 'victory hand', - 'category': 'People', - 'aliases': [ - 'v' - ], - 'tags': [ - 'victory', - 'peace' - ] - }, - { - 'emoji': '๐Ÿค˜', - 'description': 'sign of the horns', - 'category': 'People', - 'aliases': [ - 'metal' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘Œ', - 'description': 'OK hand', - 'category': 'People', - 'aliases': [ - 'ok_hand' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ˆ', - 'description': 'backhand index pointing left', - 'category': 'People', - 'aliases': [ - 'point_left' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘‰', - 'description': 'backhand index pointing right', - 'category': 'People', - 'aliases': [ - 'point_right' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘†', - 'description': 'backhand index pointing up', - 'category': 'People', - 'aliases': [ - 'point_up_2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘‡', - 'description': 'backhand index pointing down', - 'category': 'People', - 'aliases': [ - 'point_down' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜๏ธ', - 'description': 'index pointing up', - 'category': 'People', - 'aliases': [ - 'point_up' - ], - 'tags': [] - }, - { - 'emoji': 'โœ‹', - 'description': 'raised hand', - 'category': 'People', - 'aliases': [ - 'hand', - 'raised_hand' - ], - 'tags': [ - 'highfive', - 'stop' - ] - }, - { - 'emoji': '๐Ÿคš', - 'description': 'raised back of hand', - 'category': 'People', - 'aliases': [ - 'raised_back_of_hand' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–', - 'description': 'raised hand with fingers splayed', - 'category': 'People', - 'aliases': [ - 'raised_hand_with_fingers_splayed' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ––', - 'description': 'vulcan salute', - 'category': 'People', - 'aliases': [ - 'vulcan_salute' - ], - 'tags': [ - 'prosper', - 'spock' - ] - }, - { - 'emoji': '๐Ÿ‘‹', - 'description': 'waving hand', - 'category': 'People', - 'aliases': [ - 'wave' - ], - 'tags': [ - 'goodbye' - ] - }, - { - 'emoji': '๐Ÿค™', - 'description': 'call me hand', - 'category': 'People', - 'aliases': [ - 'call_me_hand' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ช', - 'description': 'flexed biceps', - 'category': 'People', - 'aliases': [ - 'muscle' - ], - 'tags': [ - 'flex', - 'bicep', - 'strong', - 'workout' - ] - }, - { - 'emoji': '๐Ÿ–•', - 'description': 'middle finger', - 'category': 'People', - 'aliases': [ - 'middle_finger', - 'fu' - ], - 'tags': [] - }, - { - 'emoji': 'โœ๏ธ', - 'description': 'writing hand', - 'category': 'People', - 'aliases': [ - 'writing_hand' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคณ', - 'description': 'selfie', - 'category': 'People', - 'aliases': [ - 'selfie' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’…', - 'description': 'nail polish', - 'category': 'People', - 'aliases': [ - 'nail_care' - ], - 'tags': [ - 'beauty', - 'manicure' - ] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'ring', - 'category': 'People', - 'aliases': [ - 'ring' - ], - 'tags': [ - 'wedding', - 'marriage', - 'engaged' - ] - }, - { - 'emoji': '๐Ÿ’„', - 'description': 'lipstick', - 'category': 'People', - 'aliases': [ - 'lipstick' - ], - 'tags': [ - 'makeup' - ] - }, - { - 'emoji': '๐Ÿ’‹', - 'description': 'kiss mark', - 'category': 'People', - 'aliases': [ - 'kiss' - ], - 'tags': [ - 'lipstick' - ] - }, - { - 'emoji': '๐Ÿ‘„', - 'description': 'mouth', - 'category': 'People', - 'aliases': [ - 'lips' - ], - 'tags': [ - 'kiss' - ] - }, - { - 'emoji': '๐Ÿ‘…', - 'description': 'tongue', - 'category': 'People', - 'aliases': [ - 'tongue' - ], - 'tags': [ - 'taste' - ] - }, - { - 'emoji': '๐Ÿ‘‚', - 'description': 'ear', - 'category': 'People', - 'aliases': [ - 'ear' - ], - 'tags': [ - 'hear', - 'sound', - 'listen' - ] - }, - { - 'emoji': '๐Ÿ‘ƒ', - 'description': 'nose', - 'category': 'People', - 'aliases': [ - 'nose' - ], - 'tags': [ - 'smell' - ] - }, - { - 'emoji': '๐Ÿ‘ฃ', - 'description': 'footprints', - 'category': 'People', - 'aliases': [ - 'footprints' - ], - 'tags': [ - 'feet', - 'tracks' - ] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'eye', - 'category': 'People', - 'aliases': [ - 'eye' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘€', - 'description': 'eyes', - 'category': 'People', - 'aliases': [ - 'eyes' - ], - 'tags': [ - 'look', - 'see', - 'watch' - ] - }, - { - 'emoji': '๐Ÿ—ฃ', - 'description': 'speaking head', - 'category': 'People', - 'aliases': [ - 'speaking_head' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ค', - 'description': 'bust in silhouette', - 'category': 'People', - 'aliases': [ - 'bust_in_silhouette' - ], - 'tags': [ - 'user' - ] - }, - { - 'emoji': '๐Ÿ‘ฅ', - 'description': 'busts in silhouette', - 'category': 'People', - 'aliases': [ - 'busts_in_silhouette' - ], - 'tags': [ - 'users', - 'group', - 'team' - ] - }, - { - 'emoji': '๐Ÿ‘ถ', - 'description': 'baby', - 'category': 'People', - 'aliases': [ - 'baby' - ], - 'tags': [ - 'child', - 'newborn' - ] - }, - { - 'emoji': '๐Ÿ‘ฆ', - 'description': 'boy', - 'category': 'People', - 'aliases': [ - 'boy' - ], - 'tags': [ - 'child' - ] - }, - { - 'emoji': '๐Ÿ‘ง', - 'description': 'girl', - 'category': 'People', - 'aliases': [ - 'girl' - ], - 'tags': [ - 'child' - ] - }, - { - 'emoji': '๐Ÿ‘จ', - 'description': 'man', - 'category': 'People', - 'aliases': [ - 'man' - ], - 'tags': [ - 'mustache', - 'father', - 'dad' - ] - }, - { - 'emoji': '๐Ÿ‘ฉ', - 'description': 'woman', - 'category': 'People', - 'aliases': [ - 'woman' - ], - 'tags': [ - 'girls' - ] - }, - { - 'emoji': '๐Ÿ‘ฑโ€โ™€', - 'description': 'blond-haired woman', - 'category': 'People', - 'aliases': [ - 'blonde_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฑ', - 'description': 'blond-haired person', - 'category': 'People', - 'aliases': [ - 'blonde_man', - 'person_with_blond_hair' - ], - 'tags': [ - 'boy' - ] - }, - { - 'emoji': '๐Ÿ‘ด', - 'description': 'old man', - 'category': 'People', - 'aliases': [ - 'older_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ต', - 'description': 'old woman', - 'category': 'People', - 'aliases': [ - 'older_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฒ', - 'description': 'man with Chinese cap', - 'category': 'People', - 'aliases': [ - 'man_with_gua_pi_mao' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ณโ€โ™€', - 'description': 'woman wearing turban', - 'category': 'People', - 'aliases': [ - 'woman_with_turban' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ณ', - 'description': 'person wearing turban', - 'category': 'People', - 'aliases': [ - 'man_with_turban' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฎโ€โ™€', - 'description': 'woman police officer', - 'category': 'People', - 'aliases': [ - 'policewoman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฎ', - 'description': 'police officer', - 'category': 'People', - 'aliases': [ - 'policeman', - 'cop' - ], - 'tags': [ - 'police', - 'law' - ] - }, - { - 'emoji': '๐Ÿ‘ทโ€โ™€', - 'description': 'woman construction worker', - 'category': 'People', - 'aliases': [ - 'construction_worker_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ท', - 'description': 'construction worker', - 'category': 'People', - 'aliases': [ - 'construction_worker_man', - 'construction_worker' - ], - 'tags': [ - 'helmet' - ] - }, - { - 'emoji': '๐Ÿ’‚โ€โ™€', - 'description': 'woman guard', - 'category': 'People', - 'aliases': [ - 'guardswoman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’‚', - 'description': 'guard', - 'category': 'People', - 'aliases': [ - 'guardsman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ต๏ธโ€โ™€๏ธ', - 'description': 'woman detective', - 'category': 'People', - 'aliases': [ - 'female_detective' - ], - 'tags': [ - 'sleuth' - ] - }, - { - 'emoji': '๐Ÿ•ต', - 'description': 'detective', - 'category': 'People', - 'aliases': [ - 'male_detective', - 'detective' - ], - 'tags': [ - 'sleuth' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€โš•', - 'description': 'woman health worker', - 'category': 'People', - 'aliases': [ - 'woman_health_worker' - ], - 'tags': [ - 'doctor', - 'nurse' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€โš•', - 'description': 'man health worker', - 'category': 'People', - 'aliases': [ - 'man_health_worker' - ], - 'tags': [ - 'doctor', - 'nurse' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐ŸŒพ', - 'description': 'woman farmer', - 'category': 'People', - 'aliases': [ - 'woman_farmer' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐ŸŒพ', - 'description': 'man farmer', - 'category': 'People', - 'aliases': [ - 'man_farmer' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿณ', - 'description': 'woman cook', - 'category': 'People', - 'aliases': [ - 'woman_cook' - ], - 'tags': [ - 'chef' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿณ', - 'description': 'man cook', - 'category': 'People', - 'aliases': [ - 'man_cook' - ], - 'tags': [ - 'chef' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐ŸŽ“', - 'description': 'woman student', - 'category': 'People', - 'aliases': [ - 'woman_student' - ], - 'tags': [ - 'graduation' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐ŸŽ“', - 'description': 'man student', - 'category': 'People', - 'aliases': [ - 'man_student' - ], - 'tags': [ - 'graduation' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐ŸŽค', - 'description': 'woman singer', - 'category': 'People', - 'aliases': [ - 'woman_singer' - ], - 'tags': [ - 'rockstar' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐ŸŽค', - 'description': 'man singer', - 'category': 'People', - 'aliases': [ - 'man_singer' - ], - 'tags': [ - 'rockstar' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿซ', - 'description': 'woman teacher', - 'category': 'People', - 'aliases': [ - 'woman_teacher' - ], - 'tags': [ - 'school', - 'professor' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿซ', - 'description': 'man teacher', - 'category': 'People', - 'aliases': [ - 'man_teacher' - ], - 'tags': [ - 'school', - 'professor' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿญ', - 'description': 'woman factory worker', - 'category': 'People', - 'aliases': [ - 'woman_factory_worker' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿญ', - 'description': 'man factory worker', - 'category': 'People', - 'aliases': [ - 'man_factory_worker' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ’ป', - 'description': 'woman technologist', - 'category': 'People', - 'aliases': [ - 'woman_technologist' - ], - 'tags': [ - 'coder' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ’ป', - 'description': 'man technologist', - 'category': 'People', - 'aliases': [ - 'man_technologist' - ], - 'tags': [ - 'coder' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ’ผ', - 'description': 'woman office worker', - 'category': 'People', - 'aliases': [ - 'woman_office_worker' - ], - 'tags': [ - 'business' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ’ผ', - 'description': 'man office worker', - 'category': 'People', - 'aliases': [ - 'man_office_worker' - ], - 'tags': [ - 'business' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ”ง', - 'description': 'woman mechanic', - 'category': 'People', - 'aliases': [ - 'woman_mechanic' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ”ง', - 'description': 'man mechanic', - 'category': 'People', - 'aliases': [ - 'man_mechanic' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ”ฌ', - 'description': 'woman scientist', - 'category': 'People', - 'aliases': [ - 'woman_scientist' - ], - 'tags': [ - 'research' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ”ฌ', - 'description': 'man scientist', - 'category': 'People', - 'aliases': [ - 'man_scientist' - ], - 'tags': [ - 'research' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐ŸŽจ', - 'description': 'woman artist', - 'category': 'People', - 'aliases': [ - 'woman_artist' - ], - 'tags': [ - 'painter' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐ŸŽจ', - 'description': 'man artist', - 'category': 'People', - 'aliases': [ - 'man_artist' - ], - 'tags': [ - 'painter' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿš’', - 'description': 'woman firefighter', - 'category': 'People', - 'aliases': [ - 'woman_firefighter' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿš’', - 'description': 'man firefighter', - 'category': 'People', - 'aliases': [ - 'man_firefighter' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€โœˆ', - 'description': 'woman pilot', - 'category': 'People', - 'aliases': [ - 'woman_pilot' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€โœˆ', - 'description': 'man pilot', - 'category': 'People', - 'aliases': [ - 'man_pilot' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿš€', - 'description': 'woman astronaut', - 'category': 'People', - 'aliases': [ - 'woman_astronaut' - ], - 'tags': [ - 'space' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿš€', - 'description': 'man astronaut', - 'category': 'People', - 'aliases': [ - 'man_astronaut' - ], - 'tags': [ - 'space' - ] - }, - { - 'emoji': '๐Ÿ‘ฉโ€โš–', - 'description': 'woman judge', - 'category': 'People', - 'aliases': [ - 'woman_judge' - ], - 'tags': [ - 'justice' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€โš–', - 'description': 'man judge', - 'category': 'People', - 'aliases': [ - 'man_judge' - ], - 'tags': [ - 'justice' - ] - }, - { - 'emoji': '๐Ÿคถ', - 'description': 'Mrs. Claus', - 'category': 'People', - 'aliases': [ - 'mrs_claus' - ], - 'tags': [ - 'santa' - ] - }, - { - 'emoji': '๐ŸŽ…', - 'description': 'Santa Claus', - 'category': 'People', - 'aliases': [ - 'santa' - ], - 'tags': [ - 'christmas' - ] - }, - { - 'emoji': '๐Ÿ‘ธ', - 'description': 'princess', - 'category': 'People', - 'aliases': [ - 'princess' - ], - 'tags': [ - 'blonde', - 'crown', - 'royal' - ] - }, - { - 'emoji': '๐Ÿคด', - 'description': 'prince', - 'category': 'People', - 'aliases': [ - 'prince' - ], - 'tags': [ - 'crown', - 'royal' - ] - }, - { - 'emoji': '๐Ÿ‘ฐ', - 'description': 'bride with veil', - 'category': 'People', - 'aliases': [ - 'bride_with_veil' - ], - 'tags': [ - 'marriage', - 'wedding' - ] - }, - { - 'emoji': '๐Ÿคต', - 'description': 'man in tuxedo', - 'category': 'People', - 'aliases': [ - 'man_in_tuxedo' - ], - 'tags': [ - 'groom', - 'marriage', - 'wedding' - ] - }, - { - 'emoji': '๐Ÿ‘ผ', - 'description': 'baby angel', - 'category': 'People', - 'aliases': [ - 'angel' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคฐ', - 'description': 'pregnant woman', - 'category': 'People', - 'aliases': [ - 'pregnant_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™‡โ€โ™€', - 'description': 'woman bowing', - 'category': 'People', - 'aliases': [ - 'bowing_woman' - ], - 'tags': [ - 'respect', - 'thanks' - ] - }, - { - 'emoji': '๐Ÿ™‡', - 'description': 'person bowing', - 'category': 'People', - 'aliases': [ - 'bowing_man', - 'bow' - ], - 'tags': [ - 'respect', - 'thanks' - ] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'person tipping hand', - 'category': 'People', - 'aliases': [ - 'tipping_hand_woman', - 'information_desk_person', - 'sassy_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’โ€โ™‚', - 'description': 'man tipping hand', - 'category': 'People', - 'aliases': [ - 'tipping_hand_man', - 'sassy_man' - ], - 'tags': [ - 'information' - ] - }, - { - 'emoji': '๐Ÿ™…', - 'description': 'person gesturing NO', - 'category': 'People', - 'aliases': [ - 'no_good_woman', - 'no_good', - 'ng_woman' - ], - 'tags': [ - 'stop', - 'halt' - ] - }, - { - 'emoji': '๐Ÿ™…โ€โ™‚', - 'description': 'man gesturing NO', - 'category': 'People', - 'aliases': [ - 'no_good_man', - 'ng_man' - ], - 'tags': [ - 'stop', - 'halt' - ] - }, - { - 'emoji': '๐Ÿ™†', - 'description': 'person gesturing OK', - 'category': 'People', - 'aliases': [ - 'ok_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™†โ€โ™‚', - 'description': 'man gesturing OK', - 'category': 'People', - 'aliases': [ - 'ok_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™‹', - 'description': 'person raising hand', - 'category': 'People', - 'aliases': [ - 'raising_hand_woman', - 'raising_hand' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™‹โ€โ™‚', - 'description': 'man raising hand', - 'category': 'People', - 'aliases': [ - 'raising_hand_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคฆโ€โ™€', - 'description': 'woman facepalming', - 'category': 'People', - 'aliases': [ - 'woman_facepalming' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคฆโ€โ™‚', - 'description': 'man facepalming', - 'category': 'People', - 'aliases': [ - 'man_facepalming' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคทโ€โ™€', - 'description': 'woman shrugging', - 'category': 'People', - 'aliases': [ - 'woman_shrugging' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคทโ€โ™‚', - 'description': 'man shrugging', - 'category': 'People', - 'aliases': [ - 'man_shrugging' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™Ž', - 'description': 'person pouting', - 'category': 'People', - 'aliases': [ - 'pouting_woman', - 'person_with_pouting_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™Žโ€โ™‚', - 'description': 'man pouting', - 'category': 'People', - 'aliases': [ - 'pouting_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™', - 'description': 'person frowning', - 'category': 'People', - 'aliases': [ - 'frowning_woman', - 'person_frowning' - ], - 'tags': [ - 'sad' - ] - }, - { - 'emoji': '๐Ÿ™โ€โ™‚', - 'description': 'man frowning', - 'category': 'People', - 'aliases': [ - 'frowning_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’‡', - 'description': 'person getting haircut', - 'category': 'People', - 'aliases': [ - 'haircut_woman', - 'haircut' - ], - 'tags': [ - 'beauty' - ] - }, - { - 'emoji': '๐Ÿ’‡โ€โ™‚', - 'description': 'man getting haircut', - 'category': 'People', - 'aliases': [ - 'haircut_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’†', - 'description': 'person getting massage', - 'category': 'People', - 'aliases': [ - 'massage_woman', - 'massage' - ], - 'tags': [ - 'spa' - ] - }, - { - 'emoji': '๐Ÿ’†โ€โ™‚', - 'description': 'man getting massage', - 'category': 'People', - 'aliases': [ - 'massage_man' - ], - 'tags': [ - 'spa' - ] - }, - { - 'emoji': '๐Ÿ•ด', - 'description': 'man in business suit levitating', - 'category': 'People', - 'aliases': [ - 'business_suit_levitating' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ƒ', - 'description': 'woman dancing', - 'category': 'People', - 'aliases': [ - 'dancer' - ], - 'tags': [ - 'dress' - ] - }, - { - 'emoji': '๐Ÿ•บ', - 'description': 'man dancing', - 'category': 'People', - 'aliases': [ - 'man_dancing' - ], - 'tags': [ - 'dancer' - ] - }, - { - 'emoji': '๐Ÿ‘ฏ', - 'description': 'people with bunny ears partying', - 'category': 'People', - 'aliases': [ - 'dancing_women', - 'dancers' - ], - 'tags': [ - 'bunny' - ] - }, - { - 'emoji': '๐Ÿ‘ฏโ€โ™‚', - 'description': 'men with bunny ears partying', - 'category': 'People', - 'aliases': [ - 'dancing_men' - ], - 'tags': [ - 'bunny' - ] - }, - { - 'emoji': '๐Ÿšถโ€โ™€', - 'description': 'woman walking', - 'category': 'People', - 'aliases': [ - 'walking_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšถ', - 'description': 'person walking', - 'category': 'People', - 'aliases': [ - 'walking_man', - 'walking' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿƒโ€โ™€', - 'description': 'woman running', - 'category': 'People', - 'aliases': [ - 'running_woman' - ], - 'tags': [ - 'exercise', - 'workout', - 'marathon' - ] - }, - { - 'emoji': '๐Ÿƒ', - 'description': 'person running', - 'category': 'People', - 'aliases': [ - 'running_man', - 'runner', - 'running' - ], - 'tags': [ - 'exercise', - 'workout', - 'marathon' - ] - }, - { - 'emoji': '๐Ÿ‘ซ', - 'description': 'man and woman holding hands', - 'category': 'People', - 'aliases': [ - 'couple' - ], - 'tags': [ - 'date' - ] - }, - { - 'emoji': '๐Ÿ‘ญ', - 'description': 'two women holding hands', - 'category': 'People', - 'aliases': [ - 'two_women_holding_hands' - ], - 'tags': [ - 'couple', - 'date' - ] - }, - { - 'emoji': '๐Ÿ‘ฌ', - 'description': 'two men holding hands', - 'category': 'People', - 'aliases': [ - 'two_men_holding_hands' - ], - 'tags': [ - 'couple', - 'date' - ] - }, - { - 'emoji': '๐Ÿ’‘', - 'description': 'couple with heart', - 'category': 'People', - 'aliases': [ - 'couple_with_heart_woman_man', - 'couple_with_heart' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ', - 'description': 'couple with heart: woman, woman', - 'category': 'People', - 'aliases': [ - 'couple_with_heart_woman_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ', - 'description': 'couple with heart: man, man', - 'category': 'People', - 'aliases': [ - 'couple_with_heart_man_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'kiss', - 'category': 'People', - 'aliases': [ - 'couplekiss_man_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ', - 'description': 'kiss: woman, woman', - 'category': 'People', - 'aliases': [ - 'couplekiss_woman_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ', - 'description': 'kiss: man, man', - 'category': 'People', - 'aliases': [ - 'couplekiss_man_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ช', - 'description': 'family', - 'category': 'People', - 'aliases': [ - 'family_man_woman_boy', - 'family' - ], - 'tags': [ - 'home', - 'parents', - 'child' - ] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง', - 'description': 'family: man, woman, girl', - 'category': 'People', - 'aliases': [ - 'family_man_woman_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', - 'description': 'family: man, woman, girl, boy', - 'category': 'People', - 'aliases': [ - 'family_man_woman_girl_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', - 'description': 'family: man, woman, boy, boy', - 'category': 'People', - 'aliases': [ - 'family_man_woman_boy_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', - 'description': 'family: man, woman, girl, girl', - 'category': 'People', - 'aliases': [ - 'family_man_woman_girl_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ', - 'description': 'family: woman, woman, boy', - 'category': 'People', - 'aliases': [ - 'family_woman_woman_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง', - 'description': 'family: woman, woman, girl', - 'category': 'People', - 'aliases': [ - 'family_woman_woman_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', - 'description': 'family: woman, woman, girl, boy', - 'category': 'People', - 'aliases': [ - 'family_woman_woman_girl_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', - 'description': 'family: woman, woman, boy, boy', - 'category': 'People', - 'aliases': [ - 'family_woman_woman_boy_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', - 'description': 'family: woman, woman, girl, girl', - 'category': 'People', - 'aliases': [ - 'family_woman_woman_girl_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ', - 'description': 'family: man, man, boy', - 'category': 'People', - 'aliases': [ - 'family_man_man_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง', - 'description': 'family: man, man, girl', - 'category': 'People', - 'aliases': [ - 'family_man_man_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', - 'description': 'family: man, man, girl, boy', - 'category': 'People', - 'aliases': [ - 'family_man_man_girl_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', - 'description': 'family: man, man, boy, boy', - 'category': 'People', - 'aliases': [ - 'family_man_man_boy_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง', - 'description': 'family: man, man, girl, girl', - 'category': 'People', - 'aliases': [ - 'family_man_man_girl_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ฆ', - 'description': 'family: woman, boy', - 'category': 'People', - 'aliases': [ - 'family_woman_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ง', - 'description': 'family: woman, girl', - 'category': 'People', - 'aliases': [ - 'family_woman_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', - 'description': 'family: woman, girl, boy', - 'category': 'People', - 'aliases': [ - 'family_woman_girl_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', - 'description': 'family: woman, boy, boy', - 'category': 'People', - 'aliases': [ - 'family_woman_boy_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง', - 'description': 'family: woman, girl, girl', - 'category': 'People', - 'aliases': [ - 'family_woman_girl_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘ฆ', - 'description': 'family: man, boy', - 'category': 'People', - 'aliases': [ - 'family_man_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘ง', - 'description': 'family: man, girl', - 'category': 'People', - 'aliases': [ - 'family_man_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ', - 'description': 'family: man, girl, boy', - 'category': 'People', - 'aliases': [ - 'family_man_girl_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ', - 'description': 'family: man, boy, boy', - 'category': 'People', - 'aliases': [ - 'family_man_boy_boy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง', - 'description': 'family: man, girl, girl', - 'category': 'People', - 'aliases': [ - 'family_man_girl_girl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘š', - 'description': 'womanโ€™s clothes', - 'category': 'People', - 'aliases': [ - 'womans_clothes' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘•', - 'description': 't-shirt', - 'category': 'People', - 'aliases': [ - 'shirt', - 'tshirt' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘–', - 'description': 'jeans', - 'category': 'People', - 'aliases': [ - 'jeans' - ], - 'tags': [ - 'pants' - ] - }, - { - 'emoji': '๐Ÿ‘”', - 'description': 'necktie', - 'category': 'People', - 'aliases': [ - 'necktie' - ], - 'tags': [ - 'shirt', - 'formal' - ] - }, - { - 'emoji': '๐Ÿ‘—', - 'description': 'dress', - 'category': 'People', - 'aliases': [ - 'dress' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘™', - 'description': 'bikini', - 'category': 'People', - 'aliases': [ - 'bikini' - ], - 'tags': [ - 'beach' - ] - }, - { - 'emoji': '๐Ÿ‘˜', - 'description': 'kimono', - 'category': 'People', - 'aliases': [ - 'kimono' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ ', - 'description': 'high-heeled shoe', - 'category': 'People', - 'aliases': [ - 'high_heel' - ], - 'tags': [ - 'shoe' - ] - }, - { - 'emoji': '๐Ÿ‘ก', - 'description': 'womanโ€™s sandal', - 'category': 'People', - 'aliases': [ - 'sandal' - ], - 'tags': [ - 'shoe' - ] - }, - { - 'emoji': '๐Ÿ‘ข', - 'description': 'womanโ€™s boot', - 'category': 'People', - 'aliases': [ - 'boot' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘ž', - 'description': 'manโ€™s shoe', - 'category': 'People', - 'aliases': [ - 'mans_shoe', - 'shoe' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘Ÿ', - 'description': 'running shoe', - 'category': 'People', - 'aliases': [ - 'athletic_shoe' - ], - 'tags': [ - 'sneaker', - 'sport', - 'running' - ] - }, - { - 'emoji': '๐Ÿ‘’', - 'description': 'womanโ€™s hat', - 'category': 'People', - 'aliases': [ - 'womans_hat' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽฉ', - 'description': 'top hat', - 'category': 'People', - 'aliases': [ - 'tophat' - ], - 'tags': [ - 'hat', - 'classy' - ] - }, - { - 'emoji': '๐ŸŽ“', - 'description': 'graduation cap', - 'category': 'People', - 'aliases': [ - 'mortar_board' - ], - 'tags': [ - 'education', - 'college', - 'university', - 'graduation' - ] - }, - { - 'emoji': '๐Ÿ‘‘', - 'description': 'crown', - 'category': 'People', - 'aliases': [ - 'crown' - ], - 'tags': [ - 'king', - 'queen', - 'royal' - ] - }, - { - 'emoji': 'โ›‘', - 'description': 'rescue workerโ€™s helmet', - 'category': 'People', - 'aliases': [ - 'rescue_worker_helmet' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ’', - 'description': 'school backpack', - 'category': 'People', - 'aliases': [ - 'school_satchel' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'clutch bag', - 'category': 'People', - 'aliases': [ - 'pouch' - ], - 'tags': [ - 'bag' - ] - }, - { - 'emoji': '๐Ÿ‘›', - 'description': 'purse', - 'category': 'People', - 'aliases': [ - 'purse' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘œ', - 'description': 'handbag', - 'category': 'People', - 'aliases': [ - 'handbag' - ], - 'tags': [ - 'bag' - ] - }, - { - 'emoji': '๐Ÿ’ผ', - 'description': 'briefcase', - 'category': 'People', - 'aliases': [ - 'briefcase' - ], - 'tags': [ - 'business' - ] - }, - { - 'emoji': '๐Ÿ‘“', - 'description': 'glasses', - 'category': 'People', - 'aliases': [ - 'eyeglasses' - ], - 'tags': [ - 'glasses' - ] - }, - { - 'emoji': '๐Ÿ•ถ', - 'description': 'sunglasses', - 'category': 'People', - 'aliases': [ - 'dark_sunglasses' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ‚', - 'description': 'closed umbrella', - 'category': 'People', - 'aliases': [ - 'closed_umbrella' - ], - 'tags': [ - 'weather', - 'rain' - ] - }, - { - 'emoji': 'โ˜‚๏ธ', - 'description': 'umbrella', - 'category': 'People', - 'aliases': [ - 'open_umbrella' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿถ', - 'description': 'dog face', - 'category': 'Nature', - 'aliases': [ - 'dog' - ], - 'tags': [ - 'pet' - ] - }, - { - 'emoji': '๐Ÿฑ', - 'description': 'cat face', - 'category': 'Nature', - 'aliases': [ - 'cat' - ], - 'tags': [ - 'pet' - ] - }, - { - 'emoji': '๐Ÿญ', - 'description': 'mouse face', - 'category': 'Nature', - 'aliases': [ - 'mouse' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿน', - 'description': 'hamster face', - 'category': 'Nature', - 'aliases': [ - 'hamster' - ], - 'tags': [ - 'pet' - ] - }, - { - 'emoji': '๐Ÿฐ', - 'description': 'rabbit face', - 'category': 'Nature', - 'aliases': [ - 'rabbit' - ], - 'tags': [ - 'bunny' - ] - }, - { - 'emoji': '๐ŸฆŠ', - 'description': 'fox face', - 'category': 'Nature', - 'aliases': [ - 'fox_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿป', - 'description': 'bear face', - 'category': 'Nature', - 'aliases': [ - 'bear' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿผ', - 'description': 'panda face', - 'category': 'Nature', - 'aliases': [ - 'panda_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿจ', - 'description': 'koala', - 'category': 'Nature', - 'aliases': [ - 'koala' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฏ', - 'description': 'tiger face', - 'category': 'Nature', - 'aliases': [ - 'tiger' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ', - 'description': 'lion face', - 'category': 'Nature', - 'aliases': [ - 'lion' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฎ', - 'description': 'cow face', - 'category': 'Nature', - 'aliases': [ - 'cow' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿท', - 'description': 'pig face', - 'category': 'Nature', - 'aliases': [ - 'pig' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฝ', - 'description': 'pig nose', - 'category': 'Nature', - 'aliases': [ - 'pig_nose' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿธ', - 'description': 'frog face', - 'category': 'Nature', - 'aliases': [ - 'frog' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿต', - 'description': 'monkey face', - 'category': 'Nature', - 'aliases': [ - 'monkey_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™ˆ', - 'description': 'see-no-evil monkey', - 'category': 'Nature', - 'aliases': [ - 'see_no_evil' - ], - 'tags': [ - 'monkey', - 'blind', - 'ignore' - ] - }, - { - 'emoji': '๐Ÿ™‰', - 'description': 'hear-no-evil monkey', - 'category': 'Nature', - 'aliases': [ - 'hear_no_evil' - ], - 'tags': [ - 'monkey', - 'deaf' - ] - }, - { - 'emoji': '๐Ÿ™Š', - 'description': 'speak-no-evil monkey', - 'category': 'Nature', - 'aliases': [ - 'speak_no_evil' - ], - 'tags': [ - 'monkey', - 'mute', - 'hush' - ] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'monkey', - 'category': 'Nature', - 'aliases': [ - 'monkey' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'chicken', - 'category': 'Nature', - 'aliases': [ - 'chicken' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿง', - 'description': 'penguin', - 'category': 'Nature', - 'aliases': [ - 'penguin' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ', - 'description': 'bird', - 'category': 'Nature', - 'aliases': [ - 'bird' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค', - 'description': 'baby chick', - 'category': 'Nature', - 'aliases': [ - 'baby_chick' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฃ', - 'description': 'hatching chick', - 'category': 'Nature', - 'aliases': [ - 'hatching_chick' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ', - 'description': 'front-facing baby chick', - 'category': 'Nature', - 'aliases': [ - 'hatched_chick' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ†', - 'description': 'duck', - 'category': 'Nature', - 'aliases': [ - 'duck' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ…', - 'description': 'eagle', - 'category': 'Nature', - 'aliases': [ - 'eagle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ‰', - 'description': 'owl', - 'category': 'Nature', - 'aliases': [ - 'owl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ‡', - 'description': 'bat', - 'category': 'Nature', - 'aliases': [ - 'bat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿบ', - 'description': 'wolf face', - 'category': 'Nature', - 'aliases': [ - 'wolf' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—', - 'description': 'boar', - 'category': 'Nature', - 'aliases': [ - 'boar' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿด', - 'description': 'horse face', - 'category': 'Nature', - 'aliases': [ - 'horse' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ„', - 'description': 'unicorn face', - 'category': 'Nature', - 'aliases': [ - 'unicorn' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'honeybee', - 'category': 'Nature', - 'aliases': [ - 'bee', - 'honeybee' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›', - 'description': 'bug', - 'category': 'Nature', - 'aliases': [ - 'bug' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ‹', - 'description': 'butterfly', - 'category': 'Nature', - 'aliases': [ - 'butterfly' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'snail', - 'category': 'Nature', - 'aliases': [ - 'snail' - ], - 'tags': [ - 'slow' - ] - }, - { - 'emoji': '๐Ÿš', - 'description': 'spiral shell', - 'category': 'Nature', - 'aliases': [ - 'shell' - ], - 'tags': [ - 'sea', - 'beach' - ] - }, - { - 'emoji': '๐Ÿž', - 'description': 'lady beetle', - 'category': 'Nature', - 'aliases': [ - 'beetle' - ], - 'tags': [ - 'bug' - ] - }, - { - 'emoji': '๐Ÿœ', - 'description': 'ant', - 'category': 'Nature', - 'aliases': [ - 'ant' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ท', - 'description': 'spider', - 'category': 'Nature', - 'aliases': [ - 'spider' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ธ', - 'description': 'spider web', - 'category': 'Nature', - 'aliases': [ - 'spider_web' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿข', - 'description': 'turtle', - 'category': 'Nature', - 'aliases': [ - 'turtle' - ], - 'tags': [ - 'slow' - ] - }, - { - 'emoji': '๐Ÿ', - 'description': 'snake', - 'category': 'Nature', - 'aliases': [ - 'snake' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸฆŽ', - 'description': 'lizard', - 'category': 'Nature', - 'aliases': [ - 'lizard' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ‚', - 'description': 'scorpion', - 'category': 'Nature', - 'aliases': [ - 'scorpion' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ€', - 'description': 'crab', - 'category': 'Nature', - 'aliases': [ - 'crab' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ‘', - 'description': 'squid', - 'category': 'Nature', - 'aliases': [ - 'squid' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™', - 'description': 'octopus', - 'category': 'Nature', - 'aliases': [ - 'octopus' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ', - 'description': 'shrimp', - 'category': 'Nature', - 'aliases': [ - 'shrimp' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ ', - 'description': 'tropical fish', - 'category': 'Nature', - 'aliases': [ - 'tropical_fish' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŸ', - 'description': 'fish', - 'category': 'Nature', - 'aliases': [ - 'fish' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿก', - 'description': 'blowfish', - 'category': 'Nature', - 'aliases': [ - 'blowfish' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฌ', - 'description': 'dolphin', - 'category': 'Nature', - 'aliases': [ - 'dolphin', - 'flipper' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆˆ', - 'description': 'shark', - 'category': 'Nature', - 'aliases': [ - 'shark' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿณ', - 'description': 'spouting whale', - 'category': 'Nature', - 'aliases': [ - 'whale' - ], - 'tags': [ - 'sea' - ] - }, - { - 'emoji': '๐Ÿ‹', - 'description': 'whale', - 'category': 'Nature', - 'aliases': [ - 'whale2' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŠ', - 'description': 'crocodile', - 'category': 'Nature', - 'aliases': [ - 'crocodile' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†', - 'description': 'leopard', - 'category': 'Nature', - 'aliases': [ - 'leopard' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ…', - 'description': 'tiger', - 'category': 'Nature', - 'aliases': [ - 'tiger2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿƒ', - 'description': 'water buffalo', - 'category': 'Nature', - 'aliases': [ - 'water_buffalo' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‚', - 'description': 'ox', - 'category': 'Nature', - 'aliases': [ - 'ox' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ„', - 'description': 'cow', - 'category': 'Nature', - 'aliases': [ - 'cow2' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸฆŒ', - 'description': 'deer', - 'category': 'Nature', - 'aliases': [ - 'deer' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿช', - 'description': 'camel', - 'category': 'Nature', - 'aliases': [ - 'dromedary_camel' - ], - 'tags': [ - 'desert' - ] - }, - { - 'emoji': '๐Ÿซ', - 'description': 'two-hump camel', - 'category': 'Nature', - 'aliases': [ - 'camel' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'elephant', - 'category': 'Nature', - 'aliases': [ - 'elephant' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ', - 'description': 'rhinoceros', - 'category': 'Nature', - 'aliases': [ - 'rhinoceros' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ', - 'description': 'gorilla', - 'category': 'Nature', - 'aliases': [ - 'gorilla' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ', - 'description': 'horse', - 'category': 'Nature', - 'aliases': [ - 'racehorse' - ], - 'tags': [ - 'speed' - ] - }, - { - 'emoji': '๐Ÿ–', - 'description': 'pig', - 'category': 'Nature', - 'aliases': [ - 'pig2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'goat', - 'category': 'Nature', - 'aliases': [ - 'goat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'ram', - 'category': 'Nature', - 'aliases': [ - 'ram' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'sheep', - 'category': 'Nature', - 'aliases': [ - 'sheep' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•', - 'description': 'dog', - 'category': 'Nature', - 'aliases': [ - 'dog2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฉ', - 'description': 'poodle', - 'category': 'Nature', - 'aliases': [ - 'poodle' - ], - 'tags': [ - 'dog' - ] - }, - { - 'emoji': '๐Ÿˆ', - 'description': 'cat', - 'category': 'Nature', - 'aliases': [ - 'cat2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'rooster', - 'category': 'Nature', - 'aliases': [ - 'rooster' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆƒ', - 'description': 'turkey', - 'category': 'Nature', - 'aliases': [ - 'turkey' - ], - 'tags': [ - 'thanksgiving' - ] - }, - { - 'emoji': '๐Ÿ•Š', - 'description': 'dove', - 'category': 'Nature', - 'aliases': [ - 'dove' - ], - 'tags': [ - 'peace' - ] - }, - { - 'emoji': '๐Ÿ‡', - 'description': 'rabbit', - 'category': 'Nature', - 'aliases': [ - 'rabbit2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'mouse', - 'category': 'Nature', - 'aliases': [ - 'mouse2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ€', - 'description': 'rat', - 'category': 'Nature', - 'aliases': [ - 'rat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฟ', - 'description': 'chipmunk', - 'category': 'Nature', - 'aliases': [ - 'chipmunk' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿพ', - 'description': 'paw prints', - 'category': 'Nature', - 'aliases': [ - 'feet', - 'paw_prints' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‰', - 'description': 'dragon', - 'category': 'Nature', - 'aliases': [ - 'dragon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฒ', - 'description': 'dragon face', - 'category': 'Nature', - 'aliases': [ - 'dragon_face' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒต', - 'description': 'cactus', - 'category': 'Nature', - 'aliases': [ - 'cactus' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ„', - 'description': 'Christmas tree', - 'category': 'Nature', - 'aliases': [ - 'christmas_tree' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฒ', - 'description': 'evergreen tree', - 'category': 'Nature', - 'aliases': [ - 'evergreen_tree' - ], - 'tags': [ - 'wood' - ] - }, - { - 'emoji': '๐ŸŒณ', - 'description': 'deciduous tree', - 'category': 'Nature', - 'aliases': [ - 'deciduous_tree' - ], - 'tags': [ - 'wood' - ] - }, - { - 'emoji': '๐ŸŒด', - 'description': 'palm tree', - 'category': 'Nature', - 'aliases': [ - 'palm_tree' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฑ', - 'description': 'seedling', - 'category': 'Nature', - 'aliases': [ - 'seedling' - ], - 'tags': [ - 'plant' - ] - }, - { - 'emoji': '๐ŸŒฟ', - 'description': 'herb', - 'category': 'Nature', - 'aliases': [ - 'herb' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜˜๏ธ', - 'description': 'shamrock', - 'category': 'Nature', - 'aliases': [ - 'shamrock' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ€', - 'description': 'four leaf clover', - 'category': 'Nature', - 'aliases': [ - 'four_leaf_clover' - ], - 'tags': [ - 'luck' - ] - }, - { - 'emoji': '๐ŸŽ', - 'description': 'pine decoration', - 'category': 'Nature', - 'aliases': [ - 'bamboo' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ‹', - 'description': 'tanabata tree', - 'category': 'Nature', - 'aliases': [ - 'tanabata_tree' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿƒ', - 'description': 'leaf fluttering in wind', - 'category': 'Nature', - 'aliases': [ - 'leaves' - ], - 'tags': [ - 'leaf' - ] - }, - { - 'emoji': '๐Ÿ‚', - 'description': 'fallen leaf', - 'category': 'Nature', - 'aliases': [ - 'fallen_leaf' - ], - 'tags': [ - 'autumn' - ] - }, - { - 'emoji': '๐Ÿ', - 'description': 'maple leaf', - 'category': 'Nature', - 'aliases': [ - 'maple_leaf' - ], - 'tags': [ - 'canada' - ] - }, - { - 'emoji': '๐Ÿ„', - 'description': 'mushroom', - 'category': 'Nature', - 'aliases': [ - 'mushroom' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒพ', - 'description': 'sheaf of rice', - 'category': 'Nature', - 'aliases': [ - 'ear_of_rice' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'bouquet', - 'category': 'Nature', - 'aliases': [ - 'bouquet' - ], - 'tags': [ - 'flowers' - ] - }, - { - 'emoji': '๐ŸŒท', - 'description': 'tulip', - 'category': 'Nature', - 'aliases': [ - 'tulip' - ], - 'tags': [ - 'flower' - ] - }, - { - 'emoji': '๐ŸŒน', - 'description': 'rose', - 'category': 'Nature', - 'aliases': [ - 'rose' - ], - 'tags': [ - 'flower' - ] - }, - { - 'emoji': '๐Ÿฅ€', - 'description': 'wilted flower', - 'category': 'Nature', - 'aliases': [ - 'wilted_flower' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒป', - 'description': 'sunflower', - 'category': 'Nature', - 'aliases': [ - 'sunflower' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒผ', - 'description': 'blossom', - 'category': 'Nature', - 'aliases': [ - 'blossom' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒธ', - 'description': 'cherry blossom', - 'category': 'Nature', - 'aliases': [ - 'cherry_blossom' - ], - 'tags': [ - 'flower', - 'spring' - ] - }, - { - 'emoji': '๐ŸŒบ', - 'description': 'hibiscus', - 'category': 'Nature', - 'aliases': [ - 'hibiscus' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒŽ', - 'description': 'globe showing Americas', - 'category': 'Nature', - 'aliases': [ - 'earth_americas' - ], - 'tags': [ - 'globe', - 'world', - 'international' - ] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'globe showing Europe-Africa', - 'category': 'Nature', - 'aliases': [ - 'earth_africa' - ], - 'tags': [ - 'globe', - 'world', - 'international' - ] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'globe showing Asia-Australia', - 'category': 'Nature', - 'aliases': [ - 'earth_asia' - ], - 'tags': [ - 'globe', - 'world', - 'international' - ] - }, - { - 'emoji': '๐ŸŒ•', - 'description': 'full moon', - 'category': 'Nature', - 'aliases': [ - 'full_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ–', - 'description': 'waning gibbous moon', - 'category': 'Nature', - 'aliases': [ - 'waning_gibbous_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ—', - 'description': 'last quarter moon', - 'category': 'Nature', - 'aliases': [ - 'last_quarter_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ˜', - 'description': 'waning crescent moon', - 'category': 'Nature', - 'aliases': [ - 'waning_crescent_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ‘', - 'description': 'new moon', - 'category': 'Nature', - 'aliases': [ - 'new_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ’', - 'description': 'waxing crescent moon', - 'category': 'Nature', - 'aliases': [ - 'waxing_crescent_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ“', - 'description': 'first quarter moon', - 'category': 'Nature', - 'aliases': [ - 'first_quarter_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ”', - 'description': 'waxing gibbous moon', - 'category': 'Nature', - 'aliases': [ - 'moon', - 'waxing_gibbous_moon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒš', - 'description': 'new moon face', - 'category': 'Nature', - 'aliases': [ - 'new_moon_with_face' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'full moon with face', - 'category': 'Nature', - 'aliases': [ - 'full_moon_with_face' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒž', - 'description': 'sun with face', - 'category': 'Nature', - 'aliases': [ - 'sun_with_face' - ], - 'tags': [ - 'summer' - ] - }, - { - 'emoji': '๐ŸŒ›', - 'description': 'first quarter moon with face', - 'category': 'Nature', - 'aliases': [ - 'first_quarter_moon_with_face' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒœ', - 'description': 'last quarter moon with face', - 'category': 'Nature', - 'aliases': [ - 'last_quarter_moon_with_face' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ™', - 'description': 'crescent moon', - 'category': 'Nature', - 'aliases': [ - 'crescent_moon' - ], - 'tags': [ - 'night' - ] - }, - { - 'emoji': '๐Ÿ’ซ', - 'description': 'dizzy', - 'category': 'Nature', - 'aliases': [ - 'dizzy' - ], - 'tags': [ - 'star' - ] - }, - { - 'emoji': 'โญ๏ธ', - 'description': 'white medium star', - 'category': 'Nature', - 'aliases': [ - 'star' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒŸ', - 'description': 'glowing star', - 'category': 'Nature', - 'aliases': [ - 'star2' - ], - 'tags': [] - }, - { - 'emoji': 'โœจ', - 'description': 'sparkles', - 'category': 'Nature', - 'aliases': [ - 'sparkles' - ], - 'tags': [ - 'shiny' - ] - }, - { - 'emoji': 'โšก๏ธ', - 'description': 'high voltage', - 'category': 'Nature', - 'aliases': [ - 'zap' - ], - 'tags': [ - 'lightning', - 'thunder' - ] - }, - { - 'emoji': '๐Ÿ”ฅ', - 'description': 'fire', - 'category': 'Nature', - 'aliases': [ - 'fire' - ], - 'tags': [ - 'burn' - ] - }, - { - 'emoji': '๐Ÿ’ฅ', - 'description': 'collision', - 'category': 'Nature', - 'aliases': [ - 'boom', - 'collision' - ], - 'tags': [ - 'explode' - ] - }, - { - 'emoji': 'โ˜„', - 'description': 'comet', - 'category': 'Nature', - 'aliases': [ - 'comet' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜€๏ธ', - 'description': 'sun', - 'category': 'Nature', - 'aliases': [ - 'sunny' - ], - 'tags': [ - 'weather' - ] - }, - { - 'emoji': '๐ŸŒค', - 'description': 'sun behind small cloud', - 'category': 'Nature', - 'aliases': [ - 'sun_behind_small_cloud' - ], - 'tags': [] - }, - { - 'emoji': 'โ›…๏ธ', - 'description': 'sun behind cloud', - 'category': 'Nature', - 'aliases': [ - 'partly_sunny' - ], - 'tags': [ - 'weather', - 'cloud' - ] - }, - { - 'emoji': '๐ŸŒฅ', - 'description': 'sun behind large cloud', - 'category': 'Nature', - 'aliases': [ - 'sun_behind_large_cloud' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฆ', - 'description': 'sun behind rain cloud', - 'category': 'Nature', - 'aliases': [ - 'sun_behind_rain_cloud' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒˆ', - 'description': 'rainbow', - 'category': 'Nature', - 'aliases': [ - 'rainbow' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜๏ธ', - 'description': 'cloud', - 'category': 'Nature', - 'aliases': [ - 'cloud' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒง', - 'description': 'cloud with rain', - 'category': 'Nature', - 'aliases': [ - 'cloud_with_rain' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ˆ', - 'description': 'cloud with lightning and rain', - 'category': 'Nature', - 'aliases': [ - 'cloud_with_lightning_and_rain' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฉ', - 'description': 'cloud with lightning', - 'category': 'Nature', - 'aliases': [ - 'cloud_with_lightning' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒจ', - 'description': 'cloud with snow', - 'category': 'Nature', - 'aliases': [ - 'cloud_with_snow' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ƒ๏ธ', - 'description': 'snowman', - 'category': 'Nature', - 'aliases': [ - 'snowman_with_snow' - ], - 'tags': [ - 'winter', - 'christmas' - ] - }, - { - 'emoji': 'โ›„๏ธ', - 'description': 'snowman without snow', - 'category': 'Nature', - 'aliases': [ - 'snowman' - ], - 'tags': [ - 'winter' - ] - }, - { - 'emoji': 'โ„๏ธ', - 'description': 'snowflake', - 'category': 'Nature', - 'aliases': [ - 'snowflake' - ], - 'tags': [ - 'winter', - 'cold', - 'weather' - ] - }, - { - 'emoji': '๐ŸŒฌ', - 'description': 'wind face', - 'category': 'Nature', - 'aliases': [ - 'wind_face' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’จ', - 'description': 'dashing away', - 'category': 'Nature', - 'aliases': [ - 'dash' - ], - 'tags': [ - 'wind', - 'blow', - 'fast' - ] - }, - { - 'emoji': '๐ŸŒช', - 'description': 'tornado', - 'category': 'Nature', - 'aliases': [ - 'tornado' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒซ', - 'description': 'fog', - 'category': 'Nature', - 'aliases': [ - 'fog' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒŠ', - 'description': 'water wave', - 'category': 'Nature', - 'aliases': [ - 'ocean' - ], - 'tags': [ - 'sea' - ] - }, - { - 'emoji': '๐Ÿ’ง', - 'description': 'droplet', - 'category': 'Nature', - 'aliases': [ - 'droplet' - ], - 'tags': [ - 'water' - ] - }, - { - 'emoji': '๐Ÿ’ฆ', - 'description': 'sweat droplets', - 'category': 'Nature', - 'aliases': [ - 'sweat_drops' - ], - 'tags': [ - 'water', - 'workout' - ] - }, - { - 'emoji': 'โ˜”๏ธ', - 'description': 'umbrella with rain drops', - 'category': 'Nature', - 'aliases': [ - 'umbrella' - ], - 'tags': [ - 'rain', - 'weather' - ] - }, - { - 'emoji': '๐Ÿ', - 'description': 'green apple', - 'category': 'Foods', - 'aliases': [ - 'green_apple' - ], - 'tags': [ - 'fruit' - ] - }, - { - 'emoji': '๐ŸŽ', - 'description': 'red apple', - 'category': 'Foods', - 'aliases': [ - 'apple' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'pear', - 'category': 'Foods', - 'aliases': [ - 'pear' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŠ', - 'description': 'tangerine', - 'category': 'Foods', - 'aliases': [ - 'tangerine', - 'orange', - 'mandarin' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‹', - 'description': 'lemon', - 'category': 'Foods', - 'aliases': [ - 'lemon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'banana', - 'category': 'Foods', - 'aliases': [ - 'banana' - ], - 'tags': [ - 'fruit' - ] - }, - { - 'emoji': '๐Ÿ‰', - 'description': 'watermelon', - 'category': 'Foods', - 'aliases': [ - 'watermelon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡', - 'description': 'grapes', - 'category': 'Foods', - 'aliases': [ - 'grapes' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'strawberry', - 'category': 'Foods', - 'aliases': [ - 'strawberry' - ], - 'tags': [ - 'fruit' - ] - }, - { - 'emoji': '๐Ÿˆ', - 'description': 'melon', - 'category': 'Foods', - 'aliases': [ - 'melon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'cherries', - 'category': 'Foods', - 'aliases': [ - 'cherries' - ], - 'tags': [ - 'fruit' - ] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'peach', - 'category': 'Foods', - 'aliases': [ - 'peach' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'pineapple', - 'category': 'Foods', - 'aliases': [ - 'pineapple' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ', - 'description': 'kiwi fruit', - 'category': 'Foods', - 'aliases': [ - 'kiwi_fruit' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ‘', - 'description': 'avocado', - 'category': 'Foods', - 'aliases': [ - 'avocado' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ…', - 'description': 'tomato', - 'category': 'Foods', - 'aliases': [ - 'tomato' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†', - 'description': 'eggplant', - 'category': 'Foods', - 'aliases': [ - 'eggplant' - ], - 'tags': [ - 'aubergine' - ] - }, - { - 'emoji': '๐Ÿฅ’', - 'description': 'cucumber', - 'category': 'Foods', - 'aliases': [ - 'cucumber' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ•', - 'description': 'carrot', - 'category': 'Foods', - 'aliases': [ - 'carrot' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฝ', - 'description': 'ear of corn', - 'category': 'Foods', - 'aliases': [ - 'corn' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒถ', - 'description': 'hot pepper', - 'category': 'Foods', - 'aliases': [ - 'hot_pepper' - ], - 'tags': [ - 'spicy' - ] - }, - { - 'emoji': '๐Ÿฅ”', - 'description': 'potato', - 'category': 'Foods', - 'aliases': [ - 'potato' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ ', - 'description': 'roasted sweet potato', - 'category': 'Foods', - 'aliases': [ - 'sweet_potato' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฐ', - 'description': 'chestnut', - 'category': 'Foods', - 'aliases': [ - 'chestnut' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅœ', - 'description': 'peanuts', - 'category': 'Foods', - 'aliases': [ - 'peanuts' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฏ', - 'description': 'honey pot', - 'category': 'Foods', - 'aliases': [ - 'honey_pot' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ', - 'description': 'croissant', - 'category': 'Foods', - 'aliases': [ - 'croissant' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿž', - 'description': 'bread', - 'category': 'Foods', - 'aliases': [ - 'bread' - ], - 'tags': [ - 'toast' - ] - }, - { - 'emoji': '๐Ÿฅ–', - 'description': 'baguette bread', - 'category': 'Foods', - 'aliases': [ - 'baguette_bread' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿง€', - 'description': 'cheese wedge', - 'category': 'Foods', - 'aliases': [ - 'cheese' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅš', - 'description': 'egg', - 'category': 'Foods', - 'aliases': [ - 'egg' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿณ', - 'description': 'cooking', - 'category': 'Foods', - 'aliases': [ - 'fried_egg' - ], - 'tags': [ - 'breakfast' - ] - }, - { - 'emoji': '๐Ÿฅ“', - 'description': 'bacon', - 'category': 'Foods', - 'aliases': [ - 'bacon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅž', - 'description': 'pancakes', - 'category': 'Foods', - 'aliases': [ - 'pancakes' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค', - 'description': 'fried shrimp', - 'category': 'Foods', - 'aliases': [ - 'fried_shrimp' - ], - 'tags': [ - 'tempura' - ] - }, - { - 'emoji': '๐Ÿ—', - 'description': 'poultry leg', - 'category': 'Foods', - 'aliases': [ - 'poultry_leg' - ], - 'tags': [ - 'meat', - 'chicken' - ] - }, - { - 'emoji': '๐Ÿ–', - 'description': 'meat on bone', - 'category': 'Foods', - 'aliases': [ - 'meat_on_bone' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•', - 'description': 'pizza', - 'category': 'Foods', - 'aliases': [ - 'pizza' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒญ', - 'description': 'hot dog', - 'category': 'Foods', - 'aliases': [ - 'hotdog' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'hamburger', - 'category': 'Foods', - 'aliases': [ - 'hamburger' - ], - 'tags': [ - 'burger' - ] - }, - { - 'emoji': '๐ŸŸ', - 'description': 'french fries', - 'category': 'Foods', - 'aliases': [ - 'fries' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ™', - 'description': 'stuffed flatbread', - 'category': 'Foods', - 'aliases': [ - 'stuffed_flatbread' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฎ', - 'description': 'taco', - 'category': 'Foods', - 'aliases': [ - 'taco' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒฏ', - 'description': 'burrito', - 'category': 'Foods', - 'aliases': [ - 'burrito' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ—', - 'description': 'green salad', - 'category': 'Foods', - 'aliases': [ - 'green_salad' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ˜', - 'description': 'shallow pan of food', - 'category': 'Foods', - 'aliases': [ - 'shallow_pan_of_food' - ], - 'tags': [ - 'paella', - 'curry' - ] - }, - { - 'emoji': '๐Ÿ', - 'description': 'spaghetti', - 'category': 'Foods', - 'aliases': [ - 'spaghetti' - ], - 'tags': [ - 'pasta' - ] - }, - { - 'emoji': '๐Ÿœ', - 'description': 'steaming bowl', - 'category': 'Foods', - 'aliases': [ - 'ramen' - ], - 'tags': [ - 'noodle' - ] - }, - { - 'emoji': '๐Ÿฒ', - 'description': 'pot of food', - 'category': 'Foods', - 'aliases': [ - 'stew' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ', - 'description': 'fish cake with swirl', - 'category': 'Foods', - 'aliases': [ - 'fish_cake' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฃ', - 'description': 'sushi', - 'category': 'Foods', - 'aliases': [ - 'sushi' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฑ', - 'description': 'bento box', - 'category': 'Foods', - 'aliases': [ - 'bento' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›', - 'description': 'curry rice', - 'category': 'Foods', - 'aliases': [ - 'curry' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš', - 'description': 'cooked rice', - 'category': 'Foods', - 'aliases': [ - 'rice' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™', - 'description': 'rice ball', - 'category': 'Foods', - 'aliases': [ - 'rice_ball' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'rice cracker', - 'category': 'Foods', - 'aliases': [ - 'rice_cracker' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿข', - 'description': 'oden', - 'category': 'Foods', - 'aliases': [ - 'oden' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿก', - 'description': 'dango', - 'category': 'Foods', - 'aliases': [ - 'dango' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿง', - 'description': 'shaved ice', - 'category': 'Foods', - 'aliases': [ - 'shaved_ice' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿจ', - 'description': 'ice cream', - 'category': 'Foods', - 'aliases': [ - 'ice_cream' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ', - 'description': 'soft ice cream', - 'category': 'Foods', - 'aliases': [ - 'icecream' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฐ', - 'description': 'shortcake', - 'category': 'Foods', - 'aliases': [ - 'cake' - ], - 'tags': [ - 'dessert' - ] - }, - { - 'emoji': '๐ŸŽ‚', - 'description': 'birthday cake', - 'category': 'Foods', - 'aliases': [ - 'birthday' - ], - 'tags': [ - 'party' - ] - }, - { - 'emoji': '๐Ÿฎ', - 'description': 'custard', - 'category': 'Foods', - 'aliases': [ - 'custard' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿญ', - 'description': 'lollipop', - 'category': 'Foods', - 'aliases': [ - 'lollipop' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฌ', - 'description': 'candy', - 'category': 'Foods', - 'aliases': [ - 'candy' - ], - 'tags': [ - 'sweet' - ] - }, - { - 'emoji': '๐Ÿซ', - 'description': 'chocolate bar', - 'category': 'Foods', - 'aliases': [ - 'chocolate_bar' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฟ', - 'description': 'popcorn', - 'category': 'Foods', - 'aliases': [ - 'popcorn' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฉ', - 'description': 'doughnut', - 'category': 'Foods', - 'aliases': [ - 'doughnut' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿช', - 'description': 'cookie', - 'category': 'Foods', - 'aliases': [ - 'cookie' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ›', - 'description': 'glass of milk', - 'category': 'Foods', - 'aliases': [ - 'milk_glass' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿผ', - 'description': 'baby bottle', - 'category': 'Foods', - 'aliases': [ - 'baby_bottle' - ], - 'tags': [ - 'milk' - ] - }, - { - 'emoji': 'โ˜•๏ธ', - 'description': 'hot beverage', - 'category': 'Foods', - 'aliases': [ - 'coffee' - ], - 'tags': [ - 'cafe', - 'espresso' - ] - }, - { - 'emoji': '๐Ÿต', - 'description': 'teacup without handle', - 'category': 'Foods', - 'aliases': [ - 'tea' - ], - 'tags': [ - 'green', - 'breakfast' - ] - }, - { - 'emoji': '๐Ÿถ', - 'description': 'sake', - 'category': 'Foods', - 'aliases': [ - 'sake' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿบ', - 'description': 'beer mug', - 'category': 'Foods', - 'aliases': [ - 'beer' - ], - 'tags': [ - 'drink' - ] - }, - { - 'emoji': '๐Ÿป', - 'description': 'clinking beer mugs', - 'category': 'Foods', - 'aliases': [ - 'beers' - ], - 'tags': [ - 'drinks' - ] - }, - { - 'emoji': '๐Ÿฅ‚', - 'description': 'clinking glasses', - 'category': 'Foods', - 'aliases': [ - 'clinking_glasses' - ], - 'tags': [ - 'cheers', - 'toast' - ] - }, - { - 'emoji': '๐Ÿท', - 'description': 'wine glass', - 'category': 'Foods', - 'aliases': [ - 'wine_glass' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅƒ', - 'description': 'tumbler glass', - 'category': 'Foods', - 'aliases': [ - 'tumbler_glass' - ], - 'tags': [ - 'whisky' - ] - }, - { - 'emoji': '๐Ÿธ', - 'description': 'cocktail glass', - 'category': 'Foods', - 'aliases': [ - 'cocktail' - ], - 'tags': [ - 'drink' - ] - }, - { - 'emoji': '๐Ÿน', - 'description': 'tropical drink', - 'category': 'Foods', - 'aliases': [ - 'tropical_drink' - ], - 'tags': [ - 'summer', - 'vacation' - ] - }, - { - 'emoji': '๐Ÿพ', - 'description': 'bottle with popping cork', - 'category': 'Foods', - 'aliases': [ - 'champagne' - ], - 'tags': [ - 'bottle', - 'bubbly', - 'celebration' - ] - }, - { - 'emoji': '๐Ÿฅ„', - 'description': 'spoon', - 'category': 'Foods', - 'aliases': [ - 'spoon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿด', - 'description': 'fork and knife', - 'category': 'Foods', - 'aliases': [ - 'fork_and_knife' - ], - 'tags': [ - 'cutlery' - ] - }, - { - 'emoji': '๐Ÿฝ', - 'description': 'fork and knife with plate', - 'category': 'Foods', - 'aliases': [ - 'plate_with_cutlery' - ], - 'tags': [ - 'dining', - 'dinner' - ] - }, - { - 'emoji': 'โšฝ๏ธ', - 'description': 'soccer ball', - 'category': 'Activity', - 'aliases': [ - 'soccer' - ], - 'tags': [ - 'sports' - ] - }, - { - 'emoji': '๐Ÿ€', - 'description': 'basketball', - 'category': 'Activity', - 'aliases': [ - 'basketball' - ], - 'tags': [ - 'sports' - ] - }, - { - 'emoji': '๐Ÿˆ', - 'description': 'american football', - 'category': 'Activity', - 'aliases': [ - 'football' - ], - 'tags': [ - 'sports' - ] - }, - { - 'emoji': 'โšพ๏ธ', - 'description': 'baseball', - 'category': 'Activity', - 'aliases': [ - 'baseball' - ], - 'tags': [ - 'sports' - ] - }, - { - 'emoji': '๐ŸŽพ', - 'description': 'tennis', - 'category': 'Activity', - 'aliases': [ - 'tennis' - ], - 'tags': [ - 'sports' - ] - }, - { - 'emoji': '๐Ÿ', - 'description': 'volleyball', - 'category': 'Activity', - 'aliases': [ - 'volleyball' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‰', - 'description': 'rugby football', - 'category': 'Activity', - 'aliases': [ - 'rugby_football' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽฑ', - 'description': 'pool 8 ball', - 'category': 'Activity', - 'aliases': [ - '8ball' - ], - 'tags': [ - 'pool', - 'billiards' - ] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'ping pong', - 'category': 'Activity', - 'aliases': [ - 'ping_pong' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿธ', - 'description': 'badminton', - 'category': 'Activity', - 'aliases': [ - 'badminton' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ…', - 'description': 'goal net', - 'category': 'Activity', - 'aliases': [ - 'goal_net' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'ice hockey', - 'category': 'Activity', - 'aliases': [ - 'ice_hockey' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‘', - 'description': 'field hockey', - 'category': 'Activity', - 'aliases': [ - 'field_hockey' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'cricket', - 'category': 'Activity', - 'aliases': [ - 'cricket' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ณ๏ธ', - 'description': 'flag in hole', - 'category': 'Activity', - 'aliases': [ - 'golf' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿน', - 'description': 'bow and arrow', - 'category': 'Activity', - 'aliases': [ - 'bow_and_arrow' - ], - 'tags': [ - 'archery' - ] - }, - { - 'emoji': '๐ŸŽฃ', - 'description': 'fishing pole', - 'category': 'Activity', - 'aliases': [ - 'fishing_pole_and_fish' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸฅŠ', - 'description': 'boxing glove', - 'category': 'Activity', - 'aliases': [ - 'boxing_glove' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ‹', - 'description': 'martial arts uniform', - 'category': 'Activity', - 'aliases': [ - 'martial_arts_uniform' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ธ', - 'description': 'ice skate', - 'category': 'Activity', - 'aliases': [ - 'ice_skate' - ], - 'tags': [ - 'skating' - ] - }, - { - 'emoji': '๐ŸŽฟ', - 'description': 'skis', - 'category': 'Activity', - 'aliases': [ - 'ski' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ท', - 'description': 'skier', - 'category': 'Activity', - 'aliases': [ - 'skier' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‚', - 'description': 'snowboarder', - 'category': 'Activity', - 'aliases': [ - 'snowboarder' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‹๏ธโ€โ™€๏ธ', - 'description': 'woman lifting weights', - 'category': 'Activity', - 'aliases': [ - 'weight_lifting_woman' - ], - 'tags': [ - 'gym', - 'workout' - ] - }, - { - 'emoji': '๐Ÿ‹', - 'description': 'person lifting weights', - 'category': 'Activity', - 'aliases': [ - 'weight_lifting_man' - ], - 'tags': [ - 'gym', - 'workout' - ] - }, - { - 'emoji': '๐Ÿคบ', - 'description': 'person fencing', - 'category': 'Activity', - 'aliases': [ - 'person_fencing' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคผโ€โ™€', - 'description': 'women wrestling', - 'category': 'Activity', - 'aliases': [ - 'women_wrestling' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคผโ€โ™‚', - 'description': 'men wrestling', - 'category': 'Activity', - 'aliases': [ - 'men_wrestling' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคธโ€โ™€', - 'description': 'woman cartwheeling', - 'category': 'Activity', - 'aliases': [ - 'woman_cartwheeling' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคธโ€โ™‚', - 'description': 'man cartwheeling', - 'category': 'Activity', - 'aliases': [ - 'man_cartwheeling' - ], - 'tags': [] - }, - { - 'emoji': 'โ›น๏ธโ€โ™€๏ธ', - 'description': 'woman bouncing ball', - 'category': 'Activity', - 'aliases': [ - 'basketball_woman' - ], - 'tags': [] - }, - { - 'emoji': 'โ›น', - 'description': 'person bouncing ball', - 'category': 'Activity', - 'aliases': [ - 'basketball_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคพโ€โ™€', - 'description': 'woman playing handball', - 'category': 'Activity', - 'aliases': [ - 'woman_playing_handball' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคพโ€โ™‚', - 'description': 'man playing handball', - 'category': 'Activity', - 'aliases': [ - 'man_playing_handball' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ๏ธโ€โ™€๏ธ', - 'description': 'woman golfing', - 'category': 'Activity', - 'aliases': [ - 'golfing_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'person golfing', - 'category': 'Activity', - 'aliases': [ - 'golfing_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ„โ€โ™€', - 'description': 'woman surfing', - 'category': 'Activity', - 'aliases': [ - 'surfing_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ„', - 'description': 'person surfing', - 'category': 'Activity', - 'aliases': [ - 'surfing_man', - 'surfer' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŠโ€โ™€', - 'description': 'woman swimming', - 'category': 'Activity', - 'aliases': [ - 'swimming_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŠ', - 'description': 'person swimming', - 'category': 'Activity', - 'aliases': [ - 'swimming_man', - 'swimmer' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคฝโ€โ™€', - 'description': 'woman playing water polo', - 'category': 'Activity', - 'aliases': [ - 'woman_playing_water_polo' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคฝโ€โ™‚', - 'description': 'man playing water polo', - 'category': 'Activity', - 'aliases': [ - 'man_playing_water_polo' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฃโ€โ™€', - 'description': 'woman rowing boat', - 'category': 'Activity', - 'aliases': [ - 'rowing_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฃ', - 'description': 'person rowing boat', - 'category': 'Activity', - 'aliases': [ - 'rowing_man', - 'rowboat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡', - 'description': 'horse racing', - 'category': 'Activity', - 'aliases': [ - 'horse_racing' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšดโ€โ™€', - 'description': 'woman biking', - 'category': 'Activity', - 'aliases': [ - 'biking_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšด', - 'description': 'person biking', - 'category': 'Activity', - 'aliases': [ - 'biking_man', - 'bicyclist' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšตโ€โ™€', - 'description': 'woman mountain biking', - 'category': 'Activity', - 'aliases': [ - 'mountain_biking_woman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšต', - 'description': 'person mountain biking', - 'category': 'Activity', - 'aliases': [ - 'mountain_biking_man', - 'mountain_bicyclist' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽฝ', - 'description': 'running shirt', - 'category': 'Activity', - 'aliases': [ - 'running_shirt_with_sash' - ], - 'tags': [ - 'marathon' - ] - }, - { - 'emoji': '๐Ÿ…', - 'description': 'sports medal', - 'category': 'Activity', - 'aliases': [ - 'medal_sports' - ], - 'tags': [ - 'gold', - 'winner' - ] - }, - { - 'emoji': '๐ŸŽ–', - 'description': 'military medal', - 'category': 'Activity', - 'aliases': [ - 'medal_military' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ‡', - 'description': '1st place medal', - 'category': 'Activity', - 'aliases': [ - '1st_place_medal' - ], - 'tags': [ - 'gold' - ] - }, - { - 'emoji': '๐Ÿฅˆ', - 'description': '2nd place medal', - 'category': 'Activity', - 'aliases': [ - '2nd_place_medal' - ], - 'tags': [ - 'silver' - ] - }, - { - 'emoji': '๐Ÿฅ‰', - 'description': '3rd place medal', - 'category': 'Activity', - 'aliases': [ - '3rd_place_medal' - ], - 'tags': [ - 'bronze' - ] - }, - { - 'emoji': '๐Ÿ†', - 'description': 'trophy', - 'category': 'Activity', - 'aliases': [ - 'trophy' - ], - 'tags': [ - 'award', - 'contest', - 'winner' - ] - }, - { - 'emoji': '๐Ÿต', - 'description': 'rosette', - 'category': 'Activity', - 'aliases': [ - 'rosette' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ—', - 'description': 'reminder ribbon', - 'category': 'Activity', - 'aliases': [ - 'reminder_ribbon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽซ', - 'description': 'ticket', - 'category': 'Activity', - 'aliases': [ - 'ticket' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽŸ', - 'description': 'admission tickets', - 'category': 'Activity', - 'aliases': [ - 'tickets' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽช', - 'description': 'circus tent', - 'category': 'Activity', - 'aliases': [ - 'circus_tent' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคนโ€โ™€', - 'description': 'woman juggling', - 'category': 'Activity', - 'aliases': [ - 'woman_juggling' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿคนโ€โ™‚', - 'description': 'man juggling', - 'category': 'Activity', - 'aliases': [ - 'man_juggling' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽญ', - 'description': 'performing arts', - 'category': 'Activity', - 'aliases': [ - 'performing_arts' - ], - 'tags': [ - 'theater', - 'drama' - ] - }, - { - 'emoji': '๐ŸŽจ', - 'description': 'artist palette', - 'category': 'Activity', - 'aliases': [ - 'art' - ], - 'tags': [ - 'design', - 'paint' - ] - }, - { - 'emoji': '๐ŸŽฌ', - 'description': 'clapper board', - 'category': 'Activity', - 'aliases': [ - 'clapper' - ], - 'tags': [ - 'film' - ] - }, - { - 'emoji': '๐ŸŽค', - 'description': 'microphone', - 'category': 'Activity', - 'aliases': [ - 'microphone' - ], - 'tags': [ - 'sing' - ] - }, - { - 'emoji': '๐ŸŽง', - 'description': 'headphone', - 'category': 'Activity', - 'aliases': [ - 'headphones' - ], - 'tags': [ - 'music', - 'earphones' - ] - }, - { - 'emoji': '๐ŸŽผ', - 'description': 'musical score', - 'category': 'Activity', - 'aliases': [ - 'musical_score' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽน', - 'description': 'musical keyboard', - 'category': 'Activity', - 'aliases': [ - 'musical_keyboard' - ], - 'tags': [ - 'piano' - ] - }, - { - 'emoji': '๐Ÿฅ', - 'description': 'drum', - 'category': 'Activity', - 'aliases': [ - 'drum' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽท', - 'description': 'saxophone', - 'category': 'Activity', - 'aliases': [ - 'saxophone' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽบ', - 'description': 'trumpet', - 'category': 'Activity', - 'aliases': [ - 'trumpet' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽธ', - 'description': 'guitar', - 'category': 'Activity', - 'aliases': [ - 'guitar' - ], - 'tags': [ - 'rock' - ] - }, - { - 'emoji': '๐ŸŽป', - 'description': 'violin', - 'category': 'Activity', - 'aliases': [ - 'violin' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽฒ', - 'description': 'game die', - 'category': 'Activity', - 'aliases': [ - 'game_die' - ], - 'tags': [ - 'dice', - 'gambling' - ] - }, - { - 'emoji': '๐ŸŽฏ', - 'description': 'direct hit', - 'category': 'Activity', - 'aliases': [ - 'dart' - ], - 'tags': [ - 'target' - ] - }, - { - 'emoji': '๐ŸŽณ', - 'description': 'bowling', - 'category': 'Activity', - 'aliases': [ - 'bowling' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽฎ', - 'description': 'video game', - 'category': 'Activity', - 'aliases': [ - 'video_game' - ], - 'tags': [ - 'play', - 'controller', - 'console' - ] - }, - { - 'emoji': '๐ŸŽฐ', - 'description': 'slot machine', - 'category': 'Activity', - 'aliases': [ - 'slot_machine' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš—', - 'description': 'automobile', - 'category': 'Places', - 'aliases': [ - 'car', - 'red_car' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš•', - 'description': 'taxi', - 'category': 'Places', - 'aliases': [ - 'taxi' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš™', - 'description': 'sport utility vehicle', - 'category': 'Places', - 'aliases': [ - 'blue_car' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸšŒ', - 'description': 'bus', - 'category': 'Places', - 'aliases': [ - 'bus' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸšŽ', - 'description': 'trolleybus', - 'category': 'Places', - 'aliases': [ - 'trolleybus' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ', - 'description': 'racing car', - 'category': 'Places', - 'aliases': [ - 'racing_car' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš“', - 'description': 'police car', - 'category': 'Places', - 'aliases': [ - 'police_car' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš‘', - 'description': 'ambulance', - 'category': 'Places', - 'aliases': [ - 'ambulance' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš’', - 'description': 'fire engine', - 'category': 'Places', - 'aliases': [ - 'fire_engine' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš', - 'description': 'minibus', - 'category': 'Places', - 'aliases': [ - 'minibus' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšš', - 'description': 'delivery truck', - 'category': 'Places', - 'aliases': [ - 'truck' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš›', - 'description': 'articulated lorry', - 'category': 'Places', - 'aliases': [ - 'articulated_lorry' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšœ', - 'description': 'tractor', - 'category': 'Places', - 'aliases': [ - 'tractor' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ด', - 'description': 'kick scooter', - 'category': 'Places', - 'aliases': [ - 'kick_scooter' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฒ', - 'description': 'bicycle', - 'category': 'Places', - 'aliases': [ - 'bike' - ], - 'tags': [ - 'bicycle' - ] - }, - { - 'emoji': '๐Ÿ›ต', - 'description': 'motor scooter', - 'category': 'Places', - 'aliases': [ - 'motor_scooter' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'motorcycle', - 'category': 'Places', - 'aliases': [ - 'motorcycle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšจ', - 'description': 'police car light', - 'category': 'Places', - 'aliases': [ - 'rotating_light' - ], - 'tags': [ - '911', - 'emergency' - ] - }, - { - 'emoji': '๐Ÿš”', - 'description': 'oncoming police car', - 'category': 'Places', - 'aliases': [ - 'oncoming_police_car' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš', - 'description': 'oncoming bus', - 'category': 'Places', - 'aliases': [ - 'oncoming_bus' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš˜', - 'description': 'oncoming automobile', - 'category': 'Places', - 'aliases': [ - 'oncoming_automobile' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš–', - 'description': 'oncoming taxi', - 'category': 'Places', - 'aliases': [ - 'oncoming_taxi' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšก', - 'description': 'aerial tramway', - 'category': 'Places', - 'aliases': [ - 'aerial_tramway' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš ', - 'description': 'mountain cableway', - 'category': 'Places', - 'aliases': [ - 'mountain_cableway' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸšŸ', - 'description': 'suspension railway', - 'category': 'Places', - 'aliases': [ - 'suspension_railway' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšƒ', - 'description': 'railway car', - 'category': 'Places', - 'aliases': [ - 'railway_car' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš‹', - 'description': 'tram car', - 'category': 'Places', - 'aliases': [ - 'train' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšž', - 'description': 'mountain railway', - 'category': 'Places', - 'aliases': [ - 'mountain_railway' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš', - 'description': 'monorail', - 'category': 'Places', - 'aliases': [ - 'monorail' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš„', - 'description': 'high-speed train', - 'category': 'Places', - 'aliases': [ - 'bullettrain_side' - ], - 'tags': [ - 'train' - ] - }, - { - 'emoji': '๐Ÿš…', - 'description': 'high-speed train with bullet nose', - 'category': 'Places', - 'aliases': [ - 'bullettrain_front' - ], - 'tags': [ - 'train' - ] - }, - { - 'emoji': '๐Ÿšˆ', - 'description': 'light rail', - 'category': 'Places', - 'aliases': [ - 'light_rail' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš‚', - 'description': 'locomotive', - 'category': 'Places', - 'aliases': [ - 'steam_locomotive' - ], - 'tags': [ - 'train' - ] - }, - { - 'emoji': '๐Ÿš†', - 'description': 'train', - 'category': 'Places', - 'aliases': [ - 'train2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš‡', - 'description': 'metro', - 'category': 'Places', - 'aliases': [ - 'metro' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸšŠ', - 'description': 'tram', - 'category': 'Places', - 'aliases': [ - 'tram' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš‰', - 'description': 'station', - 'category': 'Places', - 'aliases': [ - 'station' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš', - 'description': 'helicopter', - 'category': 'Places', - 'aliases': [ - 'helicopter' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ฉ', - 'description': 'small airplane', - 'category': 'Places', - 'aliases': [ - 'small_airplane' - ], - 'tags': [ - 'flight' - ] - }, - { - 'emoji': 'โœˆ๏ธ', - 'description': 'airplane', - 'category': 'Places', - 'aliases': [ - 'airplane' - ], - 'tags': [ - 'flight' - ] - }, - { - 'emoji': '๐Ÿ›ซ', - 'description': 'airplane departure', - 'category': 'Places', - 'aliases': [ - 'flight_departure' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ฌ', - 'description': 'airplane arrival', - 'category': 'Places', - 'aliases': [ - 'flight_arrival' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš€', - 'description': 'rocket', - 'category': 'Places', - 'aliases': [ - 'rocket' - ], - 'tags': [ - 'ship', - 'launch' - ] - }, - { - 'emoji': '๐Ÿ›ฐ', - 'description': 'satellite', - 'category': 'Places', - 'aliases': [ - 'artificial_satellite' - ], - 'tags': [ - 'orbit', - 'space' - ] - }, - { - 'emoji': '๐Ÿ’บ', - 'description': 'seat', - 'category': 'Places', - 'aliases': [ - 'seat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ถ', - 'description': 'canoe', - 'category': 'Places', - 'aliases': [ - 'canoe' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ต๏ธ', - 'description': 'sailboat', - 'category': 'Places', - 'aliases': [ - 'boat', - 'sailboat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ฅ', - 'description': 'motor boat', - 'category': 'Places', - 'aliases': [ - 'motor_boat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšค', - 'description': 'speedboat', - 'category': 'Places', - 'aliases': [ - 'speedboat' - ], - 'tags': [ - 'ship' - ] - }, - { - 'emoji': '๐Ÿ›ณ', - 'description': 'passenger ship', - 'category': 'Places', - 'aliases': [ - 'passenger_ship' - ], - 'tags': [ - 'cruise' - ] - }, - { - 'emoji': 'โ›ด', - 'description': 'ferry', - 'category': 'Places', - 'aliases': [ - 'ferry' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšข', - 'description': 'ship', - 'category': 'Places', - 'aliases': [ - 'ship' - ], - 'tags': [] - }, - { - 'emoji': 'โš“๏ธ', - 'description': 'anchor', - 'category': 'Places', - 'aliases': [ - 'anchor' - ], - 'tags': [ - 'ship' - ] - }, - { - 'emoji': '๐Ÿšง', - 'description': 'construction', - 'category': 'Places', - 'aliases': [ - 'construction' - ], - 'tags': [ - 'wip' - ] - }, - { - 'emoji': 'โ›ฝ๏ธ', - 'description': 'fuel pump', - 'category': 'Places', - 'aliases': [ - 'fuelpump' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš', - 'description': 'bus stop', - 'category': 'Places', - 'aliases': [ - 'busstop' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฆ', - 'description': 'vertical traffic light', - 'category': 'Places', - 'aliases': [ - 'vertical_traffic_light' - ], - 'tags': [ - 'semaphore' - ] - }, - { - 'emoji': '๐Ÿšฅ', - 'description': 'horizontal traffic light', - 'category': 'Places', - 'aliases': [ - 'traffic_light' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—บ', - 'description': 'world map', - 'category': 'Places', - 'aliases': [ - 'world_map' - ], - 'tags': [ - 'travel' - ] - }, - { - 'emoji': '๐Ÿ—ฟ', - 'description': 'moai', - 'category': 'Places', - 'aliases': [ - 'moyai' - ], - 'tags': [ - 'stone' - ] - }, - { - 'emoji': '๐Ÿ—ฝ', - 'description': 'Statue of Liberty', - 'category': 'Places', - 'aliases': [ - 'statue_of_liberty' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ฒ๏ธ', - 'description': 'fountain', - 'category': 'Places', - 'aliases': [ - 'fountain' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—ผ', - 'description': 'Tokyo tower', - 'category': 'Places', - 'aliases': [ - 'tokyo_tower' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฐ', - 'description': 'castle', - 'category': 'Places', - 'aliases': [ - 'european_castle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฏ', - 'description': 'Japanese castle', - 'category': 'Places', - 'aliases': [ - 'japanese_castle' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŸ', - 'description': 'stadium', - 'category': 'Places', - 'aliases': [ - 'stadium' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽก', - 'description': 'ferris wheel', - 'category': 'Places', - 'aliases': [ - 'ferris_wheel' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽข', - 'description': 'roller coaster', - 'category': 'Places', - 'aliases': [ - 'roller_coaster' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ ', - 'description': 'carousel horse', - 'category': 'Places', - 'aliases': [ - 'carousel_horse' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ฑ', - 'description': 'umbrella on ground', - 'category': 'Places', - 'aliases': [ - 'parasol_on_ground' - ], - 'tags': [ - 'beach_umbrella' - ] - }, - { - 'emoji': '๐Ÿ–', - 'description': 'beach with umbrella', - 'category': 'Places', - 'aliases': [ - 'beach_umbrella' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'desert island', - 'category': 'Places', - 'aliases': [ - 'desert_island' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ฐ', - 'description': 'mountain', - 'category': 'Places', - 'aliases': [ - 'mountain' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'snow-capped mountain', - 'category': 'Places', - 'aliases': [ - 'mountain_snow' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—ป', - 'description': 'mount fuji', - 'category': 'Places', - 'aliases': [ - 'mount_fuji' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ‹', - 'description': 'volcano', - 'category': 'Places', - 'aliases': [ - 'volcano' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿœ', - 'description': 'desert', - 'category': 'Places', - 'aliases': [ - 'desert' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•', - 'description': 'camping', - 'category': 'Places', - 'aliases': [ - 'camping' - ], - 'tags': [] - }, - { - 'emoji': 'โ›บ๏ธ', - 'description': 'tent', - 'category': 'Places', - 'aliases': [ - 'tent' - ], - 'tags': [ - 'camping' - ] - }, - { - 'emoji': '๐Ÿ›ค', - 'description': 'railway track', - 'category': 'Places', - 'aliases': [ - 'railway_track' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ฃ', - 'description': 'motorway', - 'category': 'Places', - 'aliases': [ - 'motorway' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—', - 'description': 'building construction', - 'category': 'Places', - 'aliases': [ - 'building_construction' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿญ', - 'description': 'factory', - 'category': 'Places', - 'aliases': [ - 'factory' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ ', - 'description': 'house', - 'category': 'Places', - 'aliases': [ - 'house' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿก', - 'description': 'house with garden', - 'category': 'Places', - 'aliases': [ - 'house_with_garden' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ˜', - 'description': 'house', - 'category': 'Places', - 'aliases': [ - 'houses' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿš', - 'description': 'derelict house', - 'category': 'Places', - 'aliases': [ - 'derelict_house' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿข', - 'description': 'office building', - 'category': 'Places', - 'aliases': [ - 'office' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฌ', - 'description': 'department store', - 'category': 'Places', - 'aliases': [ - 'department_store' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฃ', - 'description': 'Japanese post office', - 'category': 'Places', - 'aliases': [ - 'post_office' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿค', - 'description': 'post office', - 'category': 'Places', - 'aliases': [ - 'european_post_office' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฅ', - 'description': 'hospital', - 'category': 'Places', - 'aliases': [ - 'hospital' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฆ', - 'description': 'bank', - 'category': 'Places', - 'aliases': [ - 'bank' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿจ', - 'description': 'hotel', - 'category': 'Places', - 'aliases': [ - 'hotel' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿช', - 'description': 'convenience store', - 'category': 'Places', - 'aliases': [ - 'convenience_store' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿซ', - 'description': 'school', - 'category': 'Places', - 'aliases': [ - 'school' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฉ', - 'description': 'love hotel', - 'category': 'Places', - 'aliases': [ - 'love_hotel' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’’', - 'description': 'wedding', - 'category': 'Places', - 'aliases': [ - 'wedding' - ], - 'tags': [ - 'marriage' - ] - }, - { - 'emoji': '๐Ÿ›', - 'description': 'classical building', - 'category': 'Places', - 'aliases': [ - 'classical_building' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ช๏ธ', - 'description': 'church', - 'category': 'Places', - 'aliases': [ - 'church' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•Œ', - 'description': 'mosque', - 'category': 'Places', - 'aliases': [ - 'mosque' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•', - 'description': 'synagogue', - 'category': 'Places', - 'aliases': [ - 'synagogue' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•‹', - 'description': 'kaaba', - 'category': 'Places', - 'aliases': [ - 'kaaba' - ], - 'tags': [] - }, - { - 'emoji': 'โ›ฉ', - 'description': 'shinto shrine', - 'category': 'Places', - 'aliases': [ - 'shinto_shrine' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—พ', - 'description': 'map of Japan', - 'category': 'Places', - 'aliases': [ - 'japan' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ‘', - 'description': 'moon viewing ceremony', - 'category': 'Places', - 'aliases': [ - 'rice_scene' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿž', - 'description': 'national park', - 'category': 'Places', - 'aliases': [ - 'national_park' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ…', - 'description': 'sunrise', - 'category': 'Places', - 'aliases': [ - 'sunrise' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ„', - 'description': 'sunrise over mountains', - 'category': 'Places', - 'aliases': [ - 'sunrise_over_mountains' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ ', - 'description': 'shooting star', - 'category': 'Places', - 'aliases': [ - 'stars' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ‡', - 'description': 'sparkler', - 'category': 'Places', - 'aliases': [ - 'sparkler' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ†', - 'description': 'fireworks', - 'category': 'Places', - 'aliases': [ - 'fireworks' - ], - 'tags': [ - 'festival', - 'celebration' - ] - }, - { - 'emoji': '๐ŸŒ‡', - 'description': 'sunset', - 'category': 'Places', - 'aliases': [ - 'city_sunrise' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ†', - 'description': 'cityscape at dusk', - 'category': 'Places', - 'aliases': [ - 'city_sunset' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ™', - 'description': 'cityscape', - 'category': 'Places', - 'aliases': [ - 'cityscape' - ], - 'tags': [ - 'skyline' - ] - }, - { - 'emoji': '๐ŸŒƒ', - 'description': 'night with stars', - 'category': 'Places', - 'aliases': [ - 'night_with_stars' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒŒ', - 'description': 'milky way', - 'category': 'Places', - 'aliases': [ - 'milky_way' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ‰', - 'description': 'bridge at night', - 'category': 'Places', - 'aliases': [ - 'bridge_at_night' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'foggy', - 'category': 'Places', - 'aliases': [ - 'foggy' - ], - 'tags': [ - 'karl' - ] - }, - { - 'emoji': 'โŒš๏ธ', - 'description': 'watch', - 'category': 'Objects', - 'aliases': [ - 'watch' - ], - 'tags': [ - 'time' - ] - }, - { - 'emoji': '๐Ÿ“ฑ', - 'description': 'mobile phone', - 'category': 'Objects', - 'aliases': [ - 'iphone' - ], - 'tags': [ - 'smartphone', - 'mobile' - ] - }, - { - 'emoji': '๐Ÿ“ฒ', - 'description': 'mobile phone with arrow', - 'category': 'Objects', - 'aliases': [ - 'calling' - ], - 'tags': [ - 'call', - 'incoming' - ] - }, - { - 'emoji': '๐Ÿ’ป', - 'description': 'laptop computer', - 'category': 'Objects', - 'aliases': [ - 'computer' - ], - 'tags': [ - 'desktop', - 'screen' - ] - }, - { - 'emoji': 'โŒจ๏ธ', - 'description': 'keyboard', - 'category': 'Objects', - 'aliases': [ - 'keyboard' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–ฅ', - 'description': 'desktop computer', - 'category': 'Objects', - 'aliases': [ - 'desktop_computer' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–จ', - 'description': 'printer', - 'category': 'Objects', - 'aliases': [ - 'printer' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–ฑ', - 'description': 'computer mouse', - 'category': 'Objects', - 'aliases': [ - 'computer_mouse' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–ฒ', - 'description': 'trackball', - 'category': 'Objects', - 'aliases': [ - 'trackball' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•น', - 'description': 'joystick', - 'category': 'Objects', - 'aliases': [ - 'joystick' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—œ', - 'description': 'clamp', - 'category': 'Objects', - 'aliases': [ - 'clamp' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ฝ', - 'description': 'computer disk', - 'category': 'Objects', - 'aliases': [ - 'minidisc' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’พ', - 'description': 'floppy disk', - 'category': 'Objects', - 'aliases': [ - 'floppy_disk' - ], - 'tags': [ - 'save' - ] - }, - { - 'emoji': '๐Ÿ’ฟ', - 'description': 'optical disk', - 'category': 'Objects', - 'aliases': [ - 'cd' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“€', - 'description': 'dvd', - 'category': 'Objects', - 'aliases': [ - 'dvd' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ผ', - 'description': 'videocassette', - 'category': 'Objects', - 'aliases': [ - 'vhs' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ท', - 'description': 'camera', - 'category': 'Objects', - 'aliases': [ - 'camera' - ], - 'tags': [ - 'photo' - ] - }, - { - 'emoji': '๐Ÿ“ธ', - 'description': 'camera with flash', - 'category': 'Objects', - 'aliases': [ - 'camera_flash' - ], - 'tags': [ - 'photo' - ] - }, - { - 'emoji': '๐Ÿ“น', - 'description': 'video camera', - 'category': 'Objects', - 'aliases': [ - 'video_camera' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽฅ', - 'description': 'movie camera', - 'category': 'Objects', - 'aliases': [ - 'movie_camera' - ], - 'tags': [ - 'film', - 'video' - ] - }, - { - 'emoji': '๐Ÿ“ฝ', - 'description': 'film projector', - 'category': 'Objects', - 'aliases': [ - 'film_projector' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽž', - 'description': 'film frames', - 'category': 'Objects', - 'aliases': [ - 'film_strip' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ž', - 'description': 'telephone receiver', - 'category': 'Objects', - 'aliases': [ - 'telephone_receiver' - ], - 'tags': [ - 'phone', - 'call' - ] - }, - { - 'emoji': 'โ˜Ž๏ธ', - 'description': 'telephone', - 'category': 'Objects', - 'aliases': [ - 'phone', - 'telephone' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“Ÿ', - 'description': 'pager', - 'category': 'Objects', - 'aliases': [ - 'pager' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ ', - 'description': 'fax machine', - 'category': 'Objects', - 'aliases': [ - 'fax' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“บ', - 'description': 'television', - 'category': 'Objects', - 'aliases': [ - 'tv' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ป', - 'description': 'radio', - 'category': 'Objects', - 'aliases': [ - 'radio' - ], - 'tags': [ - 'podcast' - ] - }, - { - 'emoji': '๐ŸŽ™', - 'description': 'studio microphone', - 'category': 'Objects', - 'aliases': [ - 'studio_microphone' - ], - 'tags': [ - 'podcast' - ] - }, - { - 'emoji': '๐ŸŽš', - 'description': 'level slider', - 'category': 'Objects', - 'aliases': [ - 'level_slider' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ›', - 'description': 'control knobs', - 'category': 'Objects', - 'aliases': [ - 'control_knobs' - ], - 'tags': [] - }, - { - 'emoji': 'โฑ', - 'description': 'stopwatch', - 'category': 'Objects', - 'aliases': [ - 'stopwatch' - ], - 'tags': [] - }, - { - 'emoji': 'โฒ', - 'description': 'timer clock', - 'category': 'Objects', - 'aliases': [ - 'timer_clock' - ], - 'tags': [] - }, - { - 'emoji': 'โฐ', - 'description': 'alarm clock', - 'category': 'Objects', - 'aliases': [ - 'alarm_clock' - ], - 'tags': [ - 'morning' - ] - }, - { - 'emoji': '๐Ÿ•ฐ', - 'description': 'mantelpiece clock', - 'category': 'Objects', - 'aliases': [ - 'mantelpiece_clock' - ], - 'tags': [] - }, - { - 'emoji': 'โŒ›๏ธ', - 'description': 'hourglass', - 'category': 'Objects', - 'aliases': [ - 'hourglass' - ], - 'tags': [ - 'time' - ] - }, - { - 'emoji': 'โณ', - 'description': 'hourglass with flowing sand', - 'category': 'Objects', - 'aliases': [ - 'hourglass_flowing_sand' - ], - 'tags': [ - 'time' - ] - }, - { - 'emoji': '๐Ÿ“ก', - 'description': 'satellite antenna', - 'category': 'Objects', - 'aliases': [ - 'satellite' - ], - 'tags': [ - 'signal' - ] - }, - { - 'emoji': '๐Ÿ”‹', - 'description': 'battery', - 'category': 'Objects', - 'aliases': [ - 'battery' - ], - 'tags': [ - 'power' - ] - }, - { - 'emoji': '๐Ÿ”Œ', - 'description': 'electric plug', - 'category': 'Objects', - 'aliases': [ - 'electric_plug' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ก', - 'description': 'light bulb', - 'category': 'Objects', - 'aliases': [ - 'bulb' - ], - 'tags': [ - 'idea', - 'light' - ] - }, - { - 'emoji': '๐Ÿ”ฆ', - 'description': 'flashlight', - 'category': 'Objects', - 'aliases': [ - 'flashlight' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ฏ', - 'description': 'candle', - 'category': 'Objects', - 'aliases': [ - 'candle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—‘', - 'description': 'wastebasket', - 'category': 'Objects', - 'aliases': [ - 'wastebasket' - ], - 'tags': [ - 'trash' - ] - }, - { - 'emoji': '๐Ÿ›ข', - 'description': 'oil drum', - 'category': 'Objects', - 'aliases': [ - 'oil_drum' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ธ', - 'description': 'money with wings', - 'category': 'Objects', - 'aliases': [ - 'money_with_wings' - ], - 'tags': [ - 'dollar' - ] - }, - { - 'emoji': '๐Ÿ’ต', - 'description': 'dollar banknote', - 'category': 'Objects', - 'aliases': [ - 'dollar' - ], - 'tags': [ - 'money' - ] - }, - { - 'emoji': '๐Ÿ’ด', - 'description': 'yen banknote', - 'category': 'Objects', - 'aliases': [ - 'yen' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ถ', - 'description': 'euro banknote', - 'category': 'Objects', - 'aliases': [ - 'euro' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ท', - 'description': 'pound banknote', - 'category': 'Objects', - 'aliases': [ - 'pound' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ฐ', - 'description': 'money bag', - 'category': 'Objects', - 'aliases': [ - 'moneybag' - ], - 'tags': [ - 'dollar', - 'cream' - ] - }, - { - 'emoji': '๐Ÿ’ณ', - 'description': 'credit card', - 'category': 'Objects', - 'aliases': [ - 'credit_card' - ], - 'tags': [ - 'subscription' - ] - }, - { - 'emoji': '๐Ÿ’Ž', - 'description': 'gem stone', - 'category': 'Objects', - 'aliases': [ - 'gem' - ], - 'tags': [ - 'diamond' - ] - }, - { - 'emoji': 'โš–๏ธ', - 'description': 'balance scale', - 'category': 'Objects', - 'aliases': [ - 'balance_scale' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ง', - 'description': 'wrench', - 'category': 'Objects', - 'aliases': [ - 'wrench' - ], - 'tags': [ - 'tool' - ] - }, - { - 'emoji': '๐Ÿ”จ', - 'description': 'hammer', - 'category': 'Objects', - 'aliases': [ - 'hammer' - ], - 'tags': [ - 'tool' - ] - }, - { - 'emoji': 'โš’', - 'description': 'hammer and pick', - 'category': 'Objects', - 'aliases': [ - 'hammer_and_pick' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ› ', - 'description': 'hammer and wrench', - 'category': 'Objects', - 'aliases': [ - 'hammer_and_wrench' - ], - 'tags': [] - }, - { - 'emoji': 'โ›', - 'description': 'pick', - 'category': 'Objects', - 'aliases': [ - 'pick' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฉ', - 'description': 'nut and bolt', - 'category': 'Objects', - 'aliases': [ - 'nut_and_bolt' - ], - 'tags': [] - }, - { - 'emoji': 'โš™๏ธ', - 'description': 'gear', - 'category': 'Objects', - 'aliases': [ - 'gear' - ], - 'tags': [] - }, - { - 'emoji': 'โ›“', - 'description': 'chains', - 'category': 'Objects', - 'aliases': [ - 'chains' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ซ', - 'description': 'pistol', - 'category': 'Objects', - 'aliases': [ - 'gun' - ], - 'tags': [ - 'shoot', - 'weapon' - ] - }, - { - 'emoji': '๐Ÿ’ฃ', - 'description': 'bomb', - 'category': 'Objects', - 'aliases': [ - 'bomb' - ], - 'tags': [ - 'boom' - ] - }, - { - 'emoji': '๐Ÿ”ช', - 'description': 'kitchen knife', - 'category': 'Objects', - 'aliases': [ - 'hocho', - 'knife' - ], - 'tags': [ - 'cut', - 'chop' - ] - }, - { - 'emoji': '๐Ÿ—ก', - 'description': 'dagger', - 'category': 'Objects', - 'aliases': [ - 'dagger' - ], - 'tags': [] - }, - { - 'emoji': 'โš”๏ธ', - 'description': 'crossed swords', - 'category': 'Objects', - 'aliases': [ - 'crossed_swords' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ก', - 'description': 'shield', - 'category': 'Objects', - 'aliases': [ - 'shield' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฌ', - 'description': 'cigarette', - 'category': 'Objects', - 'aliases': [ - 'smoking' - ], - 'tags': [ - 'cigarette' - ] - }, - { - 'emoji': 'โšฐ๏ธ', - 'description': 'coffin', - 'category': 'Objects', - 'aliases': [ - 'coffin' - ], - 'tags': [ - 'funeral' - ] - }, - { - 'emoji': 'โšฑ๏ธ', - 'description': 'funeral urn', - 'category': 'Objects', - 'aliases': [ - 'funeral_urn' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿบ', - 'description': 'amphora', - 'category': 'Objects', - 'aliases': [ - 'amphora' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฎ', - 'description': 'crystal ball', - 'category': 'Objects', - 'aliases': [ - 'crystal_ball' - ], - 'tags': [ - 'fortune' - ] - }, - { - 'emoji': '๐Ÿ“ฟ', - 'description': 'prayer beads', - 'category': 'Objects', - 'aliases': [ - 'prayer_beads' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ˆ', - 'description': 'barber pole', - 'category': 'Objects', - 'aliases': [ - 'barber' - ], - 'tags': [] - }, - { - 'emoji': 'โš—๏ธ', - 'description': 'alembic', - 'category': 'Objects', - 'aliases': [ - 'alembic' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ญ', - 'description': 'telescope', - 'category': 'Objects', - 'aliases': [ - 'telescope' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฌ', - 'description': 'microscope', - 'category': 'Objects', - 'aliases': [ - 'microscope' - ], - 'tags': [ - 'science', - 'laboratory', - 'investigate' - ] - }, - { - 'emoji': '๐Ÿ•ณ', - 'description': 'hole', - 'category': 'Objects', - 'aliases': [ - 'hole' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’Š', - 'description': 'pill', - 'category': 'Objects', - 'aliases': [ - 'pill' - ], - 'tags': [ - 'health', - 'medicine' - ] - }, - { - 'emoji': '๐Ÿ’‰', - 'description': 'syringe', - 'category': 'Objects', - 'aliases': [ - 'syringe' - ], - 'tags': [ - 'health', - 'hospital', - 'needle' - ] - }, - { - 'emoji': '๐ŸŒก', - 'description': 'thermometer', - 'category': 'Objects', - 'aliases': [ - 'thermometer' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฝ', - 'description': 'toilet', - 'category': 'Objects', - 'aliases': [ - 'toilet' - ], - 'tags': [ - 'wc' - ] - }, - { - 'emoji': '๐Ÿšฐ', - 'description': 'potable water', - 'category': 'Objects', - 'aliases': [ - 'potable_water' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฟ', - 'description': 'shower', - 'category': 'Objects', - 'aliases': [ - 'shower' - ], - 'tags': [ - 'bath' - ] - }, - { - 'emoji': '๐Ÿ›', - 'description': 'bathtub', - 'category': 'Objects', - 'aliases': [ - 'bathtub' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›€', - 'description': 'person taking bath', - 'category': 'Objects', - 'aliases': [ - 'bath' - ], - 'tags': [ - 'shower' - ] - }, - { - 'emoji': '๐Ÿ›Ž', - 'description': 'bellhop bell', - 'category': 'Objects', - 'aliases': [ - 'bellhop_bell' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”‘', - 'description': 'key', - 'category': 'Objects', - 'aliases': [ - 'key' - ], - 'tags': [ - 'lock', - 'password' - ] - }, - { - 'emoji': '๐Ÿ—', - 'description': 'old key', - 'category': 'Objects', - 'aliases': [ - 'old_key' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšช', - 'description': 'door', - 'category': 'Objects', - 'aliases': [ - 'door' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›‹', - 'description': 'couch and lamp', - 'category': 'Objects', - 'aliases': [ - 'couch_and_lamp' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›', - 'description': 'bed', - 'category': 'Objects', - 'aliases': [ - 'bed' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›Œ', - 'description': 'person in bed', - 'category': 'Objects', - 'aliases': [ - 'sleeping_bed' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–ผ', - 'description': 'framed picture', - 'category': 'Objects', - 'aliases': [ - 'framed_picture' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›', - 'description': 'shopping bags', - 'category': 'Objects', - 'aliases': [ - 'shopping' - ], - 'tags': [ - 'bags' - ] - }, - { - 'emoji': '๐Ÿ›’', - 'description': 'shopping cart', - 'category': 'Objects', - 'aliases': [ - 'shopping_cart' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ', - 'description': 'wrapped gift', - 'category': 'Objects', - 'aliases': [ - 'gift' - ], - 'tags': [ - 'present', - 'birthday', - 'christmas' - ] - }, - { - 'emoji': '๐ŸŽˆ', - 'description': 'balloon', - 'category': 'Objects', - 'aliases': [ - 'balloon' - ], - 'tags': [ - 'party', - 'birthday' - ] - }, - { - 'emoji': '๐ŸŽ', - 'description': 'carp streamer', - 'category': 'Objects', - 'aliases': [ - 'flags' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ€', - 'description': 'ribbon', - 'category': 'Objects', - 'aliases': [ - 'ribbon' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽŠ', - 'description': 'confetti ball', - 'category': 'Objects', - 'aliases': [ - 'confetti_ball' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ‰', - 'description': 'party popper', - 'category': 'Objects', - 'aliases': [ - 'tada' - ], - 'tags': [ - 'hooray', - 'party' - ] - }, - { - 'emoji': '๐ŸŽŽ', - 'description': 'Japanese dolls', - 'category': 'Objects', - 'aliases': [ - 'dolls' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿฎ', - 'description': 'red paper lantern', - 'category': 'Objects', - 'aliases': [ - 'izakaya_lantern', - 'lantern' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽ', - 'description': 'wind chime', - 'category': 'Objects', - 'aliases': [ - 'wind_chime' - ], - 'tags': [] - }, - { - 'emoji': 'โœ‰๏ธ', - 'description': 'envelope', - 'category': 'Objects', - 'aliases': [ - 'email', - 'envelope' - ], - 'tags': [ - 'letter' - ] - }, - { - 'emoji': '๐Ÿ“ฉ', - 'description': 'envelope with arrow', - 'category': 'Objects', - 'aliases': [ - 'envelope_with_arrow' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“จ', - 'description': 'incoming envelope', - 'category': 'Objects', - 'aliases': [ - 'incoming_envelope' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ง', - 'description': 'e-mail', - 'category': 'Objects', - 'aliases': [ - 'e-mail' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’Œ', - 'description': 'love letter', - 'category': 'Objects', - 'aliases': [ - 'love_letter' - ], - 'tags': [ - 'email', - 'envelope' - ] - }, - { - 'emoji': '๐Ÿ“ฅ', - 'description': 'inbox tray', - 'category': 'Objects', - 'aliases': [ - 'inbox_tray' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ค', - 'description': 'outbox tray', - 'category': 'Objects', - 'aliases': [ - 'outbox_tray' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ฆ', - 'description': 'package', - 'category': 'Objects', - 'aliases': [ - 'package' - ], - 'tags': [ - 'shipping' - ] - }, - { - 'emoji': '๐Ÿท', - 'description': 'label', - 'category': 'Objects', - 'aliases': [ - 'label' - ], - 'tags': [ - 'tag' - ] - }, - { - 'emoji': '๐Ÿ“ช', - 'description': 'closed mailbox with lowered flag', - 'category': 'Objects', - 'aliases': [ - 'mailbox_closed' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ซ', - 'description': 'closed mailbox with raised flag', - 'category': 'Objects', - 'aliases': [ - 'mailbox' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ฌ', - 'description': 'open mailbox with raised flag', - 'category': 'Objects', - 'aliases': [ - 'mailbox_with_mail' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ญ', - 'description': 'open mailbox with lowered flag', - 'category': 'Objects', - 'aliases': [ - 'mailbox_with_no_mail' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ฎ', - 'description': 'postbox', - 'category': 'Objects', - 'aliases': [ - 'postbox' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ฏ', - 'description': 'postal horn', - 'category': 'Objects', - 'aliases': [ - 'postal_horn' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“œ', - 'description': 'scroll', - 'category': 'Objects', - 'aliases': [ - 'scroll' - ], - 'tags': [ - 'document' - ] - }, - { - 'emoji': '๐Ÿ“ƒ', - 'description': 'page with curl', - 'category': 'Objects', - 'aliases': [ - 'page_with_curl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“„', - 'description': 'page facing up', - 'category': 'Objects', - 'aliases': [ - 'page_facing_up' - ], - 'tags': [ - 'document' - ] - }, - { - 'emoji': '๐Ÿ“‘', - 'description': 'bookmark tabs', - 'category': 'Objects', - 'aliases': [ - 'bookmark_tabs' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“Š', - 'description': 'bar chart', - 'category': 'Objects', - 'aliases': [ - 'bar_chart' - ], - 'tags': [ - 'stats', - 'metrics' - ] - }, - { - 'emoji': '๐Ÿ“ˆ', - 'description': 'chart increasing', - 'category': 'Objects', - 'aliases': [ - 'chart_with_upwards_trend' - ], - 'tags': [ - 'graph', - 'metrics' - ] - }, - { - 'emoji': '๐Ÿ“‰', - 'description': 'chart decreasing', - 'category': 'Objects', - 'aliases': [ - 'chart_with_downwards_trend' - ], - 'tags': [ - 'graph', - 'metrics' - ] - }, - { - 'emoji': '๐Ÿ—’', - 'description': 'spiral notepad', - 'category': 'Objects', - 'aliases': [ - 'spiral_notepad' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—“', - 'description': 'spiral calendar', - 'category': 'Objects', - 'aliases': [ - 'spiral_calendar' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“†', - 'description': 'tear-off calendar', - 'category': 'Objects', - 'aliases': [ - 'calendar' - ], - 'tags': [ - 'schedule' - ] - }, - { - 'emoji': '๐Ÿ“…', - 'description': 'calendar', - 'category': 'Objects', - 'aliases': [ - 'date' - ], - 'tags': [ - 'calendar', - 'schedule' - ] - }, - { - 'emoji': '๐Ÿ“‡', - 'description': 'card index', - 'category': 'Objects', - 'aliases': [ - 'card_index' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—ƒ', - 'description': 'card file box', - 'category': 'Objects', - 'aliases': [ - 'card_file_box' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—ณ', - 'description': 'ballot box with ballot', - 'category': 'Objects', - 'aliases': [ - 'ballot_box' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—„', - 'description': 'file cabinet', - 'category': 'Objects', - 'aliases': [ - 'file_cabinet' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“‹', - 'description': 'clipboard', - 'category': 'Objects', - 'aliases': [ - 'clipboard' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'file folder', - 'category': 'Objects', - 'aliases': [ - 'file_folder' - ], - 'tags': [ - 'directory' - ] - }, - { - 'emoji': '๐Ÿ“‚', - 'description': 'open file folder', - 'category': 'Objects', - 'aliases': [ - 'open_file_folder' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—‚', - 'description': 'card index dividers', - 'category': 'Objects', - 'aliases': [ - 'card_index_dividers' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ—ž', - 'description': 'rolled-up newspaper', - 'category': 'Objects', - 'aliases': [ - 'newspaper_roll' - ], - 'tags': [ - 'press' - ] - }, - { - 'emoji': '๐Ÿ“ฐ', - 'description': 'newspaper', - 'category': 'Objects', - 'aliases': [ - 'newspaper' - ], - 'tags': [ - 'press' - ] - }, - { - 'emoji': '๐Ÿ““', - 'description': 'notebook', - 'category': 'Objects', - 'aliases': [ - 'notebook' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“”', - 'description': 'notebook with decorative cover', - 'category': 'Objects', - 'aliases': [ - 'notebook_with_decorative_cover' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“’', - 'description': 'ledger', - 'category': 'Objects', - 'aliases': [ - 'ledger' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“•', - 'description': 'closed book', - 'category': 'Objects', - 'aliases': [ - 'closed_book' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“—', - 'description': 'green book', - 'category': 'Objects', - 'aliases': [ - 'green_book' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“˜', - 'description': 'blue book', - 'category': 'Objects', - 'aliases': [ - 'blue_book' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“™', - 'description': 'orange book', - 'category': 'Objects', - 'aliases': [ - 'orange_book' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“š', - 'description': 'books', - 'category': 'Objects', - 'aliases': [ - 'books' - ], - 'tags': [ - 'library' - ] - }, - { - 'emoji': '๐Ÿ“–', - 'description': 'open book', - 'category': 'Objects', - 'aliases': [ - 'book', - 'open_book' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”–', - 'description': 'bookmark', - 'category': 'Objects', - 'aliases': [ - 'bookmark' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”—', - 'description': 'link', - 'category': 'Objects', - 'aliases': [ - 'link' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“Ž', - 'description': 'paperclip', - 'category': 'Objects', - 'aliases': [ - 'paperclip' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–‡', - 'description': 'linked paperclips', - 'category': 'Objects', - 'aliases': [ - 'paperclips' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'triangular ruler', - 'category': 'Objects', - 'aliases': [ - 'triangular_ruler' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'straight ruler', - 'category': 'Objects', - 'aliases': [ - 'straight_ruler' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“Œ', - 'description': 'pushpin', - 'category': 'Objects', - 'aliases': [ - 'pushpin' - ], - 'tags': [ - 'location' - ] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'round pushpin', - 'category': 'Objects', - 'aliases': [ - 'round_pushpin' - ], - 'tags': [ - 'location' - ] - }, - { - 'emoji': 'โœ‚๏ธ', - 'description': 'scissors', - 'category': 'Objects', - 'aliases': [ - 'scissors' - ], - 'tags': [ - 'cut' - ] - }, - { - 'emoji': '๐Ÿ–Š', - 'description': 'pen', - 'category': 'Objects', - 'aliases': [ - 'pen' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–‹', - 'description': 'fountain pen', - 'category': 'Objects', - 'aliases': [ - 'fountain_pen' - ], - 'tags': [] - }, - { - 'emoji': 'โœ’๏ธ', - 'description': 'black nib', - 'category': 'Objects', - 'aliases': [ - 'black_nib' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–Œ', - 'description': 'paintbrush', - 'category': 'Objects', - 'aliases': [ - 'paintbrush' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–', - 'description': 'crayon', - 'category': 'Objects', - 'aliases': [ - 'crayon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“', - 'description': 'memo', - 'category': 'Objects', - 'aliases': [ - 'memo', - 'pencil' - ], - 'tags': [ - 'document', - 'note' - ] - }, - { - 'emoji': 'โœ๏ธ', - 'description': 'pencil', - 'category': 'Objects', - 'aliases': [ - 'pencil2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'left-pointing magnifying glass', - 'category': 'Objects', - 'aliases': [ - 'mag' - ], - 'tags': [ - 'search', - 'zoom' - ] - }, - { - 'emoji': '๐Ÿ”Ž', - 'description': 'right-pointing magnifying glass', - 'category': 'Objects', - 'aliases': [ - 'mag_right' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'locked with pen', - 'category': 'Objects', - 'aliases': [ - 'lock_with_ink_pen' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'locked with key', - 'category': 'Objects', - 'aliases': [ - 'closed_lock_with_key' - ], - 'tags': [ - 'security' - ] - }, - { - 'emoji': '๐Ÿ”’', - 'description': 'locked', - 'category': 'Objects', - 'aliases': [ - 'lock' - ], - 'tags': [ - 'security', - 'private' - ] - }, - { - 'emoji': '๐Ÿ”“', - 'description': 'unlocked', - 'category': 'Objects', - 'aliases': [ - 'unlock' - ], - 'tags': [ - 'security' - ] - }, - { - 'emoji': 'โค๏ธ', - 'description': 'red heart', - 'category': 'Symbols', - 'aliases': [ - 'heart' - ], - 'tags': [ - 'love' - ] - }, - { - 'emoji': '๐Ÿ’›', - 'description': 'yellow heart', - 'category': 'Symbols', - 'aliases': [ - 'yellow_heart' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’š', - 'description': 'green heart', - 'category': 'Symbols', - 'aliases': [ - 'green_heart' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’™', - 'description': 'blue heart', - 'category': 'Symbols', - 'aliases': [ - 'blue_heart' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’œ', - 'description': 'purple heart', - 'category': 'Symbols', - 'aliases': [ - 'purple_heart' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ–ค', - 'description': 'black heart', - 'category': 'Symbols', - 'aliases': [ - 'black_heart' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’”', - 'description': 'broken heart', - 'category': 'Symbols', - 'aliases': [ - 'broken_heart' - ], - 'tags': [] - }, - { - 'emoji': 'โฃ๏ธ', - 'description': 'heavy heart exclamation', - 'category': 'Symbols', - 'aliases': [ - 'heavy_heart_exclamation' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’•', - 'description': 'two hearts', - 'category': 'Symbols', - 'aliases': [ - 'two_hearts' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ž', - 'description': 'revolving hearts', - 'category': 'Symbols', - 'aliases': [ - 'revolving_hearts' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’“', - 'description': 'beating heart', - 'category': 'Symbols', - 'aliases': [ - 'heartbeat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’—', - 'description': 'growing heart', - 'category': 'Symbols', - 'aliases': [ - 'heartpulse' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’–', - 'description': 'sparkling heart', - 'category': 'Symbols', - 'aliases': [ - 'sparkling_heart' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’˜', - 'description': 'heart with arrow', - 'category': 'Symbols', - 'aliases': [ - 'cupid' - ], - 'tags': [ - 'love', - 'heart' - ] - }, - { - 'emoji': '๐Ÿ’', - 'description': 'heart with ribbon', - 'category': 'Symbols', - 'aliases': [ - 'gift_heart' - ], - 'tags': [ - 'chocolates' - ] - }, - { - 'emoji': '๐Ÿ’Ÿ', - 'description': 'heart decoration', - 'category': 'Symbols', - 'aliases': [ - 'heart_decoration' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ฎ๏ธ', - 'description': 'peace symbol', - 'category': 'Symbols', - 'aliases': [ - 'peace_symbol' - ], - 'tags': [] - }, - { - 'emoji': 'โœ๏ธ', - 'description': 'latin cross', - 'category': 'Symbols', - 'aliases': [ - 'latin_cross' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ช๏ธ', - 'description': 'star and crescent', - 'category': 'Symbols', - 'aliases': [ - 'star_and_crescent' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•‰', - 'description': 'om', - 'category': 'Symbols', - 'aliases': [ - 'om' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ธ๏ธ', - 'description': 'wheel of dharma', - 'category': 'Symbols', - 'aliases': [ - 'wheel_of_dharma' - ], - 'tags': [] - }, - { - 'emoji': 'โœก๏ธ', - 'description': 'star of David', - 'category': 'Symbols', - 'aliases': [ - 'star_of_david' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฏ', - 'description': 'dotted six-pointed star', - 'category': 'Symbols', - 'aliases': [ - 'six_pointed_star' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•Ž', - 'description': 'menorah', - 'category': 'Symbols', - 'aliases': [ - 'menorah' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ฏ๏ธ', - 'description': 'yin yang', - 'category': 'Symbols', - 'aliases': [ - 'yin_yang' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ฆ๏ธ', - 'description': 'orthodox cross', - 'category': 'Symbols', - 'aliases': [ - 'orthodox_cross' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›', - 'description': 'place of worship', - 'category': 'Symbols', - 'aliases': [ - 'place_of_worship' - ], - 'tags': [] - }, - { - 'emoji': 'โ›Ž', - 'description': 'Ophiuchus', - 'category': 'Symbols', - 'aliases': [ - 'ophiuchus' - ], - 'tags': [] - }, - { - 'emoji': 'โ™ˆ๏ธ', - 'description': 'Aries', - 'category': 'Symbols', - 'aliases': [ - 'aries' - ], - 'tags': [] - }, - { - 'emoji': 'โ™‰๏ธ', - 'description': 'Taurus', - 'category': 'Symbols', - 'aliases': [ - 'taurus' - ], - 'tags': [] - }, - { - 'emoji': 'โ™Š๏ธ', - 'description': 'Gemini', - 'category': 'Symbols', - 'aliases': [ - 'gemini' - ], - 'tags': [] - }, - { - 'emoji': 'โ™‹๏ธ', - 'description': 'Cancer', - 'category': 'Symbols', - 'aliases': [ - 'cancer' - ], - 'tags': [] - }, - { - 'emoji': 'โ™Œ๏ธ', - 'description': 'Leo', - 'category': 'Symbols', - 'aliases': [ - 'leo' - ], - 'tags': [] - }, - { - 'emoji': 'โ™๏ธ', - 'description': 'Virgo', - 'category': 'Symbols', - 'aliases': [ - 'virgo' - ], - 'tags': [] - }, - { - 'emoji': 'โ™Ž๏ธ', - 'description': 'Libra', - 'category': 'Symbols', - 'aliases': [ - 'libra' - ], - 'tags': [] - }, - { - 'emoji': 'โ™๏ธ', - 'description': 'Scorpius', - 'category': 'Symbols', - 'aliases': [ - 'scorpius' - ], - 'tags': [] - }, - { - 'emoji': 'โ™๏ธ', - 'description': 'Sagittarius', - 'category': 'Symbols', - 'aliases': [ - 'sagittarius' - ], - 'tags': [] - }, - { - 'emoji': 'โ™‘๏ธ', - 'description': 'Capricorn', - 'category': 'Symbols', - 'aliases': [ - 'capricorn' - ], - 'tags': [] - }, - { - 'emoji': 'โ™’๏ธ', - 'description': 'Aquarius', - 'category': 'Symbols', - 'aliases': [ - 'aquarius' - ], - 'tags': [] - }, - { - 'emoji': 'โ™“๏ธ', - 'description': 'Pisces', - 'category': 'Symbols', - 'aliases': [ - 'pisces' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†”', - 'description': 'ID button', - 'category': 'Symbols', - 'aliases': [ - 'id' - ], - 'tags': [] - }, - { - 'emoji': 'โš›๏ธ', - 'description': 'atom symbol', - 'category': 'Symbols', - 'aliases': [ - 'atom_symbol' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‰‘', - 'description': 'Japanese โ€œacceptableโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'accept' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ข๏ธ', - 'description': 'radioactive', - 'category': 'Symbols', - 'aliases': [ - 'radioactive' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜ฃ๏ธ', - 'description': 'biohazard', - 'category': 'Symbols', - 'aliases': [ - 'biohazard' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ด', - 'description': 'mobile phone off', - 'category': 'Symbols', - 'aliases': [ - 'mobile_phone_off' - ], - 'tags': [ - 'mute', - 'off' - ] - }, - { - 'emoji': '๐Ÿ“ณ', - 'description': 'vibration mode', - 'category': 'Symbols', - 'aliases': [ - 'vibration_mode' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆถ', - 'description': 'Japanese โ€œnot free of chargeโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u6709' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆš๏ธ', - 'description': 'Japanese โ€œfree of chargeโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u7121' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆธ', - 'description': 'Japanese โ€œapplicationโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u7533' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆบ', - 'description': 'Japanese โ€œopen for businessโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u55b6' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆท๏ธ', - 'description': 'Japanese โ€œmonthly amountโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u6708' - ], - 'tags': [] - }, - { - 'emoji': 'โœด๏ธ', - 'description': 'eight-pointed star', - 'category': 'Symbols', - 'aliases': [ - 'eight_pointed_black_star' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†š', - 'description': 'VS button', - 'category': 'Symbols', - 'aliases': [ - 'vs' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ฎ', - 'description': 'white flower', - 'category': 'Symbols', - 'aliases': [ - 'white_flower' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‰', - 'description': 'Japanese โ€œbargainโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'ideograph_advantage' - ], - 'tags': [] - }, - { - 'emoji': 'ใŠ™๏ธ', - 'description': 'Japanese โ€œsecretโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'secret' - ], - 'tags': [] - }, - { - 'emoji': 'ใŠ—๏ธ', - 'description': 'Japanese โ€œcongratulationsโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'congratulations' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆด', - 'description': 'Japanese โ€œpassing gradeโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u5408' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆต', - 'description': 'Japanese โ€œno vacancyโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u6e80' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆน', - 'description': 'Japanese โ€œdiscountโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u5272' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆฒ', - 'description': 'Japanese โ€œprohibitedโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u7981' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ…ฐ๏ธ', - 'description': 'A button (blood type)', - 'category': 'Symbols', - 'aliases': [ - 'a' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ…ฑ๏ธ', - 'description': 'B button (blood type)', - 'category': 'Symbols', - 'aliases': [ - 'b' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†Ž', - 'description': 'AB button (blood type)', - 'category': 'Symbols', - 'aliases': [ - 'ab' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†‘', - 'description': 'CL button', - 'category': 'Symbols', - 'aliases': [ - 'cl' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ…พ๏ธ', - 'description': 'O button (blood type)', - 'category': 'Symbols', - 'aliases': [ - 'o2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†˜', - 'description': 'SOS button', - 'category': 'Symbols', - 'aliases': [ - 'sos' - ], - 'tags': [ - 'help', - 'emergency' - ] - }, - { - 'emoji': 'โŒ', - 'description': 'cross mark', - 'category': 'Symbols', - 'aliases': [ - 'x' - ], - 'tags': [] - }, - { - 'emoji': 'โญ•๏ธ', - 'description': 'heavy large circle', - 'category': 'Symbols', - 'aliases': [ - 'o' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›‘', - 'description': 'stop sign', - 'category': 'Symbols', - 'aliases': [ - 'stop_sign' - ], - 'tags': [] - }, - { - 'emoji': 'โ›”๏ธ', - 'description': 'no entry', - 'category': 'Symbols', - 'aliases': [ - 'no_entry' - ], - 'tags': [ - 'limit' - ] - }, - { - 'emoji': '๐Ÿ“›', - 'description': 'name badge', - 'category': 'Symbols', - 'aliases': [ - 'name_badge' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšซ', - 'description': 'prohibited', - 'category': 'Symbols', - 'aliases': [ - 'no_entry_sign' - ], - 'tags': [ - 'block', - 'forbidden' - ] - }, - { - 'emoji': '๐Ÿ’ฏ', - 'description': 'hundred points', - 'category': 'Symbols', - 'aliases': [ - '100' - ], - 'tags': [ - 'score', - 'perfect' - ] - }, - { - 'emoji': '๐Ÿ’ข', - 'description': 'anger symbol', - 'category': 'Symbols', - 'aliases': [ - 'anger' - ], - 'tags': [ - 'angry' - ] - }, - { - 'emoji': 'โ™จ๏ธ', - 'description': 'hot springs', - 'category': 'Symbols', - 'aliases': [ - 'hotsprings' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšท', - 'description': 'no pedestrians', - 'category': 'Symbols', - 'aliases': [ - 'no_pedestrians' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฏ', - 'description': 'no littering', - 'category': 'Symbols', - 'aliases': [ - 'do_not_litter' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšณ', - 'description': 'no bicycles', - 'category': 'Symbols', - 'aliases': [ - 'no_bicycles' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšฑ', - 'description': 'non-potable water', - 'category': 'Symbols', - 'aliases': [ - 'non-potable_water' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ž', - 'description': 'no one under eighteen', - 'category': 'Symbols', - 'aliases': [ - 'underage' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ต', - 'description': 'no mobile phones', - 'category': 'Symbols', - 'aliases': [ - 'no_mobile_phones' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšญ', - 'description': 'no smoking', - 'category': 'Symbols', - 'aliases': [ - 'no_smoking' - ], - 'tags': [] - }, - { - 'emoji': 'โ—๏ธ', - 'description': 'exclamation mark', - 'category': 'Symbols', - 'aliases': [ - 'exclamation', - 'heavy_exclamation_mark' - ], - 'tags': [ - 'bang' - ] - }, - { - 'emoji': 'โ•', - 'description': 'white exclamation mark', - 'category': 'Symbols', - 'aliases': [ - 'grey_exclamation' - ], - 'tags': [] - }, - { - 'emoji': 'โ“', - 'description': 'question mark', - 'category': 'Symbols', - 'aliases': [ - 'question' - ], - 'tags': [ - 'confused' - ] - }, - { - 'emoji': 'โ”', - 'description': 'white question mark', - 'category': 'Symbols', - 'aliases': [ - 'grey_question' - ], - 'tags': [] - }, - { - 'emoji': 'โ€ผ๏ธ', - 'description': 'double exclamation mark', - 'category': 'Symbols', - 'aliases': [ - 'bangbang' - ], - 'tags': [] - }, - { - 'emoji': 'โ‰๏ธ', - 'description': 'exclamation question mark', - 'category': 'Symbols', - 'aliases': [ - 'interrobang' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”…', - 'description': 'dim button', - 'category': 'Symbols', - 'aliases': [ - 'low_brightness' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”†', - 'description': 'bright button', - 'category': 'Symbols', - 'aliases': [ - 'high_brightness' - ], - 'tags': [] - }, - { - 'emoji': 'ใ€ฝ๏ธ', - 'description': 'part alternation mark', - 'category': 'Symbols', - 'aliases': [ - 'part_alternation_mark' - ], - 'tags': [] - }, - { - 'emoji': 'โš ๏ธ', - 'description': 'warning', - 'category': 'Symbols', - 'aliases': [ - 'warning' - ], - 'tags': [ - 'wip' - ] - }, - { - 'emoji': '๐Ÿšธ', - 'description': 'children crossing', - 'category': 'Symbols', - 'aliases': [ - 'children_crossing' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฑ', - 'description': 'trident emblem', - 'category': 'Symbols', - 'aliases': [ - 'trident' - ], - 'tags': [] - }, - { - 'emoji': 'โšœ๏ธ', - 'description': 'fleur-de-lis', - 'category': 'Symbols', - 'aliases': [ - 'fleur_de_lis' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฐ', - 'description': 'Japanese symbol for beginner', - 'category': 'Symbols', - 'aliases': [ - 'beginner' - ], - 'tags': [] - }, - { - 'emoji': 'โ™ป๏ธ', - 'description': 'recycling symbol', - 'category': 'Symbols', - 'aliases': [ - 'recycle' - ], - 'tags': [ - 'environment', - 'green' - ] - }, - { - 'emoji': 'โœ…', - 'description': 'white heavy check mark', - 'category': 'Symbols', - 'aliases': [ - 'white_check_mark' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆฏ๏ธ', - 'description': 'Japanese โ€œreservedโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u6307' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’น', - 'description': 'chart increasing with yen', - 'category': 'Symbols', - 'aliases': [ - 'chart' - ], - 'tags': [] - }, - { - 'emoji': 'โ‡๏ธ', - 'description': 'sparkle', - 'category': 'Symbols', - 'aliases': [ - 'sparkle' - ], - 'tags': [] - }, - { - 'emoji': 'โœณ๏ธ', - 'description': 'eight-spoked asterisk', - 'category': 'Symbols', - 'aliases': [ - 'eight_spoked_asterisk' - ], - 'tags': [] - }, - { - 'emoji': 'โŽ', - 'description': 'cross mark button', - 'category': 'Symbols', - 'aliases': [ - 'negative_squared_cross_mark' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ', - 'description': 'globe with meridians', - 'category': 'Symbols', - 'aliases': [ - 'globe_with_meridians' - ], - 'tags': [ - 'world', - 'global', - 'international' - ] - }, - { - 'emoji': '๐Ÿ’ ', - 'description': 'diamond with a dot', - 'category': 'Symbols', - 'aliases': [ - 'diamond_shape_with_a_dot_inside' - ], - 'tags': [] - }, - { - 'emoji': 'โ“‚๏ธ', - 'description': 'circled M', - 'category': 'Symbols', - 'aliases': [ - 'm' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŒ€', - 'description': 'cyclone', - 'category': 'Symbols', - 'aliases': [ - 'cyclone' - ], - 'tags': [ - 'swirl' - ] - }, - { - 'emoji': '๐Ÿ’ค', - 'description': 'zzz', - 'category': 'Symbols', - 'aliases': [ - 'zzz' - ], - 'tags': [ - 'sleeping' - ] - }, - { - 'emoji': '๐Ÿง', - 'description': 'ATM sign', - 'category': 'Symbols', - 'aliases': [ - 'atm' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšพ', - 'description': 'water closet', - 'category': 'Symbols', - 'aliases': [ - 'wc' - ], - 'tags': [ - 'toilet', - 'restroom' - ] - }, - { - 'emoji': 'โ™ฟ๏ธ', - 'description': 'wheelchair symbol', - 'category': 'Symbols', - 'aliases': [ - 'wheelchair' - ], - 'tags': [ - 'accessibility' - ] - }, - { - 'emoji': '๐Ÿ…ฟ๏ธ', - 'description': 'P button', - 'category': 'Symbols', - 'aliases': [ - 'parking' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆณ', - 'description': 'Japanese โ€œvacancyโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'u7a7a' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿˆ‚๏ธ', - 'description': 'Japanese โ€œservice chargeโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'sa' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›‚', - 'description': 'passport control', - 'category': 'Symbols', - 'aliases': [ - 'passport_control' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›ƒ', - 'description': 'customs', - 'category': 'Symbols', - 'aliases': [ - 'customs' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ›„', - 'description': 'baggage claim', - 'category': 'Symbols', - 'aliases': [ - 'baggage_claim' - ], - 'tags': [ - 'airport' - ] - }, - { - 'emoji': '๐Ÿ›…', - 'description': 'left luggage', - 'category': 'Symbols', - 'aliases': [ - 'left_luggage' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšน', - 'description': 'menโ€™s room', - 'category': 'Symbols', - 'aliases': [ - 'mens' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšบ', - 'description': 'womenโ€™s room', - 'category': 'Symbols', - 'aliases': [ - 'womens' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšผ', - 'description': 'baby symbol', - 'category': 'Symbols', - 'aliases': [ - 'baby_symbol' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿšป', - 'description': 'restroom', - 'category': 'Symbols', - 'aliases': [ - 'restroom' - ], - 'tags': [ - 'toilet' - ] - }, - { - 'emoji': '๐Ÿšฎ', - 'description': 'litter in bin sign', - 'category': 'Symbols', - 'aliases': [ - 'put_litter_in_its_place' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽฆ', - 'description': 'cinema', - 'category': 'Symbols', - 'aliases': [ - 'cinema' - ], - 'tags': [ - 'film', - 'movie' - ] - }, - { - 'emoji': '๐Ÿ“ถ', - 'description': 'antenna bars', - 'category': 'Symbols', - 'aliases': [ - 'signal_strength' - ], - 'tags': [ - 'wifi' - ] - }, - { - 'emoji': '๐Ÿˆ', - 'description': 'Japanese โ€œhereโ€ button', - 'category': 'Symbols', - 'aliases': [ - 'koko' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฃ', - 'description': 'input symbols', - 'category': 'Symbols', - 'aliases': [ - 'symbols' - ], - 'tags': [] - }, - { - 'emoji': 'โ„น๏ธ', - 'description': 'information', - 'category': 'Symbols', - 'aliases': [ - 'information_source' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ค', - 'description': 'input latin letters', - 'category': 'Symbols', - 'aliases': [ - 'abc' - ], - 'tags': [ - 'alphabet' - ] - }, - { - 'emoji': '๐Ÿ”ก', - 'description': 'input latin lowercase', - 'category': 'Symbols', - 'aliases': [ - 'abcd' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ” ', - 'description': 'input latin uppercase', - 'category': 'Symbols', - 'aliases': [ - 'capital_abcd' - ], - 'tags': [ - 'letters' - ] - }, - { - 'emoji': '๐Ÿ†–', - 'description': 'NG button', - 'category': 'Symbols', - 'aliases': [ - 'ng' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†—', - 'description': 'OK button', - 'category': 'Symbols', - 'aliases': [ - 'ok' - ], - 'tags': [ - 'yes' - ] - }, - { - 'emoji': '๐Ÿ†™', - 'description': 'UP! button', - 'category': 'Symbols', - 'aliases': [ - 'up' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†’', - 'description': 'COOL button', - 'category': 'Symbols', - 'aliases': [ - 'cool' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ†•', - 'description': 'NEW button', - 'category': 'Symbols', - 'aliases': [ - 'new' - ], - 'tags': [ - 'fresh' - ] - }, - { - 'emoji': '๐Ÿ†“', - 'description': 'FREE button', - 'category': 'Symbols', - 'aliases': [ - 'free' - ], - 'tags': [] - }, - { - 'emoji': '0๏ธโƒฃ', - 'description': 'keycap: 0', - 'category': 'Symbols', - 'aliases': [ - 'zero' - ], - 'tags': [] - }, - { - 'emoji': '1๏ธโƒฃ', - 'description': 'keycap: 1', - 'category': 'Symbols', - 'aliases': [ - 'one' - ], - 'tags': [] - }, - { - 'emoji': '2๏ธโƒฃ', - 'description': 'keycap: 2', - 'category': 'Symbols', - 'aliases': [ - 'two' - ], - 'tags': [] - }, - { - 'emoji': '3๏ธโƒฃ', - 'description': 'keycap: 3', - 'category': 'Symbols', - 'aliases': [ - 'three' - ], - 'tags': [] - }, - { - 'emoji': '4๏ธโƒฃ', - 'description': 'keycap: 4', - 'category': 'Symbols', - 'aliases': [ - 'four' - ], - 'tags': [] - }, - { - 'emoji': '5๏ธโƒฃ', - 'description': 'keycap: 5', - 'category': 'Symbols', - 'aliases': [ - 'five' - ], - 'tags': [] - }, - { - 'emoji': '6๏ธโƒฃ', - 'description': 'keycap: 6', - 'category': 'Symbols', - 'aliases': [ - 'six' - ], - 'tags': [] - }, - { - 'emoji': '7๏ธโƒฃ', - 'description': 'keycap: 7', - 'category': 'Symbols', - 'aliases': [ - 'seven' - ], - 'tags': [] - }, - { - 'emoji': '8๏ธโƒฃ', - 'description': 'keycap: 8', - 'category': 'Symbols', - 'aliases': [ - 'eight' - ], - 'tags': [] - }, - { - 'emoji': '9๏ธโƒฃ', - 'description': 'keycap: 9', - 'category': 'Symbols', - 'aliases': [ - 'nine' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”Ÿ', - 'description': 'keycap 10', - 'category': 'Symbols', - 'aliases': [ - 'keycap_ten' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ข', - 'description': 'input numbers', - 'category': 'Symbols', - 'aliases': [ - '1234' - ], - 'tags': [ - 'numbers' - ] - }, - { - 'emoji': '#๏ธโƒฃ', - 'description': 'keycap: #', - 'category': 'Symbols', - 'aliases': [ - 'hash' - ], - 'tags': [ - 'number' - ] - }, - { - 'emoji': '*๏ธโƒฃ', - 'description': 'keycap: *', - 'category': 'Symbols', - 'aliases': [ - 'asterisk' - ], - 'tags': [] - }, - { - 'emoji': 'โ–ถ๏ธ', - 'description': 'play button', - 'category': 'Symbols', - 'aliases': [ - 'arrow_forward' - ], - 'tags': [] - }, - { - 'emoji': 'โธ', - 'description': 'pause button', - 'category': 'Symbols', - 'aliases': [ - 'pause_button' - ], - 'tags': [] - }, - { - 'emoji': 'โฏ', - 'description': 'play or pause button', - 'category': 'Symbols', - 'aliases': [ - 'play_or_pause_button' - ], - 'tags': [] - }, - { - 'emoji': 'โน', - 'description': 'stop button', - 'category': 'Symbols', - 'aliases': [ - 'stop_button' - ], - 'tags': [] - }, - { - 'emoji': 'โบ', - 'description': 'record button', - 'category': 'Symbols', - 'aliases': [ - 'record_button' - ], - 'tags': [] - }, - { - 'emoji': 'โญ', - 'description': 'next track button', - 'category': 'Symbols', - 'aliases': [ - 'next_track_button' - ], - 'tags': [] - }, - { - 'emoji': 'โฎ', - 'description': 'last track button', - 'category': 'Symbols', - 'aliases': [ - 'previous_track_button' - ], - 'tags': [] - }, - { - 'emoji': 'โฉ', - 'description': 'fast-forward button', - 'category': 'Symbols', - 'aliases': [ - 'fast_forward' - ], - 'tags': [] - }, - { - 'emoji': 'โช', - 'description': 'fast reverse button', - 'category': 'Symbols', - 'aliases': [ - 'rewind' - ], - 'tags': [] - }, - { - 'emoji': 'โซ', - 'description': 'fast up button', - 'category': 'Symbols', - 'aliases': [ - 'arrow_double_up' - ], - 'tags': [] - }, - { - 'emoji': 'โฌ', - 'description': 'fast down button', - 'category': 'Symbols', - 'aliases': [ - 'arrow_double_down' - ], - 'tags': [] - }, - { - 'emoji': 'โ—€๏ธ', - 'description': 'reverse button', - 'category': 'Symbols', - 'aliases': [ - 'arrow_backward' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ผ', - 'description': 'up button', - 'category': 'Symbols', - 'aliases': [ - 'arrow_up_small' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฝ', - 'description': 'down button', - 'category': 'Symbols', - 'aliases': [ - 'arrow_down_small' - ], - 'tags': [] - }, - { - 'emoji': 'โžก๏ธ', - 'description': 'right arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_right' - ], - 'tags': [] - }, - { - 'emoji': 'โฌ…๏ธ', - 'description': 'left arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_left' - ], - 'tags': [] - }, - { - 'emoji': 'โฌ†๏ธ', - 'description': 'up arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_up' - ], - 'tags': [] - }, - { - 'emoji': 'โฌ‡๏ธ', - 'description': 'down arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_down' - ], - 'tags': [] - }, - { - 'emoji': 'โ†—๏ธ', - 'description': 'up-right arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_upper_right' - ], - 'tags': [] - }, - { - 'emoji': 'โ†˜๏ธ', - 'description': 'down-right arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_lower_right' - ], - 'tags': [] - }, - { - 'emoji': 'โ†™๏ธ', - 'description': 'down-left arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_lower_left' - ], - 'tags': [] - }, - { - 'emoji': 'โ†–๏ธ', - 'description': 'up-left arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_upper_left' - ], - 'tags': [] - }, - { - 'emoji': 'โ†•๏ธ', - 'description': 'up-down arrow', - 'category': 'Symbols', - 'aliases': [ - 'arrow_up_down' - ], - 'tags': [] - }, - { - 'emoji': 'โ†”๏ธ', - 'description': 'left-right arrow', - 'category': 'Symbols', - 'aliases': [ - 'left_right_arrow' - ], - 'tags': [] - }, - { - 'emoji': 'โ†ช๏ธ', - 'description': 'left arrow curving right', - 'category': 'Symbols', - 'aliases': [ - 'arrow_right_hook' - ], - 'tags': [] - }, - { - 'emoji': 'โ†ฉ๏ธ', - 'description': 'right arrow curving left', - 'category': 'Symbols', - 'aliases': [ - 'leftwards_arrow_with_hook' - ], - 'tags': [ - 'return' - ] - }, - { - 'emoji': 'โคด๏ธ', - 'description': 'right arrow curving up', - 'category': 'Symbols', - 'aliases': [ - 'arrow_heading_up' - ], - 'tags': [] - }, - { - 'emoji': 'โคต๏ธ', - 'description': 'right arrow curving down', - 'category': 'Symbols', - 'aliases': [ - 'arrow_heading_down' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”€', - 'description': 'shuffle tracks button', - 'category': 'Symbols', - 'aliases': [ - 'twisted_rightwards_arrows' - ], - 'tags': [ - 'shuffle' - ] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'repeat button', - 'category': 'Symbols', - 'aliases': [ - 'repeat' - ], - 'tags': [ - 'loop' - ] - }, - { - 'emoji': '๐Ÿ”‚', - 'description': 'repeat single button', - 'category': 'Symbols', - 'aliases': [ - 'repeat_one' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”„', - 'description': 'anticlockwise arrows button', - 'category': 'Symbols', - 'aliases': [ - 'arrows_counterclockwise' - ], - 'tags': [ - 'sync' - ] - }, - { - 'emoji': '๐Ÿ”ƒ', - 'description': 'clockwise vertical arrows', - 'category': 'Symbols', - 'aliases': [ - 'arrows_clockwise' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽต', - 'description': 'musical note', - 'category': 'Symbols', - 'aliases': [ - 'musical_note' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽถ', - 'description': 'musical notes', - 'category': 'Symbols', - 'aliases': [ - 'notes' - ], - 'tags': [ - 'music' - ] - }, - { - 'emoji': 'โž•', - 'description': 'heavy plus sign', - 'category': 'Symbols', - 'aliases': [ - 'heavy_plus_sign' - ], - 'tags': [] - }, - { - 'emoji': 'โž–', - 'description': 'heavy minus sign', - 'category': 'Symbols', - 'aliases': [ - 'heavy_minus_sign' - ], - 'tags': [] - }, - { - 'emoji': 'โž—', - 'description': 'heavy division sign', - 'category': 'Symbols', - 'aliases': [ - 'heavy_division_sign' - ], - 'tags': [] - }, - { - 'emoji': 'โœ–๏ธ', - 'description': 'heavy multiplication x', - 'category': 'Symbols', - 'aliases': [ - 'heavy_multiplication_x' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ฒ', - 'description': 'heavy dollar sign', - 'category': 'Symbols', - 'aliases': [ - 'heavy_dollar_sign' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ฑ', - 'description': 'currency exchange', - 'category': 'Symbols', - 'aliases': [ - 'currency_exchange' - ], - 'tags': [] - }, - { - 'emoji': 'โ„ข๏ธ', - 'description': 'trade mark', - 'category': 'Symbols', - 'aliases': [ - 'tm' - ], - 'tags': [ - 'trademark' - ] - }, - { - 'emoji': 'ยฉ๏ธ', - 'description': 'copyright', - 'category': 'Symbols', - 'aliases': [ - 'copyright' - ], - 'tags': [] - }, - { - 'emoji': 'ยฎ๏ธ', - 'description': 'registered', - 'category': 'Symbols', - 'aliases': [ - 'registered' - ], - 'tags': [] - }, - { - 'emoji': 'ใ€ฐ๏ธ', - 'description': 'wavy dash', - 'category': 'Symbols', - 'aliases': [ - 'wavy_dash' - ], - 'tags': [] - }, - { - 'emoji': 'โžฐ', - 'description': 'curly loop', - 'category': 'Symbols', - 'aliases': [ - 'curly_loop' - ], - 'tags': [] - }, - { - 'emoji': 'โžฟ', - 'description': 'double curly loop', - 'category': 'Symbols', - 'aliases': [ - 'loop' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”š', - 'description': 'END arrow', - 'category': 'Symbols', - 'aliases': [ - 'end' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”™', - 'description': 'BACK arrow', - 'category': 'Symbols', - 'aliases': [ - 'back' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”›', - 'description': 'ON! arrow', - 'category': 'Symbols', - 'aliases': [ - 'on' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”', - 'description': 'TOP arrow', - 'category': 'Symbols', - 'aliases': [ - 'top' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”œ', - 'description': 'SOON arrow', - 'category': 'Symbols', - 'aliases': [ - 'soon' - ], - 'tags': [] - }, - { - 'emoji': 'โœ”๏ธ', - 'description': 'heavy check mark', - 'category': 'Symbols', - 'aliases': [ - 'heavy_check_mark' - ], - 'tags': [] - }, - { - 'emoji': 'โ˜‘๏ธ', - 'description': 'ballot box with check', - 'category': 'Symbols', - 'aliases': [ - 'ballot_box_with_check' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”˜', - 'description': 'radio button', - 'category': 'Symbols', - 'aliases': [ - 'radio_button' - ], - 'tags': [] - }, - { - 'emoji': 'โšช๏ธ', - 'description': 'white circle', - 'category': 'Symbols', - 'aliases': [ - 'white_circle' - ], - 'tags': [] - }, - { - 'emoji': 'โšซ๏ธ', - 'description': 'black circle', - 'category': 'Symbols', - 'aliases': [ - 'black_circle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ด', - 'description': 'red circle', - 'category': 'Symbols', - 'aliases': [ - 'red_circle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ต', - 'description': 'blue circle', - 'category': 'Symbols', - 'aliases': [ - 'large_blue_circle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”บ', - 'description': 'red triangle pointed up', - 'category': 'Symbols', - 'aliases': [ - 'small_red_triangle' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ป', - 'description': 'red triangle pointed down', - 'category': 'Symbols', - 'aliases': [ - 'small_red_triangle_down' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ธ', - 'description': 'small orange diamond', - 'category': 'Symbols', - 'aliases': [ - 'small_orange_diamond' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”น', - 'description': 'small blue diamond', - 'category': 'Symbols', - 'aliases': [ - 'small_blue_diamond' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ถ', - 'description': 'large orange diamond', - 'category': 'Symbols', - 'aliases': [ - 'large_orange_diamond' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ท', - 'description': 'large blue diamond', - 'category': 'Symbols', - 'aliases': [ - 'large_blue_diamond' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ณ', - 'description': 'white square button', - 'category': 'Symbols', - 'aliases': [ - 'white_square_button' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ฒ', - 'description': 'black square button', - 'category': 'Symbols', - 'aliases': [ - 'black_square_button' - ], - 'tags': [] - }, - { - 'emoji': 'โ–ช๏ธ', - 'description': 'black small square', - 'category': 'Symbols', - 'aliases': [ - 'black_small_square' - ], - 'tags': [] - }, - { - 'emoji': 'โ–ซ๏ธ', - 'description': 'white small square', - 'category': 'Symbols', - 'aliases': [ - 'white_small_square' - ], - 'tags': [] - }, - { - 'emoji': 'โ—พ๏ธ', - 'description': 'black medium-small square', - 'category': 'Symbols', - 'aliases': [ - 'black_medium_small_square' - ], - 'tags': [] - }, - { - 'emoji': 'โ—ฝ๏ธ', - 'description': 'white medium-small square', - 'category': 'Symbols', - 'aliases': [ - 'white_medium_small_square' - ], - 'tags': [] - }, - { - 'emoji': 'โ—ผ๏ธ', - 'description': 'black medium square', - 'category': 'Symbols', - 'aliases': [ - 'black_medium_square' - ], - 'tags': [] - }, - { - 'emoji': 'โ—ป๏ธ', - 'description': 'white medium square', - 'category': 'Symbols', - 'aliases': [ - 'white_medium_square' - ], - 'tags': [] - }, - { - 'emoji': 'โฌ›๏ธ', - 'description': 'black large square', - 'category': 'Symbols', - 'aliases': [ - 'black_large_square' - ], - 'tags': [] - }, - { - 'emoji': 'โฌœ๏ธ', - 'description': 'white large square', - 'category': 'Symbols', - 'aliases': [ - 'white_large_square' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”ˆ', - 'description': 'speaker low volume', - 'category': 'Symbols', - 'aliases': [ - 'speaker' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ”‡', - 'description': 'muted speaker', - 'category': 'Symbols', - 'aliases': [ - 'mute' - ], - 'tags': [ - 'sound', - 'volume' - ] - }, - { - 'emoji': '๐Ÿ”‰', - 'description': 'speaker medium volume', - 'category': 'Symbols', - 'aliases': [ - 'sound' - ], - 'tags': [ - 'volume' - ] - }, - { - 'emoji': '๐Ÿ”Š', - 'description': 'speaker high volume', - 'category': 'Symbols', - 'aliases': [ - 'loud_sound' - ], - 'tags': [ - 'volume' - ] - }, - { - 'emoji': '๐Ÿ””', - 'description': 'bell', - 'category': 'Symbols', - 'aliases': [ - 'bell' - ], - 'tags': [ - 'sound', - 'notification' - ] - }, - { - 'emoji': '๐Ÿ”•', - 'description': 'bell with slash', - 'category': 'Symbols', - 'aliases': [ - 'no_bell' - ], - 'tags': [ - 'volume', - 'off' - ] - }, - { - 'emoji': '๐Ÿ“ฃ', - 'description': 'megaphone', - 'category': 'Symbols', - 'aliases': [ - 'mega' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ“ข', - 'description': 'loudspeaker', - 'category': 'Symbols', - 'aliases': [ - 'loudspeaker' - ], - 'tags': [ - 'announcement' - ] - }, - { - 'emoji': '๐Ÿ‘โ€๐Ÿ—จ', - 'description': 'eye in speech bubble', - 'category': 'Symbols', - 'aliases': [ - 'eye_speech_bubble' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ’ฌ', - 'description': 'speech balloon', - 'category': 'Symbols', - 'aliases': [ - 'speech_balloon' - ], - 'tags': [ - 'comment' - ] - }, - { - 'emoji': '๐Ÿ’ญ', - 'description': 'thought balloon', - 'category': 'Symbols', - 'aliases': [ - 'thought_balloon' - ], - 'tags': [ - 'thinking' - ] - }, - { - 'emoji': '๐Ÿ—ฏ', - 'description': 'right anger bubble', - 'category': 'Symbols', - 'aliases': [ - 'right_anger_bubble' - ], - 'tags': [] - }, - { - 'emoji': 'โ™ ๏ธ', - 'description': 'spade suit', - 'category': 'Symbols', - 'aliases': [ - 'spades' - ], - 'tags': [] - }, - { - 'emoji': 'โ™ฃ๏ธ', - 'description': 'club suit', - 'category': 'Symbols', - 'aliases': [ - 'clubs' - ], - 'tags': [] - }, - { - 'emoji': 'โ™ฅ๏ธ', - 'description': 'heart suit', - 'category': 'Symbols', - 'aliases': [ - 'hearts' - ], - 'tags': [] - }, - { - 'emoji': 'โ™ฆ๏ธ', - 'description': 'diamond suit', - 'category': 'Symbols', - 'aliases': [ - 'diamonds' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿƒ', - 'description': 'joker', - 'category': 'Symbols', - 'aliases': [ - 'black_joker' - ], - 'tags': [] - }, - { - 'emoji': '๐ŸŽด', - 'description': 'flower playing cards', - 'category': 'Symbols', - 'aliases': [ - 'flower_playing_cards' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ€„๏ธ', - 'description': 'mahjong red dragon', - 'category': 'Symbols', - 'aliases': [ - 'mahjong' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•', - 'description': 'one oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock1' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•‘', - 'description': 'two oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock2' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•’', - 'description': 'three oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock3' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•“', - 'description': 'four oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock4' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•”', - 'description': 'five oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock5' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ••', - 'description': 'six oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock6' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•–', - 'description': 'seven oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock7' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•—', - 'description': 'eight oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock8' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•˜', - 'description': 'nine oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock9' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•™', - 'description': 'ten oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock10' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•š', - 'description': 'eleven oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock11' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•›', - 'description': 'twelve oโ€™clock', - 'category': 'Symbols', - 'aliases': [ - 'clock12' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•œ', - 'description': 'one-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock130' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•', - 'description': 'two-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock230' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ž', - 'description': 'three-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock330' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•Ÿ', - 'description': 'four-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock430' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ• ', - 'description': 'five-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock530' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ก', - 'description': 'six-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock630' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ข', - 'description': 'seven-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock730' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ฃ', - 'description': 'eight-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock830' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ค', - 'description': 'nine-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock930' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ฅ', - 'description': 'ten-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock1030' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ฆ', - 'description': 'eleven-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock1130' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ•ง', - 'description': 'twelve-thirty', - 'category': 'Symbols', - 'aliases': [ - 'clock1230' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿณ๏ธ', - 'description': 'white flag', - 'category': 'Flags', - 'aliases': [ - 'white_flag' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿด', - 'description': 'black flag', - 'category': 'Flags', - 'aliases': [ - 'black_flag' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ', - 'description': 'chequered flag', - 'category': 'Flags', - 'aliases': [ - 'checkered_flag' - ], - 'tags': [ - 'milestone', - 'finish' - ] - }, - { - 'emoji': '๐Ÿšฉ', - 'description': 'triangular flag', - 'category': 'Flags', - 'aliases': [ - 'triangular_flag_on_post' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿณ๏ธโ€๐ŸŒˆ', - 'description': 'rainbow flag', - 'category': 'Flags', - 'aliases': [ - 'rainbow_flag' - ], - 'tags': [ - 'pride' - ] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ซ', - 'description': 'Afghanistan', - 'category': 'Flags', - 'aliases': [ - 'afghanistan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ฝ', - 'description': 'ร…land Islands', - 'category': 'Flags', - 'aliases': [ - 'aland_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ฑ', - 'description': 'Albania', - 'category': 'Flags', - 'aliases': [ - 'albania' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฉ๐Ÿ‡ฟ', - 'description': 'Algeria', - 'category': 'Flags', - 'aliases': [ - 'algeria' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ธ', - 'description': 'American Samoa', - 'category': 'Flags', - 'aliases': [ - 'american_samoa' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ฉ', - 'description': 'Andorra', - 'category': 'Flags', - 'aliases': [ - 'andorra' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ด', - 'description': 'Angola', - 'category': 'Flags', - 'aliases': [ - 'angola' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ฎ', - 'description': 'Anguilla', - 'category': 'Flags', - 'aliases': [ - 'anguilla' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ถ', - 'description': 'Antarctica', - 'category': 'Flags', - 'aliases': [ - 'antarctica' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ฌ', - 'description': 'Antigua & Barbuda', - 'category': 'Flags', - 'aliases': [ - 'antigua_barbuda' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ท', - 'description': 'Argentina', - 'category': 'Flags', - 'aliases': [ - 'argentina' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ฒ', - 'description': 'Armenia', - 'category': 'Flags', - 'aliases': [ - 'armenia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ผ', - 'description': 'Aruba', - 'category': 'Flags', - 'aliases': [ - 'aruba' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡บ', - 'description': 'Australia', - 'category': 'Flags', - 'aliases': [ - 'australia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡น', - 'description': 'Austria', - 'category': 'Flags', - 'aliases': [ - 'austria' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ฟ', - 'description': 'Azerbaijan', - 'category': 'Flags', - 'aliases': [ - 'azerbaijan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ธ', - 'description': 'Bahamas', - 'category': 'Flags', - 'aliases': [ - 'bahamas' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ญ', - 'description': 'Bahrain', - 'category': 'Flags', - 'aliases': [ - 'bahrain' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฉ', - 'description': 'Bangladesh', - 'category': 'Flags', - 'aliases': [ - 'bangladesh' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ง', - 'description': 'Barbados', - 'category': 'Flags', - 'aliases': [ - 'barbados' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡พ', - 'description': 'Belarus', - 'category': 'Flags', - 'aliases': [ - 'belarus' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ช', - 'description': 'Belgium', - 'category': 'Flags', - 'aliases': [ - 'belgium' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฟ', - 'description': 'Belize', - 'category': 'Flags', - 'aliases': [ - 'belize' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฏ', - 'description': 'Benin', - 'category': 'Flags', - 'aliases': [ - 'benin' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฒ', - 'description': 'Bermuda', - 'category': 'Flags', - 'aliases': [ - 'bermuda' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡น', - 'description': 'Bhutan', - 'category': 'Flags', - 'aliases': [ - 'bhutan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ด', - 'description': 'Bolivia', - 'category': 'Flags', - 'aliases': [ - 'bolivia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ถ', - 'description': 'Caribbean Netherlands', - 'category': 'Flags', - 'aliases': [ - 'caribbean_netherlands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฆ', - 'description': 'Bosnia & Herzegovina', - 'category': 'Flags', - 'aliases': [ - 'bosnia_herzegovina' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ผ', - 'description': 'Botswana', - 'category': 'Flags', - 'aliases': [ - 'botswana' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ท', - 'description': 'Brazil', - 'category': 'Flags', - 'aliases': [ - 'brazil' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ด', - 'description': 'British Indian Ocean Territory', - 'category': 'Flags', - 'aliases': [ - 'british_indian_ocean_territory' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ป๐Ÿ‡ฌ', - 'description': 'British Virgin Islands', - 'category': 'Flags', - 'aliases': [ - 'british_virgin_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ณ', - 'description': 'Brunei', - 'category': 'Flags', - 'aliases': [ - 'brunei' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฌ', - 'description': 'Bulgaria', - 'category': 'Flags', - 'aliases': [ - 'bulgaria' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ซ', - 'description': 'Burkina Faso', - 'category': 'Flags', - 'aliases': [ - 'burkina_faso' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฎ', - 'description': 'Burundi', - 'category': 'Flags', - 'aliases': [ - 'burundi' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ป', - 'description': 'Cape Verde', - 'category': 'Flags', - 'aliases': [ - 'cape_verde' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ญ', - 'description': 'Cambodia', - 'category': 'Flags', - 'aliases': [ - 'cambodia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฒ', - 'description': 'Cameroon', - 'category': 'Flags', - 'aliases': [ - 'cameroon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฆ', - 'description': 'Canada', - 'category': 'Flags', - 'aliases': [ - 'canada' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡จ', - 'description': 'Canary Islands', - 'category': 'Flags', - 'aliases': [ - 'canary_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡พ', - 'description': 'Cayman Islands', - 'category': 'Flags', - 'aliases': [ - 'cayman_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ซ', - 'description': 'Central African Republic', - 'category': 'Flags', - 'aliases': [ - 'central_african_republic' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ฉ', - 'description': 'Chad', - 'category': 'Flags', - 'aliases': [ - 'chad' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฑ', - 'description': 'Chile', - 'category': 'Flags', - 'aliases': [ - 'chile' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ณ', - 'description': 'China', - 'category': 'Flags', - 'aliases': [ - 'cn' - ], - 'tags': [ - 'china' - ] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฝ', - 'description': 'Christmas Island', - 'category': 'Flags', - 'aliases': [ - 'christmas_island' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡จ', - 'description': 'Cocos (Keeling) Islands', - 'category': 'Flags', - 'aliases': [ - 'cocos_islands' - ], - 'tags': [ - 'keeling' - ] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ด', - 'description': 'Colombia', - 'category': 'Flags', - 'aliases': [ - 'colombia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ฒ', - 'description': 'Comoros', - 'category': 'Flags', - 'aliases': [ - 'comoros' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฌ', - 'description': 'Congo - Brazzaville', - 'category': 'Flags', - 'aliases': [ - 'congo_brazzaville' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฉ', - 'description': 'Congo - Kinshasa', - 'category': 'Flags', - 'aliases': [ - 'congo_kinshasa' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฐ', - 'description': 'Cook Islands', - 'category': 'Flags', - 'aliases': [ - 'cook_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ท', - 'description': 'Costa Rica', - 'category': 'Flags', - 'aliases': [ - 'costa_rica' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฎ', - 'description': 'Cรดte dโ€™Ivoire', - 'category': 'Flags', - 'aliases': [ - 'cote_divoire' - ], - 'tags': [ - 'ivory' - ] - }, - { - 'emoji': '๐Ÿ‡ญ๐Ÿ‡ท', - 'description': 'Croatia', - 'category': 'Flags', - 'aliases': [ - 'croatia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡บ', - 'description': 'Cuba', - 'category': 'Flags', - 'aliases': [ - 'cuba' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ผ', - 'description': 'Curaรงao', - 'category': 'Flags', - 'aliases': [ - 'curacao' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡พ', - 'description': 'Cyprus', - 'category': 'Flags', - 'aliases': [ - 'cyprus' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ฟ', - 'description': 'Czech Republic', - 'category': 'Flags', - 'aliases': [ - 'czech_republic' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฉ๐Ÿ‡ฐ', - 'description': 'Denmark', - 'category': 'Flags', - 'aliases': [ - 'denmark' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฉ๐Ÿ‡ฏ', - 'description': 'Djibouti', - 'category': 'Flags', - 'aliases': [ - 'djibouti' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฉ๐Ÿ‡ฒ', - 'description': 'Dominica', - 'category': 'Flags', - 'aliases': [ - 'dominica' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฉ๐Ÿ‡ด', - 'description': 'Dominican Republic', - 'category': 'Flags', - 'aliases': [ - 'dominican_republic' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡จ', - 'description': 'Ecuador', - 'category': 'Flags', - 'aliases': [ - 'ecuador' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡ฌ', - 'description': 'Egypt', - 'category': 'Flags', - 'aliases': [ - 'egypt' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ป', - 'description': 'El Salvador', - 'category': 'Flags', - 'aliases': [ - 'el_salvador' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ถ', - 'description': 'Equatorial Guinea', - 'category': 'Flags', - 'aliases': [ - 'equatorial_guinea' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡ท', - 'description': 'Eritrea', - 'category': 'Flags', - 'aliases': [ - 'eritrea' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡ช', - 'description': 'Estonia', - 'category': 'Flags', - 'aliases': [ - 'estonia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡น', - 'description': 'Ethiopia', - 'category': 'Flags', - 'aliases': [ - 'ethiopia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡บ', - 'description': 'European Union', - 'category': 'Flags', - 'aliases': [ - 'eu', - 'european_union' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ซ๐Ÿ‡ฐ', - 'description': 'Falkland Islands', - 'category': 'Flags', - 'aliases': [ - 'falkland_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ซ๐Ÿ‡ด', - 'description': 'Faroe Islands', - 'category': 'Flags', - 'aliases': [ - 'faroe_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ซ๐Ÿ‡ฏ', - 'description': 'Fiji', - 'category': 'Flags', - 'aliases': [ - 'fiji' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ซ๐Ÿ‡ฎ', - 'description': 'Finland', - 'category': 'Flags', - 'aliases': [ - 'finland' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ซ๐Ÿ‡ท', - 'description': 'France', - 'category': 'Flags', - 'aliases': [ - 'fr' - ], - 'tags': [ - 'france', - 'french' - ] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ซ', - 'description': 'French Guiana', - 'category': 'Flags', - 'aliases': [ - 'french_guiana' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ซ', - 'description': 'French Polynesia', - 'category': 'Flags', - 'aliases': [ - 'french_polynesia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ซ', - 'description': 'French Southern Territories', - 'category': 'Flags', - 'aliases': [ - 'french_southern_territories' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ฆ', - 'description': 'Gabon', - 'category': 'Flags', - 'aliases': [ - 'gabon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ฒ', - 'description': 'Gambia', - 'category': 'Flags', - 'aliases': [ - 'gambia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ช', - 'description': 'Georgia', - 'category': 'Flags', - 'aliases': [ - 'georgia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฉ๐Ÿ‡ช', - 'description': 'Germany', - 'category': 'Flags', - 'aliases': [ - 'de' - ], - 'tags': [ - 'flag', - 'germany' - ] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ญ', - 'description': 'Ghana', - 'category': 'Flags', - 'aliases': [ - 'ghana' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ฎ', - 'description': 'Gibraltar', - 'category': 'Flags', - 'aliases': [ - 'gibraltar' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ท', - 'description': 'Greece', - 'category': 'Flags', - 'aliases': [ - 'greece' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ฑ', - 'description': 'Greenland', - 'category': 'Flags', - 'aliases': [ - 'greenland' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ฉ', - 'description': 'Grenada', - 'category': 'Flags', - 'aliases': [ - 'grenada' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ต', - 'description': 'Guadeloupe', - 'category': 'Flags', - 'aliases': [ - 'guadeloupe' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡บ', - 'description': 'Guam', - 'category': 'Flags', - 'aliases': [ - 'guam' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡น', - 'description': 'Guatemala', - 'category': 'Flags', - 'aliases': [ - 'guatemala' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ฌ', - 'description': 'Guernsey', - 'category': 'Flags', - 'aliases': [ - 'guernsey' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ณ', - 'description': 'Guinea', - 'category': 'Flags', - 'aliases': [ - 'guinea' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ผ', - 'description': 'Guinea-Bissau', - 'category': 'Flags', - 'aliases': [ - 'guinea_bissau' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡พ', - 'description': 'Guyana', - 'category': 'Flags', - 'aliases': [ - 'guyana' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ญ๐Ÿ‡น', - 'description': 'Haiti', - 'category': 'Flags', - 'aliases': [ - 'haiti' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ญ๐Ÿ‡ณ', - 'description': 'Honduras', - 'category': 'Flags', - 'aliases': [ - 'honduras' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ญ๐Ÿ‡ฐ', - 'description': 'Hong Kong SAR China', - 'category': 'Flags', - 'aliases': [ - 'hong_kong' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ญ๐Ÿ‡บ', - 'description': 'Hungary', - 'category': 'Flags', - 'aliases': [ - 'hungary' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ธ', - 'description': 'Iceland', - 'category': 'Flags', - 'aliases': [ - 'iceland' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ณ', - 'description': 'India', - 'category': 'Flags', - 'aliases': [ - 'india' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ฉ', - 'description': 'Indonesia', - 'category': 'Flags', - 'aliases': [ - 'indonesia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ท', - 'description': 'Iran', - 'category': 'Flags', - 'aliases': [ - 'iran' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ถ', - 'description': 'Iraq', - 'category': 'Flags', - 'aliases': [ - 'iraq' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ช', - 'description': 'Ireland', - 'category': 'Flags', - 'aliases': [ - 'ireland' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ฒ', - 'description': 'Isle of Man', - 'category': 'Flags', - 'aliases': [ - 'isle_of_man' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡ฑ', - 'description': 'Israel', - 'category': 'Flags', - 'aliases': [ - 'israel' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฎ๐Ÿ‡น', - 'description': 'Italy', - 'category': 'Flags', - 'aliases': [ - 'it' - ], - 'tags': [ - 'italy' - ] - }, - { - 'emoji': '๐Ÿ‡ฏ๐Ÿ‡ฒ', - 'description': 'Jamaica', - 'category': 'Flags', - 'aliases': [ - 'jamaica' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฏ๐Ÿ‡ต', - 'description': 'Japan', - 'category': 'Flags', - 'aliases': [ - 'jp' - ], - 'tags': [ - 'japan' - ] - }, - { - 'emoji': '๐ŸŽŒ', - 'description': 'crossed flags', - 'category': 'Flags', - 'aliases': [ - 'crossed_flags' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฏ๐Ÿ‡ช', - 'description': 'Jersey', - 'category': 'Flags', - 'aliases': [ - 'jersey' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฏ๐Ÿ‡ด', - 'description': 'Jordan', - 'category': 'Flags', - 'aliases': [ - 'jordan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ฟ', - 'description': 'Kazakhstan', - 'category': 'Flags', - 'aliases': [ - 'kazakhstan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ช', - 'description': 'Kenya', - 'category': 'Flags', - 'aliases': [ - 'kenya' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ฎ', - 'description': 'Kiribati', - 'category': 'Flags', - 'aliases': [ - 'kiribati' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฝ๐Ÿ‡ฐ', - 'description': 'Kosovo', - 'category': 'Flags', - 'aliases': [ - 'kosovo' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ผ', - 'description': 'Kuwait', - 'category': 'Flags', - 'aliases': [ - 'kuwait' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ฌ', - 'description': 'Kyrgyzstan', - 'category': 'Flags', - 'aliases': [ - 'kyrgyzstan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡ฆ', - 'description': 'Laos', - 'category': 'Flags', - 'aliases': [ - 'laos' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡ป', - 'description': 'Latvia', - 'category': 'Flags', - 'aliases': [ - 'latvia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡ง', - 'description': 'Lebanon', - 'category': 'Flags', - 'aliases': [ - 'lebanon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡ธ', - 'description': 'Lesotho', - 'category': 'Flags', - 'aliases': [ - 'lesotho' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡ท', - 'description': 'Liberia', - 'category': 'Flags', - 'aliases': [ - 'liberia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡พ', - 'description': 'Libya', - 'category': 'Flags', - 'aliases': [ - 'libya' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡ฎ', - 'description': 'Liechtenstein', - 'category': 'Flags', - 'aliases': [ - 'liechtenstein' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡น', - 'description': 'Lithuania', - 'category': 'Flags', - 'aliases': [ - 'lithuania' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡บ', - 'description': 'Luxembourg', - 'category': 'Flags', - 'aliases': [ - 'luxembourg' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ด', - 'description': 'Macau SAR China', - 'category': 'Flags', - 'aliases': [ - 'macau' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฐ', - 'description': 'Macedonia', - 'category': 'Flags', - 'aliases': [ - 'macedonia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฌ', - 'description': 'Madagascar', - 'category': 'Flags', - 'aliases': [ - 'madagascar' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ผ', - 'description': 'Malawi', - 'category': 'Flags', - 'aliases': [ - 'malawi' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡พ', - 'description': 'Malaysia', - 'category': 'Flags', - 'aliases': [ - 'malaysia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ป', - 'description': 'Maldives', - 'category': 'Flags', - 'aliases': [ - 'maldives' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฑ', - 'description': 'Mali', - 'category': 'Flags', - 'aliases': [ - 'mali' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡น', - 'description': 'Malta', - 'category': 'Flags', - 'aliases': [ - 'malta' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ญ', - 'description': 'Marshall Islands', - 'category': 'Flags', - 'aliases': [ - 'marshall_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ถ', - 'description': 'Martinique', - 'category': 'Flags', - 'aliases': [ - 'martinique' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ท', - 'description': 'Mauritania', - 'category': 'Flags', - 'aliases': [ - 'mauritania' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡บ', - 'description': 'Mauritius', - 'category': 'Flags', - 'aliases': [ - 'mauritius' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡พ๐Ÿ‡น', - 'description': 'Mayotte', - 'category': 'Flags', - 'aliases': [ - 'mayotte' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฝ', - 'description': 'Mexico', - 'category': 'Flags', - 'aliases': [ - 'mexico' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ซ๐Ÿ‡ฒ', - 'description': 'Micronesia', - 'category': 'Flags', - 'aliases': [ - 'micronesia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฉ', - 'description': 'Moldova', - 'category': 'Flags', - 'aliases': [ - 'moldova' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡จ', - 'description': 'Monaco', - 'category': 'Flags', - 'aliases': [ - 'monaco' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ณ', - 'description': 'Mongolia', - 'category': 'Flags', - 'aliases': [ - 'mongolia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ช', - 'description': 'Montenegro', - 'category': 'Flags', - 'aliases': [ - 'montenegro' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ธ', - 'description': 'Montserrat', - 'category': 'Flags', - 'aliases': [ - 'montserrat' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฆ', - 'description': 'Morocco', - 'category': 'Flags', - 'aliases': [ - 'morocco' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฟ', - 'description': 'Mozambique', - 'category': 'Flags', - 'aliases': [ - 'mozambique' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ฒ', - 'description': 'Myanmar (Burma)', - 'category': 'Flags', - 'aliases': [ - 'myanmar' - ], - 'tags': [ - 'burma' - ] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ฆ', - 'description': 'Namibia', - 'category': 'Flags', - 'aliases': [ - 'namibia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ท', - 'description': 'Nauru', - 'category': 'Flags', - 'aliases': [ - 'nauru' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ต', - 'description': 'Nepal', - 'category': 'Flags', - 'aliases': [ - 'nepal' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ฑ', - 'description': 'Netherlands', - 'category': 'Flags', - 'aliases': [ - 'netherlands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡จ', - 'description': 'New Caledonia', - 'category': 'Flags', - 'aliases': [ - 'new_caledonia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ฟ', - 'description': 'New Zealand', - 'category': 'Flags', - 'aliases': [ - 'new_zealand' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ฎ', - 'description': 'Nicaragua', - 'category': 'Flags', - 'aliases': [ - 'nicaragua' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ช', - 'description': 'Niger', - 'category': 'Flags', - 'aliases': [ - 'niger' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ฌ', - 'description': 'Nigeria', - 'category': 'Flags', - 'aliases': [ - 'nigeria' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡บ', - 'description': 'Niue', - 'category': 'Flags', - 'aliases': [ - 'niue' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ซ', - 'description': 'Norfolk Island', - 'category': 'Flags', - 'aliases': [ - 'norfolk_island' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฒ๐Ÿ‡ต', - 'description': 'Northern Mariana Islands', - 'category': 'Flags', - 'aliases': [ - 'northern_mariana_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ต', - 'description': 'North Korea', - 'category': 'Flags', - 'aliases': [ - 'north_korea' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ณ๐Ÿ‡ด', - 'description': 'Norway', - 'category': 'Flags', - 'aliases': [ - 'norway' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ด๐Ÿ‡ฒ', - 'description': 'Oman', - 'category': 'Flags', - 'aliases': [ - 'oman' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ฐ', - 'description': 'Pakistan', - 'category': 'Flags', - 'aliases': [ - 'pakistan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ผ', - 'description': 'Palau', - 'category': 'Flags', - 'aliases': [ - 'palau' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ธ', - 'description': 'Palestinian Territories', - 'category': 'Flags', - 'aliases': [ - 'palestinian_territories' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ฆ', - 'description': 'Panama', - 'category': 'Flags', - 'aliases': [ - 'panama' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ฌ', - 'description': 'Papua New Guinea', - 'category': 'Flags', - 'aliases': [ - 'papua_new_guinea' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡พ', - 'description': 'Paraguay', - 'category': 'Flags', - 'aliases': [ - 'paraguay' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ช', - 'description': 'Peru', - 'category': 'Flags', - 'aliases': [ - 'peru' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ญ', - 'description': 'Philippines', - 'category': 'Flags', - 'aliases': [ - 'philippines' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ณ', - 'description': 'Pitcairn Islands', - 'category': 'Flags', - 'aliases': [ - 'pitcairn_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ฑ', - 'description': 'Poland', - 'category': 'Flags', - 'aliases': [ - 'poland' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡น', - 'description': 'Portugal', - 'category': 'Flags', - 'aliases': [ - 'portugal' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ท', - 'description': 'Puerto Rico', - 'category': 'Flags', - 'aliases': [ - 'puerto_rico' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ถ๐Ÿ‡ฆ', - 'description': 'Qatar', - 'category': 'Flags', - 'aliases': [ - 'qatar' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ท๐Ÿ‡ช', - 'description': 'Rรฉunion', - 'category': 'Flags', - 'aliases': [ - 'reunion' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ท๐Ÿ‡ด', - 'description': 'Romania', - 'category': 'Flags', - 'aliases': [ - 'romania' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ท๐Ÿ‡บ', - 'description': 'Russia', - 'category': 'Flags', - 'aliases': [ - 'ru' - ], - 'tags': [ - 'russia' - ] - }, - { - 'emoji': '๐Ÿ‡ท๐Ÿ‡ผ', - 'description': 'Rwanda', - 'category': 'Flags', - 'aliases': [ - 'rwanda' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ง๐Ÿ‡ฑ', - 'description': 'St. Barthรฉlemy', - 'category': 'Flags', - 'aliases': [ - 'st_barthelemy' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ญ', - 'description': 'St. Helena', - 'category': 'Flags', - 'aliases': [ - 'st_helena' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ณ', - 'description': 'St. Kitts & Nevis', - 'category': 'Flags', - 'aliases': [ - 'st_kitts_nevis' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡จ', - 'description': 'St. Lucia', - 'category': 'Flags', - 'aliases': [ - 'st_lucia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ต๐Ÿ‡ฒ', - 'description': 'St. Pierre & Miquelon', - 'category': 'Flags', - 'aliases': [ - 'st_pierre_miquelon' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ป๐Ÿ‡จ', - 'description': 'St. Vincent & Grenadines', - 'category': 'Flags', - 'aliases': [ - 'st_vincent_grenadines' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ผ๐Ÿ‡ธ', - 'description': 'Samoa', - 'category': 'Flags', - 'aliases': [ - 'samoa' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฒ', - 'description': 'San Marino', - 'category': 'Flags', - 'aliases': [ - 'san_marino' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡น', - 'description': 'Sรฃo Tomรฉ & Prรญncipe', - 'category': 'Flags', - 'aliases': [ - 'sao_tome_principe' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฆ', - 'description': 'Saudi Arabia', - 'category': 'Flags', - 'aliases': [ - 'saudi_arabia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ณ', - 'description': 'Senegal', - 'category': 'Flags', - 'aliases': [ - 'senegal' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ท๐Ÿ‡ธ', - 'description': 'Serbia', - 'category': 'Flags', - 'aliases': [ - 'serbia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡จ', - 'description': 'Seychelles', - 'category': 'Flags', - 'aliases': [ - 'seychelles' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฑ', - 'description': 'Sierra Leone', - 'category': 'Flags', - 'aliases': [ - 'sierra_leone' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฌ', - 'description': 'Singapore', - 'category': 'Flags', - 'aliases': [ - 'singapore' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฝ', - 'description': 'Sint Maarten', - 'category': 'Flags', - 'aliases': [ - 'sint_maarten' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฐ', - 'description': 'Slovakia', - 'category': 'Flags', - 'aliases': [ - 'slovakia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฎ', - 'description': 'Slovenia', - 'category': 'Flags', - 'aliases': [ - 'slovenia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ง', - 'description': 'Solomon Islands', - 'category': 'Flags', - 'aliases': [ - 'solomon_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ด', - 'description': 'Somalia', - 'category': 'Flags', - 'aliases': [ - 'somalia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฟ๐Ÿ‡ฆ', - 'description': 'South Africa', - 'category': 'Flags', - 'aliases': [ - 'south_africa' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ธ', - 'description': 'South Georgia & South Sandwich Islands', - 'category': 'Flags', - 'aliases': [ - 'south_georgia_south_sandwich_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฐ๐Ÿ‡ท', - 'description': 'South Korea', - 'category': 'Flags', - 'aliases': [ - 'kr' - ], - 'tags': [ - 'korea' - ] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ธ', - 'description': 'South Sudan', - 'category': 'Flags', - 'aliases': [ - 'south_sudan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡ธ', - 'description': 'Spain', - 'category': 'Flags', - 'aliases': [ - 'es' - ], - 'tags': [ - 'spain' - ] - }, - { - 'emoji': '๐Ÿ‡ฑ๐Ÿ‡ฐ', - 'description': 'Sri Lanka', - 'category': 'Flags', - 'aliases': [ - 'sri_lanka' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฉ', - 'description': 'Sudan', - 'category': 'Flags', - 'aliases': [ - 'sudan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ท', - 'description': 'Suriname', - 'category': 'Flags', - 'aliases': [ - 'suriname' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ฟ', - 'description': 'Swaziland', - 'category': 'Flags', - 'aliases': [ - 'swaziland' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡ช', - 'description': 'Sweden', - 'category': 'Flags', - 'aliases': [ - 'sweden' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡จ๐Ÿ‡ญ', - 'description': 'Switzerland', - 'category': 'Flags', - 'aliases': [ - 'switzerland' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ธ๐Ÿ‡พ', - 'description': 'Syria', - 'category': 'Flags', - 'aliases': [ - 'syria' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ผ', - 'description': 'Taiwan', - 'category': 'Flags', - 'aliases': [ - 'taiwan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ฏ', - 'description': 'Tajikistan', - 'category': 'Flags', - 'aliases': [ - 'tajikistan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ฟ', - 'description': 'Tanzania', - 'category': 'Flags', - 'aliases': [ - 'tanzania' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ญ', - 'description': 'Thailand', - 'category': 'Flags', - 'aliases': [ - 'thailand' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ฑ', - 'description': 'Timor-Leste', - 'category': 'Flags', - 'aliases': [ - 'timor_leste' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ฌ', - 'description': 'Togo', - 'category': 'Flags', - 'aliases': [ - 'togo' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ฐ', - 'description': 'Tokelau', - 'category': 'Flags', - 'aliases': [ - 'tokelau' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ด', - 'description': 'Tonga', - 'category': 'Flags', - 'aliases': [ - 'tonga' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡น', - 'description': 'Trinidad & Tobago', - 'category': 'Flags', - 'aliases': [ - 'trinidad_tobago' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ณ', - 'description': 'Tunisia', - 'category': 'Flags', - 'aliases': [ - 'tunisia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ท', - 'description': 'Turkey', - 'category': 'Flags', - 'aliases': [ - 'tr' - ], - 'tags': [ - 'turkey' - ] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ฒ', - 'description': 'Turkmenistan', - 'category': 'Flags', - 'aliases': [ - 'turkmenistan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡จ', - 'description': 'Turks & Caicos Islands', - 'category': 'Flags', - 'aliases': [ - 'turks_caicos_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡น๐Ÿ‡ป', - 'description': 'Tuvalu', - 'category': 'Flags', - 'aliases': [ - 'tuvalu' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡บ๐Ÿ‡ฌ', - 'description': 'Uganda', - 'category': 'Flags', - 'aliases': [ - 'uganda' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡บ๐Ÿ‡ฆ', - 'description': 'Ukraine', - 'category': 'Flags', - 'aliases': [ - 'ukraine' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฆ๐Ÿ‡ช', - 'description': 'United Arab Emirates', - 'category': 'Flags', - 'aliases': [ - 'united_arab_emirates' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฌ๐Ÿ‡ง', - 'description': 'United Kingdom', - 'category': 'Flags', - 'aliases': [ - 'gb', - 'uk' - ], - 'tags': [ - 'flag', - 'british' - ] - }, - { - 'emoji': '๐Ÿ‡บ๐Ÿ‡ธ', - 'description': 'United States', - 'category': 'Flags', - 'aliases': [ - 'us' - ], - 'tags': [ - 'flag', - 'united', - 'america' - ] - }, - { - 'emoji': '๐Ÿ‡ป๐Ÿ‡ฎ', - 'description': 'U.S. Virgin Islands', - 'category': 'Flags', - 'aliases': [ - 'us_virgin_islands' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡บ๐Ÿ‡พ', - 'description': 'Uruguay', - 'category': 'Flags', - 'aliases': [ - 'uruguay' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡บ๐Ÿ‡ฟ', - 'description': 'Uzbekistan', - 'category': 'Flags', - 'aliases': [ - 'uzbekistan' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ป๐Ÿ‡บ', - 'description': 'Vanuatu', - 'category': 'Flags', - 'aliases': [ - 'vanuatu' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ป๐Ÿ‡ฆ', - 'description': 'Vatican City', - 'category': 'Flags', - 'aliases': [ - 'vatican_city' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ป๐Ÿ‡ช', - 'description': 'Venezuela', - 'category': 'Flags', - 'aliases': [ - 'venezuela' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ป๐Ÿ‡ณ', - 'description': 'Vietnam', - 'category': 'Flags', - 'aliases': [ - 'vietnam' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ผ๐Ÿ‡ซ', - 'description': 'Wallis & Futuna', - 'category': 'Flags', - 'aliases': [ - 'wallis_futuna' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ช๐Ÿ‡ญ', - 'description': 'Western Sahara', - 'category': 'Flags', - 'aliases': [ - 'western_sahara' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡พ๐Ÿ‡ช', - 'description': 'Yemen', - 'category': 'Flags', - 'aliases': [ - 'yemen' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฟ๐Ÿ‡ฒ', - 'description': 'Zambia', - 'category': 'Flags', - 'aliases': [ - 'zambia' - ], - 'tags': [] - }, - { - 'emoji': '๐Ÿ‡ฟ๐Ÿ‡ผ', - 'description': 'Zimbabwe', - 'category': 'Flags', - 'aliases': [ - 'zimbabwe' - ], - 'tags': [] - } -] - -export default emojis diff --git a/src/muya/lib/ui/emojis/emojisJson.json b/src/muya/lib/ui/emojis/emojisJson.json new file mode 100644 index 00000000..97f9c820 --- /dev/null +++ b/src/muya/lib/ui/emojis/emojisJson.json @@ -0,0 +1,13958 @@ +[ + { + "emoji": "๐Ÿ˜€", + "description": "grinning face", + "category": "People", + "aliases": [ + "grinning" + ], + "tags": [ + "smile", + "happy" + ] + }, + { + "emoji": "๐Ÿ˜ƒ", + "description": "smiling face with open mouth", + "category": "People", + "aliases": [ + "smiley" + ], + "tags": [ + "happy", + "joy", + "haha" + ] + }, + { + "emoji": "๐Ÿ˜„", + "description": "smiling face with open mouth & smiling eyes", + "category": "People", + "aliases": [ + "smile" + ], + "tags": [ + "happy", + "joy", + "laugh", + "pleased" + ] + }, + { + "emoji": "๐Ÿ˜", + "description": "grinning face with smiling eyes", + "category": "People", + "aliases": [ + "grin" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜†", + "description": "smiling face with open mouth & closed eyes", + "category": "People", + "aliases": [ + "laughing", + "satisfied" + ], + "tags": [ + "happy", + "haha" + ] + }, + { + "emoji": "๐Ÿ˜…", + "description": "smiling face with open mouth & cold sweat", + "category": "People", + "aliases": [ + "sweat_smile" + ], + "tags": [ + "hot" + ] + }, + { + "emoji": "๐Ÿ˜‚", + "description": "face with tears of joy", + "category": "People", + "aliases": [ + "joy" + ], + "tags": [ + "tears" + ] + }, + { + "emoji": "๐Ÿคฃ", + "description": "rolling on the floor laughing", + "category": "People", + "aliases": [ + "rofl" + ], + "tags": [ + "lol", + "laughing" + ] + }, + { + "emoji": "โ˜บ๏ธ", + "description": "smiling face", + "category": "People", + "aliases": [ + "relaxed" + ], + "tags": [ + "blush", + "pleased" + ] + }, + { + "emoji": "๐Ÿ˜Š", + "description": "smiling face with smiling eyes", + "category": "People", + "aliases": [ + "blush" + ], + "tags": [ + "proud" + ] + }, + { + "emoji": "๐Ÿ˜‡", + "description": "smiling face with halo", + "category": "People", + "aliases": [ + "innocent" + ], + "tags": [ + "angel" + ] + }, + { + "emoji": "๐Ÿ™‚", + "description": "slightly smiling face", + "category": "People", + "aliases": [ + "slightly_smiling_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™ƒ", + "description": "upside-down face", + "category": "People", + "aliases": [ + "upside_down_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜‰", + "description": "winking face", + "category": "People", + "aliases": [ + "wink" + ], + "tags": [ + "flirt" + ] + }, + { + "emoji": "๐Ÿ˜Œ", + "description": "relieved face", + "category": "People", + "aliases": [ + "relieved" + ], + "tags": [ + "whew" + ] + }, + { + "emoji": "๐Ÿ˜", + "description": "smiling face with heart-eyes", + "category": "People", + "aliases": [ + "heart_eyes" + ], + "tags": [ + "love", + "crush" + ] + }, + { + "emoji": "๐Ÿ˜˜", + "description": "face blowing a kiss", + "category": "People", + "aliases": [ + "kissing_heart" + ], + "tags": [ + "flirt" + ] + }, + { + "emoji": "๐Ÿ˜—", + "description": "kissing face", + "category": "People", + "aliases": [ + "kissing" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜™", + "description": "kissing face with smiling eyes", + "category": "People", + "aliases": [ + "kissing_smiling_eyes" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜š", + "description": "kissing face with closed eyes", + "category": "People", + "aliases": [ + "kissing_closed_eyes" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜‹", + "description": "face savouring delicious food", + "category": "People", + "aliases": [ + "yum" + ], + "tags": [ + "tongue", + "lick" + ] + }, + { + "emoji": "๐Ÿ˜œ", + "description": "face with stuck-out tongue & winking eye", + "category": "People", + "aliases": [ + "stuck_out_tongue_winking_eye" + ], + "tags": [ + "prank", + "silly" + ] + }, + { + "emoji": "๐Ÿ˜", + "description": "face with stuck-out tongue & closed eyes", + "category": "People", + "aliases": [ + "stuck_out_tongue_closed_eyes" + ], + "tags": [ + "prank" + ] + }, + { + "emoji": "๐Ÿ˜›", + "description": "face with stuck-out tongue", + "category": "People", + "aliases": [ + "stuck_out_tongue" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค‘", + "description": "money-mouth face", + "category": "People", + "aliases": [ + "money_mouth_face" + ], + "tags": [ + "rich" + ] + }, + { + "emoji": "๐Ÿค—", + "description": "hugging face", + "category": "People", + "aliases": [ + "hugs" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค“", + "description": "nerd face", + "category": "People", + "aliases": [ + "nerd_face" + ], + "tags": [ + "geek", + "glasses" + ] + }, + { + "emoji": "๐Ÿ˜Ž", + "description": "smiling face with sunglasses", + "category": "People", + "aliases": [ + "sunglasses" + ], + "tags": [ + "cool" + ] + }, + { + "emoji": "๐Ÿคก", + "description": "clown face", + "category": "People", + "aliases": [ + "clown_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค ", + "description": "cowboy hat face", + "category": "People", + "aliases": [ + "cowboy_hat_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜", + "description": "smirking face", + "category": "People", + "aliases": [ + "smirk" + ], + "tags": [ + "smug" + ] + }, + { + "emoji": "๐Ÿ˜’", + "description": "unamused face", + "category": "People", + "aliases": [ + "unamused" + ], + "tags": [ + "meh" + ] + }, + { + "emoji": "๐Ÿ˜ž", + "description": "disappointed face", + "category": "People", + "aliases": [ + "disappointed" + ], + "tags": [ + "sad" + ] + }, + { + "emoji": "๐Ÿ˜”", + "description": "pensive face", + "category": "People", + "aliases": [ + "pensive" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜Ÿ", + "description": "worried face", + "category": "People", + "aliases": [ + "worried" + ], + "tags": [ + "nervous" + ] + }, + { + "emoji": "๐Ÿ˜•", + "description": "confused face", + "category": "People", + "aliases": [ + "confused" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™", + "description": "slightly frowning face", + "category": "People", + "aliases": [ + "slightly_frowning_face" + ], + "tags": [] + }, + { + "emoji": "โ˜น๏ธ", + "description": "frowning face", + "category": "People", + "aliases": [ + "frowning_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ฃ", + "description": "persevering face", + "category": "People", + "aliases": [ + "persevere" + ], + "tags": [ + "struggling" + ] + }, + { + "emoji": "๐Ÿ˜–", + "description": "confounded face", + "category": "People", + "aliases": [ + "confounded" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ซ", + "description": "tired face", + "category": "People", + "aliases": [ + "tired_face" + ], + "tags": [ + "upset", + "whine" + ] + }, + { + "emoji": "๐Ÿ˜ฉ", + "description": "weary face", + "category": "People", + "aliases": [ + "weary" + ], + "tags": [ + "tired" + ] + }, + { + "emoji": "๐Ÿ˜ค", + "description": "face with steam from nose", + "category": "People", + "aliases": [ + "triumph" + ], + "tags": [ + "smug" + ] + }, + { + "emoji": "๐Ÿ˜ ", + "description": "angry face", + "category": "People", + "aliases": [ + "angry" + ], + "tags": [ + "mad", + "annoyed" + ] + }, + { + "emoji": "๐Ÿ˜ก", + "description": "pouting face", + "category": "People", + "aliases": [ + "rage", + "pout" + ], + "tags": [ + "angry" + ] + }, + { + "emoji": "๐Ÿ˜ถ", + "description": "face without mouth", + "category": "People", + "aliases": [ + "no_mouth" + ], + "tags": [ + "mute", + "silence" + ] + }, + { + "emoji": "๐Ÿ˜", + "description": "neutral face", + "category": "People", + "aliases": [ + "neutral_face" + ], + "tags": [ + "meh" + ] + }, + { + "emoji": "๐Ÿ˜‘", + "description": "expressionless face", + "category": "People", + "aliases": [ + "expressionless" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ฏ", + "description": "hushed face", + "category": "People", + "aliases": [ + "hushed" + ], + "tags": [ + "silence", + "speechless" + ] + }, + { + "emoji": "๐Ÿ˜ฆ", + "description": "frowning face with open mouth", + "category": "People", + "aliases": [ + "frowning" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ง", + "description": "anguished face", + "category": "People", + "aliases": [ + "anguished" + ], + "tags": [ + "stunned" + ] + }, + { + "emoji": "๐Ÿ˜ฎ", + "description": "face with open mouth", + "category": "People", + "aliases": [ + "open_mouth" + ], + "tags": [ + "surprise", + "impressed", + "wow" + ] + }, + { + "emoji": "๐Ÿ˜ฒ", + "description": "astonished face", + "category": "People", + "aliases": [ + "astonished" + ], + "tags": [ + "amazed", + "gasp" + ] + }, + { + "emoji": "๐Ÿ˜ต", + "description": "dizzy face", + "category": "People", + "aliases": [ + "dizzy_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ณ", + "description": "flushed face", + "category": "People", + "aliases": [ + "flushed" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ฑ", + "description": "face screaming in fear", + "category": "People", + "aliases": [ + "scream" + ], + "tags": [ + "horror", + "shocked" + ] + }, + { + "emoji": "๐Ÿ˜จ", + "description": "fearful face", + "category": "People", + "aliases": [ + "fearful" + ], + "tags": [ + "scared", + "shocked", + "oops" + ] + }, + { + "emoji": "๐Ÿ˜ฐ", + "description": "face with open mouth & cold sweat", + "category": "People", + "aliases": [ + "cold_sweat" + ], + "tags": [ + "nervous" + ] + }, + { + "emoji": "๐Ÿ˜ข", + "description": "crying face", + "category": "People", + "aliases": [ + "cry" + ], + "tags": [ + "sad", + "tear" + ] + }, + { + "emoji": "๐Ÿ˜ฅ", + "description": "disappointed but relieved face", + "category": "People", + "aliases": [ + "disappointed_relieved" + ], + "tags": [ + "phew", + "sweat", + "nervous" + ] + }, + { + "emoji": "๐Ÿคค", + "description": "drooling face", + "category": "People", + "aliases": [ + "drooling_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ญ", + "description": "loudly crying face", + "category": "People", + "aliases": [ + "sob" + ], + "tags": [ + "sad", + "cry", + "bawling" + ] + }, + { + "emoji": "๐Ÿ˜“", + "description": "face with cold sweat", + "category": "People", + "aliases": [ + "sweat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ช", + "description": "sleepy face", + "category": "People", + "aliases": [ + "sleepy" + ], + "tags": [ + "tired" + ] + }, + { + "emoji": "๐Ÿ˜ด", + "description": "sleeping face", + "category": "People", + "aliases": [ + "sleeping" + ], + "tags": [ + "zzz" + ] + }, + { + "emoji": "๐Ÿ™„", + "description": "face with rolling eyes", + "category": "People", + "aliases": [ + "roll_eyes" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค”", + "description": "thinking face", + "category": "People", + "aliases": [ + "thinking" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคฅ", + "description": "lying face", + "category": "People", + "aliases": [ + "lying_face" + ], + "tags": [ + "liar" + ] + }, + { + "emoji": "๐Ÿ˜ฌ", + "description": "grimacing face", + "category": "People", + "aliases": [ + "grimacing" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค", + "description": "zipper-mouth face", + "category": "People", + "aliases": [ + "zipper_mouth_face" + ], + "tags": [ + "silence", + "hush" + ] + }, + { + "emoji": "๐Ÿคข", + "description": "nauseated face", + "category": "People", + "aliases": [ + "nauseated_face" + ], + "tags": [ + "sick", + "barf", + "disgusted" + ] + }, + { + "emoji": "๐Ÿคง", + "description": "sneezing face", + "category": "People", + "aliases": [ + "sneezing_face" + ], + "tags": [ + "achoo", + "sick" + ] + }, + { + "emoji": "๐Ÿ˜ท", + "description": "face with medical mask", + "category": "People", + "aliases": [ + "mask" + ], + "tags": [ + "sick", + "ill" + ] + }, + { + "emoji": "๐Ÿค’", + "description": "face with thermometer", + "category": "People", + "aliases": [ + "face_with_thermometer" + ], + "tags": [ + "sick" + ] + }, + { + "emoji": "๐Ÿค•", + "description": "face with head-bandage", + "category": "People", + "aliases": [ + "face_with_head_bandage" + ], + "tags": [ + "hurt" + ] + }, + { + "emoji": "๐Ÿ˜ˆ", + "description": "smiling face with horns", + "category": "People", + "aliases": [ + "smiling_imp" + ], + "tags": [ + "devil", + "evil", + "horns" + ] + }, + { + "emoji": "๐Ÿ‘ฟ", + "description": "angry face with horns", + "category": "People", + "aliases": [ + "imp" + ], + "tags": [ + "angry", + "devil", + "evil", + "horns" + ] + }, + { + "emoji": "๐Ÿ‘น", + "description": "ogre", + "category": "People", + "aliases": [ + "japanese_ogre" + ], + "tags": [ + "monster" + ] + }, + { + "emoji": "๐Ÿ‘บ", + "description": "goblin", + "category": "People", + "aliases": [ + "japanese_goblin" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ฉ", + "description": "pile of poo", + "category": "People", + "aliases": [ + "hankey", + "poop", + "shit" + ], + "tags": [ + "crap" + ] + }, + { + "emoji": "๐Ÿ‘ป", + "description": "ghost", + "category": "People", + "aliases": [ + "ghost" + ], + "tags": [ + "halloween" + ] + }, + { + "emoji": "๐Ÿ’€", + "description": "skull", + "category": "People", + "aliases": [ + "skull" + ], + "tags": [ + "dead", + "danger", + "poison" + ] + }, + { + "emoji": "โ˜ ๏ธ", + "description": "skull and crossbones", + "category": "People", + "aliases": [ + "skull_and_crossbones" + ], + "tags": [ + "danger", + "pirate" + ] + }, + { + "emoji": "๐Ÿ‘ฝ", + "description": "alien", + "category": "People", + "aliases": [ + "alien" + ], + "tags": [ + "ufo" + ] + }, + { + "emoji": "๐Ÿ‘พ", + "description": "alien monster", + "category": "People", + "aliases": [ + "space_invader" + ], + "tags": [ + "game", + "retro" + ] + }, + { + "emoji": "๐Ÿค–", + "description": "robot face", + "category": "People", + "aliases": [ + "robot" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽƒ", + "description": "jack-o-lantern", + "category": "People", + "aliases": [ + "jack_o_lantern" + ], + "tags": [ + "halloween" + ] + }, + { + "emoji": "๐Ÿ˜บ", + "description": "smiling cat face with open mouth", + "category": "People", + "aliases": [ + "smiley_cat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ธ", + "description": "grinning cat face with smiling eyes", + "category": "People", + "aliases": [ + "smile_cat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜น", + "description": "cat face with tears of joy", + "category": "People", + "aliases": [ + "joy_cat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ป", + "description": "smiling cat face with heart-eyes", + "category": "People", + "aliases": [ + "heart_eyes_cat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ผ", + "description": "cat face with wry smile", + "category": "People", + "aliases": [ + "smirk_cat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜ฝ", + "description": "kissing cat face with closed eyes", + "category": "People", + "aliases": [ + "kissing_cat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™€", + "description": "weary cat face", + "category": "People", + "aliases": [ + "scream_cat" + ], + "tags": [ + "horror" + ] + }, + { + "emoji": "๐Ÿ˜ฟ", + "description": "crying cat face", + "category": "People", + "aliases": [ + "crying_cat_face" + ], + "tags": [ + "sad", + "tear" + ] + }, + { + "emoji": "๐Ÿ˜พ", + "description": "pouting cat face", + "category": "People", + "aliases": [ + "pouting_cat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘", + "description": "open hands", + "category": "People", + "aliases": [ + "open_hands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™Œ", + "description": "raising hands", + "category": "People", + "aliases": [ + "raised_hands" + ], + "tags": [ + "hooray" + ] + }, + { + "emoji": "๐Ÿ‘", + "description": "clapping hands", + "category": "People", + "aliases": [ + "clap" + ], + "tags": [ + "praise", + "applause" + ] + }, + { + "emoji": "๐Ÿ™", + "description": "folded hands", + "category": "People", + "aliases": [ + "pray" + ], + "tags": [ + "please", + "hope", + "wish" + ] + }, + { + "emoji": "๐Ÿค", + "description": "handshake", + "category": "People", + "aliases": [ + "handshake" + ], + "tags": [ + "deal" + ] + }, + { + "emoji": "๐Ÿ‘", + "description": "thumbs up", + "category": "People", + "aliases": [ + "+1", + "thumbsup" + ], + "tags": [ + "approve", + "ok" + ] + }, + { + "emoji": "๐Ÿ‘Ž", + "description": "thumbs down", + "category": "People", + "aliases": [ + "-1", + "thumbsdown" + ], + "tags": [ + "disapprove", + "bury" + ] + }, + { + "emoji": "๐Ÿ‘Š", + "description": "oncoming fist", + "category": "People", + "aliases": [ + "fist_oncoming", + "facepunch", + "punch" + ], + "tags": [ + "attack" + ] + }, + { + "emoji": "โœŠ", + "description": "raised fist", + "category": "People", + "aliases": [ + "fist_raised", + "fist" + ], + "tags": [ + "power" + ] + }, + { + "emoji": "๐Ÿค›", + "description": "left-facing fist", + "category": "People", + "aliases": [ + "fist_left" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคœ", + "description": "right-facing fist", + "category": "People", + "aliases": [ + "fist_right" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคž", + "description": "crossed fingers", + "category": "People", + "aliases": [ + "crossed_fingers" + ], + "tags": [ + "luck", + "hopeful" + ] + }, + { + "emoji": "โœŒ๏ธ", + "description": "victory hand", + "category": "People", + "aliases": [ + "v" + ], + "tags": [ + "victory", + "peace" + ] + }, + { + "emoji": "๐Ÿค˜", + "description": "sign of the horns", + "category": "People", + "aliases": [ + "metal" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘Œ", + "description": "OK hand", + "category": "People", + "aliases": [ + "ok_hand" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ˆ", + "description": "backhand index pointing left", + "category": "People", + "aliases": [ + "point_left" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘‰", + "description": "backhand index pointing right", + "category": "People", + "aliases": [ + "point_right" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘†", + "description": "backhand index pointing up", + "category": "People", + "aliases": [ + "point_up_2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘‡", + "description": "backhand index pointing down", + "category": "People", + "aliases": [ + "point_down" + ], + "tags": [] + }, + { + "emoji": "โ˜๏ธ", + "description": "index pointing up", + "category": "People", + "aliases": [ + "point_up" + ], + "tags": [] + }, + { + "emoji": "โœ‹", + "description": "raised hand", + "category": "People", + "aliases": [ + "hand", + "raised_hand" + ], + "tags": [ + "highfive", + "stop" + ] + }, + { + "emoji": "๐Ÿคš", + "description": "raised back of hand", + "category": "People", + "aliases": [ + "raised_back_of_hand" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–", + "description": "raised hand with fingers splayed", + "category": "People", + "aliases": [ + "raised_hand_with_fingers_splayed" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ––", + "description": "vulcan salute", + "category": "People", + "aliases": [ + "vulcan_salute" + ], + "tags": [ + "prosper", + "spock" + ] + }, + { + "emoji": "๐Ÿ‘‹", + "description": "waving hand", + "category": "People", + "aliases": [ + "wave" + ], + "tags": [ + "goodbye" + ] + }, + { + "emoji": "๐Ÿค™", + "description": "call me hand", + "category": "People", + "aliases": [ + "call_me_hand" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ช", + "description": "flexed biceps", + "category": "People", + "aliases": [ + "muscle" + ], + "tags": [ + "flex", + "bicep", + "strong", + "workout" + ] + }, + { + "emoji": "๐Ÿ–•", + "description": "middle finger", + "category": "People", + "aliases": [ + "middle_finger", + "fu" + ], + "tags": [] + }, + { + "emoji": "โœ๏ธ", + "description": "writing hand", + "category": "People", + "aliases": [ + "writing_hand" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคณ", + "description": "selfie", + "category": "People", + "aliases": [ + "selfie" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’…", + "description": "nail polish", + "category": "People", + "aliases": [ + "nail_care" + ], + "tags": [ + "beauty", + "manicure" + ] + }, + { + "emoji": "๐Ÿ’", + "description": "ring", + "category": "People", + "aliases": [ + "ring" + ], + "tags": [ + "wedding", + "marriage", + "engaged" + ] + }, + { + "emoji": "๐Ÿ’„", + "description": "lipstick", + "category": "People", + "aliases": [ + "lipstick" + ], + "tags": [ + "makeup" + ] + }, + { + "emoji": "๐Ÿ’‹", + "description": "kiss mark", + "category": "People", + "aliases": [ + "kiss" + ], + "tags": [ + "lipstick" + ] + }, + { + "emoji": "๐Ÿ‘„", + "description": "mouth", + "category": "People", + "aliases": [ + "lips" + ], + "tags": [ + "kiss" + ] + }, + { + "emoji": "๐Ÿ‘…", + "description": "tongue", + "category": "People", + "aliases": [ + "tongue" + ], + "tags": [ + "taste" + ] + }, + { + "emoji": "๐Ÿ‘‚", + "description": "ear", + "category": "People", + "aliases": [ + "ear" + ], + "tags": [ + "hear", + "sound", + "listen" + ] + }, + { + "emoji": "๐Ÿ‘ƒ", + "description": "nose", + "category": "People", + "aliases": [ + "nose" + ], + "tags": [ + "smell" + ] + }, + { + "emoji": "๐Ÿ‘ฃ", + "description": "footprints", + "category": "People", + "aliases": [ + "footprints" + ], + "tags": [ + "feet", + "tracks" + ] + }, + { + "emoji": "๐Ÿ‘", + "description": "eye", + "category": "People", + "aliases": [ + "eye" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘€", + "description": "eyes", + "category": "People", + "aliases": [ + "eyes" + ], + "tags": [ + "look", + "see", + "watch" + ] + }, + { + "emoji": "๐Ÿ—ฃ", + "description": "speaking head", + "category": "People", + "aliases": [ + "speaking_head" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ค", + "description": "bust in silhouette", + "category": "People", + "aliases": [ + "bust_in_silhouette" + ], + "tags": [ + "user" + ] + }, + { + "emoji": "๐Ÿ‘ฅ", + "description": "busts in silhouette", + "category": "People", + "aliases": [ + "busts_in_silhouette" + ], + "tags": [ + "users", + "group", + "team" + ] + }, + { + "emoji": "๐Ÿ‘ถ", + "description": "baby", + "category": "People", + "aliases": [ + "baby" + ], + "tags": [ + "child", + "newborn" + ] + }, + { + "emoji": "๐Ÿ‘ฆ", + "description": "boy", + "category": "People", + "aliases": [ + "boy" + ], + "tags": [ + "child" + ] + }, + { + "emoji": "๐Ÿ‘ง", + "description": "girl", + "category": "People", + "aliases": [ + "girl" + ], + "tags": [ + "child" + ] + }, + { + "emoji": "๐Ÿ‘จ", + "description": "man", + "category": "People", + "aliases": [ + "man" + ], + "tags": [ + "mustache", + "father", + "dad" + ] + }, + { + "emoji": "๐Ÿ‘ฉ", + "description": "woman", + "category": "People", + "aliases": [ + "woman" + ], + "tags": [ + "girls" + ] + }, + { + "emoji": "๐Ÿ‘ฑโ€โ™€", + "description": "blond-haired woman", + "category": "People", + "aliases": [ + "blonde_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฑ", + "description": "blond-haired person", + "category": "People", + "aliases": [ + "blonde_man", + "person_with_blond_hair" + ], + "tags": [ + "boy" + ] + }, + { + "emoji": "๐Ÿ‘ด", + "description": "old man", + "category": "People", + "aliases": [ + "older_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ต", + "description": "old woman", + "category": "People", + "aliases": [ + "older_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฒ", + "description": "man with Chinese cap", + "category": "People", + "aliases": [ + "man_with_gua_pi_mao" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ณโ€โ™€", + "description": "woman wearing turban", + "category": "People", + "aliases": [ + "woman_with_turban" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ณ", + "description": "person wearing turban", + "category": "People", + "aliases": [ + "man_with_turban" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฎโ€โ™€", + "description": "woman police officer", + "category": "People", + "aliases": [ + "policewoman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฎ", + "description": "police officer", + "category": "People", + "aliases": [ + "policeman", + "cop" + ], + "tags": [ + "police", + "law" + ] + }, + { + "emoji": "๐Ÿ‘ทโ€โ™€", + "description": "woman construction worker", + "category": "People", + "aliases": [ + "construction_worker_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ท", + "description": "construction worker", + "category": "People", + "aliases": [ + "construction_worker_man", + "construction_worker" + ], + "tags": [ + "helmet" + ] + }, + { + "emoji": "๐Ÿ’‚โ€โ™€", + "description": "woman guard", + "category": "People", + "aliases": [ + "guardswoman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’‚", + "description": "guard", + "category": "People", + "aliases": [ + "guardsman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ต๏ธโ€โ™€๏ธ", + "description": "woman detective", + "category": "People", + "aliases": [ + "female_detective" + ], + "tags": [ + "sleuth" + ] + }, + { + "emoji": "๐Ÿ•ต", + "description": "detective", + "category": "People", + "aliases": [ + "male_detective", + "detective" + ], + "tags": [ + "sleuth" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€โš•", + "description": "woman health worker", + "category": "People", + "aliases": [ + "woman_health_worker" + ], + "tags": [ + "doctor", + "nurse" + ] + }, + { + "emoji": "๐Ÿ‘จโ€โš•", + "description": "man health worker", + "category": "People", + "aliases": [ + "man_health_worker" + ], + "tags": [ + "doctor", + "nurse" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐ŸŒพ", + "description": "woman farmer", + "category": "People", + "aliases": [ + "woman_farmer" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐ŸŒพ", + "description": "man farmer", + "category": "People", + "aliases": [ + "man_farmer" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿณ", + "description": "woman cook", + "category": "People", + "aliases": [ + "woman_cook" + ], + "tags": [ + "chef" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿณ", + "description": "man cook", + "category": "People", + "aliases": [ + "man_cook" + ], + "tags": [ + "chef" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐ŸŽ“", + "description": "woman student", + "category": "People", + "aliases": [ + "woman_student" + ], + "tags": [ + "graduation" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐ŸŽ“", + "description": "man student", + "category": "People", + "aliases": [ + "man_student" + ], + "tags": [ + "graduation" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐ŸŽค", + "description": "woman singer", + "category": "People", + "aliases": [ + "woman_singer" + ], + "tags": [ + "rockstar" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐ŸŽค", + "description": "man singer", + "category": "People", + "aliases": [ + "man_singer" + ], + "tags": [ + "rockstar" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿซ", + "description": "woman teacher", + "category": "People", + "aliases": [ + "woman_teacher" + ], + "tags": [ + "school", + "professor" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿซ", + "description": "man teacher", + "category": "People", + "aliases": [ + "man_teacher" + ], + "tags": [ + "school", + "professor" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿญ", + "description": "woman factory worker", + "category": "People", + "aliases": [ + "woman_factory_worker" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿญ", + "description": "man factory worker", + "category": "People", + "aliases": [ + "man_factory_worker" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ’ป", + "description": "woman technologist", + "category": "People", + "aliases": [ + "woman_technologist" + ], + "tags": [ + "coder" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ’ป", + "description": "man technologist", + "category": "People", + "aliases": [ + "man_technologist" + ], + "tags": [ + "coder" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ’ผ", + "description": "woman office worker", + "category": "People", + "aliases": [ + "woman_office_worker" + ], + "tags": [ + "business" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ’ผ", + "description": "man office worker", + "category": "People", + "aliases": [ + "man_office_worker" + ], + "tags": [ + "business" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ”ง", + "description": "woman mechanic", + "category": "People", + "aliases": [ + "woman_mechanic" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ”ง", + "description": "man mechanic", + "category": "People", + "aliases": [ + "man_mechanic" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ”ฌ", + "description": "woman scientist", + "category": "People", + "aliases": [ + "woman_scientist" + ], + "tags": [ + "research" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ”ฌ", + "description": "man scientist", + "category": "People", + "aliases": [ + "man_scientist" + ], + "tags": [ + "research" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐ŸŽจ", + "description": "woman artist", + "category": "People", + "aliases": [ + "woman_artist" + ], + "tags": [ + "painter" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐ŸŽจ", + "description": "man artist", + "category": "People", + "aliases": [ + "man_artist" + ], + "tags": [ + "painter" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿš’", + "description": "woman firefighter", + "category": "People", + "aliases": [ + "woman_firefighter" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿš’", + "description": "man firefighter", + "category": "People", + "aliases": [ + "man_firefighter" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€โœˆ", + "description": "woman pilot", + "category": "People", + "aliases": [ + "woman_pilot" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€โœˆ", + "description": "man pilot", + "category": "People", + "aliases": [ + "man_pilot" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿš€", + "description": "woman astronaut", + "category": "People", + "aliases": [ + "woman_astronaut" + ], + "tags": [ + "space" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿš€", + "description": "man astronaut", + "category": "People", + "aliases": [ + "man_astronaut" + ], + "tags": [ + "space" + ] + }, + { + "emoji": "๐Ÿ‘ฉโ€โš–", + "description": "woman judge", + "category": "People", + "aliases": [ + "woman_judge" + ], + "tags": [ + "justice" + ] + }, + { + "emoji": "๐Ÿ‘จโ€โš–", + "description": "man judge", + "category": "People", + "aliases": [ + "man_judge" + ], + "tags": [ + "justice" + ] + }, + { + "emoji": "๐Ÿคถ", + "description": "Mrs. Claus", + "category": "People", + "aliases": [ + "mrs_claus" + ], + "tags": [ + "santa" + ] + }, + { + "emoji": "๐ŸŽ…", + "description": "Santa Claus", + "category": "People", + "aliases": [ + "santa" + ], + "tags": [ + "christmas" + ] + }, + { + "emoji": "๐Ÿ‘ธ", + "description": "princess", + "category": "People", + "aliases": [ + "princess" + ], + "tags": [ + "blonde", + "crown", + "royal" + ] + }, + { + "emoji": "๐Ÿคด", + "description": "prince", + "category": "People", + "aliases": [ + "prince" + ], + "tags": [ + "crown", + "royal" + ] + }, + { + "emoji": "๐Ÿ‘ฐ", + "description": "bride with veil", + "category": "People", + "aliases": [ + "bride_with_veil" + ], + "tags": [ + "marriage", + "wedding" + ] + }, + { + "emoji": "๐Ÿคต", + "description": "man in tuxedo", + "category": "People", + "aliases": [ + "man_in_tuxedo" + ], + "tags": [ + "groom", + "marriage", + "wedding" + ] + }, + { + "emoji": "๐Ÿ‘ผ", + "description": "baby angel", + "category": "People", + "aliases": [ + "angel" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคฐ", + "description": "pregnant woman", + "category": "People", + "aliases": [ + "pregnant_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™‡โ€โ™€", + "description": "woman bowing", + "category": "People", + "aliases": [ + "bowing_woman" + ], + "tags": [ + "respect", + "thanks" + ] + }, + { + "emoji": "๐Ÿ™‡", + "description": "person bowing", + "category": "People", + "aliases": [ + "bowing_man", + "bow" + ], + "tags": [ + "respect", + "thanks" + ] + }, + { + "emoji": "๐Ÿ’", + "description": "person tipping hand", + "category": "People", + "aliases": [ + "tipping_hand_woman", + "information_desk_person", + "sassy_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’โ€โ™‚", + "description": "man tipping hand", + "category": "People", + "aliases": [ + "tipping_hand_man", + "sassy_man" + ], + "tags": [ + "information" + ] + }, + { + "emoji": "๐Ÿ™…", + "description": "person gesturing NO", + "category": "People", + "aliases": [ + "no_good_woman", + "no_good", + "ng_woman" + ], + "tags": [ + "stop", + "halt" + ] + }, + { + "emoji": "๐Ÿ™…โ€โ™‚", + "description": "man gesturing NO", + "category": "People", + "aliases": [ + "no_good_man", + "ng_man" + ], + "tags": [ + "stop", + "halt" + ] + }, + { + "emoji": "๐Ÿ™†", + "description": "person gesturing OK", + "category": "People", + "aliases": [ + "ok_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™†โ€โ™‚", + "description": "man gesturing OK", + "category": "People", + "aliases": [ + "ok_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™‹", + "description": "person raising hand", + "category": "People", + "aliases": [ + "raising_hand_woman", + "raising_hand" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™‹โ€โ™‚", + "description": "man raising hand", + "category": "People", + "aliases": [ + "raising_hand_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคฆโ€โ™€", + "description": "woman facepalming", + "category": "People", + "aliases": [ + "woman_facepalming" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคฆโ€โ™‚", + "description": "man facepalming", + "category": "People", + "aliases": [ + "man_facepalming" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคทโ€โ™€", + "description": "woman shrugging", + "category": "People", + "aliases": [ + "woman_shrugging" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคทโ€โ™‚", + "description": "man shrugging", + "category": "People", + "aliases": [ + "man_shrugging" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™Ž", + "description": "person pouting", + "category": "People", + "aliases": [ + "pouting_woman", + "person_with_pouting_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™Žโ€โ™‚", + "description": "man pouting", + "category": "People", + "aliases": [ + "pouting_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™", + "description": "person frowning", + "category": "People", + "aliases": [ + "frowning_woman", + "person_frowning" + ], + "tags": [ + "sad" + ] + }, + { + "emoji": "๐Ÿ™โ€โ™‚", + "description": "man frowning", + "category": "People", + "aliases": [ + "frowning_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’‡", + "description": "person getting haircut", + "category": "People", + "aliases": [ + "haircut_woman", + "haircut" + ], + "tags": [ + "beauty" + ] + }, + { + "emoji": "๐Ÿ’‡โ€โ™‚", + "description": "man getting haircut", + "category": "People", + "aliases": [ + "haircut_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’†", + "description": "person getting massage", + "category": "People", + "aliases": [ + "massage_woman", + "massage" + ], + "tags": [ + "spa" + ] + }, + { + "emoji": "๐Ÿ’†โ€โ™‚", + "description": "man getting massage", + "category": "People", + "aliases": [ + "massage_man" + ], + "tags": [ + "spa" + ] + }, + { + "emoji": "๐Ÿ•ด", + "description": "man in business suit levitating", + "category": "People", + "aliases": [ + "business_suit_levitating" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ƒ", + "description": "woman dancing", + "category": "People", + "aliases": [ + "dancer" + ], + "tags": [ + "dress" + ] + }, + { + "emoji": "๐Ÿ•บ", + "description": "man dancing", + "category": "People", + "aliases": [ + "man_dancing" + ], + "tags": [ + "dancer" + ] + }, + { + "emoji": "๐Ÿ‘ฏ", + "description": "people with bunny ears partying", + "category": "People", + "aliases": [ + "dancing_women", + "dancers" + ], + "tags": [ + "bunny" + ] + }, + { + "emoji": "๐Ÿ‘ฏโ€โ™‚", + "description": "men with bunny ears partying", + "category": "People", + "aliases": [ + "dancing_men" + ], + "tags": [ + "bunny" + ] + }, + { + "emoji": "๐Ÿšถโ€โ™€", + "description": "woman walking", + "category": "People", + "aliases": [ + "walking_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšถ", + "description": "person walking", + "category": "People", + "aliases": [ + "walking_man", + "walking" + ], + "tags": [] + }, + { + "emoji": "๐Ÿƒโ€โ™€", + "description": "woman running", + "category": "People", + "aliases": [ + "running_woman" + ], + "tags": [ + "exercise", + "workout", + "marathon" + ] + }, + { + "emoji": "๐Ÿƒ", + "description": "person running", + "category": "People", + "aliases": [ + "running_man", + "runner", + "running" + ], + "tags": [ + "exercise", + "workout", + "marathon" + ] + }, + { + "emoji": "๐Ÿ‘ซ", + "description": "man and woman holding hands", + "category": "People", + "aliases": [ + "couple" + ], + "tags": [ + "date" + ] + }, + { + "emoji": "๐Ÿ‘ญ", + "description": "two women holding hands", + "category": "People", + "aliases": [ + "two_women_holding_hands" + ], + "tags": [ + "couple", + "date" + ] + }, + { + "emoji": "๐Ÿ‘ฌ", + "description": "two men holding hands", + "category": "People", + "aliases": [ + "two_men_holding_hands" + ], + "tags": [ + "couple", + "date" + ] + }, + { + "emoji": "๐Ÿ’‘", + "description": "couple with heart", + "category": "People", + "aliases": [ + "couple_with_heart_woman_man", + "couple_with_heart" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + "description": "couple with heart: woman, woman", + "category": "People", + "aliases": [ + "couple_with_heart_woman_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ", + "description": "couple with heart: man, man", + "category": "People", + "aliases": [ + "couple_with_heart_man_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’", + "description": "kiss", + "category": "People", + "aliases": [ + "couplekiss_man_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + "description": "kiss: woman, woman", + "category": "People", + "aliases": [ + "couplekiss_woman_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + "description": "kiss: man, man", + "category": "People", + "aliases": [ + "couplekiss_man_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ช", + "description": "family", + "category": "People", + "aliases": [ + "family_man_woman_boy", + "family" + ], + "tags": [ + "home", + "parents", + "child" + ] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "description": "family: man, woman, girl", + "category": "People", + "aliases": [ + "family_man_woman_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "description": "family: man, woman, girl, boy", + "category": "People", + "aliases": [ + "family_man_woman_girl_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "description": "family: man, woman, boy, boy", + "category": "People", + "aliases": [ + "family_man_woman_boy_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "description": "family: man, woman, girl, girl", + "category": "People", + "aliases": [ + "family_man_woman_girl_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "description": "family: woman, woman, boy", + "category": "People", + "aliases": [ + "family_woman_woman_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "description": "family: woman, woman, girl", + "category": "People", + "aliases": [ + "family_woman_woman_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "description": "family: woman, woman, girl, boy", + "category": "People", + "aliases": [ + "family_woman_woman_girl_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "description": "family: woman, woman, boy, boy", + "category": "People", + "aliases": [ + "family_woman_woman_boy_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "description": "family: woman, woman, girl, girl", + "category": "People", + "aliases": [ + "family_woman_woman_girl_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ", + "description": "family: man, man, boy", + "category": "People", + "aliases": [ + "family_man_man_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง", + "description": "family: man, man, girl", + "category": "People", + "aliases": [ + "family_man_man_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "description": "family: man, man, girl, boy", + "category": "People", + "aliases": [ + "family_man_man_girl_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "description": "family: man, man, boy, boy", + "category": "People", + "aliases": [ + "family_man_man_boy_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "description": "family: man, man, girl, girl", + "category": "People", + "aliases": [ + "family_man_man_girl_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "description": "family: woman, boy", + "category": "People", + "aliases": [ + "family_woman_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ง", + "description": "family: woman, girl", + "category": "People", + "aliases": [ + "family_woman_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "description": "family: woman, girl, boy", + "category": "People", + "aliases": [ + "family_woman_girl_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "description": "family: woman, boy, boy", + "category": "People", + "aliases": [ + "family_woman_boy_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "description": "family: woman, girl, girl", + "category": "People", + "aliases": [ + "family_woman_girl_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘ฆ", + "description": "family: man, boy", + "category": "People", + "aliases": [ + "family_man_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘ง", + "description": "family: man, girl", + "category": "People", + "aliases": [ + "family_man_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "description": "family: man, girl, boy", + "category": "People", + "aliases": [ + "family_man_girl_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "description": "family: man, boy, boy", + "category": "People", + "aliases": [ + "family_man_boy_boy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "description": "family: man, girl, girl", + "category": "People", + "aliases": [ + "family_man_girl_girl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘š", + "description": "womanโ€™s clothes", + "category": "People", + "aliases": [ + "womans_clothes" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘•", + "description": "t-shirt", + "category": "People", + "aliases": [ + "shirt", + "tshirt" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘–", + "description": "jeans", + "category": "People", + "aliases": [ + "jeans" + ], + "tags": [ + "pants" + ] + }, + { + "emoji": "๐Ÿ‘”", + "description": "necktie", + "category": "People", + "aliases": [ + "necktie" + ], + "tags": [ + "shirt", + "formal" + ] + }, + { + "emoji": "๐Ÿ‘—", + "description": "dress", + "category": "People", + "aliases": [ + "dress" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘™", + "description": "bikini", + "category": "People", + "aliases": [ + "bikini" + ], + "tags": [ + "beach" + ] + }, + { + "emoji": "๐Ÿ‘˜", + "description": "kimono", + "category": "People", + "aliases": [ + "kimono" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ ", + "description": "high-heeled shoe", + "category": "People", + "aliases": [ + "high_heel" + ], + "tags": [ + "shoe" + ] + }, + { + "emoji": "๐Ÿ‘ก", + "description": "womanโ€™s sandal", + "category": "People", + "aliases": [ + "sandal" + ], + "tags": [ + "shoe" + ] + }, + { + "emoji": "๐Ÿ‘ข", + "description": "womanโ€™s boot", + "category": "People", + "aliases": [ + "boot" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘ž", + "description": "manโ€™s shoe", + "category": "People", + "aliases": [ + "mans_shoe", + "shoe" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘Ÿ", + "description": "running shoe", + "category": "People", + "aliases": [ + "athletic_shoe" + ], + "tags": [ + "sneaker", + "sport", + "running" + ] + }, + { + "emoji": "๐Ÿ‘’", + "description": "womanโ€™s hat", + "category": "People", + "aliases": [ + "womans_hat" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽฉ", + "description": "top hat", + "category": "People", + "aliases": [ + "tophat" + ], + "tags": [ + "hat", + "classy" + ] + }, + { + "emoji": "๐ŸŽ“", + "description": "graduation cap", + "category": "People", + "aliases": [ + "mortar_board" + ], + "tags": [ + "education", + "college", + "university", + "graduation" + ] + }, + { + "emoji": "๐Ÿ‘‘", + "description": "crown", + "category": "People", + "aliases": [ + "crown" + ], + "tags": [ + "king", + "queen", + "royal" + ] + }, + { + "emoji": "โ›‘", + "description": "rescue workerโ€™s helmet", + "category": "People", + "aliases": [ + "rescue_worker_helmet" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ’", + "description": "school backpack", + "category": "People", + "aliases": [ + "school_satchel" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘", + "description": "clutch bag", + "category": "People", + "aliases": [ + "pouch" + ], + "tags": [ + "bag" + ] + }, + { + "emoji": "๐Ÿ‘›", + "description": "purse", + "category": "People", + "aliases": [ + "purse" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘œ", + "description": "handbag", + "category": "People", + "aliases": [ + "handbag" + ], + "tags": [ + "bag" + ] + }, + { + "emoji": "๐Ÿ’ผ", + "description": "briefcase", + "category": "People", + "aliases": [ + "briefcase" + ], + "tags": [ + "business" + ] + }, + { + "emoji": "๐Ÿ‘“", + "description": "glasses", + "category": "People", + "aliases": [ + "eyeglasses" + ], + "tags": [ + "glasses" + ] + }, + { + "emoji": "๐Ÿ•ถ", + "description": "sunglasses", + "category": "People", + "aliases": [ + "dark_sunglasses" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ‚", + "description": "closed umbrella", + "category": "People", + "aliases": [ + "closed_umbrella" + ], + "tags": [ + "weather", + "rain" + ] + }, + { + "emoji": "โ˜‚๏ธ", + "description": "umbrella", + "category": "People", + "aliases": [ + "open_umbrella" + ], + "tags": [] + }, + { + "emoji": "๐Ÿถ", + "description": "dog face", + "category": "Nature", + "aliases": [ + "dog" + ], + "tags": [ + "pet" + ] + }, + { + "emoji": "๐Ÿฑ", + "description": "cat face", + "category": "Nature", + "aliases": [ + "cat" + ], + "tags": [ + "pet" + ] + }, + { + "emoji": "๐Ÿญ", + "description": "mouse face", + "category": "Nature", + "aliases": [ + "mouse" + ], + "tags": [] + }, + { + "emoji": "๐Ÿน", + "description": "hamster face", + "category": "Nature", + "aliases": [ + "hamster" + ], + "tags": [ + "pet" + ] + }, + { + "emoji": "๐Ÿฐ", + "description": "rabbit face", + "category": "Nature", + "aliases": [ + "rabbit" + ], + "tags": [ + "bunny" + ] + }, + { + "emoji": "๐ŸฆŠ", + "description": "fox face", + "category": "Nature", + "aliases": [ + "fox_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿป", + "description": "bear face", + "category": "Nature", + "aliases": [ + "bear" + ], + "tags": [] + }, + { + "emoji": "๐Ÿผ", + "description": "panda face", + "category": "Nature", + "aliases": [ + "panda_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿจ", + "description": "koala", + "category": "Nature", + "aliases": [ + "koala" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฏ", + "description": "tiger face", + "category": "Nature", + "aliases": [ + "tiger" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ", + "description": "lion face", + "category": "Nature", + "aliases": [ + "lion" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฎ", + "description": "cow face", + "category": "Nature", + "aliases": [ + "cow" + ], + "tags": [] + }, + { + "emoji": "๐Ÿท", + "description": "pig face", + "category": "Nature", + "aliases": [ + "pig" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฝ", + "description": "pig nose", + "category": "Nature", + "aliases": [ + "pig_nose" + ], + "tags": [] + }, + { + "emoji": "๐Ÿธ", + "description": "frog face", + "category": "Nature", + "aliases": [ + "frog" + ], + "tags": [] + }, + { + "emoji": "๐Ÿต", + "description": "monkey face", + "category": "Nature", + "aliases": [ + "monkey_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™ˆ", + "description": "see-no-evil monkey", + "category": "Nature", + "aliases": [ + "see_no_evil" + ], + "tags": [ + "monkey", + "blind", + "ignore" + ] + }, + { + "emoji": "๐Ÿ™‰", + "description": "hear-no-evil monkey", + "category": "Nature", + "aliases": [ + "hear_no_evil" + ], + "tags": [ + "monkey", + "deaf" + ] + }, + { + "emoji": "๐Ÿ™Š", + "description": "speak-no-evil monkey", + "category": "Nature", + "aliases": [ + "speak_no_evil" + ], + "tags": [ + "monkey", + "mute", + "hush" + ] + }, + { + "emoji": "๐Ÿ’", + "description": "monkey", + "category": "Nature", + "aliases": [ + "monkey" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”", + "description": "chicken", + "category": "Nature", + "aliases": [ + "chicken" + ], + "tags": [] + }, + { + "emoji": "๐Ÿง", + "description": "penguin", + "category": "Nature", + "aliases": [ + "penguin" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ", + "description": "bird", + "category": "Nature", + "aliases": [ + "bird" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค", + "description": "baby chick", + "category": "Nature", + "aliases": [ + "baby_chick" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฃ", + "description": "hatching chick", + "category": "Nature", + "aliases": [ + "hatching_chick" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ", + "description": "front-facing baby chick", + "category": "Nature", + "aliases": [ + "hatched_chick" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ†", + "description": "duck", + "category": "Nature", + "aliases": [ + "duck" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ…", + "description": "eagle", + "category": "Nature", + "aliases": [ + "eagle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ‰", + "description": "owl", + "category": "Nature", + "aliases": [ + "owl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ‡", + "description": "bat", + "category": "Nature", + "aliases": [ + "bat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿบ", + "description": "wolf face", + "category": "Nature", + "aliases": [ + "wolf" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—", + "description": "boar", + "category": "Nature", + "aliases": [ + "boar" + ], + "tags": [] + }, + { + "emoji": "๐Ÿด", + "description": "horse face", + "category": "Nature", + "aliases": [ + "horse" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ„", + "description": "unicorn face", + "category": "Nature", + "aliases": [ + "unicorn" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "honeybee", + "category": "Nature", + "aliases": [ + "bee", + "honeybee" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›", + "description": "bug", + "category": "Nature", + "aliases": [ + "bug" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ‹", + "description": "butterfly", + "category": "Nature", + "aliases": [ + "butterfly" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ", + "description": "snail", + "category": "Nature", + "aliases": [ + "snail" + ], + "tags": [ + "slow" + ] + }, + { + "emoji": "๐Ÿš", + "description": "spiral shell", + "category": "Nature", + "aliases": [ + "shell" + ], + "tags": [ + "sea", + "beach" + ] + }, + { + "emoji": "๐Ÿž", + "description": "lady beetle", + "category": "Nature", + "aliases": [ + "beetle" + ], + "tags": [ + "bug" + ] + }, + { + "emoji": "๐Ÿœ", + "description": "ant", + "category": "Nature", + "aliases": [ + "ant" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ท", + "description": "spider", + "category": "Nature", + "aliases": [ + "spider" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ธ", + "description": "spider web", + "category": "Nature", + "aliases": [ + "spider_web" + ], + "tags": [] + }, + { + "emoji": "๐Ÿข", + "description": "turtle", + "category": "Nature", + "aliases": [ + "turtle" + ], + "tags": [ + "slow" + ] + }, + { + "emoji": "๐Ÿ", + "description": "snake", + "category": "Nature", + "aliases": [ + "snake" + ], + "tags": [] + }, + { + "emoji": "๐ŸฆŽ", + "description": "lizard", + "category": "Nature", + "aliases": [ + "lizard" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ‚", + "description": "scorpion", + "category": "Nature", + "aliases": [ + "scorpion" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ€", + "description": "crab", + "category": "Nature", + "aliases": [ + "crab" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ‘", + "description": "squid", + "category": "Nature", + "aliases": [ + "squid" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™", + "description": "octopus", + "category": "Nature", + "aliases": [ + "octopus" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ", + "description": "shrimp", + "category": "Nature", + "aliases": [ + "shrimp" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ ", + "description": "tropical fish", + "category": "Nature", + "aliases": [ + "tropical_fish" + ], + "tags": [] + }, + { + "emoji": "๐ŸŸ", + "description": "fish", + "category": "Nature", + "aliases": [ + "fish" + ], + "tags": [] + }, + { + "emoji": "๐Ÿก", + "description": "blowfish", + "category": "Nature", + "aliases": [ + "blowfish" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฌ", + "description": "dolphin", + "category": "Nature", + "aliases": [ + "dolphin", + "flipper" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆˆ", + "description": "shark", + "category": "Nature", + "aliases": [ + "shark" + ], + "tags": [] + }, + { + "emoji": "๐Ÿณ", + "description": "spouting whale", + "category": "Nature", + "aliases": [ + "whale" + ], + "tags": [ + "sea" + ] + }, + { + "emoji": "๐Ÿ‹", + "description": "whale", + "category": "Nature", + "aliases": [ + "whale2" + ], + "tags": [] + }, + { + "emoji": "๐ŸŠ", + "description": "crocodile", + "category": "Nature", + "aliases": [ + "crocodile" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†", + "description": "leopard", + "category": "Nature", + "aliases": [ + "leopard" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ…", + "description": "tiger", + "category": "Nature", + "aliases": [ + "tiger2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿƒ", + "description": "water buffalo", + "category": "Nature", + "aliases": [ + "water_buffalo" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‚", + "description": "ox", + "category": "Nature", + "aliases": [ + "ox" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ„", + "description": "cow", + "category": "Nature", + "aliases": [ + "cow2" + ], + "tags": [] + }, + { + "emoji": "๐ŸฆŒ", + "description": "deer", + "category": "Nature", + "aliases": [ + "deer" + ], + "tags": [] + }, + { + "emoji": "๐Ÿช", + "description": "camel", + "category": "Nature", + "aliases": [ + "dromedary_camel" + ], + "tags": [ + "desert" + ] + }, + { + "emoji": "๐Ÿซ", + "description": "two-hump camel", + "category": "Nature", + "aliases": [ + "camel" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜", + "description": "elephant", + "category": "Nature", + "aliases": [ + "elephant" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ", + "description": "rhinoceros", + "category": "Nature", + "aliases": [ + "rhinoceros" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ", + "description": "gorilla", + "category": "Nature", + "aliases": [ + "gorilla" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ", + "description": "horse", + "category": "Nature", + "aliases": [ + "racehorse" + ], + "tags": [ + "speed" + ] + }, + { + "emoji": "๐Ÿ–", + "description": "pig", + "category": "Nature", + "aliases": [ + "pig2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "goat", + "category": "Nature", + "aliases": [ + "goat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "ram", + "category": "Nature", + "aliases": [ + "ram" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘", + "description": "sheep", + "category": "Nature", + "aliases": [ + "sheep" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•", + "description": "dog", + "category": "Nature", + "aliases": [ + "dog2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฉ", + "description": "poodle", + "category": "Nature", + "aliases": [ + "poodle" + ], + "tags": [ + "dog" + ] + }, + { + "emoji": "๐Ÿˆ", + "description": "cat", + "category": "Nature", + "aliases": [ + "cat2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“", + "description": "rooster", + "category": "Nature", + "aliases": [ + "rooster" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆƒ", + "description": "turkey", + "category": "Nature", + "aliases": [ + "turkey" + ], + "tags": [ + "thanksgiving" + ] + }, + { + "emoji": "๐Ÿ•Š", + "description": "dove", + "category": "Nature", + "aliases": [ + "dove" + ], + "tags": [ + "peace" + ] + }, + { + "emoji": "๐Ÿ‡", + "description": "rabbit", + "category": "Nature", + "aliases": [ + "rabbit2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "mouse", + "category": "Nature", + "aliases": [ + "mouse2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ€", + "description": "rat", + "category": "Nature", + "aliases": [ + "rat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฟ", + "description": "chipmunk", + "category": "Nature", + "aliases": [ + "chipmunk" + ], + "tags": [] + }, + { + "emoji": "๐Ÿพ", + "description": "paw prints", + "category": "Nature", + "aliases": [ + "feet", + "paw_prints" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‰", + "description": "dragon", + "category": "Nature", + "aliases": [ + "dragon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฒ", + "description": "dragon face", + "category": "Nature", + "aliases": [ + "dragon_face" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒต", + "description": "cactus", + "category": "Nature", + "aliases": [ + "cactus" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ„", + "description": "Christmas tree", + "category": "Nature", + "aliases": [ + "christmas_tree" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฒ", + "description": "evergreen tree", + "category": "Nature", + "aliases": [ + "evergreen_tree" + ], + "tags": [ + "wood" + ] + }, + { + "emoji": "๐ŸŒณ", + "description": "deciduous tree", + "category": "Nature", + "aliases": [ + "deciduous_tree" + ], + "tags": [ + "wood" + ] + }, + { + "emoji": "๐ŸŒด", + "description": "palm tree", + "category": "Nature", + "aliases": [ + "palm_tree" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฑ", + "description": "seedling", + "category": "Nature", + "aliases": [ + "seedling" + ], + "tags": [ + "plant" + ] + }, + { + "emoji": "๐ŸŒฟ", + "description": "herb", + "category": "Nature", + "aliases": [ + "herb" + ], + "tags": [] + }, + { + "emoji": "โ˜˜๏ธ", + "description": "shamrock", + "category": "Nature", + "aliases": [ + "shamrock" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ€", + "description": "four leaf clover", + "category": "Nature", + "aliases": [ + "four_leaf_clover" + ], + "tags": [ + "luck" + ] + }, + { + "emoji": "๐ŸŽ", + "description": "pine decoration", + "category": "Nature", + "aliases": [ + "bamboo" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ‹", + "description": "tanabata tree", + "category": "Nature", + "aliases": [ + "tanabata_tree" + ], + "tags": [] + }, + { + "emoji": "๐Ÿƒ", + "description": "leaf fluttering in wind", + "category": "Nature", + "aliases": [ + "leaves" + ], + "tags": [ + "leaf" + ] + }, + { + "emoji": "๐Ÿ‚", + "description": "fallen leaf", + "category": "Nature", + "aliases": [ + "fallen_leaf" + ], + "tags": [ + "autumn" + ] + }, + { + "emoji": "๐Ÿ", + "description": "maple leaf", + "category": "Nature", + "aliases": [ + "maple_leaf" + ], + "tags": [ + "canada" + ] + }, + { + "emoji": "๐Ÿ„", + "description": "mushroom", + "category": "Nature", + "aliases": [ + "mushroom" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒพ", + "description": "sheaf of rice", + "category": "Nature", + "aliases": [ + "ear_of_rice" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’", + "description": "bouquet", + "category": "Nature", + "aliases": [ + "bouquet" + ], + "tags": [ + "flowers" + ] + }, + { + "emoji": "๐ŸŒท", + "description": "tulip", + "category": "Nature", + "aliases": [ + "tulip" + ], + "tags": [ + "flower" + ] + }, + { + "emoji": "๐ŸŒน", + "description": "rose", + "category": "Nature", + "aliases": [ + "rose" + ], + "tags": [ + "flower" + ] + }, + { + "emoji": "๐Ÿฅ€", + "description": "wilted flower", + "category": "Nature", + "aliases": [ + "wilted_flower" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒป", + "description": "sunflower", + "category": "Nature", + "aliases": [ + "sunflower" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒผ", + "description": "blossom", + "category": "Nature", + "aliases": [ + "blossom" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒธ", + "description": "cherry blossom", + "category": "Nature", + "aliases": [ + "cherry_blossom" + ], + "tags": [ + "flower", + "spring" + ] + }, + { + "emoji": "๐ŸŒบ", + "description": "hibiscus", + "category": "Nature", + "aliases": [ + "hibiscus" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒŽ", + "description": "globe showing Americas", + "category": "Nature", + "aliases": [ + "earth_americas" + ], + "tags": [ + "globe", + "world", + "international" + ] + }, + { + "emoji": "๐ŸŒ", + "description": "globe showing Europe-Africa", + "category": "Nature", + "aliases": [ + "earth_africa" + ], + "tags": [ + "globe", + "world", + "international" + ] + }, + { + "emoji": "๐ŸŒ", + "description": "globe showing Asia-Australia", + "category": "Nature", + "aliases": [ + "earth_asia" + ], + "tags": [ + "globe", + "world", + "international" + ] + }, + { + "emoji": "๐ŸŒ•", + "description": "full moon", + "category": "Nature", + "aliases": [ + "full_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ–", + "description": "waning gibbous moon", + "category": "Nature", + "aliases": [ + "waning_gibbous_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ—", + "description": "last quarter moon", + "category": "Nature", + "aliases": [ + "last_quarter_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ˜", + "description": "waning crescent moon", + "category": "Nature", + "aliases": [ + "waning_crescent_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ‘", + "description": "new moon", + "category": "Nature", + "aliases": [ + "new_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ’", + "description": "waxing crescent moon", + "category": "Nature", + "aliases": [ + "waxing_crescent_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ“", + "description": "first quarter moon", + "category": "Nature", + "aliases": [ + "first_quarter_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ”", + "description": "waxing gibbous moon", + "category": "Nature", + "aliases": [ + "moon", + "waxing_gibbous_moon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒš", + "description": "new moon face", + "category": "Nature", + "aliases": [ + "new_moon_with_face" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ", + "description": "full moon with face", + "category": "Nature", + "aliases": [ + "full_moon_with_face" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒž", + "description": "sun with face", + "category": "Nature", + "aliases": [ + "sun_with_face" + ], + "tags": [ + "summer" + ] + }, + { + "emoji": "๐ŸŒ›", + "description": "first quarter moon with face", + "category": "Nature", + "aliases": [ + "first_quarter_moon_with_face" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒœ", + "description": "last quarter moon with face", + "category": "Nature", + "aliases": [ + "last_quarter_moon_with_face" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ™", + "description": "crescent moon", + "category": "Nature", + "aliases": [ + "crescent_moon" + ], + "tags": [ + "night" + ] + }, + { + "emoji": "๐Ÿ’ซ", + "description": "dizzy", + "category": "Nature", + "aliases": [ + "dizzy" + ], + "tags": [ + "star" + ] + }, + { + "emoji": "โญ๏ธ", + "description": "white medium star", + "category": "Nature", + "aliases": [ + "star" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒŸ", + "description": "glowing star", + "category": "Nature", + "aliases": [ + "star2" + ], + "tags": [] + }, + { + "emoji": "โœจ", + "description": "sparkles", + "category": "Nature", + "aliases": [ + "sparkles" + ], + "tags": [ + "shiny" + ] + }, + { + "emoji": "โšก๏ธ", + "description": "high voltage", + "category": "Nature", + "aliases": [ + "zap" + ], + "tags": [ + "lightning", + "thunder" + ] + }, + { + "emoji": "๐Ÿ”ฅ", + "description": "fire", + "category": "Nature", + "aliases": [ + "fire" + ], + "tags": [ + "burn" + ] + }, + { + "emoji": "๐Ÿ’ฅ", + "description": "collision", + "category": "Nature", + "aliases": [ + "boom", + "collision" + ], + "tags": [ + "explode" + ] + }, + { + "emoji": "โ˜„", + "description": "comet", + "category": "Nature", + "aliases": [ + "comet" + ], + "tags": [] + }, + { + "emoji": "โ˜€๏ธ", + "description": "sun", + "category": "Nature", + "aliases": [ + "sunny" + ], + "tags": [ + "weather" + ] + }, + { + "emoji": "๐ŸŒค", + "description": "sun behind small cloud", + "category": "Nature", + "aliases": [ + "sun_behind_small_cloud" + ], + "tags": [] + }, + { + "emoji": "โ›…๏ธ", + "description": "sun behind cloud", + "category": "Nature", + "aliases": [ + "partly_sunny" + ], + "tags": [ + "weather", + "cloud" + ] + }, + { + "emoji": "๐ŸŒฅ", + "description": "sun behind large cloud", + "category": "Nature", + "aliases": [ + "sun_behind_large_cloud" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฆ", + "description": "sun behind rain cloud", + "category": "Nature", + "aliases": [ + "sun_behind_rain_cloud" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒˆ", + "description": "rainbow", + "category": "Nature", + "aliases": [ + "rainbow" + ], + "tags": [] + }, + { + "emoji": "โ˜๏ธ", + "description": "cloud", + "category": "Nature", + "aliases": [ + "cloud" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒง", + "description": "cloud with rain", + "category": "Nature", + "aliases": [ + "cloud_with_rain" + ], + "tags": [] + }, + { + "emoji": "โ›ˆ", + "description": "cloud with lightning and rain", + "category": "Nature", + "aliases": [ + "cloud_with_lightning_and_rain" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฉ", + "description": "cloud with lightning", + "category": "Nature", + "aliases": [ + "cloud_with_lightning" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒจ", + "description": "cloud with snow", + "category": "Nature", + "aliases": [ + "cloud_with_snow" + ], + "tags": [] + }, + { + "emoji": "โ˜ƒ๏ธ", + "description": "snowman", + "category": "Nature", + "aliases": [ + "snowman_with_snow" + ], + "tags": [ + "winter", + "christmas" + ] + }, + { + "emoji": "โ›„๏ธ", + "description": "snowman without snow", + "category": "Nature", + "aliases": [ + "snowman" + ], + "tags": [ + "winter" + ] + }, + { + "emoji": "โ„๏ธ", + "description": "snowflake", + "category": "Nature", + "aliases": [ + "snowflake" + ], + "tags": [ + "winter", + "cold", + "weather" + ] + }, + { + "emoji": "๐ŸŒฌ", + "description": "wind face", + "category": "Nature", + "aliases": [ + "wind_face" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’จ", + "description": "dashing away", + "category": "Nature", + "aliases": [ + "dash" + ], + "tags": [ + "wind", + "blow", + "fast" + ] + }, + { + "emoji": "๐ŸŒช", + "description": "tornado", + "category": "Nature", + "aliases": [ + "tornado" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒซ", + "description": "fog", + "category": "Nature", + "aliases": [ + "fog" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒŠ", + "description": "water wave", + "category": "Nature", + "aliases": [ + "ocean" + ], + "tags": [ + "sea" + ] + }, + { + "emoji": "๐Ÿ’ง", + "description": "droplet", + "category": "Nature", + "aliases": [ + "droplet" + ], + "tags": [ + "water" + ] + }, + { + "emoji": "๐Ÿ’ฆ", + "description": "sweat droplets", + "category": "Nature", + "aliases": [ + "sweat_drops" + ], + "tags": [ + "water", + "workout" + ] + }, + { + "emoji": "โ˜”๏ธ", + "description": "umbrella with rain drops", + "category": "Nature", + "aliases": [ + "umbrella" + ], + "tags": [ + "rain", + "weather" + ] + }, + { + "emoji": "๐Ÿ", + "description": "green apple", + "category": "Foods", + "aliases": [ + "green_apple" + ], + "tags": [ + "fruit" + ] + }, + { + "emoji": "๐ŸŽ", + "description": "red apple", + "category": "Foods", + "aliases": [ + "apple" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "pear", + "category": "Foods", + "aliases": [ + "pear" + ], + "tags": [] + }, + { + "emoji": "๐ŸŠ", + "description": "tangerine", + "category": "Foods", + "aliases": [ + "tangerine", + "orange", + "mandarin" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‹", + "description": "lemon", + "category": "Foods", + "aliases": [ + "lemon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ", + "description": "banana", + "category": "Foods", + "aliases": [ + "banana" + ], + "tags": [ + "fruit" + ] + }, + { + "emoji": "๐Ÿ‰", + "description": "watermelon", + "category": "Foods", + "aliases": [ + "watermelon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡", + "description": "grapes", + "category": "Foods", + "aliases": [ + "grapes" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“", + "description": "strawberry", + "category": "Foods", + "aliases": [ + "strawberry" + ], + "tags": [ + "fruit" + ] + }, + { + "emoji": "๐Ÿˆ", + "description": "melon", + "category": "Foods", + "aliases": [ + "melon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’", + "description": "cherries", + "category": "Foods", + "aliases": [ + "cherries" + ], + "tags": [ + "fruit" + ] + }, + { + "emoji": "๐Ÿ‘", + "description": "peach", + "category": "Foods", + "aliases": [ + "peach" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "pineapple", + "category": "Foods", + "aliases": [ + "pineapple" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ", + "description": "kiwi fruit", + "category": "Foods", + "aliases": [ + "kiwi_fruit" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ‘", + "description": "avocado", + "category": "Foods", + "aliases": [ + "avocado" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ…", + "description": "tomato", + "category": "Foods", + "aliases": [ + "tomato" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†", + "description": "eggplant", + "category": "Foods", + "aliases": [ + "eggplant" + ], + "tags": [ + "aubergine" + ] + }, + { + "emoji": "๐Ÿฅ’", + "description": "cucumber", + "category": "Foods", + "aliases": [ + "cucumber" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ•", + "description": "carrot", + "category": "Foods", + "aliases": [ + "carrot" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฝ", + "description": "ear of corn", + "category": "Foods", + "aliases": [ + "corn" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒถ", + "description": "hot pepper", + "category": "Foods", + "aliases": [ + "hot_pepper" + ], + "tags": [ + "spicy" + ] + }, + { + "emoji": "๐Ÿฅ”", + "description": "potato", + "category": "Foods", + "aliases": [ + "potato" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ ", + "description": "roasted sweet potato", + "category": "Foods", + "aliases": [ + "sweet_potato" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฐ", + "description": "chestnut", + "category": "Foods", + "aliases": [ + "chestnut" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅœ", + "description": "peanuts", + "category": "Foods", + "aliases": [ + "peanuts" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฏ", + "description": "honey pot", + "category": "Foods", + "aliases": [ + "honey_pot" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ", + "description": "croissant", + "category": "Foods", + "aliases": [ + "croissant" + ], + "tags": [] + }, + { + "emoji": "๐Ÿž", + "description": "bread", + "category": "Foods", + "aliases": [ + "bread" + ], + "tags": [ + "toast" + ] + }, + { + "emoji": "๐Ÿฅ–", + "description": "baguette bread", + "category": "Foods", + "aliases": [ + "baguette_bread" + ], + "tags": [] + }, + { + "emoji": "๐Ÿง€", + "description": "cheese wedge", + "category": "Foods", + "aliases": [ + "cheese" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅš", + "description": "egg", + "category": "Foods", + "aliases": [ + "egg" + ], + "tags": [] + }, + { + "emoji": "๐Ÿณ", + "description": "cooking", + "category": "Foods", + "aliases": [ + "fried_egg" + ], + "tags": [ + "breakfast" + ] + }, + { + "emoji": "๐Ÿฅ“", + "description": "bacon", + "category": "Foods", + "aliases": [ + "bacon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅž", + "description": "pancakes", + "category": "Foods", + "aliases": [ + "pancakes" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค", + "description": "fried shrimp", + "category": "Foods", + "aliases": [ + "fried_shrimp" + ], + "tags": [ + "tempura" + ] + }, + { + "emoji": "๐Ÿ—", + "description": "poultry leg", + "category": "Foods", + "aliases": [ + "poultry_leg" + ], + "tags": [ + "meat", + "chicken" + ] + }, + { + "emoji": "๐Ÿ–", + "description": "meat on bone", + "category": "Foods", + "aliases": [ + "meat_on_bone" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•", + "description": "pizza", + "category": "Foods", + "aliases": [ + "pizza" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒญ", + "description": "hot dog", + "category": "Foods", + "aliases": [ + "hotdog" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”", + "description": "hamburger", + "category": "Foods", + "aliases": [ + "hamburger" + ], + "tags": [ + "burger" + ] + }, + { + "emoji": "๐ŸŸ", + "description": "french fries", + "category": "Foods", + "aliases": [ + "fries" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ™", + "description": "stuffed flatbread", + "category": "Foods", + "aliases": [ + "stuffed_flatbread" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฎ", + "description": "taco", + "category": "Foods", + "aliases": [ + "taco" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒฏ", + "description": "burrito", + "category": "Foods", + "aliases": [ + "burrito" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ—", + "description": "green salad", + "category": "Foods", + "aliases": [ + "green_salad" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ˜", + "description": "shallow pan of food", + "category": "Foods", + "aliases": [ + "shallow_pan_of_food" + ], + "tags": [ + "paella", + "curry" + ] + }, + { + "emoji": "๐Ÿ", + "description": "spaghetti", + "category": "Foods", + "aliases": [ + "spaghetti" + ], + "tags": [ + "pasta" + ] + }, + { + "emoji": "๐Ÿœ", + "description": "steaming bowl", + "category": "Foods", + "aliases": [ + "ramen" + ], + "tags": [ + "noodle" + ] + }, + { + "emoji": "๐Ÿฒ", + "description": "pot of food", + "category": "Foods", + "aliases": [ + "stew" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ", + "description": "fish cake with swirl", + "category": "Foods", + "aliases": [ + "fish_cake" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฃ", + "description": "sushi", + "category": "Foods", + "aliases": [ + "sushi" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฑ", + "description": "bento box", + "category": "Foods", + "aliases": [ + "bento" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›", + "description": "curry rice", + "category": "Foods", + "aliases": [ + "curry" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš", + "description": "cooked rice", + "category": "Foods", + "aliases": [ + "rice" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™", + "description": "rice ball", + "category": "Foods", + "aliases": [ + "rice_ball" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜", + "description": "rice cracker", + "category": "Foods", + "aliases": [ + "rice_cracker" + ], + "tags": [] + }, + { + "emoji": "๐Ÿข", + "description": "oden", + "category": "Foods", + "aliases": [ + "oden" + ], + "tags": [] + }, + { + "emoji": "๐Ÿก", + "description": "dango", + "category": "Foods", + "aliases": [ + "dango" + ], + "tags": [] + }, + { + "emoji": "๐Ÿง", + "description": "shaved ice", + "category": "Foods", + "aliases": [ + "shaved_ice" + ], + "tags": [] + }, + { + "emoji": "๐Ÿจ", + "description": "ice cream", + "category": "Foods", + "aliases": [ + "ice_cream" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ", + "description": "soft ice cream", + "category": "Foods", + "aliases": [ + "icecream" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฐ", + "description": "shortcake", + "category": "Foods", + "aliases": [ + "cake" + ], + "tags": [ + "dessert" + ] + }, + { + "emoji": "๐ŸŽ‚", + "description": "birthday cake", + "category": "Foods", + "aliases": [ + "birthday" + ], + "tags": [ + "party" + ] + }, + { + "emoji": "๐Ÿฎ", + "description": "custard", + "category": "Foods", + "aliases": [ + "custard" + ], + "tags": [] + }, + { + "emoji": "๐Ÿญ", + "description": "lollipop", + "category": "Foods", + "aliases": [ + "lollipop" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฌ", + "description": "candy", + "category": "Foods", + "aliases": [ + "candy" + ], + "tags": [ + "sweet" + ] + }, + { + "emoji": "๐Ÿซ", + "description": "chocolate bar", + "category": "Foods", + "aliases": [ + "chocolate_bar" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฟ", + "description": "popcorn", + "category": "Foods", + "aliases": [ + "popcorn" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฉ", + "description": "doughnut", + "category": "Foods", + "aliases": [ + "doughnut" + ], + "tags": [] + }, + { + "emoji": "๐Ÿช", + "description": "cookie", + "category": "Foods", + "aliases": [ + "cookie" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ›", + "description": "glass of milk", + "category": "Foods", + "aliases": [ + "milk_glass" + ], + "tags": [] + }, + { + "emoji": "๐Ÿผ", + "description": "baby bottle", + "category": "Foods", + "aliases": [ + "baby_bottle" + ], + "tags": [ + "milk" + ] + }, + { + "emoji": "โ˜•๏ธ", + "description": "hot beverage", + "category": "Foods", + "aliases": [ + "coffee" + ], + "tags": [ + "cafe", + "espresso" + ] + }, + { + "emoji": "๐Ÿต", + "description": "teacup without handle", + "category": "Foods", + "aliases": [ + "tea" + ], + "tags": [ + "green", + "breakfast" + ] + }, + { + "emoji": "๐Ÿถ", + "description": "sake", + "category": "Foods", + "aliases": [ + "sake" + ], + "tags": [] + }, + { + "emoji": "๐Ÿบ", + "description": "beer mug", + "category": "Foods", + "aliases": [ + "beer" + ], + "tags": [ + "drink" + ] + }, + { + "emoji": "๐Ÿป", + "description": "clinking beer mugs", + "category": "Foods", + "aliases": [ + "beers" + ], + "tags": [ + "drinks" + ] + }, + { + "emoji": "๐Ÿฅ‚", + "description": "clinking glasses", + "category": "Foods", + "aliases": [ + "clinking_glasses" + ], + "tags": [ + "cheers", + "toast" + ] + }, + { + "emoji": "๐Ÿท", + "description": "wine glass", + "category": "Foods", + "aliases": [ + "wine_glass" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅƒ", + "description": "tumbler glass", + "category": "Foods", + "aliases": [ + "tumbler_glass" + ], + "tags": [ + "whisky" + ] + }, + { + "emoji": "๐Ÿธ", + "description": "cocktail glass", + "category": "Foods", + "aliases": [ + "cocktail" + ], + "tags": [ + "drink" + ] + }, + { + "emoji": "๐Ÿน", + "description": "tropical drink", + "category": "Foods", + "aliases": [ + "tropical_drink" + ], + "tags": [ + "summer", + "vacation" + ] + }, + { + "emoji": "๐Ÿพ", + "description": "bottle with popping cork", + "category": "Foods", + "aliases": [ + "champagne" + ], + "tags": [ + "bottle", + "bubbly", + "celebration" + ] + }, + { + "emoji": "๐Ÿฅ„", + "description": "spoon", + "category": "Foods", + "aliases": [ + "spoon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿด", + "description": "fork and knife", + "category": "Foods", + "aliases": [ + "fork_and_knife" + ], + "tags": [ + "cutlery" + ] + }, + { + "emoji": "๐Ÿฝ", + "description": "fork and knife with plate", + "category": "Foods", + "aliases": [ + "plate_with_cutlery" + ], + "tags": [ + "dining", + "dinner" + ] + }, + { + "emoji": "โšฝ๏ธ", + "description": "soccer ball", + "category": "Activity", + "aliases": [ + "soccer" + ], + "tags": [ + "sports" + ] + }, + { + "emoji": "๐Ÿ€", + "description": "basketball", + "category": "Activity", + "aliases": [ + "basketball" + ], + "tags": [ + "sports" + ] + }, + { + "emoji": "๐Ÿˆ", + "description": "american football", + "category": "Activity", + "aliases": [ + "football" + ], + "tags": [ + "sports" + ] + }, + { + "emoji": "โšพ๏ธ", + "description": "baseball", + "category": "Activity", + "aliases": [ + "baseball" + ], + "tags": [ + "sports" + ] + }, + { + "emoji": "๐ŸŽพ", + "description": "tennis", + "category": "Activity", + "aliases": [ + "tennis" + ], + "tags": [ + "sports" + ] + }, + { + "emoji": "๐Ÿ", + "description": "volleyball", + "category": "Activity", + "aliases": [ + "volleyball" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‰", + "description": "rugby football", + "category": "Activity", + "aliases": [ + "rugby_football" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽฑ", + "description": "pool 8 ball", + "category": "Activity", + "aliases": [ + "8ball" + ], + "tags": [ + "pool", + "billiards" + ] + }, + { + "emoji": "๐Ÿ“", + "description": "ping pong", + "category": "Activity", + "aliases": [ + "ping_pong" + ], + "tags": [] + }, + { + "emoji": "๐Ÿธ", + "description": "badminton", + "category": "Activity", + "aliases": [ + "badminton" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ…", + "description": "goal net", + "category": "Activity", + "aliases": [ + "goal_net" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’", + "description": "ice hockey", + "category": "Activity", + "aliases": [ + "ice_hockey" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‘", + "description": "field hockey", + "category": "Activity", + "aliases": [ + "field_hockey" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "cricket", + "category": "Activity", + "aliases": [ + "cricket" + ], + "tags": [] + }, + { + "emoji": "โ›ณ๏ธ", + "description": "flag in hole", + "category": "Activity", + "aliases": [ + "golf" + ], + "tags": [] + }, + { + "emoji": "๐Ÿน", + "description": "bow and arrow", + "category": "Activity", + "aliases": [ + "bow_and_arrow" + ], + "tags": [ + "archery" + ] + }, + { + "emoji": "๐ŸŽฃ", + "description": "fishing pole", + "category": "Activity", + "aliases": [ + "fishing_pole_and_fish" + ], + "tags": [] + }, + { + "emoji": "๐ŸฅŠ", + "description": "boxing glove", + "category": "Activity", + "aliases": [ + "boxing_glove" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ‹", + "description": "martial arts uniform", + "category": "Activity", + "aliases": [ + "martial_arts_uniform" + ], + "tags": [] + }, + { + "emoji": "โ›ธ", + "description": "ice skate", + "category": "Activity", + "aliases": [ + "ice_skate" + ], + "tags": [ + "skating" + ] + }, + { + "emoji": "๐ŸŽฟ", + "description": "skis", + "category": "Activity", + "aliases": [ + "ski" + ], + "tags": [] + }, + { + "emoji": "โ›ท", + "description": "skier", + "category": "Activity", + "aliases": [ + "skier" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‚", + "description": "snowboarder", + "category": "Activity", + "aliases": [ + "snowboarder" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‹๏ธโ€โ™€๏ธ", + "description": "woman lifting weights", + "category": "Activity", + "aliases": [ + "weight_lifting_woman" + ], + "tags": [ + "gym", + "workout" + ] + }, + { + "emoji": "๐Ÿ‹", + "description": "person lifting weights", + "category": "Activity", + "aliases": [ + "weight_lifting_man" + ], + "tags": [ + "gym", + "workout" + ] + }, + { + "emoji": "๐Ÿคบ", + "description": "person fencing", + "category": "Activity", + "aliases": [ + "person_fencing" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคผโ€โ™€", + "description": "women wrestling", + "category": "Activity", + "aliases": [ + "women_wrestling" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคผโ€โ™‚", + "description": "men wrestling", + "category": "Activity", + "aliases": [ + "men_wrestling" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคธโ€โ™€", + "description": "woman cartwheeling", + "category": "Activity", + "aliases": [ + "woman_cartwheeling" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคธโ€โ™‚", + "description": "man cartwheeling", + "category": "Activity", + "aliases": [ + "man_cartwheeling" + ], + "tags": [] + }, + { + "emoji": "โ›น๏ธโ€โ™€๏ธ", + "description": "woman bouncing ball", + "category": "Activity", + "aliases": [ + "basketball_woman" + ], + "tags": [] + }, + { + "emoji": "โ›น", + "description": "person bouncing ball", + "category": "Activity", + "aliases": [ + "basketball_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคพโ€โ™€", + "description": "woman playing handball", + "category": "Activity", + "aliases": [ + "woman_playing_handball" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคพโ€โ™‚", + "description": "man playing handball", + "category": "Activity", + "aliases": [ + "man_playing_handball" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ๏ธโ€โ™€๏ธ", + "description": "woman golfing", + "category": "Activity", + "aliases": [ + "golfing_woman" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ", + "description": "person golfing", + "category": "Activity", + "aliases": [ + "golfing_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ„โ€โ™€", + "description": "woman surfing", + "category": "Activity", + "aliases": [ + "surfing_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ„", + "description": "person surfing", + "category": "Activity", + "aliases": [ + "surfing_man", + "surfer" + ], + "tags": [] + }, + { + "emoji": "๐ŸŠโ€โ™€", + "description": "woman swimming", + "category": "Activity", + "aliases": [ + "swimming_woman" + ], + "tags": [] + }, + { + "emoji": "๐ŸŠ", + "description": "person swimming", + "category": "Activity", + "aliases": [ + "swimming_man", + "swimmer" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคฝโ€โ™€", + "description": "woman playing water polo", + "category": "Activity", + "aliases": [ + "woman_playing_water_polo" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคฝโ€โ™‚", + "description": "man playing water polo", + "category": "Activity", + "aliases": [ + "man_playing_water_polo" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฃโ€โ™€", + "description": "woman rowing boat", + "category": "Activity", + "aliases": [ + "rowing_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฃ", + "description": "person rowing boat", + "category": "Activity", + "aliases": [ + "rowing_man", + "rowboat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡", + "description": "horse racing", + "category": "Activity", + "aliases": [ + "horse_racing" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšดโ€โ™€", + "description": "woman biking", + "category": "Activity", + "aliases": [ + "biking_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšด", + "description": "person biking", + "category": "Activity", + "aliases": [ + "biking_man", + "bicyclist" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšตโ€โ™€", + "description": "woman mountain biking", + "category": "Activity", + "aliases": [ + "mountain_biking_woman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšต", + "description": "person mountain biking", + "category": "Activity", + "aliases": [ + "mountain_biking_man", + "mountain_bicyclist" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽฝ", + "description": "running shirt", + "category": "Activity", + "aliases": [ + "running_shirt_with_sash" + ], + "tags": [ + "marathon" + ] + }, + { + "emoji": "๐Ÿ…", + "description": "sports medal", + "category": "Activity", + "aliases": [ + "medal_sports" + ], + "tags": [ + "gold", + "winner" + ] + }, + { + "emoji": "๐ŸŽ–", + "description": "military medal", + "category": "Activity", + "aliases": [ + "medal_military" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ‡", + "description": "1st place medal", + "category": "Activity", + "aliases": [ + "1st_place_medal" + ], + "tags": [ + "gold" + ] + }, + { + "emoji": "๐Ÿฅˆ", + "description": "2nd place medal", + "category": "Activity", + "aliases": [ + "2nd_place_medal" + ], + "tags": [ + "silver" + ] + }, + { + "emoji": "๐Ÿฅ‰", + "description": "3rd place medal", + "category": "Activity", + "aliases": [ + "3rd_place_medal" + ], + "tags": [ + "bronze" + ] + }, + { + "emoji": "๐Ÿ†", + "description": "trophy", + "category": "Activity", + "aliases": [ + "trophy" + ], + "tags": [ + "award", + "contest", + "winner" + ] + }, + { + "emoji": "๐Ÿต", + "description": "rosette", + "category": "Activity", + "aliases": [ + "rosette" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ—", + "description": "reminder ribbon", + "category": "Activity", + "aliases": [ + "reminder_ribbon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽซ", + "description": "ticket", + "category": "Activity", + "aliases": [ + "ticket" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽŸ", + "description": "admission tickets", + "category": "Activity", + "aliases": [ + "tickets" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽช", + "description": "circus tent", + "category": "Activity", + "aliases": [ + "circus_tent" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคนโ€โ™€", + "description": "woman juggling", + "category": "Activity", + "aliases": [ + "woman_juggling" + ], + "tags": [] + }, + { + "emoji": "๐Ÿคนโ€โ™‚", + "description": "man juggling", + "category": "Activity", + "aliases": [ + "man_juggling" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽญ", + "description": "performing arts", + "category": "Activity", + "aliases": [ + "performing_arts" + ], + "tags": [ + "theater", + "drama" + ] + }, + { + "emoji": "๐ŸŽจ", + "description": "artist palette", + "category": "Activity", + "aliases": [ + "art" + ], + "tags": [ + "design", + "paint" + ] + }, + { + "emoji": "๐ŸŽฌ", + "description": "clapper board", + "category": "Activity", + "aliases": [ + "clapper" + ], + "tags": [ + "film" + ] + }, + { + "emoji": "๐ŸŽค", + "description": "microphone", + "category": "Activity", + "aliases": [ + "microphone" + ], + "tags": [ + "sing" + ] + }, + { + "emoji": "๐ŸŽง", + "description": "headphone", + "category": "Activity", + "aliases": [ + "headphones" + ], + "tags": [ + "music", + "earphones" + ] + }, + { + "emoji": "๐ŸŽผ", + "description": "musical score", + "category": "Activity", + "aliases": [ + "musical_score" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽน", + "description": "musical keyboard", + "category": "Activity", + "aliases": [ + "musical_keyboard" + ], + "tags": [ + "piano" + ] + }, + { + "emoji": "๐Ÿฅ", + "description": "drum", + "category": "Activity", + "aliases": [ + "drum" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽท", + "description": "saxophone", + "category": "Activity", + "aliases": [ + "saxophone" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽบ", + "description": "trumpet", + "category": "Activity", + "aliases": [ + "trumpet" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽธ", + "description": "guitar", + "category": "Activity", + "aliases": [ + "guitar" + ], + "tags": [ + "rock" + ] + }, + { + "emoji": "๐ŸŽป", + "description": "violin", + "category": "Activity", + "aliases": [ + "violin" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽฒ", + "description": "game die", + "category": "Activity", + "aliases": [ + "game_die" + ], + "tags": [ + "dice", + "gambling" + ] + }, + { + "emoji": "๐ŸŽฏ", + "description": "direct hit", + "category": "Activity", + "aliases": [ + "dart" + ], + "tags": [ + "target" + ] + }, + { + "emoji": "๐ŸŽณ", + "description": "bowling", + "category": "Activity", + "aliases": [ + "bowling" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽฎ", + "description": "video game", + "category": "Activity", + "aliases": [ + "video_game" + ], + "tags": [ + "play", + "controller", + "console" + ] + }, + { + "emoji": "๐ŸŽฐ", + "description": "slot machine", + "category": "Activity", + "aliases": [ + "slot_machine" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš—", + "description": "automobile", + "category": "Places", + "aliases": [ + "car", + "red_car" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš•", + "description": "taxi", + "category": "Places", + "aliases": [ + "taxi" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš™", + "description": "sport utility vehicle", + "category": "Places", + "aliases": [ + "blue_car" + ], + "tags": [] + }, + { + "emoji": "๐ŸšŒ", + "description": "bus", + "category": "Places", + "aliases": [ + "bus" + ], + "tags": [] + }, + { + "emoji": "๐ŸšŽ", + "description": "trolleybus", + "category": "Places", + "aliases": [ + "trolleybus" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ", + "description": "racing car", + "category": "Places", + "aliases": [ + "racing_car" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš“", + "description": "police car", + "category": "Places", + "aliases": [ + "police_car" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš‘", + "description": "ambulance", + "category": "Places", + "aliases": [ + "ambulance" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš’", + "description": "fire engine", + "category": "Places", + "aliases": [ + "fire_engine" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš", + "description": "minibus", + "category": "Places", + "aliases": [ + "minibus" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšš", + "description": "delivery truck", + "category": "Places", + "aliases": [ + "truck" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš›", + "description": "articulated lorry", + "category": "Places", + "aliases": [ + "articulated_lorry" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšœ", + "description": "tractor", + "category": "Places", + "aliases": [ + "tractor" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ด", + "description": "kick scooter", + "category": "Places", + "aliases": [ + "kick_scooter" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฒ", + "description": "bicycle", + "category": "Places", + "aliases": [ + "bike" + ], + "tags": [ + "bicycle" + ] + }, + { + "emoji": "๐Ÿ›ต", + "description": "motor scooter", + "category": "Places", + "aliases": [ + "motor_scooter" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "motorcycle", + "category": "Places", + "aliases": [ + "motorcycle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšจ", + "description": "police car light", + "category": "Places", + "aliases": [ + "rotating_light" + ], + "tags": [ + "911", + "emergency" + ] + }, + { + "emoji": "๐Ÿš”", + "description": "oncoming police car", + "category": "Places", + "aliases": [ + "oncoming_police_car" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš", + "description": "oncoming bus", + "category": "Places", + "aliases": [ + "oncoming_bus" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš˜", + "description": "oncoming automobile", + "category": "Places", + "aliases": [ + "oncoming_automobile" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš–", + "description": "oncoming taxi", + "category": "Places", + "aliases": [ + "oncoming_taxi" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšก", + "description": "aerial tramway", + "category": "Places", + "aliases": [ + "aerial_tramway" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš ", + "description": "mountain cableway", + "category": "Places", + "aliases": [ + "mountain_cableway" + ], + "tags": [] + }, + { + "emoji": "๐ŸšŸ", + "description": "suspension railway", + "category": "Places", + "aliases": [ + "suspension_railway" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšƒ", + "description": "railway car", + "category": "Places", + "aliases": [ + "railway_car" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš‹", + "description": "tram car", + "category": "Places", + "aliases": [ + "train" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšž", + "description": "mountain railway", + "category": "Places", + "aliases": [ + "mountain_railway" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš", + "description": "monorail", + "category": "Places", + "aliases": [ + "monorail" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš„", + "description": "high-speed train", + "category": "Places", + "aliases": [ + "bullettrain_side" + ], + "tags": [ + "train" + ] + }, + { + "emoji": "๐Ÿš…", + "description": "high-speed train with bullet nose", + "category": "Places", + "aliases": [ + "bullettrain_front" + ], + "tags": [ + "train" + ] + }, + { + "emoji": "๐Ÿšˆ", + "description": "light rail", + "category": "Places", + "aliases": [ + "light_rail" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš‚", + "description": "locomotive", + "category": "Places", + "aliases": [ + "steam_locomotive" + ], + "tags": [ + "train" + ] + }, + { + "emoji": "๐Ÿš†", + "description": "train", + "category": "Places", + "aliases": [ + "train2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš‡", + "description": "metro", + "category": "Places", + "aliases": [ + "metro" + ], + "tags": [] + }, + { + "emoji": "๐ŸšŠ", + "description": "tram", + "category": "Places", + "aliases": [ + "tram" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš‰", + "description": "station", + "category": "Places", + "aliases": [ + "station" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš", + "description": "helicopter", + "category": "Places", + "aliases": [ + "helicopter" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ฉ", + "description": "small airplane", + "category": "Places", + "aliases": [ + "small_airplane" + ], + "tags": [ + "flight" + ] + }, + { + "emoji": "โœˆ๏ธ", + "description": "airplane", + "category": "Places", + "aliases": [ + "airplane" + ], + "tags": [ + "flight" + ] + }, + { + "emoji": "๐Ÿ›ซ", + "description": "airplane departure", + "category": "Places", + "aliases": [ + "flight_departure" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ฌ", + "description": "airplane arrival", + "category": "Places", + "aliases": [ + "flight_arrival" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš€", + "description": "rocket", + "category": "Places", + "aliases": [ + "rocket" + ], + "tags": [ + "ship", + "launch" + ] + }, + { + "emoji": "๐Ÿ›ฐ", + "description": "satellite", + "category": "Places", + "aliases": [ + "artificial_satellite" + ], + "tags": [ + "orbit", + "space" + ] + }, + { + "emoji": "๐Ÿ’บ", + "description": "seat", + "category": "Places", + "aliases": [ + "seat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ถ", + "description": "canoe", + "category": "Places", + "aliases": [ + "canoe" + ], + "tags": [] + }, + { + "emoji": "โ›ต๏ธ", + "description": "sailboat", + "category": "Places", + "aliases": [ + "boat", + "sailboat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ฅ", + "description": "motor boat", + "category": "Places", + "aliases": [ + "motor_boat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšค", + "description": "speedboat", + "category": "Places", + "aliases": [ + "speedboat" + ], + "tags": [ + "ship" + ] + }, + { + "emoji": "๐Ÿ›ณ", + "description": "passenger ship", + "category": "Places", + "aliases": [ + "passenger_ship" + ], + "tags": [ + "cruise" + ] + }, + { + "emoji": "โ›ด", + "description": "ferry", + "category": "Places", + "aliases": [ + "ferry" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšข", + "description": "ship", + "category": "Places", + "aliases": [ + "ship" + ], + "tags": [] + }, + { + "emoji": "โš“๏ธ", + "description": "anchor", + "category": "Places", + "aliases": [ + "anchor" + ], + "tags": [ + "ship" + ] + }, + { + "emoji": "๐Ÿšง", + "description": "construction", + "category": "Places", + "aliases": [ + "construction" + ], + "tags": [ + "wip" + ] + }, + { + "emoji": "โ›ฝ๏ธ", + "description": "fuel pump", + "category": "Places", + "aliases": [ + "fuelpump" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš", + "description": "bus stop", + "category": "Places", + "aliases": [ + "busstop" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฆ", + "description": "vertical traffic light", + "category": "Places", + "aliases": [ + "vertical_traffic_light" + ], + "tags": [ + "semaphore" + ] + }, + { + "emoji": "๐Ÿšฅ", + "description": "horizontal traffic light", + "category": "Places", + "aliases": [ + "traffic_light" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—บ", + "description": "world map", + "category": "Places", + "aliases": [ + "world_map" + ], + "tags": [ + "travel" + ] + }, + { + "emoji": "๐Ÿ—ฟ", + "description": "moai", + "category": "Places", + "aliases": [ + "moyai" + ], + "tags": [ + "stone" + ] + }, + { + "emoji": "๐Ÿ—ฝ", + "description": "Statue of Liberty", + "category": "Places", + "aliases": [ + "statue_of_liberty" + ], + "tags": [] + }, + { + "emoji": "โ›ฒ๏ธ", + "description": "fountain", + "category": "Places", + "aliases": [ + "fountain" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—ผ", + "description": "Tokyo tower", + "category": "Places", + "aliases": [ + "tokyo_tower" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฐ", + "description": "castle", + "category": "Places", + "aliases": [ + "european_castle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฏ", + "description": "Japanese castle", + "category": "Places", + "aliases": [ + "japanese_castle" + ], + "tags": [] + }, + { + "emoji": "๐ŸŸ", + "description": "stadium", + "category": "Places", + "aliases": [ + "stadium" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽก", + "description": "ferris wheel", + "category": "Places", + "aliases": [ + "ferris_wheel" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽข", + "description": "roller coaster", + "category": "Places", + "aliases": [ + "roller_coaster" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ ", + "description": "carousel horse", + "category": "Places", + "aliases": [ + "carousel_horse" + ], + "tags": [] + }, + { + "emoji": "โ›ฑ", + "description": "umbrella on ground", + "category": "Places", + "aliases": [ + "parasol_on_ground" + ], + "tags": [ + "beach_umbrella" + ] + }, + { + "emoji": "๐Ÿ–", + "description": "beach with umbrella", + "category": "Places", + "aliases": [ + "beach_umbrella" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "desert island", + "category": "Places", + "aliases": [ + "desert_island" + ], + "tags": [] + }, + { + "emoji": "โ›ฐ", + "description": "mountain", + "category": "Places", + "aliases": [ + "mountain" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”", + "description": "snow-capped mountain", + "category": "Places", + "aliases": [ + "mountain_snow" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—ป", + "description": "mount fuji", + "category": "Places", + "aliases": [ + "mount_fuji" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ‹", + "description": "volcano", + "category": "Places", + "aliases": [ + "volcano" + ], + "tags": [] + }, + { + "emoji": "๐Ÿœ", + "description": "desert", + "category": "Places", + "aliases": [ + "desert" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•", + "description": "camping", + "category": "Places", + "aliases": [ + "camping" + ], + "tags": [] + }, + { + "emoji": "โ›บ๏ธ", + "description": "tent", + "category": "Places", + "aliases": [ + "tent" + ], + "tags": [ + "camping" + ] + }, + { + "emoji": "๐Ÿ›ค", + "description": "railway track", + "category": "Places", + "aliases": [ + "railway_track" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ฃ", + "description": "motorway", + "category": "Places", + "aliases": [ + "motorway" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—", + "description": "building construction", + "category": "Places", + "aliases": [ + "building_construction" + ], + "tags": [] + }, + { + "emoji": "๐Ÿญ", + "description": "factory", + "category": "Places", + "aliases": [ + "factory" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ ", + "description": "house", + "category": "Places", + "aliases": [ + "house" + ], + "tags": [] + }, + { + "emoji": "๐Ÿก", + "description": "house with garden", + "category": "Places", + "aliases": [ + "house_with_garden" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ˜", + "description": "house", + "category": "Places", + "aliases": [ + "houses" + ], + "tags": [] + }, + { + "emoji": "๐Ÿš", + "description": "derelict house", + "category": "Places", + "aliases": [ + "derelict_house" + ], + "tags": [] + }, + { + "emoji": "๐Ÿข", + "description": "office building", + "category": "Places", + "aliases": [ + "office" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฌ", + "description": "department store", + "category": "Places", + "aliases": [ + "department_store" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฃ", + "description": "Japanese post office", + "category": "Places", + "aliases": [ + "post_office" + ], + "tags": [] + }, + { + "emoji": "๐Ÿค", + "description": "post office", + "category": "Places", + "aliases": [ + "european_post_office" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฅ", + "description": "hospital", + "category": "Places", + "aliases": [ + "hospital" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฆ", + "description": "bank", + "category": "Places", + "aliases": [ + "bank" + ], + "tags": [] + }, + { + "emoji": "๐Ÿจ", + "description": "hotel", + "category": "Places", + "aliases": [ + "hotel" + ], + "tags": [] + }, + { + "emoji": "๐Ÿช", + "description": "convenience store", + "category": "Places", + "aliases": [ + "convenience_store" + ], + "tags": [] + }, + { + "emoji": "๐Ÿซ", + "description": "school", + "category": "Places", + "aliases": [ + "school" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฉ", + "description": "love hotel", + "category": "Places", + "aliases": [ + "love_hotel" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’’", + "description": "wedding", + "category": "Places", + "aliases": [ + "wedding" + ], + "tags": [ + "marriage" + ] + }, + { + "emoji": "๐Ÿ›", + "description": "classical building", + "category": "Places", + "aliases": [ + "classical_building" + ], + "tags": [] + }, + { + "emoji": "โ›ช๏ธ", + "description": "church", + "category": "Places", + "aliases": [ + "church" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•Œ", + "description": "mosque", + "category": "Places", + "aliases": [ + "mosque" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•", + "description": "synagogue", + "category": "Places", + "aliases": [ + "synagogue" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•‹", + "description": "kaaba", + "category": "Places", + "aliases": [ + "kaaba" + ], + "tags": [] + }, + { + "emoji": "โ›ฉ", + "description": "shinto shrine", + "category": "Places", + "aliases": [ + "shinto_shrine" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—พ", + "description": "map of Japan", + "category": "Places", + "aliases": [ + "japan" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ‘", + "description": "moon viewing ceremony", + "category": "Places", + "aliases": [ + "rice_scene" + ], + "tags": [] + }, + { + "emoji": "๐Ÿž", + "description": "national park", + "category": "Places", + "aliases": [ + "national_park" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ…", + "description": "sunrise", + "category": "Places", + "aliases": [ + "sunrise" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ„", + "description": "sunrise over mountains", + "category": "Places", + "aliases": [ + "sunrise_over_mountains" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ ", + "description": "shooting star", + "category": "Places", + "aliases": [ + "stars" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ‡", + "description": "sparkler", + "category": "Places", + "aliases": [ + "sparkler" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ†", + "description": "fireworks", + "category": "Places", + "aliases": [ + "fireworks" + ], + "tags": [ + "festival", + "celebration" + ] + }, + { + "emoji": "๐ŸŒ‡", + "description": "sunset", + "category": "Places", + "aliases": [ + "city_sunrise" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ†", + "description": "cityscape at dusk", + "category": "Places", + "aliases": [ + "city_sunset" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ™", + "description": "cityscape", + "category": "Places", + "aliases": [ + "cityscape" + ], + "tags": [ + "skyline" + ] + }, + { + "emoji": "๐ŸŒƒ", + "description": "night with stars", + "category": "Places", + "aliases": [ + "night_with_stars" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒŒ", + "description": "milky way", + "category": "Places", + "aliases": [ + "milky_way" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ‰", + "description": "bridge at night", + "category": "Places", + "aliases": [ + "bridge_at_night" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ", + "description": "foggy", + "category": "Places", + "aliases": [ + "foggy" + ], + "tags": [ + "karl" + ] + }, + { + "emoji": "โŒš๏ธ", + "description": "watch", + "category": "Objects", + "aliases": [ + "watch" + ], + "tags": [ + "time" + ] + }, + { + "emoji": "๐Ÿ“ฑ", + "description": "mobile phone", + "category": "Objects", + "aliases": [ + "iphone" + ], + "tags": [ + "smartphone", + "mobile" + ] + }, + { + "emoji": "๐Ÿ“ฒ", + "description": "mobile phone with arrow", + "category": "Objects", + "aliases": [ + "calling" + ], + "tags": [ + "call", + "incoming" + ] + }, + { + "emoji": "๐Ÿ’ป", + "description": "laptop computer", + "category": "Objects", + "aliases": [ + "computer" + ], + "tags": [ + "desktop", + "screen" + ] + }, + { + "emoji": "โŒจ๏ธ", + "description": "keyboard", + "category": "Objects", + "aliases": [ + "keyboard" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–ฅ", + "description": "desktop computer", + "category": "Objects", + "aliases": [ + "desktop_computer" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–จ", + "description": "printer", + "category": "Objects", + "aliases": [ + "printer" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–ฑ", + "description": "computer mouse", + "category": "Objects", + "aliases": [ + "computer_mouse" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–ฒ", + "description": "trackball", + "category": "Objects", + "aliases": [ + "trackball" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•น", + "description": "joystick", + "category": "Objects", + "aliases": [ + "joystick" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—œ", + "description": "clamp", + "category": "Objects", + "aliases": [ + "clamp" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ฝ", + "description": "computer disk", + "category": "Objects", + "aliases": [ + "minidisc" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’พ", + "description": "floppy disk", + "category": "Objects", + "aliases": [ + "floppy_disk" + ], + "tags": [ + "save" + ] + }, + { + "emoji": "๐Ÿ’ฟ", + "description": "optical disk", + "category": "Objects", + "aliases": [ + "cd" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“€", + "description": "dvd", + "category": "Objects", + "aliases": [ + "dvd" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ผ", + "description": "videocassette", + "category": "Objects", + "aliases": [ + "vhs" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ท", + "description": "camera", + "category": "Objects", + "aliases": [ + "camera" + ], + "tags": [ + "photo" + ] + }, + { + "emoji": "๐Ÿ“ธ", + "description": "camera with flash", + "category": "Objects", + "aliases": [ + "camera_flash" + ], + "tags": [ + "photo" + ] + }, + { + "emoji": "๐Ÿ“น", + "description": "video camera", + "category": "Objects", + "aliases": [ + "video_camera" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽฅ", + "description": "movie camera", + "category": "Objects", + "aliases": [ + "movie_camera" + ], + "tags": [ + "film", + "video" + ] + }, + { + "emoji": "๐Ÿ“ฝ", + "description": "film projector", + "category": "Objects", + "aliases": [ + "film_projector" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽž", + "description": "film frames", + "category": "Objects", + "aliases": [ + "film_strip" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ž", + "description": "telephone receiver", + "category": "Objects", + "aliases": [ + "telephone_receiver" + ], + "tags": [ + "phone", + "call" + ] + }, + { + "emoji": "โ˜Ž๏ธ", + "description": "telephone", + "category": "Objects", + "aliases": [ + "phone", + "telephone" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“Ÿ", + "description": "pager", + "category": "Objects", + "aliases": [ + "pager" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ ", + "description": "fax machine", + "category": "Objects", + "aliases": [ + "fax" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“บ", + "description": "television", + "category": "Objects", + "aliases": [ + "tv" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ป", + "description": "radio", + "category": "Objects", + "aliases": [ + "radio" + ], + "tags": [ + "podcast" + ] + }, + { + "emoji": "๐ŸŽ™", + "description": "studio microphone", + "category": "Objects", + "aliases": [ + "studio_microphone" + ], + "tags": [ + "podcast" + ] + }, + { + "emoji": "๐ŸŽš", + "description": "level slider", + "category": "Objects", + "aliases": [ + "level_slider" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ›", + "description": "control knobs", + "category": "Objects", + "aliases": [ + "control_knobs" + ], + "tags": [] + }, + { + "emoji": "โฑ", + "description": "stopwatch", + "category": "Objects", + "aliases": [ + "stopwatch" + ], + "tags": [] + }, + { + "emoji": "โฒ", + "description": "timer clock", + "category": "Objects", + "aliases": [ + "timer_clock" + ], + "tags": [] + }, + { + "emoji": "โฐ", + "description": "alarm clock", + "category": "Objects", + "aliases": [ + "alarm_clock" + ], + "tags": [ + "morning" + ] + }, + { + "emoji": "๐Ÿ•ฐ", + "description": "mantelpiece clock", + "category": "Objects", + "aliases": [ + "mantelpiece_clock" + ], + "tags": [] + }, + { + "emoji": "โŒ›๏ธ", + "description": "hourglass", + "category": "Objects", + "aliases": [ + "hourglass" + ], + "tags": [ + "time" + ] + }, + { + "emoji": "โณ", + "description": "hourglass with flowing sand", + "category": "Objects", + "aliases": [ + "hourglass_flowing_sand" + ], + "tags": [ + "time" + ] + }, + { + "emoji": "๐Ÿ“ก", + "description": "satellite antenna", + "category": "Objects", + "aliases": [ + "satellite" + ], + "tags": [ + "signal" + ] + }, + { + "emoji": "๐Ÿ”‹", + "description": "battery", + "category": "Objects", + "aliases": [ + "battery" + ], + "tags": [ + "power" + ] + }, + { + "emoji": "๐Ÿ”Œ", + "description": "electric plug", + "category": "Objects", + "aliases": [ + "electric_plug" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ก", + "description": "light bulb", + "category": "Objects", + "aliases": [ + "bulb" + ], + "tags": [ + "idea", + "light" + ] + }, + { + "emoji": "๐Ÿ”ฆ", + "description": "flashlight", + "category": "Objects", + "aliases": [ + "flashlight" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ฏ", + "description": "candle", + "category": "Objects", + "aliases": [ + "candle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—‘", + "description": "wastebasket", + "category": "Objects", + "aliases": [ + "wastebasket" + ], + "tags": [ + "trash" + ] + }, + { + "emoji": "๐Ÿ›ข", + "description": "oil drum", + "category": "Objects", + "aliases": [ + "oil_drum" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ธ", + "description": "money with wings", + "category": "Objects", + "aliases": [ + "money_with_wings" + ], + "tags": [ + "dollar" + ] + }, + { + "emoji": "๐Ÿ’ต", + "description": "dollar banknote", + "category": "Objects", + "aliases": [ + "dollar" + ], + "tags": [ + "money" + ] + }, + { + "emoji": "๐Ÿ’ด", + "description": "yen banknote", + "category": "Objects", + "aliases": [ + "yen" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ถ", + "description": "euro banknote", + "category": "Objects", + "aliases": [ + "euro" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ท", + "description": "pound banknote", + "category": "Objects", + "aliases": [ + "pound" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ฐ", + "description": "money bag", + "category": "Objects", + "aliases": [ + "moneybag" + ], + "tags": [ + "dollar", + "cream" + ] + }, + { + "emoji": "๐Ÿ’ณ", + "description": "credit card", + "category": "Objects", + "aliases": [ + "credit_card" + ], + "tags": [ + "subscription" + ] + }, + { + "emoji": "๐Ÿ’Ž", + "description": "gem stone", + "category": "Objects", + "aliases": [ + "gem" + ], + "tags": [ + "diamond" + ] + }, + { + "emoji": "โš–๏ธ", + "description": "balance scale", + "category": "Objects", + "aliases": [ + "balance_scale" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ง", + "description": "wrench", + "category": "Objects", + "aliases": [ + "wrench" + ], + "tags": [ + "tool" + ] + }, + { + "emoji": "๐Ÿ”จ", + "description": "hammer", + "category": "Objects", + "aliases": [ + "hammer" + ], + "tags": [ + "tool" + ] + }, + { + "emoji": "โš’", + "description": "hammer and pick", + "category": "Objects", + "aliases": [ + "hammer_and_pick" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ› ", + "description": "hammer and wrench", + "category": "Objects", + "aliases": [ + "hammer_and_wrench" + ], + "tags": [] + }, + { + "emoji": "โ›", + "description": "pick", + "category": "Objects", + "aliases": [ + "pick" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฉ", + "description": "nut and bolt", + "category": "Objects", + "aliases": [ + "nut_and_bolt" + ], + "tags": [] + }, + { + "emoji": "โš™๏ธ", + "description": "gear", + "category": "Objects", + "aliases": [ + "gear" + ], + "tags": [] + }, + { + "emoji": "โ›“", + "description": "chains", + "category": "Objects", + "aliases": [ + "chains" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ซ", + "description": "pistol", + "category": "Objects", + "aliases": [ + "gun" + ], + "tags": [ + "shoot", + "weapon" + ] + }, + { + "emoji": "๐Ÿ’ฃ", + "description": "bomb", + "category": "Objects", + "aliases": [ + "bomb" + ], + "tags": [ + "boom" + ] + }, + { + "emoji": "๐Ÿ”ช", + "description": "kitchen knife", + "category": "Objects", + "aliases": [ + "hocho", + "knife" + ], + "tags": [ + "cut", + "chop" + ] + }, + { + "emoji": "๐Ÿ—ก", + "description": "dagger", + "category": "Objects", + "aliases": [ + "dagger" + ], + "tags": [] + }, + { + "emoji": "โš”๏ธ", + "description": "crossed swords", + "category": "Objects", + "aliases": [ + "crossed_swords" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ก", + "description": "shield", + "category": "Objects", + "aliases": [ + "shield" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฌ", + "description": "cigarette", + "category": "Objects", + "aliases": [ + "smoking" + ], + "tags": [ + "cigarette" + ] + }, + { + "emoji": "โšฐ๏ธ", + "description": "coffin", + "category": "Objects", + "aliases": [ + "coffin" + ], + "tags": [ + "funeral" + ] + }, + { + "emoji": "โšฑ๏ธ", + "description": "funeral urn", + "category": "Objects", + "aliases": [ + "funeral_urn" + ], + "tags": [] + }, + { + "emoji": "๐Ÿบ", + "description": "amphora", + "category": "Objects", + "aliases": [ + "amphora" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฎ", + "description": "crystal ball", + "category": "Objects", + "aliases": [ + "crystal_ball" + ], + "tags": [ + "fortune" + ] + }, + { + "emoji": "๐Ÿ“ฟ", + "description": "prayer beads", + "category": "Objects", + "aliases": [ + "prayer_beads" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ˆ", + "description": "barber pole", + "category": "Objects", + "aliases": [ + "barber" + ], + "tags": [] + }, + { + "emoji": "โš—๏ธ", + "description": "alembic", + "category": "Objects", + "aliases": [ + "alembic" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ญ", + "description": "telescope", + "category": "Objects", + "aliases": [ + "telescope" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฌ", + "description": "microscope", + "category": "Objects", + "aliases": [ + "microscope" + ], + "tags": [ + "science", + "laboratory", + "investigate" + ] + }, + { + "emoji": "๐Ÿ•ณ", + "description": "hole", + "category": "Objects", + "aliases": [ + "hole" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’Š", + "description": "pill", + "category": "Objects", + "aliases": [ + "pill" + ], + "tags": [ + "health", + "medicine" + ] + }, + { + "emoji": "๐Ÿ’‰", + "description": "syringe", + "category": "Objects", + "aliases": [ + "syringe" + ], + "tags": [ + "health", + "hospital", + "needle" + ] + }, + { + "emoji": "๐ŸŒก", + "description": "thermometer", + "category": "Objects", + "aliases": [ + "thermometer" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฝ", + "description": "toilet", + "category": "Objects", + "aliases": [ + "toilet" + ], + "tags": [ + "wc" + ] + }, + { + "emoji": "๐Ÿšฐ", + "description": "potable water", + "category": "Objects", + "aliases": [ + "potable_water" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฟ", + "description": "shower", + "category": "Objects", + "aliases": [ + "shower" + ], + "tags": [ + "bath" + ] + }, + { + "emoji": "๐Ÿ›", + "description": "bathtub", + "category": "Objects", + "aliases": [ + "bathtub" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›€", + "description": "person taking bath", + "category": "Objects", + "aliases": [ + "bath" + ], + "tags": [ + "shower" + ] + }, + { + "emoji": "๐Ÿ›Ž", + "description": "bellhop bell", + "category": "Objects", + "aliases": [ + "bellhop_bell" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”‘", + "description": "key", + "category": "Objects", + "aliases": [ + "key" + ], + "tags": [ + "lock", + "password" + ] + }, + { + "emoji": "๐Ÿ—", + "description": "old key", + "category": "Objects", + "aliases": [ + "old_key" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšช", + "description": "door", + "category": "Objects", + "aliases": [ + "door" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›‹", + "description": "couch and lamp", + "category": "Objects", + "aliases": [ + "couch_and_lamp" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›", + "description": "bed", + "category": "Objects", + "aliases": [ + "bed" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›Œ", + "description": "person in bed", + "category": "Objects", + "aliases": [ + "sleeping_bed" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–ผ", + "description": "framed picture", + "category": "Objects", + "aliases": [ + "framed_picture" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›", + "description": "shopping bags", + "category": "Objects", + "aliases": [ + "shopping" + ], + "tags": [ + "bags" + ] + }, + { + "emoji": "๐Ÿ›’", + "description": "shopping cart", + "category": "Objects", + "aliases": [ + "shopping_cart" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ", + "description": "wrapped gift", + "category": "Objects", + "aliases": [ + "gift" + ], + "tags": [ + "present", + "birthday", + "christmas" + ] + }, + { + "emoji": "๐ŸŽˆ", + "description": "balloon", + "category": "Objects", + "aliases": [ + "balloon" + ], + "tags": [ + "party", + "birthday" + ] + }, + { + "emoji": "๐ŸŽ", + "description": "carp streamer", + "category": "Objects", + "aliases": [ + "flags" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ€", + "description": "ribbon", + "category": "Objects", + "aliases": [ + "ribbon" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽŠ", + "description": "confetti ball", + "category": "Objects", + "aliases": [ + "confetti_ball" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ‰", + "description": "party popper", + "category": "Objects", + "aliases": [ + "tada" + ], + "tags": [ + "hooray", + "party" + ] + }, + { + "emoji": "๐ŸŽŽ", + "description": "Japanese dolls", + "category": "Objects", + "aliases": [ + "dolls" + ], + "tags": [] + }, + { + "emoji": "๐Ÿฎ", + "description": "red paper lantern", + "category": "Objects", + "aliases": [ + "izakaya_lantern", + "lantern" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽ", + "description": "wind chime", + "category": "Objects", + "aliases": [ + "wind_chime" + ], + "tags": [] + }, + { + "emoji": "โœ‰๏ธ", + "description": "envelope", + "category": "Objects", + "aliases": [ + "email", + "envelope" + ], + "tags": [ + "letter" + ] + }, + { + "emoji": "๐Ÿ“ฉ", + "description": "envelope with arrow", + "category": "Objects", + "aliases": [ + "envelope_with_arrow" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“จ", + "description": "incoming envelope", + "category": "Objects", + "aliases": [ + "incoming_envelope" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ง", + "description": "e-mail", + "category": "Objects", + "aliases": [ + "e-mail" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’Œ", + "description": "love letter", + "category": "Objects", + "aliases": [ + "love_letter" + ], + "tags": [ + "email", + "envelope" + ] + }, + { + "emoji": "๐Ÿ“ฅ", + "description": "inbox tray", + "category": "Objects", + "aliases": [ + "inbox_tray" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ค", + "description": "outbox tray", + "category": "Objects", + "aliases": [ + "outbox_tray" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ฆ", + "description": "package", + "category": "Objects", + "aliases": [ + "package" + ], + "tags": [ + "shipping" + ] + }, + { + "emoji": "๐Ÿท", + "description": "label", + "category": "Objects", + "aliases": [ + "label" + ], + "tags": [ + "tag" + ] + }, + { + "emoji": "๐Ÿ“ช", + "description": "closed mailbox with lowered flag", + "category": "Objects", + "aliases": [ + "mailbox_closed" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ซ", + "description": "closed mailbox with raised flag", + "category": "Objects", + "aliases": [ + "mailbox" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ฌ", + "description": "open mailbox with raised flag", + "category": "Objects", + "aliases": [ + "mailbox_with_mail" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ญ", + "description": "open mailbox with lowered flag", + "category": "Objects", + "aliases": [ + "mailbox_with_no_mail" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ฎ", + "description": "postbox", + "category": "Objects", + "aliases": [ + "postbox" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ฏ", + "description": "postal horn", + "category": "Objects", + "aliases": [ + "postal_horn" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“œ", + "description": "scroll", + "category": "Objects", + "aliases": [ + "scroll" + ], + "tags": [ + "document" + ] + }, + { + "emoji": "๐Ÿ“ƒ", + "description": "page with curl", + "category": "Objects", + "aliases": [ + "page_with_curl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“„", + "description": "page facing up", + "category": "Objects", + "aliases": [ + "page_facing_up" + ], + "tags": [ + "document" + ] + }, + { + "emoji": "๐Ÿ“‘", + "description": "bookmark tabs", + "category": "Objects", + "aliases": [ + "bookmark_tabs" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“Š", + "description": "bar chart", + "category": "Objects", + "aliases": [ + "bar_chart" + ], + "tags": [ + "stats", + "metrics" + ] + }, + { + "emoji": "๐Ÿ“ˆ", + "description": "chart increasing", + "category": "Objects", + "aliases": [ + "chart_with_upwards_trend" + ], + "tags": [ + "graph", + "metrics" + ] + }, + { + "emoji": "๐Ÿ“‰", + "description": "chart decreasing", + "category": "Objects", + "aliases": [ + "chart_with_downwards_trend" + ], + "tags": [ + "graph", + "metrics" + ] + }, + { + "emoji": "๐Ÿ—’", + "description": "spiral notepad", + "category": "Objects", + "aliases": [ + "spiral_notepad" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—“", + "description": "spiral calendar", + "category": "Objects", + "aliases": [ + "spiral_calendar" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“†", + "description": "tear-off calendar", + "category": "Objects", + "aliases": [ + "calendar" + ], + "tags": [ + "schedule" + ] + }, + { + "emoji": "๐Ÿ“…", + "description": "calendar", + "category": "Objects", + "aliases": [ + "date" + ], + "tags": [ + "calendar", + "schedule" + ] + }, + { + "emoji": "๐Ÿ“‡", + "description": "card index", + "category": "Objects", + "aliases": [ + "card_index" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—ƒ", + "description": "card file box", + "category": "Objects", + "aliases": [ + "card_file_box" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—ณ", + "description": "ballot box with ballot", + "category": "Objects", + "aliases": [ + "ballot_box" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—„", + "description": "file cabinet", + "category": "Objects", + "aliases": [ + "file_cabinet" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“‹", + "description": "clipboard", + "category": "Objects", + "aliases": [ + "clipboard" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“", + "description": "file folder", + "category": "Objects", + "aliases": [ + "file_folder" + ], + "tags": [ + "directory" + ] + }, + { + "emoji": "๐Ÿ“‚", + "description": "open file folder", + "category": "Objects", + "aliases": [ + "open_file_folder" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—‚", + "description": "card index dividers", + "category": "Objects", + "aliases": [ + "card_index_dividers" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ—ž", + "description": "rolled-up newspaper", + "category": "Objects", + "aliases": [ + "newspaper_roll" + ], + "tags": [ + "press" + ] + }, + { + "emoji": "๐Ÿ“ฐ", + "description": "newspaper", + "category": "Objects", + "aliases": [ + "newspaper" + ], + "tags": [ + "press" + ] + }, + { + "emoji": "๐Ÿ““", + "description": "notebook", + "category": "Objects", + "aliases": [ + "notebook" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“”", + "description": "notebook with decorative cover", + "category": "Objects", + "aliases": [ + "notebook_with_decorative_cover" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“’", + "description": "ledger", + "category": "Objects", + "aliases": [ + "ledger" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“•", + "description": "closed book", + "category": "Objects", + "aliases": [ + "closed_book" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“—", + "description": "green book", + "category": "Objects", + "aliases": [ + "green_book" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“˜", + "description": "blue book", + "category": "Objects", + "aliases": [ + "blue_book" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“™", + "description": "orange book", + "category": "Objects", + "aliases": [ + "orange_book" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“š", + "description": "books", + "category": "Objects", + "aliases": [ + "books" + ], + "tags": [ + "library" + ] + }, + { + "emoji": "๐Ÿ“–", + "description": "open book", + "category": "Objects", + "aliases": [ + "book", + "open_book" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”–", + "description": "bookmark", + "category": "Objects", + "aliases": [ + "bookmark" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”—", + "description": "link", + "category": "Objects", + "aliases": [ + "link" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“Ž", + "description": "paperclip", + "category": "Objects", + "aliases": [ + "paperclip" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–‡", + "description": "linked paperclips", + "category": "Objects", + "aliases": [ + "paperclips" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“", + "description": "triangular ruler", + "category": "Objects", + "aliases": [ + "triangular_ruler" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“", + "description": "straight ruler", + "category": "Objects", + "aliases": [ + "straight_ruler" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“Œ", + "description": "pushpin", + "category": "Objects", + "aliases": [ + "pushpin" + ], + "tags": [ + "location" + ] + }, + { + "emoji": "๐Ÿ“", + "description": "round pushpin", + "category": "Objects", + "aliases": [ + "round_pushpin" + ], + "tags": [ + "location" + ] + }, + { + "emoji": "โœ‚๏ธ", + "description": "scissors", + "category": "Objects", + "aliases": [ + "scissors" + ], + "tags": [ + "cut" + ] + }, + { + "emoji": "๐Ÿ–Š", + "description": "pen", + "category": "Objects", + "aliases": [ + "pen" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–‹", + "description": "fountain pen", + "category": "Objects", + "aliases": [ + "fountain_pen" + ], + "tags": [] + }, + { + "emoji": "โœ’๏ธ", + "description": "black nib", + "category": "Objects", + "aliases": [ + "black_nib" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–Œ", + "description": "paintbrush", + "category": "Objects", + "aliases": [ + "paintbrush" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–", + "description": "crayon", + "category": "Objects", + "aliases": [ + "crayon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“", + "description": "memo", + "category": "Objects", + "aliases": [ + "memo", + "pencil" + ], + "tags": [ + "document", + "note" + ] + }, + { + "emoji": "โœ๏ธ", + "description": "pencil", + "category": "Objects", + "aliases": [ + "pencil2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”", + "description": "left-pointing magnifying glass", + "category": "Objects", + "aliases": [ + "mag" + ], + "tags": [ + "search", + "zoom" + ] + }, + { + "emoji": "๐Ÿ”Ž", + "description": "right-pointing magnifying glass", + "category": "Objects", + "aliases": [ + "mag_right" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”", + "description": "locked with pen", + "category": "Objects", + "aliases": [ + "lock_with_ink_pen" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”", + "description": "locked with key", + "category": "Objects", + "aliases": [ + "closed_lock_with_key" + ], + "tags": [ + "security" + ] + }, + { + "emoji": "๐Ÿ”’", + "description": "locked", + "category": "Objects", + "aliases": [ + "lock" + ], + "tags": [ + "security", + "private" + ] + }, + { + "emoji": "๐Ÿ”“", + "description": "unlocked", + "category": "Objects", + "aliases": [ + "unlock" + ], + "tags": [ + "security" + ] + }, + { + "emoji": "โค๏ธ", + "description": "red heart", + "category": "Symbols", + "aliases": [ + "heart" + ], + "tags": [ + "love" + ] + }, + { + "emoji": "๐Ÿ’›", + "description": "yellow heart", + "category": "Symbols", + "aliases": [ + "yellow_heart" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’š", + "description": "green heart", + "category": "Symbols", + "aliases": [ + "green_heart" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’™", + "description": "blue heart", + "category": "Symbols", + "aliases": [ + "blue_heart" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’œ", + "description": "purple heart", + "category": "Symbols", + "aliases": [ + "purple_heart" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ–ค", + "description": "black heart", + "category": "Symbols", + "aliases": [ + "black_heart" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’”", + "description": "broken heart", + "category": "Symbols", + "aliases": [ + "broken_heart" + ], + "tags": [] + }, + { + "emoji": "โฃ๏ธ", + "description": "heavy heart exclamation", + "category": "Symbols", + "aliases": [ + "heavy_heart_exclamation" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’•", + "description": "two hearts", + "category": "Symbols", + "aliases": [ + "two_hearts" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ž", + "description": "revolving hearts", + "category": "Symbols", + "aliases": [ + "revolving_hearts" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’“", + "description": "beating heart", + "category": "Symbols", + "aliases": [ + "heartbeat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’—", + "description": "growing heart", + "category": "Symbols", + "aliases": [ + "heartpulse" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’–", + "description": "sparkling heart", + "category": "Symbols", + "aliases": [ + "sparkling_heart" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’˜", + "description": "heart with arrow", + "category": "Symbols", + "aliases": [ + "cupid" + ], + "tags": [ + "love", + "heart" + ] + }, + { + "emoji": "๐Ÿ’", + "description": "heart with ribbon", + "category": "Symbols", + "aliases": [ + "gift_heart" + ], + "tags": [ + "chocolates" + ] + }, + { + "emoji": "๐Ÿ’Ÿ", + "description": "heart decoration", + "category": "Symbols", + "aliases": [ + "heart_decoration" + ], + "tags": [] + }, + { + "emoji": "โ˜ฎ๏ธ", + "description": "peace symbol", + "category": "Symbols", + "aliases": [ + "peace_symbol" + ], + "tags": [] + }, + { + "emoji": "โœ๏ธ", + "description": "latin cross", + "category": "Symbols", + "aliases": [ + "latin_cross" + ], + "tags": [] + }, + { + "emoji": "โ˜ช๏ธ", + "description": "star and crescent", + "category": "Symbols", + "aliases": [ + "star_and_crescent" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•‰", + "description": "om", + "category": "Symbols", + "aliases": [ + "om" + ], + "tags": [] + }, + { + "emoji": "โ˜ธ๏ธ", + "description": "wheel of dharma", + "category": "Symbols", + "aliases": [ + "wheel_of_dharma" + ], + "tags": [] + }, + { + "emoji": "โœก๏ธ", + "description": "star of David", + "category": "Symbols", + "aliases": [ + "star_of_david" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฏ", + "description": "dotted six-pointed star", + "category": "Symbols", + "aliases": [ + "six_pointed_star" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•Ž", + "description": "menorah", + "category": "Symbols", + "aliases": [ + "menorah" + ], + "tags": [] + }, + { + "emoji": "โ˜ฏ๏ธ", + "description": "yin yang", + "category": "Symbols", + "aliases": [ + "yin_yang" + ], + "tags": [] + }, + { + "emoji": "โ˜ฆ๏ธ", + "description": "orthodox cross", + "category": "Symbols", + "aliases": [ + "orthodox_cross" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›", + "description": "place of worship", + "category": "Symbols", + "aliases": [ + "place_of_worship" + ], + "tags": [] + }, + { + "emoji": "โ›Ž", + "description": "Ophiuchus", + "category": "Symbols", + "aliases": [ + "ophiuchus" + ], + "tags": [] + }, + { + "emoji": "โ™ˆ๏ธ", + "description": "Aries", + "category": "Symbols", + "aliases": [ + "aries" + ], + "tags": [] + }, + { + "emoji": "โ™‰๏ธ", + "description": "Taurus", + "category": "Symbols", + "aliases": [ + "taurus" + ], + "tags": [] + }, + { + "emoji": "โ™Š๏ธ", + "description": "Gemini", + "category": "Symbols", + "aliases": [ + "gemini" + ], + "tags": [] + }, + { + "emoji": "โ™‹๏ธ", + "description": "Cancer", + "category": "Symbols", + "aliases": [ + "cancer" + ], + "tags": [] + }, + { + "emoji": "โ™Œ๏ธ", + "description": "Leo", + "category": "Symbols", + "aliases": [ + "leo" + ], + "tags": [] + }, + { + "emoji": "โ™๏ธ", + "description": "Virgo", + "category": "Symbols", + "aliases": [ + "virgo" + ], + "tags": [] + }, + { + "emoji": "โ™Ž๏ธ", + "description": "Libra", + "category": "Symbols", + "aliases": [ + "libra" + ], + "tags": [] + }, + { + "emoji": "โ™๏ธ", + "description": "Scorpius", + "category": "Symbols", + "aliases": [ + "scorpius" + ], + "tags": [] + }, + { + "emoji": "โ™๏ธ", + "description": "Sagittarius", + "category": "Symbols", + "aliases": [ + "sagittarius" + ], + "tags": [] + }, + { + "emoji": "โ™‘๏ธ", + "description": "Capricorn", + "category": "Symbols", + "aliases": [ + "capricorn" + ], + "tags": [] + }, + { + "emoji": "โ™’๏ธ", + "description": "Aquarius", + "category": "Symbols", + "aliases": [ + "aquarius" + ], + "tags": [] + }, + { + "emoji": "โ™“๏ธ", + "description": "Pisces", + "category": "Symbols", + "aliases": [ + "pisces" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†”", + "description": "ID button", + "category": "Symbols", + "aliases": [ + "id" + ], + "tags": [] + }, + { + "emoji": "โš›๏ธ", + "description": "atom symbol", + "category": "Symbols", + "aliases": [ + "atom_symbol" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‰‘", + "description": "Japanese โ€œacceptableโ€ button", + "category": "Symbols", + "aliases": [ + "accept" + ], + "tags": [] + }, + { + "emoji": "โ˜ข๏ธ", + "description": "radioactive", + "category": "Symbols", + "aliases": [ + "radioactive" + ], + "tags": [] + }, + { + "emoji": "โ˜ฃ๏ธ", + "description": "biohazard", + "category": "Symbols", + "aliases": [ + "biohazard" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ด", + "description": "mobile phone off", + "category": "Symbols", + "aliases": [ + "mobile_phone_off" + ], + "tags": [ + "mute", + "off" + ] + }, + { + "emoji": "๐Ÿ“ณ", + "description": "vibration mode", + "category": "Symbols", + "aliases": [ + "vibration_mode" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆถ", + "description": "Japanese โ€œnot free of chargeโ€ button", + "category": "Symbols", + "aliases": [ + "u6709" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆš๏ธ", + "description": "Japanese โ€œfree of chargeโ€ button", + "category": "Symbols", + "aliases": [ + "u7121" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆธ", + "description": "Japanese โ€œapplicationโ€ button", + "category": "Symbols", + "aliases": [ + "u7533" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆบ", + "description": "Japanese โ€œopen for businessโ€ button", + "category": "Symbols", + "aliases": [ + "u55b6" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆท๏ธ", + "description": "Japanese โ€œmonthly amountโ€ button", + "category": "Symbols", + "aliases": [ + "u6708" + ], + "tags": [] + }, + { + "emoji": "โœด๏ธ", + "description": "eight-pointed star", + "category": "Symbols", + "aliases": [ + "eight_pointed_black_star" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†š", + "description": "VS button", + "category": "Symbols", + "aliases": [ + "vs" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ฎ", + "description": "white flower", + "category": "Symbols", + "aliases": [ + "white_flower" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‰", + "description": "Japanese โ€œbargainโ€ button", + "category": "Symbols", + "aliases": [ + "ideograph_advantage" + ], + "tags": [] + }, + { + "emoji": "ใŠ™๏ธ", + "description": "Japanese โ€œsecretโ€ button", + "category": "Symbols", + "aliases": [ + "secret" + ], + "tags": [] + }, + { + "emoji": "ใŠ—๏ธ", + "description": "Japanese โ€œcongratulationsโ€ button", + "category": "Symbols", + "aliases": [ + "congratulations" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆด", + "description": "Japanese โ€œpassing gradeโ€ button", + "category": "Symbols", + "aliases": [ + "u5408" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆต", + "description": "Japanese โ€œno vacancyโ€ button", + "category": "Symbols", + "aliases": [ + "u6e80" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆน", + "description": "Japanese โ€œdiscountโ€ button", + "category": "Symbols", + "aliases": [ + "u5272" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆฒ", + "description": "Japanese โ€œprohibitedโ€ button", + "category": "Symbols", + "aliases": [ + "u7981" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ…ฐ๏ธ", + "description": "A button (blood type)", + "category": "Symbols", + "aliases": [ + "a" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ…ฑ๏ธ", + "description": "B button (blood type)", + "category": "Symbols", + "aliases": [ + "b" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†Ž", + "description": "AB button (blood type)", + "category": "Symbols", + "aliases": [ + "ab" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†‘", + "description": "CL button", + "category": "Symbols", + "aliases": [ + "cl" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ…พ๏ธ", + "description": "O button (blood type)", + "category": "Symbols", + "aliases": [ + "o2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†˜", + "description": "SOS button", + "category": "Symbols", + "aliases": [ + "sos" + ], + "tags": [ + "help", + "emergency" + ] + }, + { + "emoji": "โŒ", + "description": "cross mark", + "category": "Symbols", + "aliases": [ + "x" + ], + "tags": [] + }, + { + "emoji": "โญ•๏ธ", + "description": "heavy large circle", + "category": "Symbols", + "aliases": [ + "o" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›‘", + "description": "stop sign", + "category": "Symbols", + "aliases": [ + "stop_sign" + ], + "tags": [] + }, + { + "emoji": "โ›”๏ธ", + "description": "no entry", + "category": "Symbols", + "aliases": [ + "no_entry" + ], + "tags": [ + "limit" + ] + }, + { + "emoji": "๐Ÿ“›", + "description": "name badge", + "category": "Symbols", + "aliases": [ + "name_badge" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšซ", + "description": "prohibited", + "category": "Symbols", + "aliases": [ + "no_entry_sign" + ], + "tags": [ + "block", + "forbidden" + ] + }, + { + "emoji": "๐Ÿ’ฏ", + "description": "hundred points", + "category": "Symbols", + "aliases": [ + "100" + ], + "tags": [ + "score", + "perfect" + ] + }, + { + "emoji": "๐Ÿ’ข", + "description": "anger symbol", + "category": "Symbols", + "aliases": [ + "anger" + ], + "tags": [ + "angry" + ] + }, + { + "emoji": "โ™จ๏ธ", + "description": "hot springs", + "category": "Symbols", + "aliases": [ + "hotsprings" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšท", + "description": "no pedestrians", + "category": "Symbols", + "aliases": [ + "no_pedestrians" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฏ", + "description": "no littering", + "category": "Symbols", + "aliases": [ + "do_not_litter" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšณ", + "description": "no bicycles", + "category": "Symbols", + "aliases": [ + "no_bicycles" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšฑ", + "description": "non-potable water", + "category": "Symbols", + "aliases": [ + "non-potable_water" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ž", + "description": "no one under eighteen", + "category": "Symbols", + "aliases": [ + "underage" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ต", + "description": "no mobile phones", + "category": "Symbols", + "aliases": [ + "no_mobile_phones" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšญ", + "description": "no smoking", + "category": "Symbols", + "aliases": [ + "no_smoking" + ], + "tags": [] + }, + { + "emoji": "โ—๏ธ", + "description": "exclamation mark", + "category": "Symbols", + "aliases": [ + "exclamation", + "heavy_exclamation_mark" + ], + "tags": [ + "bang" + ] + }, + { + "emoji": "โ•", + "description": "white exclamation mark", + "category": "Symbols", + "aliases": [ + "grey_exclamation" + ], + "tags": [] + }, + { + "emoji": "โ“", + "description": "question mark", + "category": "Symbols", + "aliases": [ + "question" + ], + "tags": [ + "confused" + ] + }, + { + "emoji": "โ”", + "description": "white question mark", + "category": "Symbols", + "aliases": [ + "grey_question" + ], + "tags": [] + }, + { + "emoji": "โ€ผ๏ธ", + "description": "double exclamation mark", + "category": "Symbols", + "aliases": [ + "bangbang" + ], + "tags": [] + }, + { + "emoji": "โ‰๏ธ", + "description": "exclamation question mark", + "category": "Symbols", + "aliases": [ + "interrobang" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”…", + "description": "dim button", + "category": "Symbols", + "aliases": [ + "low_brightness" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”†", + "description": "bright button", + "category": "Symbols", + "aliases": [ + "high_brightness" + ], + "tags": [] + }, + { + "emoji": "ใ€ฝ๏ธ", + "description": "part alternation mark", + "category": "Symbols", + "aliases": [ + "part_alternation_mark" + ], + "tags": [] + }, + { + "emoji": "โš ๏ธ", + "description": "warning", + "category": "Symbols", + "aliases": [ + "warning" + ], + "tags": [ + "wip" + ] + }, + { + "emoji": "๐Ÿšธ", + "description": "children crossing", + "category": "Symbols", + "aliases": [ + "children_crossing" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฑ", + "description": "trident emblem", + "category": "Symbols", + "aliases": [ + "trident" + ], + "tags": [] + }, + { + "emoji": "โšœ๏ธ", + "description": "fleur-de-lis", + "category": "Symbols", + "aliases": [ + "fleur_de_lis" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฐ", + "description": "Japanese symbol for beginner", + "category": "Symbols", + "aliases": [ + "beginner" + ], + "tags": [] + }, + { + "emoji": "โ™ป๏ธ", + "description": "recycling symbol", + "category": "Symbols", + "aliases": [ + "recycle" + ], + "tags": [ + "environment", + "green" + ] + }, + { + "emoji": "โœ…", + "description": "white heavy check mark", + "category": "Symbols", + "aliases": [ + "white_check_mark" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆฏ๏ธ", + "description": "Japanese โ€œreservedโ€ button", + "category": "Symbols", + "aliases": [ + "u6307" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’น", + "description": "chart increasing with yen", + "category": "Symbols", + "aliases": [ + "chart" + ], + "tags": [] + }, + { + "emoji": "โ‡๏ธ", + "description": "sparkle", + "category": "Symbols", + "aliases": [ + "sparkle" + ], + "tags": [] + }, + { + "emoji": "โœณ๏ธ", + "description": "eight-spoked asterisk", + "category": "Symbols", + "aliases": [ + "eight_spoked_asterisk" + ], + "tags": [] + }, + { + "emoji": "โŽ", + "description": "cross mark button", + "category": "Symbols", + "aliases": [ + "negative_squared_cross_mark" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ", + "description": "globe with meridians", + "category": "Symbols", + "aliases": [ + "globe_with_meridians" + ], + "tags": [ + "world", + "global", + "international" + ] + }, + { + "emoji": "๐Ÿ’ ", + "description": "diamond with a dot", + "category": "Symbols", + "aliases": [ + "diamond_shape_with_a_dot_inside" + ], + "tags": [] + }, + { + "emoji": "โ“‚๏ธ", + "description": "circled M", + "category": "Symbols", + "aliases": [ + "m" + ], + "tags": [] + }, + { + "emoji": "๐ŸŒ€", + "description": "cyclone", + "category": "Symbols", + "aliases": [ + "cyclone" + ], + "tags": [ + "swirl" + ] + }, + { + "emoji": "๐Ÿ’ค", + "description": "zzz", + "category": "Symbols", + "aliases": [ + "zzz" + ], + "tags": [ + "sleeping" + ] + }, + { + "emoji": "๐Ÿง", + "description": "ATM sign", + "category": "Symbols", + "aliases": [ + "atm" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšพ", + "description": "water closet", + "category": "Symbols", + "aliases": [ + "wc" + ], + "tags": [ + "toilet", + "restroom" + ] + }, + { + "emoji": "โ™ฟ๏ธ", + "description": "wheelchair symbol", + "category": "Symbols", + "aliases": [ + "wheelchair" + ], + "tags": [ + "accessibility" + ] + }, + { + "emoji": "๐Ÿ…ฟ๏ธ", + "description": "P button", + "category": "Symbols", + "aliases": [ + "parking" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆณ", + "description": "Japanese โ€œvacancyโ€ button", + "category": "Symbols", + "aliases": [ + "u7a7a" + ], + "tags": [] + }, + { + "emoji": "๐Ÿˆ‚๏ธ", + "description": "Japanese โ€œservice chargeโ€ button", + "category": "Symbols", + "aliases": [ + "sa" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›‚", + "description": "passport control", + "category": "Symbols", + "aliases": [ + "passport_control" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›ƒ", + "description": "customs", + "category": "Symbols", + "aliases": [ + "customs" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ›„", + "description": "baggage claim", + "category": "Symbols", + "aliases": [ + "baggage_claim" + ], + "tags": [ + "airport" + ] + }, + { + "emoji": "๐Ÿ›…", + "description": "left luggage", + "category": "Symbols", + "aliases": [ + "left_luggage" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšน", + "description": "menโ€™s room", + "category": "Symbols", + "aliases": [ + "mens" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšบ", + "description": "womenโ€™s room", + "category": "Symbols", + "aliases": [ + "womens" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšผ", + "description": "baby symbol", + "category": "Symbols", + "aliases": [ + "baby_symbol" + ], + "tags": [] + }, + { + "emoji": "๐Ÿšป", + "description": "restroom", + "category": "Symbols", + "aliases": [ + "restroom" + ], + "tags": [ + "toilet" + ] + }, + { + "emoji": "๐Ÿšฎ", + "description": "litter in bin sign", + "category": "Symbols", + "aliases": [ + "put_litter_in_its_place" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽฆ", + "description": "cinema", + "category": "Symbols", + "aliases": [ + "cinema" + ], + "tags": [ + "film", + "movie" + ] + }, + { + "emoji": "๐Ÿ“ถ", + "description": "antenna bars", + "category": "Symbols", + "aliases": [ + "signal_strength" + ], + "tags": [ + "wifi" + ] + }, + { + "emoji": "๐Ÿˆ", + "description": "Japanese โ€œhereโ€ button", + "category": "Symbols", + "aliases": [ + "koko" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฃ", + "description": "input symbols", + "category": "Symbols", + "aliases": [ + "symbols" + ], + "tags": [] + }, + { + "emoji": "โ„น๏ธ", + "description": "information", + "category": "Symbols", + "aliases": [ + "information_source" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ค", + "description": "input latin letters", + "category": "Symbols", + "aliases": [ + "abc" + ], + "tags": [ + "alphabet" + ] + }, + { + "emoji": "๐Ÿ”ก", + "description": "input latin lowercase", + "category": "Symbols", + "aliases": [ + "abcd" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ” ", + "description": "input latin uppercase", + "category": "Symbols", + "aliases": [ + "capital_abcd" + ], + "tags": [ + "letters" + ] + }, + { + "emoji": "๐Ÿ†–", + "description": "NG button", + "category": "Symbols", + "aliases": [ + "ng" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†—", + "description": "OK button", + "category": "Symbols", + "aliases": [ + "ok" + ], + "tags": [ + "yes" + ] + }, + { + "emoji": "๐Ÿ†™", + "description": "UP! button", + "category": "Symbols", + "aliases": [ + "up" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†’", + "description": "COOL button", + "category": "Symbols", + "aliases": [ + "cool" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ†•", + "description": "NEW button", + "category": "Symbols", + "aliases": [ + "new" + ], + "tags": [ + "fresh" + ] + }, + { + "emoji": "๐Ÿ†“", + "description": "FREE button", + "category": "Symbols", + "aliases": [ + "free" + ], + "tags": [] + }, + { + "emoji": "0๏ธโƒฃ", + "description": "keycap: 0", + "category": "Symbols", + "aliases": [ + "zero" + ], + "tags": [] + }, + { + "emoji": "1๏ธโƒฃ", + "description": "keycap: 1", + "category": "Symbols", + "aliases": [ + "one" + ], + "tags": [] + }, + { + "emoji": "2๏ธโƒฃ", + "description": "keycap: 2", + "category": "Symbols", + "aliases": [ + "two" + ], + "tags": [] + }, + { + "emoji": "3๏ธโƒฃ", + "description": "keycap: 3", + "category": "Symbols", + "aliases": [ + "three" + ], + "tags": [] + }, + { + "emoji": "4๏ธโƒฃ", + "description": "keycap: 4", + "category": "Symbols", + "aliases": [ + "four" + ], + "tags": [] + }, + { + "emoji": "5๏ธโƒฃ", + "description": "keycap: 5", + "category": "Symbols", + "aliases": [ + "five" + ], + "tags": [] + }, + { + "emoji": "6๏ธโƒฃ", + "description": "keycap: 6", + "category": "Symbols", + "aliases": [ + "six" + ], + "tags": [] + }, + { + "emoji": "7๏ธโƒฃ", + "description": "keycap: 7", + "category": "Symbols", + "aliases": [ + "seven" + ], + "tags": [] + }, + { + "emoji": "8๏ธโƒฃ", + "description": "keycap: 8", + "category": "Symbols", + "aliases": [ + "eight" + ], + "tags": [] + }, + { + "emoji": "9๏ธโƒฃ", + "description": "keycap: 9", + "category": "Symbols", + "aliases": [ + "nine" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”Ÿ", + "description": "keycap 10", + "category": "Symbols", + "aliases": [ + "keycap_ten" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ข", + "description": "input numbers", + "category": "Symbols", + "aliases": [ + "1234" + ], + "tags": [ + "numbers" + ] + }, + { + "emoji": "#๏ธโƒฃ", + "description": "keycap: #", + "category": "Symbols", + "aliases": [ + "hash" + ], + "tags": [ + "number" + ] + }, + { + "emoji": "*๏ธโƒฃ", + "description": "keycap: *", + "category": "Symbols", + "aliases": [ + "asterisk" + ], + "tags": [] + }, + { + "emoji": "โ–ถ๏ธ", + "description": "play button", + "category": "Symbols", + "aliases": [ + "arrow_forward" + ], + "tags": [] + }, + { + "emoji": "โธ", + "description": "pause button", + "category": "Symbols", + "aliases": [ + "pause_button" + ], + "tags": [] + }, + { + "emoji": "โฏ", + "description": "play or pause button", + "category": "Symbols", + "aliases": [ + "play_or_pause_button" + ], + "tags": [] + }, + { + "emoji": "โน", + "description": "stop button", + "category": "Symbols", + "aliases": [ + "stop_button" + ], + "tags": [] + }, + { + "emoji": "โบ", + "description": "record button", + "category": "Symbols", + "aliases": [ + "record_button" + ], + "tags": [] + }, + { + "emoji": "โญ", + "description": "next track button", + "category": "Symbols", + "aliases": [ + "next_track_button" + ], + "tags": [] + }, + { + "emoji": "โฎ", + "description": "last track button", + "category": "Symbols", + "aliases": [ + "previous_track_button" + ], + "tags": [] + }, + { + "emoji": "โฉ", + "description": "fast-forward button", + "category": "Symbols", + "aliases": [ + "fast_forward" + ], + "tags": [] + }, + { + "emoji": "โช", + "description": "fast reverse button", + "category": "Symbols", + "aliases": [ + "rewind" + ], + "tags": [] + }, + { + "emoji": "โซ", + "description": "fast up button", + "category": "Symbols", + "aliases": [ + "arrow_double_up" + ], + "tags": [] + }, + { + "emoji": "โฌ", + "description": "fast down button", + "category": "Symbols", + "aliases": [ + "arrow_double_down" + ], + "tags": [] + }, + { + "emoji": "โ—€๏ธ", + "description": "reverse button", + "category": "Symbols", + "aliases": [ + "arrow_backward" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ผ", + "description": "up button", + "category": "Symbols", + "aliases": [ + "arrow_up_small" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฝ", + "description": "down button", + "category": "Symbols", + "aliases": [ + "arrow_down_small" + ], + "tags": [] + }, + { + "emoji": "โžก๏ธ", + "description": "right arrow", + "category": "Symbols", + "aliases": [ + "arrow_right" + ], + "tags": [] + }, + { + "emoji": "โฌ…๏ธ", + "description": "left arrow", + "category": "Symbols", + "aliases": [ + "arrow_left" + ], + "tags": [] + }, + { + "emoji": "โฌ†๏ธ", + "description": "up arrow", + "category": "Symbols", + "aliases": [ + "arrow_up" + ], + "tags": [] + }, + { + "emoji": "โฌ‡๏ธ", + "description": "down arrow", + "category": "Symbols", + "aliases": [ + "arrow_down" + ], + "tags": [] + }, + { + "emoji": "โ†—๏ธ", + "description": "up-right arrow", + "category": "Symbols", + "aliases": [ + "arrow_upper_right" + ], + "tags": [] + }, + { + "emoji": "โ†˜๏ธ", + "description": "down-right arrow", + "category": "Symbols", + "aliases": [ + "arrow_lower_right" + ], + "tags": [] + }, + { + "emoji": "โ†™๏ธ", + "description": "down-left arrow", + "category": "Symbols", + "aliases": [ + "arrow_lower_left" + ], + "tags": [] + }, + { + "emoji": "โ†–๏ธ", + "description": "up-left arrow", + "category": "Symbols", + "aliases": [ + "arrow_upper_left" + ], + "tags": [] + }, + { + "emoji": "โ†•๏ธ", + "description": "up-down arrow", + "category": "Symbols", + "aliases": [ + "arrow_up_down" + ], + "tags": [] + }, + { + "emoji": "โ†”๏ธ", + "description": "left-right arrow", + "category": "Symbols", + "aliases": [ + "left_right_arrow" + ], + "tags": [] + }, + { + "emoji": "โ†ช๏ธ", + "description": "left arrow curving right", + "category": "Symbols", + "aliases": [ + "arrow_right_hook" + ], + "tags": [] + }, + { + "emoji": "โ†ฉ๏ธ", + "description": "right arrow curving left", + "category": "Symbols", + "aliases": [ + "leftwards_arrow_with_hook" + ], + "tags": [ + "return" + ] + }, + { + "emoji": "โคด๏ธ", + "description": "right arrow curving up", + "category": "Symbols", + "aliases": [ + "arrow_heading_up" + ], + "tags": [] + }, + { + "emoji": "โคต๏ธ", + "description": "right arrow curving down", + "category": "Symbols", + "aliases": [ + "arrow_heading_down" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”€", + "description": "shuffle tracks button", + "category": "Symbols", + "aliases": [ + "twisted_rightwards_arrows" + ], + "tags": [ + "shuffle" + ] + }, + { + "emoji": "๐Ÿ”", + "description": "repeat button", + "category": "Symbols", + "aliases": [ + "repeat" + ], + "tags": [ + "loop" + ] + }, + { + "emoji": "๐Ÿ”‚", + "description": "repeat single button", + "category": "Symbols", + "aliases": [ + "repeat_one" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”„", + "description": "anticlockwise arrows button", + "category": "Symbols", + "aliases": [ + "arrows_counterclockwise" + ], + "tags": [ + "sync" + ] + }, + { + "emoji": "๐Ÿ”ƒ", + "description": "clockwise vertical arrows", + "category": "Symbols", + "aliases": [ + "arrows_clockwise" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽต", + "description": "musical note", + "category": "Symbols", + "aliases": [ + "musical_note" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽถ", + "description": "musical notes", + "category": "Symbols", + "aliases": [ + "notes" + ], + "tags": [ + "music" + ] + }, + { + "emoji": "โž•", + "description": "heavy plus sign", + "category": "Symbols", + "aliases": [ + "heavy_plus_sign" + ], + "tags": [] + }, + { + "emoji": "โž–", + "description": "heavy minus sign", + "category": "Symbols", + "aliases": [ + "heavy_minus_sign" + ], + "tags": [] + }, + { + "emoji": "โž—", + "description": "heavy division sign", + "category": "Symbols", + "aliases": [ + "heavy_division_sign" + ], + "tags": [] + }, + { + "emoji": "โœ–๏ธ", + "description": "heavy multiplication x", + "category": "Symbols", + "aliases": [ + "heavy_multiplication_x" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ฒ", + "description": "heavy dollar sign", + "category": "Symbols", + "aliases": [ + "heavy_dollar_sign" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ฑ", + "description": "currency exchange", + "category": "Symbols", + "aliases": [ + "currency_exchange" + ], + "tags": [] + }, + { + "emoji": "โ„ข๏ธ", + "description": "trade mark", + "category": "Symbols", + "aliases": [ + "tm" + ], + "tags": [ + "trademark" + ] + }, + { + "emoji": "ยฉ๏ธ", + "description": "copyright", + "category": "Symbols", + "aliases": [ + "copyright" + ], + "tags": [] + }, + { + "emoji": "ยฎ๏ธ", + "description": "registered", + "category": "Symbols", + "aliases": [ + "registered" + ], + "tags": [] + }, + { + "emoji": "ใ€ฐ๏ธ", + "description": "wavy dash", + "category": "Symbols", + "aliases": [ + "wavy_dash" + ], + "tags": [] + }, + { + "emoji": "โžฐ", + "description": "curly loop", + "category": "Symbols", + "aliases": [ + "curly_loop" + ], + "tags": [] + }, + { + "emoji": "โžฟ", + "description": "double curly loop", + "category": "Symbols", + "aliases": [ + "loop" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”š", + "description": "END arrow", + "category": "Symbols", + "aliases": [ + "end" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”™", + "description": "BACK arrow", + "category": "Symbols", + "aliases": [ + "back" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”›", + "description": "ON! arrow", + "category": "Symbols", + "aliases": [ + "on" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”", + "description": "TOP arrow", + "category": "Symbols", + "aliases": [ + "top" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”œ", + "description": "SOON arrow", + "category": "Symbols", + "aliases": [ + "soon" + ], + "tags": [] + }, + { + "emoji": "โœ”๏ธ", + "description": "heavy check mark", + "category": "Symbols", + "aliases": [ + "heavy_check_mark" + ], + "tags": [] + }, + { + "emoji": "โ˜‘๏ธ", + "description": "ballot box with check", + "category": "Symbols", + "aliases": [ + "ballot_box_with_check" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”˜", + "description": "radio button", + "category": "Symbols", + "aliases": [ + "radio_button" + ], + "tags": [] + }, + { + "emoji": "โšช๏ธ", + "description": "white circle", + "category": "Symbols", + "aliases": [ + "white_circle" + ], + "tags": [] + }, + { + "emoji": "โšซ๏ธ", + "description": "black circle", + "category": "Symbols", + "aliases": [ + "black_circle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ด", + "description": "red circle", + "category": "Symbols", + "aliases": [ + "red_circle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ต", + "description": "blue circle", + "category": "Symbols", + "aliases": [ + "large_blue_circle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”บ", + "description": "red triangle pointed up", + "category": "Symbols", + "aliases": [ + "small_red_triangle" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ป", + "description": "red triangle pointed down", + "category": "Symbols", + "aliases": [ + "small_red_triangle_down" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ธ", + "description": "small orange diamond", + "category": "Symbols", + "aliases": [ + "small_orange_diamond" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”น", + "description": "small blue diamond", + "category": "Symbols", + "aliases": [ + "small_blue_diamond" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ถ", + "description": "large orange diamond", + "category": "Symbols", + "aliases": [ + "large_orange_diamond" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ท", + "description": "large blue diamond", + "category": "Symbols", + "aliases": [ + "large_blue_diamond" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ณ", + "description": "white square button", + "category": "Symbols", + "aliases": [ + "white_square_button" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ฒ", + "description": "black square button", + "category": "Symbols", + "aliases": [ + "black_square_button" + ], + "tags": [] + }, + { + "emoji": "โ–ช๏ธ", + "description": "black small square", + "category": "Symbols", + "aliases": [ + "black_small_square" + ], + "tags": [] + }, + { + "emoji": "โ–ซ๏ธ", + "description": "white small square", + "category": "Symbols", + "aliases": [ + "white_small_square" + ], + "tags": [] + }, + { + "emoji": "โ—พ๏ธ", + "description": "black medium-small square", + "category": "Symbols", + "aliases": [ + "black_medium_small_square" + ], + "tags": [] + }, + { + "emoji": "โ—ฝ๏ธ", + "description": "white medium-small square", + "category": "Symbols", + "aliases": [ + "white_medium_small_square" + ], + "tags": [] + }, + { + "emoji": "โ—ผ๏ธ", + "description": "black medium square", + "category": "Symbols", + "aliases": [ + "black_medium_square" + ], + "tags": [] + }, + { + "emoji": "โ—ป๏ธ", + "description": "white medium square", + "category": "Symbols", + "aliases": [ + "white_medium_square" + ], + "tags": [] + }, + { + "emoji": "โฌ›๏ธ", + "description": "black large square", + "category": "Symbols", + "aliases": [ + "black_large_square" + ], + "tags": [] + }, + { + "emoji": "โฌœ๏ธ", + "description": "white large square", + "category": "Symbols", + "aliases": [ + "white_large_square" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”ˆ", + "description": "speaker low volume", + "category": "Symbols", + "aliases": [ + "speaker" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ”‡", + "description": "muted speaker", + "category": "Symbols", + "aliases": [ + "mute" + ], + "tags": [ + "sound", + "volume" + ] + }, + { + "emoji": "๐Ÿ”‰", + "description": "speaker medium volume", + "category": "Symbols", + "aliases": [ + "sound" + ], + "tags": [ + "volume" + ] + }, + { + "emoji": "๐Ÿ”Š", + "description": "speaker high volume", + "category": "Symbols", + "aliases": [ + "loud_sound" + ], + "tags": [ + "volume" + ] + }, + { + "emoji": "๐Ÿ””", + "description": "bell", + "category": "Symbols", + "aliases": [ + "bell" + ], + "tags": [ + "sound", + "notification" + ] + }, + { + "emoji": "๐Ÿ”•", + "description": "bell with slash", + "category": "Symbols", + "aliases": [ + "no_bell" + ], + "tags": [ + "volume", + "off" + ] + }, + { + "emoji": "๐Ÿ“ฃ", + "description": "megaphone", + "category": "Symbols", + "aliases": [ + "mega" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ“ข", + "description": "loudspeaker", + "category": "Symbols", + "aliases": [ + "loudspeaker" + ], + "tags": [ + "announcement" + ] + }, + { + "emoji": "๐Ÿ‘โ€๐Ÿ—จ", + "description": "eye in speech bubble", + "category": "Symbols", + "aliases": [ + "eye_speech_bubble" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ’ฌ", + "description": "speech balloon", + "category": "Symbols", + "aliases": [ + "speech_balloon" + ], + "tags": [ + "comment" + ] + }, + { + "emoji": "๐Ÿ’ญ", + "description": "thought balloon", + "category": "Symbols", + "aliases": [ + "thought_balloon" + ], + "tags": [ + "thinking" + ] + }, + { + "emoji": "๐Ÿ—ฏ", + "description": "right anger bubble", + "category": "Symbols", + "aliases": [ + "right_anger_bubble" + ], + "tags": [] + }, + { + "emoji": "โ™ ๏ธ", + "description": "spade suit", + "category": "Symbols", + "aliases": [ + "spades" + ], + "tags": [] + }, + { + "emoji": "โ™ฃ๏ธ", + "description": "club suit", + "category": "Symbols", + "aliases": [ + "clubs" + ], + "tags": [] + }, + { + "emoji": "โ™ฅ๏ธ", + "description": "heart suit", + "category": "Symbols", + "aliases": [ + "hearts" + ], + "tags": [] + }, + { + "emoji": "โ™ฆ๏ธ", + "description": "diamond suit", + "category": "Symbols", + "aliases": [ + "diamonds" + ], + "tags": [] + }, + { + "emoji": "๐Ÿƒ", + "description": "joker", + "category": "Symbols", + "aliases": [ + "black_joker" + ], + "tags": [] + }, + { + "emoji": "๐ŸŽด", + "description": "flower playing cards", + "category": "Symbols", + "aliases": [ + "flower_playing_cards" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ€„๏ธ", + "description": "mahjong red dragon", + "category": "Symbols", + "aliases": [ + "mahjong" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•", + "description": "one oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock1" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•‘", + "description": "two oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock2" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•’", + "description": "three oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock3" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•“", + "description": "four oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock4" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•”", + "description": "five oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock5" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ••", + "description": "six oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock6" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•–", + "description": "seven oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock7" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•—", + "description": "eight oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock8" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•˜", + "description": "nine oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock9" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•™", + "description": "ten oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock10" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•š", + "description": "eleven oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock11" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•›", + "description": "twelve oโ€™clock", + "category": "Symbols", + "aliases": [ + "clock12" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•œ", + "description": "one-thirty", + "category": "Symbols", + "aliases": [ + "clock130" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•", + "description": "two-thirty", + "category": "Symbols", + "aliases": [ + "clock230" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ž", + "description": "three-thirty", + "category": "Symbols", + "aliases": [ + "clock330" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•Ÿ", + "description": "four-thirty", + "category": "Symbols", + "aliases": [ + "clock430" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ• ", + "description": "five-thirty", + "category": "Symbols", + "aliases": [ + "clock530" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ก", + "description": "six-thirty", + "category": "Symbols", + "aliases": [ + "clock630" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ข", + "description": "seven-thirty", + "category": "Symbols", + "aliases": [ + "clock730" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ฃ", + "description": "eight-thirty", + "category": "Symbols", + "aliases": [ + "clock830" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ค", + "description": "nine-thirty", + "category": "Symbols", + "aliases": [ + "clock930" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ฅ", + "description": "ten-thirty", + "category": "Symbols", + "aliases": [ + "clock1030" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ฆ", + "description": "eleven-thirty", + "category": "Symbols", + "aliases": [ + "clock1130" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ•ง", + "description": "twelve-thirty", + "category": "Symbols", + "aliases": [ + "clock1230" + ], + "tags": [] + }, + { + "emoji": "๐Ÿณ๏ธ", + "description": "white flag", + "category": "Flags", + "aliases": [ + "white_flag" + ], + "tags": [] + }, + { + "emoji": "๐Ÿด", + "description": "black flag", + "category": "Flags", + "aliases": [ + "black_flag" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ", + "description": "chequered flag", + "category": "Flags", + "aliases": [ + "checkered_flag" + ], + "tags": [ + "milestone", + "finish" + ] + }, + { + "emoji": "๐Ÿšฉ", + "description": "triangular flag", + "category": "Flags", + "aliases": [ + "triangular_flag_on_post" + ], + "tags": [] + }, + { + "emoji": "๐Ÿณ๏ธโ€๐ŸŒˆ", + "description": "rainbow flag", + "category": "Flags", + "aliases": [ + "rainbow_flag" + ], + "tags": [ + "pride" + ] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ซ", + "description": "Afghanistan", + "category": "Flags", + "aliases": [ + "afghanistan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ฝ", + "description": "ร…land Islands", + "category": "Flags", + "aliases": [ + "aland_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ฑ", + "description": "Albania", + "category": "Flags", + "aliases": [ + "albania" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฉ๐Ÿ‡ฟ", + "description": "Algeria", + "category": "Flags", + "aliases": [ + "algeria" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ธ", + "description": "American Samoa", + "category": "Flags", + "aliases": [ + "american_samoa" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ฉ", + "description": "Andorra", + "category": "Flags", + "aliases": [ + "andorra" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ด", + "description": "Angola", + "category": "Flags", + "aliases": [ + "angola" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ฎ", + "description": "Anguilla", + "category": "Flags", + "aliases": [ + "anguilla" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ถ", + "description": "Antarctica", + "category": "Flags", + "aliases": [ + "antarctica" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ฌ", + "description": "Antigua & Barbuda", + "category": "Flags", + "aliases": [ + "antigua_barbuda" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ท", + "description": "Argentina", + "category": "Flags", + "aliases": [ + "argentina" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ฒ", + "description": "Armenia", + "category": "Flags", + "aliases": [ + "armenia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ผ", + "description": "Aruba", + "category": "Flags", + "aliases": [ + "aruba" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡บ", + "description": "Australia", + "category": "Flags", + "aliases": [ + "australia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡น", + "description": "Austria", + "category": "Flags", + "aliases": [ + "austria" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ฟ", + "description": "Azerbaijan", + "category": "Flags", + "aliases": [ + "azerbaijan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ธ", + "description": "Bahamas", + "category": "Flags", + "aliases": [ + "bahamas" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ญ", + "description": "Bahrain", + "category": "Flags", + "aliases": [ + "bahrain" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฉ", + "description": "Bangladesh", + "category": "Flags", + "aliases": [ + "bangladesh" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ง", + "description": "Barbados", + "category": "Flags", + "aliases": [ + "barbados" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡พ", + "description": "Belarus", + "category": "Flags", + "aliases": [ + "belarus" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ช", + "description": "Belgium", + "category": "Flags", + "aliases": [ + "belgium" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฟ", + "description": "Belize", + "category": "Flags", + "aliases": [ + "belize" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฏ", + "description": "Benin", + "category": "Flags", + "aliases": [ + "benin" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฒ", + "description": "Bermuda", + "category": "Flags", + "aliases": [ + "bermuda" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡น", + "description": "Bhutan", + "category": "Flags", + "aliases": [ + "bhutan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ด", + "description": "Bolivia", + "category": "Flags", + "aliases": [ + "bolivia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ถ", + "description": "Caribbean Netherlands", + "category": "Flags", + "aliases": [ + "caribbean_netherlands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฆ", + "description": "Bosnia & Herzegovina", + "category": "Flags", + "aliases": [ + "bosnia_herzegovina" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ผ", + "description": "Botswana", + "category": "Flags", + "aliases": [ + "botswana" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ท", + "description": "Brazil", + "category": "Flags", + "aliases": [ + "brazil" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ด", + "description": "British Indian Ocean Territory", + "category": "Flags", + "aliases": [ + "british_indian_ocean_territory" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ป๐Ÿ‡ฌ", + "description": "British Virgin Islands", + "category": "Flags", + "aliases": [ + "british_virgin_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ณ", + "description": "Brunei", + "category": "Flags", + "aliases": [ + "brunei" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฌ", + "description": "Bulgaria", + "category": "Flags", + "aliases": [ + "bulgaria" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ซ", + "description": "Burkina Faso", + "category": "Flags", + "aliases": [ + "burkina_faso" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฎ", + "description": "Burundi", + "category": "Flags", + "aliases": [ + "burundi" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ป", + "description": "Cape Verde", + "category": "Flags", + "aliases": [ + "cape_verde" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ญ", + "description": "Cambodia", + "category": "Flags", + "aliases": [ + "cambodia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฒ", + "description": "Cameroon", + "category": "Flags", + "aliases": [ + "cameroon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฆ", + "description": "Canada", + "category": "Flags", + "aliases": [ + "canada" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡จ", + "description": "Canary Islands", + "category": "Flags", + "aliases": [ + "canary_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡พ", + "description": "Cayman Islands", + "category": "Flags", + "aliases": [ + "cayman_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ซ", + "description": "Central African Republic", + "category": "Flags", + "aliases": [ + "central_african_republic" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ฉ", + "description": "Chad", + "category": "Flags", + "aliases": [ + "chad" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฑ", + "description": "Chile", + "category": "Flags", + "aliases": [ + "chile" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ณ", + "description": "China", + "category": "Flags", + "aliases": [ + "cn" + ], + "tags": [ + "china" + ] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฝ", + "description": "Christmas Island", + "category": "Flags", + "aliases": [ + "christmas_island" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡จ", + "description": "Cocos (Keeling) Islands", + "category": "Flags", + "aliases": [ + "cocos_islands" + ], + "tags": [ + "keeling" + ] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ด", + "description": "Colombia", + "category": "Flags", + "aliases": [ + "colombia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ฒ", + "description": "Comoros", + "category": "Flags", + "aliases": [ + "comoros" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฌ", + "description": "Congo - Brazzaville", + "category": "Flags", + "aliases": [ + "congo_brazzaville" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฉ", + "description": "Congo - Kinshasa", + "category": "Flags", + "aliases": [ + "congo_kinshasa" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฐ", + "description": "Cook Islands", + "category": "Flags", + "aliases": [ + "cook_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ท", + "description": "Costa Rica", + "category": "Flags", + "aliases": [ + "costa_rica" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฎ", + "description": "Cรดte dโ€™Ivoire", + "category": "Flags", + "aliases": [ + "cote_divoire" + ], + "tags": [ + "ivory" + ] + }, + { + "emoji": "๐Ÿ‡ญ๐Ÿ‡ท", + "description": "Croatia", + "category": "Flags", + "aliases": [ + "croatia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡บ", + "description": "Cuba", + "category": "Flags", + "aliases": [ + "cuba" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ผ", + "description": "Curaรงao", + "category": "Flags", + "aliases": [ + "curacao" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡พ", + "description": "Cyprus", + "category": "Flags", + "aliases": [ + "cyprus" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ฟ", + "description": "Czech Republic", + "category": "Flags", + "aliases": [ + "czech_republic" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฉ๐Ÿ‡ฐ", + "description": "Denmark", + "category": "Flags", + "aliases": [ + "denmark" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฉ๐Ÿ‡ฏ", + "description": "Djibouti", + "category": "Flags", + "aliases": [ + "djibouti" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฉ๐Ÿ‡ฒ", + "description": "Dominica", + "category": "Flags", + "aliases": [ + "dominica" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฉ๐Ÿ‡ด", + "description": "Dominican Republic", + "category": "Flags", + "aliases": [ + "dominican_republic" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡จ", + "description": "Ecuador", + "category": "Flags", + "aliases": [ + "ecuador" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡ฌ", + "description": "Egypt", + "category": "Flags", + "aliases": [ + "egypt" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ป", + "description": "El Salvador", + "category": "Flags", + "aliases": [ + "el_salvador" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ถ", + "description": "Equatorial Guinea", + "category": "Flags", + "aliases": [ + "equatorial_guinea" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡ท", + "description": "Eritrea", + "category": "Flags", + "aliases": [ + "eritrea" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡ช", + "description": "Estonia", + "category": "Flags", + "aliases": [ + "estonia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡น", + "description": "Ethiopia", + "category": "Flags", + "aliases": [ + "ethiopia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡บ", + "description": "European Union", + "category": "Flags", + "aliases": [ + "eu", + "european_union" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ซ๐Ÿ‡ฐ", + "description": "Falkland Islands", + "category": "Flags", + "aliases": [ + "falkland_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ซ๐Ÿ‡ด", + "description": "Faroe Islands", + "category": "Flags", + "aliases": [ + "faroe_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ซ๐Ÿ‡ฏ", + "description": "Fiji", + "category": "Flags", + "aliases": [ + "fiji" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ซ๐Ÿ‡ฎ", + "description": "Finland", + "category": "Flags", + "aliases": [ + "finland" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ซ๐Ÿ‡ท", + "description": "France", + "category": "Flags", + "aliases": [ + "fr" + ], + "tags": [ + "france", + "french" + ] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ซ", + "description": "French Guiana", + "category": "Flags", + "aliases": [ + "french_guiana" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ซ", + "description": "French Polynesia", + "category": "Flags", + "aliases": [ + "french_polynesia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ซ", + "description": "French Southern Territories", + "category": "Flags", + "aliases": [ + "french_southern_territories" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ฆ", + "description": "Gabon", + "category": "Flags", + "aliases": [ + "gabon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ฒ", + "description": "Gambia", + "category": "Flags", + "aliases": [ + "gambia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ช", + "description": "Georgia", + "category": "Flags", + "aliases": [ + "georgia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฉ๐Ÿ‡ช", + "description": "Germany", + "category": "Flags", + "aliases": [ + "de" + ], + "tags": [ + "flag", + "germany" + ] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ญ", + "description": "Ghana", + "category": "Flags", + "aliases": [ + "ghana" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ฎ", + "description": "Gibraltar", + "category": "Flags", + "aliases": [ + "gibraltar" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ท", + "description": "Greece", + "category": "Flags", + "aliases": [ + "greece" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ฑ", + "description": "Greenland", + "category": "Flags", + "aliases": [ + "greenland" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ฉ", + "description": "Grenada", + "category": "Flags", + "aliases": [ + "grenada" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ต", + "description": "Guadeloupe", + "category": "Flags", + "aliases": [ + "guadeloupe" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡บ", + "description": "Guam", + "category": "Flags", + "aliases": [ + "guam" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡น", + "description": "Guatemala", + "category": "Flags", + "aliases": [ + "guatemala" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ฌ", + "description": "Guernsey", + "category": "Flags", + "aliases": [ + "guernsey" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ณ", + "description": "Guinea", + "category": "Flags", + "aliases": [ + "guinea" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ผ", + "description": "Guinea-Bissau", + "category": "Flags", + "aliases": [ + "guinea_bissau" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡พ", + "description": "Guyana", + "category": "Flags", + "aliases": [ + "guyana" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ญ๐Ÿ‡น", + "description": "Haiti", + "category": "Flags", + "aliases": [ + "haiti" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ญ๐Ÿ‡ณ", + "description": "Honduras", + "category": "Flags", + "aliases": [ + "honduras" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ญ๐Ÿ‡ฐ", + "description": "Hong Kong SAR China", + "category": "Flags", + "aliases": [ + "hong_kong" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ญ๐Ÿ‡บ", + "description": "Hungary", + "category": "Flags", + "aliases": [ + "hungary" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ธ", + "description": "Iceland", + "category": "Flags", + "aliases": [ + "iceland" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ณ", + "description": "India", + "category": "Flags", + "aliases": [ + "india" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ฉ", + "description": "Indonesia", + "category": "Flags", + "aliases": [ + "indonesia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ท", + "description": "Iran", + "category": "Flags", + "aliases": [ + "iran" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ถ", + "description": "Iraq", + "category": "Flags", + "aliases": [ + "iraq" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ช", + "description": "Ireland", + "category": "Flags", + "aliases": [ + "ireland" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ฒ", + "description": "Isle of Man", + "category": "Flags", + "aliases": [ + "isle_of_man" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡ฑ", + "description": "Israel", + "category": "Flags", + "aliases": [ + "israel" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฎ๐Ÿ‡น", + "description": "Italy", + "category": "Flags", + "aliases": [ + "it" + ], + "tags": [ + "italy" + ] + }, + { + "emoji": "๐Ÿ‡ฏ๐Ÿ‡ฒ", + "description": "Jamaica", + "category": "Flags", + "aliases": [ + "jamaica" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฏ๐Ÿ‡ต", + "description": "Japan", + "category": "Flags", + "aliases": [ + "jp" + ], + "tags": [ + "japan" + ] + }, + { + "emoji": "๐ŸŽŒ", + "description": "crossed flags", + "category": "Flags", + "aliases": [ + "crossed_flags" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฏ๐Ÿ‡ช", + "description": "Jersey", + "category": "Flags", + "aliases": [ + "jersey" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฏ๐Ÿ‡ด", + "description": "Jordan", + "category": "Flags", + "aliases": [ + "jordan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ฟ", + "description": "Kazakhstan", + "category": "Flags", + "aliases": [ + "kazakhstan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ช", + "description": "Kenya", + "category": "Flags", + "aliases": [ + "kenya" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ฎ", + "description": "Kiribati", + "category": "Flags", + "aliases": [ + "kiribati" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฝ๐Ÿ‡ฐ", + "description": "Kosovo", + "category": "Flags", + "aliases": [ + "kosovo" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ผ", + "description": "Kuwait", + "category": "Flags", + "aliases": [ + "kuwait" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ฌ", + "description": "Kyrgyzstan", + "category": "Flags", + "aliases": [ + "kyrgyzstan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡ฆ", + "description": "Laos", + "category": "Flags", + "aliases": [ + "laos" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡ป", + "description": "Latvia", + "category": "Flags", + "aliases": [ + "latvia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡ง", + "description": "Lebanon", + "category": "Flags", + "aliases": [ + "lebanon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡ธ", + "description": "Lesotho", + "category": "Flags", + "aliases": [ + "lesotho" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡ท", + "description": "Liberia", + "category": "Flags", + "aliases": [ + "liberia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡พ", + "description": "Libya", + "category": "Flags", + "aliases": [ + "libya" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡ฎ", + "description": "Liechtenstein", + "category": "Flags", + "aliases": [ + "liechtenstein" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡น", + "description": "Lithuania", + "category": "Flags", + "aliases": [ + "lithuania" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡บ", + "description": "Luxembourg", + "category": "Flags", + "aliases": [ + "luxembourg" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ด", + "description": "Macau SAR China", + "category": "Flags", + "aliases": [ + "macau" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฐ", + "description": "Macedonia", + "category": "Flags", + "aliases": [ + "macedonia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฌ", + "description": "Madagascar", + "category": "Flags", + "aliases": [ + "madagascar" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ผ", + "description": "Malawi", + "category": "Flags", + "aliases": [ + "malawi" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡พ", + "description": "Malaysia", + "category": "Flags", + "aliases": [ + "malaysia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ป", + "description": "Maldives", + "category": "Flags", + "aliases": [ + "maldives" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฑ", + "description": "Mali", + "category": "Flags", + "aliases": [ + "mali" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡น", + "description": "Malta", + "category": "Flags", + "aliases": [ + "malta" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ญ", + "description": "Marshall Islands", + "category": "Flags", + "aliases": [ + "marshall_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ถ", + "description": "Martinique", + "category": "Flags", + "aliases": [ + "martinique" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ท", + "description": "Mauritania", + "category": "Flags", + "aliases": [ + "mauritania" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡บ", + "description": "Mauritius", + "category": "Flags", + "aliases": [ + "mauritius" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡พ๐Ÿ‡น", + "description": "Mayotte", + "category": "Flags", + "aliases": [ + "mayotte" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฝ", + "description": "Mexico", + "category": "Flags", + "aliases": [ + "mexico" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ซ๐Ÿ‡ฒ", + "description": "Micronesia", + "category": "Flags", + "aliases": [ + "micronesia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฉ", + "description": "Moldova", + "category": "Flags", + "aliases": [ + "moldova" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡จ", + "description": "Monaco", + "category": "Flags", + "aliases": [ + "monaco" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ณ", + "description": "Mongolia", + "category": "Flags", + "aliases": [ + "mongolia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ช", + "description": "Montenegro", + "category": "Flags", + "aliases": [ + "montenegro" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ธ", + "description": "Montserrat", + "category": "Flags", + "aliases": [ + "montserrat" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฆ", + "description": "Morocco", + "category": "Flags", + "aliases": [ + "morocco" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฟ", + "description": "Mozambique", + "category": "Flags", + "aliases": [ + "mozambique" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ฒ", + "description": "Myanmar (Burma)", + "category": "Flags", + "aliases": [ + "myanmar" + ], + "tags": [ + "burma" + ] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ฆ", + "description": "Namibia", + "category": "Flags", + "aliases": [ + "namibia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ท", + "description": "Nauru", + "category": "Flags", + "aliases": [ + "nauru" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ต", + "description": "Nepal", + "category": "Flags", + "aliases": [ + "nepal" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ฑ", + "description": "Netherlands", + "category": "Flags", + "aliases": [ + "netherlands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡จ", + "description": "New Caledonia", + "category": "Flags", + "aliases": [ + "new_caledonia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ฟ", + "description": "New Zealand", + "category": "Flags", + "aliases": [ + "new_zealand" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ฎ", + "description": "Nicaragua", + "category": "Flags", + "aliases": [ + "nicaragua" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ช", + "description": "Niger", + "category": "Flags", + "aliases": [ + "niger" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ฌ", + "description": "Nigeria", + "category": "Flags", + "aliases": [ + "nigeria" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡บ", + "description": "Niue", + "category": "Flags", + "aliases": [ + "niue" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ซ", + "description": "Norfolk Island", + "category": "Flags", + "aliases": [ + "norfolk_island" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฒ๐Ÿ‡ต", + "description": "Northern Mariana Islands", + "category": "Flags", + "aliases": [ + "northern_mariana_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ต", + "description": "North Korea", + "category": "Flags", + "aliases": [ + "north_korea" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ณ๐Ÿ‡ด", + "description": "Norway", + "category": "Flags", + "aliases": [ + "norway" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ด๐Ÿ‡ฒ", + "description": "Oman", + "category": "Flags", + "aliases": [ + "oman" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ฐ", + "description": "Pakistan", + "category": "Flags", + "aliases": [ + "pakistan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ผ", + "description": "Palau", + "category": "Flags", + "aliases": [ + "palau" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ธ", + "description": "Palestinian Territories", + "category": "Flags", + "aliases": [ + "palestinian_territories" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ฆ", + "description": "Panama", + "category": "Flags", + "aliases": [ + "panama" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ฌ", + "description": "Papua New Guinea", + "category": "Flags", + "aliases": [ + "papua_new_guinea" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡พ", + "description": "Paraguay", + "category": "Flags", + "aliases": [ + "paraguay" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ช", + "description": "Peru", + "category": "Flags", + "aliases": [ + "peru" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ญ", + "description": "Philippines", + "category": "Flags", + "aliases": [ + "philippines" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ณ", + "description": "Pitcairn Islands", + "category": "Flags", + "aliases": [ + "pitcairn_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ฑ", + "description": "Poland", + "category": "Flags", + "aliases": [ + "poland" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡น", + "description": "Portugal", + "category": "Flags", + "aliases": [ + "portugal" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ท", + "description": "Puerto Rico", + "category": "Flags", + "aliases": [ + "puerto_rico" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ถ๐Ÿ‡ฆ", + "description": "Qatar", + "category": "Flags", + "aliases": [ + "qatar" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ท๐Ÿ‡ช", + "description": "Rรฉunion", + "category": "Flags", + "aliases": [ + "reunion" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ท๐Ÿ‡ด", + "description": "Romania", + "category": "Flags", + "aliases": [ + "romania" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ท๐Ÿ‡บ", + "description": "Russia", + "category": "Flags", + "aliases": [ + "ru" + ], + "tags": [ + "russia" + ] + }, + { + "emoji": "๐Ÿ‡ท๐Ÿ‡ผ", + "description": "Rwanda", + "category": "Flags", + "aliases": [ + "rwanda" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ง๐Ÿ‡ฑ", + "description": "St. Barthรฉlemy", + "category": "Flags", + "aliases": [ + "st_barthelemy" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ญ", + "description": "St. Helena", + "category": "Flags", + "aliases": [ + "st_helena" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ณ", + "description": "St. Kitts & Nevis", + "category": "Flags", + "aliases": [ + "st_kitts_nevis" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡จ", + "description": "St. Lucia", + "category": "Flags", + "aliases": [ + "st_lucia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ต๐Ÿ‡ฒ", + "description": "St. Pierre & Miquelon", + "category": "Flags", + "aliases": [ + "st_pierre_miquelon" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ป๐Ÿ‡จ", + "description": "St. Vincent & Grenadines", + "category": "Flags", + "aliases": [ + "st_vincent_grenadines" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ผ๐Ÿ‡ธ", + "description": "Samoa", + "category": "Flags", + "aliases": [ + "samoa" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฒ", + "description": "San Marino", + "category": "Flags", + "aliases": [ + "san_marino" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡น", + "description": "Sรฃo Tomรฉ & Prรญncipe", + "category": "Flags", + "aliases": [ + "sao_tome_principe" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฆ", + "description": "Saudi Arabia", + "category": "Flags", + "aliases": [ + "saudi_arabia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ณ", + "description": "Senegal", + "category": "Flags", + "aliases": [ + "senegal" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ท๐Ÿ‡ธ", + "description": "Serbia", + "category": "Flags", + "aliases": [ + "serbia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡จ", + "description": "Seychelles", + "category": "Flags", + "aliases": [ + "seychelles" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฑ", + "description": "Sierra Leone", + "category": "Flags", + "aliases": [ + "sierra_leone" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฌ", + "description": "Singapore", + "category": "Flags", + "aliases": [ + "singapore" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฝ", + "description": "Sint Maarten", + "category": "Flags", + "aliases": [ + "sint_maarten" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฐ", + "description": "Slovakia", + "category": "Flags", + "aliases": [ + "slovakia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฎ", + "description": "Slovenia", + "category": "Flags", + "aliases": [ + "slovenia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ง", + "description": "Solomon Islands", + "category": "Flags", + "aliases": [ + "solomon_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ด", + "description": "Somalia", + "category": "Flags", + "aliases": [ + "somalia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฟ๐Ÿ‡ฆ", + "description": "South Africa", + "category": "Flags", + "aliases": [ + "south_africa" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ธ", + "description": "South Georgia & South Sandwich Islands", + "category": "Flags", + "aliases": [ + "south_georgia_south_sandwich_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฐ๐Ÿ‡ท", + "description": "South Korea", + "category": "Flags", + "aliases": [ + "kr" + ], + "tags": [ + "korea" + ] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ธ", + "description": "South Sudan", + "category": "Flags", + "aliases": [ + "south_sudan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡ธ", + "description": "Spain", + "category": "Flags", + "aliases": [ + "es" + ], + "tags": [ + "spain" + ] + }, + { + "emoji": "๐Ÿ‡ฑ๐Ÿ‡ฐ", + "description": "Sri Lanka", + "category": "Flags", + "aliases": [ + "sri_lanka" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฉ", + "description": "Sudan", + "category": "Flags", + "aliases": [ + "sudan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ท", + "description": "Suriname", + "category": "Flags", + "aliases": [ + "suriname" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ฟ", + "description": "Swaziland", + "category": "Flags", + "aliases": [ + "swaziland" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡ช", + "description": "Sweden", + "category": "Flags", + "aliases": [ + "sweden" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡จ๐Ÿ‡ญ", + "description": "Switzerland", + "category": "Flags", + "aliases": [ + "switzerland" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ธ๐Ÿ‡พ", + "description": "Syria", + "category": "Flags", + "aliases": [ + "syria" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ผ", + "description": "Taiwan", + "category": "Flags", + "aliases": [ + "taiwan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ฏ", + "description": "Tajikistan", + "category": "Flags", + "aliases": [ + "tajikistan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ฟ", + "description": "Tanzania", + "category": "Flags", + "aliases": [ + "tanzania" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ญ", + "description": "Thailand", + "category": "Flags", + "aliases": [ + "thailand" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ฑ", + "description": "Timor-Leste", + "category": "Flags", + "aliases": [ + "timor_leste" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ฌ", + "description": "Togo", + "category": "Flags", + "aliases": [ + "togo" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ฐ", + "description": "Tokelau", + "category": "Flags", + "aliases": [ + "tokelau" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ด", + "description": "Tonga", + "category": "Flags", + "aliases": [ + "tonga" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡น", + "description": "Trinidad & Tobago", + "category": "Flags", + "aliases": [ + "trinidad_tobago" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ณ", + "description": "Tunisia", + "category": "Flags", + "aliases": [ + "tunisia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ท", + "description": "Turkey", + "category": "Flags", + "aliases": [ + "tr" + ], + "tags": [ + "turkey" + ] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ฒ", + "description": "Turkmenistan", + "category": "Flags", + "aliases": [ + "turkmenistan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡จ", + "description": "Turks & Caicos Islands", + "category": "Flags", + "aliases": [ + "turks_caicos_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡น๐Ÿ‡ป", + "description": "Tuvalu", + "category": "Flags", + "aliases": [ + "tuvalu" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡บ๐Ÿ‡ฌ", + "description": "Uganda", + "category": "Flags", + "aliases": [ + "uganda" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡บ๐Ÿ‡ฆ", + "description": "Ukraine", + "category": "Flags", + "aliases": [ + "ukraine" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฆ๐Ÿ‡ช", + "description": "United Arab Emirates", + "category": "Flags", + "aliases": [ + "united_arab_emirates" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฌ๐Ÿ‡ง", + "description": "United Kingdom", + "category": "Flags", + "aliases": [ + "gb", + "uk" + ], + "tags": [ + "flag", + "british" + ] + }, + { + "emoji": "๐Ÿ‡บ๐Ÿ‡ธ", + "description": "United States", + "category": "Flags", + "aliases": [ + "us" + ], + "tags": [ + "flag", + "united", + "america" + ] + }, + { + "emoji": "๐Ÿ‡ป๐Ÿ‡ฎ", + "description": "U.S. Virgin Islands", + "category": "Flags", + "aliases": [ + "us_virgin_islands" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡บ๐Ÿ‡พ", + "description": "Uruguay", + "category": "Flags", + "aliases": [ + "uruguay" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡บ๐Ÿ‡ฟ", + "description": "Uzbekistan", + "category": "Flags", + "aliases": [ + "uzbekistan" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ป๐Ÿ‡บ", + "description": "Vanuatu", + "category": "Flags", + "aliases": [ + "vanuatu" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ป๐Ÿ‡ฆ", + "description": "Vatican City", + "category": "Flags", + "aliases": [ + "vatican_city" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ป๐Ÿ‡ช", + "description": "Venezuela", + "category": "Flags", + "aliases": [ + "venezuela" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ป๐Ÿ‡ณ", + "description": "Vietnam", + "category": "Flags", + "aliases": [ + "vietnam" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ผ๐Ÿ‡ซ", + "description": "Wallis & Futuna", + "category": "Flags", + "aliases": [ + "wallis_futuna" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ช๐Ÿ‡ญ", + "description": "Western Sahara", + "category": "Flags", + "aliases": [ + "western_sahara" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡พ๐Ÿ‡ช", + "description": "Yemen", + "category": "Flags", + "aliases": [ + "yemen" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฟ๐Ÿ‡ฒ", + "description": "Zambia", + "category": "Flags", + "aliases": [ + "zambia" + ], + "tags": [] + }, + { + "emoji": "๐Ÿ‡ฟ๐Ÿ‡ผ", + "description": "Zimbabwe", + "category": "Flags", + "aliases": [ + "zimbabwe" + ], + "tags": [] + } +] diff --git a/src/muya/lib/ui/emojis/index.js b/src/muya/lib/ui/emojis/index.js index 1775b70c..71240275 100644 --- a/src/muya/lib/ui/emojis/index.js +++ b/src/muya/lib/ui/emojis/index.js @@ -29,11 +29,8 @@ export const validEmoji = text => { */ export const checkEditEmoji = node => { - const preSibling = node.previousElementSibling if (node.classList.contains(CLASS_OR_ID['AG_EMOJI_MARKED_TEXT'])) { return node - } else if (preSibling && preSibling.classList.contains(CLASS_OR_ID['AG_EMOJI_MARKED_TEXT'])) { - return preSibling } return false } diff --git a/src/muya/lib/utils/exportHtml.js b/src/muya/lib/utils/exportHtml.js index 62291f64..d70e321d 100644 --- a/src/muya/lib/utils/exportHtml.js +++ b/src/muya/lib/utils/exportHtml.js @@ -1,8 +1,8 @@ import marked from '../parser/marked' -import highlight from 'highlight.js' +import Prism from 'prismjs2' import katex from 'katex' import githubMarkdownCss from 'github-markdown-css/github-markdown.css' -import highlightCss from 'highlight.js/styles/default.css' +import highlightCss from 'prismjs2/themes/prism.css' import katexCss from 'katex/dist/katex.css' import { EXPORT_DOMPURIFY_CONFIG } from '../config' import { sanitize } from '../utils' @@ -20,8 +20,8 @@ class ExportHtml { // render pure html by marked renderHtml () { return marked(this.markdown, { - highlight (code) { - return highlight.highlightAuto(code).value + highlight (code, lang) { + return Prism.highlight(code, Prism.languages[lang], lang) }, emojiRenderer (emoji) { const validate = validEmoji(emoji) diff --git a/src/muya/lib/utils/exportMarkdown.js b/src/muya/lib/utils/exportMarkdown.js index 375d90ec..cc78b2fe 100644 --- a/src/muya/lib/utils/exportMarkdown.js +++ b/src/muya/lib/utils/exportMarkdown.js @@ -7,7 +7,7 @@ * and GitHub Flavored Markdown Spec: https://github.github.com/gfm/ * The output markdown needs to obey the standards of the two Spec. */ -const LINE_BREAKS = /\n/ +// const LINE_BREAKS = /\n/ class ExportMarkdown { constructor (blocks) { @@ -153,10 +153,10 @@ class ExportMarkdown { return this.translateBlocks2Markdown(children, newIndent) } - normalizeFrontMatter (block, indent) { + normalizeFrontMatter (block, indent) { // preBlock const result = [] result.push('---\n') - for (const line of block.children) { + for (const line of block.children[0].children) { result.push(`${line.text}\n`) } result.push('---\n') @@ -166,7 +166,7 @@ class ExportMarkdown { normalizeMultipleMath (block, /* figure */ indent) { const result = [] result.push('$$\n') - for (const line of block.children[0].children) { + for (const line of block.children[0].children[0].children) { result.push(`${line.text}\n`) } result.push('$$\n') @@ -175,9 +175,9 @@ class ExportMarkdown { normalizeCodeBlock (block, indent) { const result = [] - const textList = block.text.split(LINE_BREAKS) - const { codeBlockStyle } = block - if (codeBlockStyle === 'fenced') { + const textList = block.children[1].children.map(codeLine => codeLine.text) + const { functionType } = block + if (functionType === 'fencecode') { result.push(`${indent}${block.lang ? '```' + block.lang + '\n' : '```\n'}`) textList.forEach(text => { result.push(`${indent}${text}\n`) @@ -192,12 +192,11 @@ class ExportMarkdown { return result.join('') } - normalizeHTML (block, indent) { + normalizeHTML (block, indent) { // figure const result = [] - const codeContent = block.children[1].children[0].text - const textList = codeContent.split(LINE_BREAKS) - for (const text of textList) { - result.push(`${indent}${text}\n`) + const codeLines = block.children[1].children[0].children[0].children + for (const line of codeLines) { + result.push(`${indent}${line.text}\n`) } return result.join('') } diff --git a/src/muya/lib/utils/importMarkdown.js b/src/muya/lib/utils/importMarkdown.js index b60cc480..4fc21050 100644 --- a/src/muya/lib/utils/importMarkdown.js +++ b/src/muya/lib/utils/importMarkdown.js @@ -6,6 +6,7 @@ import { Lexer } from '../parser/marked' import ExportMarkdown from './exportMarkdown' import TurndownService, { usePluginAddRules } from './turndownService' +import { loadLanguage } from '../prism/index' // To be disabled rules when parse markdown, Because content state don't need to parse inline rules import { CURSOR_DNA, TABLE_TOOLS } from '../config' @@ -27,7 +28,6 @@ const importRegister = ContentState => { } const tokens = new Lexer({ disableInline: true }).lex(markdown) - console.log(JSON.stringify(tokens, null, 2)) let token let block @@ -39,15 +39,21 @@ const importRegister = ContentState => { case 'frontmatter': { value = token.text block = this.createBlock('pre') - const lines = value + const codeBlock = this.createBlock('code') + value .replace(/^\s+/, '') .replace(/\s$/, '') - .split(LINE_BREAKS_REG).map(line => this.createBlock('span', line)) - for (const line of lines) { - line.functionType = token.type - this.appendChild(block, line) - } + .split(LINE_BREAKS_REG).forEach(line => { + const codeLine = this.createBlock('span', line) + codeLine.functionType = 'codeLine' + codeLine.lang = 'yaml' + this.appendChild(codeBlock, codeLine) + }) + block.functionType = token.type + block.lang = codeBlock.lang = 'yaml' + this.codeBlocks.set(block.key, value) + this.appendChild(block, codeBlock) this.appendChild(parentList[0], block) break } @@ -72,14 +78,29 @@ const importRegister = ContentState => { break } case 'code': { - const { codeBlockStyle, text, lang, type } = token + const { codeBlockStyle, text, lang = '' } = token value = text if (value.endsWith('\n')) { value = value.replace(/\n+$/, '') } - block = this.createBlock('pre', value) - block.functionType = type - Object.assign(block, { lang, codeBlockStyle }) + block = this.createBlock('pre') + const codeBlock = this.createBlock('code') + value.split(LINE_BREAKS_REG).forEach(line => { + const codeLine = this.createBlock('span', line) + codeLine.lang = lang + codeLine.functionType = 'codeLine' + this.appendChild(codeBlock, codeLine) + }) + const inputBlock = this.createBlock('span', lang) + if (lang) { + loadLanguage(lang) + } + inputBlock.functionType = 'languageInput' + this.codeBlocks.set(block.key, value) + block.functionType = codeBlockStyle === 'fenced' ? 'fencecode' : 'indentcode' + block.lang = codeBlock.lang = lang + this.appendChild(block, inputBlock) + this.appendChild(block, codeBlock) this.appendChild(parentList[0], block) break } @@ -249,12 +270,14 @@ const importRegister = ContentState => { end: { key, offset } } // handle cursor in Math block, need to remove `CURSOR_DNA` in preview block - if (type === 'span' && functionType === 'multiplemath') { - const mathPreview = this.getNextSibling(this.getParent(block)) - const { math } = mathPreview - const offset = math.indexOf(CURSOR_DNA) + if (type === 'span' && functionType === 'codeLine') { + const preBlock = this.getParent(this.getParent(block)) + const code = this.codeBlocks.get(preBlock.key) + if (!code) return + const offset = code.indexOf(CURSOR_DNA) if (offset > -1) { - mathPreview.math = math.substring(0, offset) + math.substring(offset + CURSOR_DNA.length) + const newCode = code.substring(0, offset) + code.substring(offset + CURSOR_DNA.length) + this.codeBlocks.set(preBlock.key, newCode) } } return @@ -279,7 +302,6 @@ const importRegister = ContentState => { } ContentState.prototype.importMarkdown = function (markdown) { - // empty the blocks and codeBlocks this.codeBlocks = new Map() this.blocks = this.markdownToState(markdown) } diff --git a/src/muya/lib/utils/index.js b/src/muya/lib/utils/index.js index 747848b4..84e943a4 100644 --- a/src/muya/lib/utils/index.js +++ b/src/muya/lib/utils/index.js @@ -1,4 +1,5 @@ // DOTO: Don't use Node API in editor folder, remove `path` @jocs +// todo@jocs: remove the use of `axios` in muya import axios from 'axios' import createDOMPurify from 'dompurify' @@ -161,17 +162,6 @@ export const checkImageContentType = async url => { } } -export const collectImportantComments = css => { - const once = new Set() - const cleaned = css.replace(/(\/\*![\s\S]*?\*\/)\n*/gm, (match, p1) => { - once.add(p1) - return '' - }) - const combined = Array.from(once) - combined.push(cleaned) - return combined.join('\n') -} - export const getImageInfo = src => { const EXT_REG = /\.(jpeg|jpg|png|gif|svg|webp)(?=\?|$)/i // http[s] (domain or IPv4 or localhost or IPv6) [port] /not-white-space diff --git a/src/muya/themes/dark.css b/src/muya/themes/dark.css index eb925ac6..73eefd9b 100755 --- a/src/muya/themes/dark.css +++ b/src/muya/themes/dark.css @@ -64,11 +64,6 @@ body { caret-color: #efefef; } -#ag-editor-id>ul:first-child, -#ag-editor-id>ol:first-child { - margin-top: 30px; -} - .ag-float-box { background: #303133; border: 1px solid #303133; @@ -350,26 +345,13 @@ table tr td:last-child { margin-bottom: 0; } -.CodeMirror-gutters { - border-right: 1px solid #ddd; -} - -code, -tt { - border: 1px solid #ddd; - background-color: #606266; - border-radius: 3px; - padding: 0; - font-family: Consolas, "Liberation Mono", Courier, monospace; - padding: 2px 4px 0px 4px; - font-size: 0.9em; -} - - /* custom add */ -code { +span.ag-line code, +th code, +td code { border: none; padding: 2px 4px; + border-radius: 3px; font-size: 90%; color: #efefef; background-color: #606266; @@ -428,7 +410,6 @@ code { border-color: #333; } -#ag-editor-id pre.ag-code-block, #ag-editor-id pre.ag-html-block { font-size: 90%; line-height: 1.6; @@ -436,11 +417,134 @@ code { color: #777777; } -#ag-editor-id pre.ag-code-block .cm-s-railscasts.CodeMirror, -#ag-editor-id pre.ag-html-block .cm-s-railscasts.CodeMirror { - background: var(--primaryColor); -} - .ag-color-dark { color: #c6c6c6; } + +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre.ag-paragraph { + color: #f8f8f2; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + overflow: visible; + } + + /* Code blocks */ + pre.ag-paragraph { + padding: 1em; + margin: 1em 0; + border-radius: 0.3em; + } + + :not(pre) > code[class*="language-"], + pre.ag-paragraph { + background: #272822; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: slategray; + } + + .token.punctuation { + color: #f8f8f2; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.constant, + .token.symbol { + color: #f92672; + } + + .token.boolean, + .token.number { + color: #ae81ff; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin { + color: #a6e22e; + } + + .token.inserted { + color: #22863a; + background: #f0fff4; +} + +.token.deleted { + color: #b31d28; + background: #ffeef0; +} + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #f8f8f2; + } + + .token.atrule, + .token.attr-value, + .token.function, + .token.class-name { + color: #e6db74; + } + + .token.keyword { + color: #66d9ef; + } + + .token.regex, + .token.important { + color: #fd971f; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } + diff --git a/src/muya/themes/light.css b/src/muya/themes/light.css index 610a04c5..ee875111 100644 --- a/src/muya/themes/light.css +++ b/src/muya/themes/light.css @@ -4,28 +4,28 @@ font-family: 'Open Sans'; font-style: normal; font-weight: normal; - src: local('Open Sans Regular'),url('./github/400.woff') format('woff') + src: local('Open Sans Regular'),url('./github/400.woff') format('woff'); } @font-face { font-family: 'Open Sans'; font-style: italic; font-weight: normal; - src: local('Open Sans Italic'),url('./github/400i.woff') format('woff') + src: local('Open Sans Italic'),url('./github/400i.woff') format('woff'); } @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: bold; - src: local('Open Sans Bold'),url('./github/700.woff') format('woff') + src: local('Open Sans Bold'),url('./github/700.woff') format('woff'); } @font-face { font-family: 'Open Sans'; font-style: italic; font-weight: bold; - src: local('Open Sans Bold Italic'),url('./github/700i.woff') format('woff') + src: local('Open Sans Bold Italic'),url('./github/700i.woff') format('woff'); } html, body { @@ -65,11 +65,6 @@ body { caret-color: #000000; } -#ag-editor-id>ul:first-child, -#ag-editor-id>ol:first-child { - margin-top: 30px; -} - .ag-gray { color: #C0C4CC; text-decoration: none; @@ -322,32 +317,28 @@ table tr td:last-child { margin-bottom: 0; } -.CodeMirror-gutters { - border-right: 1px solid #ddd; -} - -code, -tt { - border: 1px solid #ddd; - background-color: #f8f8f8; +span code, +td code, +th code { + background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; padding: 0; - font-family: Consolas, "Liberation Mono", Courier, monospace; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 2px 4px 0px 4px; - font-size: 0.9em; + font-size: 85%; + margin: 0; + padding: 0.2em 0.4em; + color: #24292e; } - -/* custom add */ -code { - padding: 0.2em 0.4em; - margin: 0; - font-size: 85%; - background-color: rgba(27,31,35,0.05); +:not(pre) > code[class*="language-"], +pre { + font-size: 90%; + line-height: 1.6; + background: #f6f8fa; + border: 0; border-radius: 3px; - border: none; - color: #24292e; - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + color: #777777; } @media print { @@ -376,16 +367,6 @@ code { border-bottom-color: #333333; } -#ag-editor-id pre.ag-code-block, -#ag-editor-id pre.ag-html-block { - font-size: 90%; - line-height: 1.6; - background: #f6f8fa; - border: 0; - border-radius: 3px; - color: #777777; -} - #ag-editor-id pre.ag-html-block { background: transparent; padding: 0 .5rem; @@ -403,3 +384,116 @@ p:not(.ag-active)[data-role="hr"]::before { .fg-color-dark { color: #303133; } + +/* prismjs default theme */ + +code[class*="language-"], +pre.ag-paragraph { + color: black; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + /* Code blocks */ + pre.ag-paragraph { + padding: 1em; + margin: 1em 0; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: slategray; + } + + .token.punctuation { + color: #999; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.boolean, + .token.number, + .token.constant, + .token.symbol { + color: #905; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin { + color: #690; + } + + .token.inserted { + color: #22863a; + background: #f0fff4; +} + +.token.deleted { + color: #b31d28; + background: #ffeef0; +} + + .token.operator, + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string { + color: #9a6e3a; + } + + .token.atrule, + .token.attr-value, + .token.keyword { + color: #07a; + } + + .token.function, + .token.class-name { + color: #DD4A68; + } + + .token.regex, + .token.important, + .token.variable { + color: #e90; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } diff --git a/src/muya/lib/codeMirror/index.css b/src/renderer/codeMirror/index.css similarity index 100% rename from src/muya/lib/codeMirror/index.css rename to src/renderer/codeMirror/index.css diff --git a/src/muya/lib/codeMirror/index.js b/src/renderer/codeMirror/index.js similarity index 100% rename from src/muya/lib/codeMirror/index.js rename to src/renderer/codeMirror/index.js diff --git a/src/muya/lib/codeMirror/loadmode.js b/src/renderer/codeMirror/loadmode.js similarity index 100% rename from src/muya/lib/codeMirror/loadmode.js rename to src/renderer/codeMirror/loadmode.js diff --git a/src/muya/lib/codeMirror/mltiplexMode.js b/src/renderer/codeMirror/mltiplexMode.js similarity index 100% rename from src/muya/lib/codeMirror/mltiplexMode.js rename to src/renderer/codeMirror/mltiplexMode.js diff --git a/src/muya/lib/codeMirror/modes.js b/src/renderer/codeMirror/modes.js similarity index 100% rename from src/muya/lib/codeMirror/modes.js rename to src/renderer/codeMirror/modes.js diff --git a/src/muya/lib/codeMirror/overlayMode.js b/src/renderer/codeMirror/overlayMode.js similarity index 100% rename from src/muya/lib/codeMirror/overlayMode.js rename to src/renderer/codeMirror/overlayMode.js diff --git a/src/renderer/components/editorWithTabs/editor.vue b/src/renderer/components/editorWithTabs/editor.vue index ba11b704..3cf48612 100644 --- a/src/renderer/components/editorWithTabs/editor.vue +++ b/src/renderer/components/editorWithTabs/editor.vue @@ -240,7 +240,6 @@ this.editor.on('selectionChange', changes => { const { y } = changes.cursorCoords - if (this.typewriter) { animatedScrollTo(container, container.scrollTop + y - STANDAR_Y, 100) } diff --git a/src/renderer/components/editorWithTabs/sourceCode.vue b/src/renderer/components/editorWithTabs/sourceCode.vue index ece77978..ccdfb7ce 100644 --- a/src/renderer/components/editorWithTabs/sourceCode.vue +++ b/src/renderer/components/editorWithTabs/sourceCode.vue @@ -8,7 +8,7 @@