From 1fd17ef73aa6801ebd979c78b1bbf2336710d57f Mon Sep 17 00:00:00 2001 From: luob Date: Wed, 24 Dec 2025 23:48:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9C=80=E6=96=B0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .browserslistrc | 4 + .changeset/README.md | 5 + .changeset/config.json | 18 + .commitlintrc.js | 1 + .dockerignore | 7 + .editorconfig | 18 + .gitattributes | 11 + .gitconfig | 2 + .gitpod.yml | 6 + .node-version | 1 + .prettierignore | 18 + .prettierrc.mjs | 1 + .stylelintignore | 4 + LICENSE | 9 + apps/web-antd/.env.analyze | 7 + apps/web-antd/.env.development | 21 + apps/web-antd/.env.production | 23 + apps/web-antd/index.html | 35 + apps/web-antd/postcss.config.mjs | 1 + apps/web-antd/public/favicon.ico | Bin 0 -> 5430 bytes apps/web-antd/public/static/imgs/ai/dall2.jpg | Bin 0 -> 110271 bytes apps/web-antd/public/static/imgs/ai/dall3.jpg | Bin 0 -> 89280 bytes .../web-antd/public/static/imgs/ai/qingxi.jpg | Bin 0 -> 88392 bytes apps/web-antd/public/static/imgs/ai/ziran.jpg | Bin 0 -> 124202 bytes .../public/tinymce/icons/default/icons.min.js | 1 + apps/web-antd/public/tinymce/langs/README.md | 3 + apps/web-antd/public/tinymce/langs/zh_CN.js | 1 + apps/web-antd/public/tinymce/license.md | 6 + .../public/tinymce/models/dom/model.min.js | 4 + .../tinymce/plugins/accordion/plugin.min.js | 4 + .../tinymce/plugins/advlist/plugin.min.js | 4 + .../tinymce/plugins/anchor/plugin.min.js | 4 + .../tinymce/plugins/autolink/plugin.min.js | 4 + .../tinymce/plugins/autoresize/plugin.min.js | 4 + .../tinymce/plugins/autosave/plugin.min.js | 4 + .../tinymce/plugins/charmap/plugin.min.js | 4 + .../public/tinymce/plugins/code/plugin.min.js | 4 + .../tinymce/plugins/codesample/plugin.min.js | 4 + .../plugins/directionality/plugin.min.js | 4 + .../plugins/emoticons/js/emojiimages.js | 1 + .../plugins/emoticons/js/emojiimages.min.js | 3 + .../tinymce/plugins/emoticons/js/emojis.js | 1 + .../plugins/emoticons/js/emojis.min.js | 2 + .../tinymce/plugins/emoticons/plugin.min.js | 4 + .../tinymce/plugins/fullscreen/plugin.min.js | 4 + .../tinymce/plugins/help/js/i18n/keynav/ar.js | 93 + .../plugins/help/js/i18n/keynav/bg_BG.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ca.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/cs.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/da.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/de.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/el.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/en.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/es.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/eu.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/fa.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/fi.js | 93 + .../plugins/help/js/i18n/keynav/fr_FR.js | 93 + .../plugins/help/js/i18n/keynav/he_IL.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/hi.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/hr.js | 93 + .../plugins/help/js/i18n/keynav/hu_HU.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/id.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/it.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ja.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/kk.js | 93 + .../plugins/help/js/i18n/keynav/ko_KR.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ms.js | 93 + .../plugins/help/js/i18n/keynav/nb_NO.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/nl.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/pl.js | 93 + .../plugins/help/js/i18n/keynav/pt_BR.js | 93 + .../plugins/help/js/i18n/keynav/pt_PT.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ro.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ru.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/sk.js | 93 + .../plugins/help/js/i18n/keynav/sl_SI.js | 93 + .../plugins/help/js/i18n/keynav/sv_SE.js | 93 + .../plugins/help/js/i18n/keynav/th_TH.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/tr.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/uk.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/vi.js | 93 + .../plugins/help/js/i18n/keynav/zh_CN.js | 87 + .../plugins/help/js/i18n/keynav/zh_TW.js | 93 + .../public/tinymce/plugins/help/plugin.min.js | 4 + .../tinymce/plugins/image/plugin.min.js | 4 + .../tinymce/plugins/importcss/plugin.min.js | 4 + .../plugins/insertdatetime/plugin.min.js | 4 + .../public/tinymce/plugins/link/plugin.min.js | 4 + .../tinymce/plugins/lists/plugin.min.js | 4 + .../tinymce/plugins/media/plugin.min.js | 4 + .../tinymce/plugins/nonbreaking/plugin.min.js | 4 + .../tinymce/plugins/pagebreak/plugin.min.js | 4 + .../tinymce/plugins/preview/plugin.min.js | 4 + .../tinymce/plugins/quickbars/plugin.min.js | 4 + .../public/tinymce/plugins/save/plugin.min.js | 4 + .../plugins/searchreplace/plugin.min.js | 4 + .../tinymce/plugins/table/plugin.min.js | 4 + .../plugins/visualblocks/plugin.min.js | 4 + .../tinymce/plugins/visualchars/plugin.min.js | 4 + .../tinymce/plugins/wordcount/plugin.min.js | 4 + .../tinymce/skins/content/dark/content.js | 1 + .../skins/content/dark/content.min.css | 1 + .../tinymce/skins/content/default/content.js | 1 + .../skins/content/default/content.min.css | 1 + .../tinymce/skins/content/document/content.js | 1 + .../skins/content/document/content.min.css | 1 + .../skins/content/tinymce-5-dark/content.js | 1 + .../content/tinymce-5-dark/content.min.css | 1 + .../skins/content/tinymce-5/content.js | 1 + .../skins/content/tinymce-5/content.min.css | 1 + .../tinymce/skins/content/writer/content.js | 1 + .../skins/content/writer/content.min.css | 1 + .../skins/ui/oxide-dark/content.inline.js | 1 + .../ui/oxide-dark/content.inline.min.css | 1 + .../tinymce/skins/ui/oxide-dark/content.js | 1 + .../skins/ui/oxide-dark/content.min.css | 1 + .../tinymce/skins/ui/oxide-dark/skin.js | 1 + .../tinymce/skins/ui/oxide-dark/skin.min.css | 1 + .../skins/ui/oxide-dark/skin.shadowdom.js | 1 + .../ui/oxide-dark/skin.shadowdom.min.css | 1 + .../tinymce/skins/ui/oxide/content.inline.js | 1 + .../skins/ui/oxide/content.inline.min.css | 1 + .../public/tinymce/skins/ui/oxide/content.js | 1 + .../tinymce/skins/ui/oxide/content.min.css | 1 + .../public/tinymce/skins/ui/oxide/skin.js | 1 + .../tinymce/skins/ui/oxide/skin.min.css | 1 + .../tinymce/skins/ui/oxide/skin.shadowdom.js | 1 + .../skins/ui/oxide/skin.shadowdom.min.css | 1 + .../skins/ui/tinymce-5-dark/content.inline.js | 1 + .../ui/tinymce-5-dark/content.inline.min.css | 1 + .../skins/ui/tinymce-5-dark/content.js | 1 + .../skins/ui/tinymce-5-dark/content.min.css | 1 + .../tinymce/skins/ui/tinymce-5-dark/skin.js | 1 + .../skins/ui/tinymce-5-dark/skin.min.css | 1 + .../skins/ui/tinymce-5-dark/skin.shadowdom.js | 1 + .../ui/tinymce-5-dark/skin.shadowdom.min.css | 1 + .../skins/ui/tinymce-5/content.inline.js | 1 + .../skins/ui/tinymce-5/content.inline.min.css | 1 + .../tinymce/skins/ui/tinymce-5/content.js | 1 + .../skins/ui/tinymce-5/content.min.css | 1 + .../public/tinymce/skins/ui/tinymce-5/skin.js | 1 + .../tinymce/skins/ui/tinymce-5/skin.min.css | 1 + .../skins/ui/tinymce-5/skin.shadowdom.js | 1 + .../skins/ui/tinymce-5/skin.shadowdom.min.css | 1 + .../public/tinymce/themes/silver/theme.min.js | 332 ++ apps/web-antd/public/tinymce/tinymce.d.ts | 3350 ++++++++++++ apps/web-antd/public/tinymce/tinymce.min.js | 331 ++ apps/web-antd/src/api/bpm/oa/leave/index.ts | 40 + apps/web-antd/src/api/core/index.ts | 1 + .../src/api/crm/contract/config/index.ts | 21 + .../src/api/crm/customer/limitConfig/index.ts | 56 + .../src/api/crm/customer/poolConfig/index.ts | 26 + .../src/api/crm/product/category/index.ts | 44 + apps/web-antd/src/api/index.ts | 1 + .../src/api/infra/api-access-log/index.ts | 44 + .../src/api/infra/api-error-log/index.ts | 55 + apps/web-antd/src/api/infra/config/index.ts | 67 + apps/web-antd/src/api/infra/job-log/index.ts | 41 + apps/web-antd/src/api/infra/redis/index.ts | 190 + apps/web-antd/src/api/mall/statistics/pay.ts | 16 + .../src/api/mall/trade/config/index.ts | 33 + apps/web-antd/src/api/member/address/index.ts | 20 + apps/web-antd/src/api/member/config/index.ts | 22 + .../src/api/member/experience-record/index.ts | 33 + apps/web-antd/src/api/member/group/index.ts | 50 + .../src/api/member/point/record/index.ts | 28 + .../src/api/member/signin/config/index.ts | 41 + .../src/api/member/signin/record/index.ts | 23 + apps/web-antd/src/api/member/tag/index.ts | 43 + apps/web-antd/src/api/mp/autoReply/index.ts | 49 + apps/web-antd/src/api/mp/freePublish/index.ts | 45 + .../src/api/pay/demo/withdraw/index.ts | 40 + .../src/api/pay/wallet/transaction/index.ts | 24 + apps/web-antd/src/api/system/area/index.ts | 24 + apps/web-antd/src/api/system/dept/index.ts | 52 + .../src/api/system/login-log/index.ts | 33 + .../src/api/system/mail/account/index.ts | 64 + apps/web-antd/src/api/system/menu/index.ts | 59 + apps/web-antd/src/api/system/notice/index.ts | 59 + .../src/api/system/notify/message/index.ts | 65 + .../src/api/system/operate-log/index.ts | 39 + apps/web-antd/src/api/system/post/index.ts | 63 + apps/web-antd/src/api/system/role/index.ts | 63 + .../src/api/system/sms/channel/index.ts | 67 + apps/web-antd/src/api/system/sms/log/index.ts | 45 + .../src/api/system/tenant-package/index.ts | 64 + apps/web-antd/src/app.vue | 39 + .../web-antd/src/components/cron-tab/index.ts | 1 + .../src/components/cropper/cropper.vue | 171 + apps/web-antd/src/components/cropper/index.ts | 3 + .../web-antd/src/components/cropper/typing.ts | 68 + .../src/components/description/index.ts | 3 + .../web-antd/src/components/dict-tag/index.ts | 1 + .../src/components/form-create/rules/data.ts | 182 + .../src/components/form-create/rules/index.ts | 6 + .../src/components/markdown-view/index.ts | 3 + .../markdown-view/markdown-view.vue | 206 + .../src/components/markdown-view/typing.ts | 3 + .../src/components/operate-log/typing.ts | 5 + .../select-modal/dept-select-modal.vue | 143 + .../src/components/select-modal/index.ts | 2 + .../src/components/table-action/index.ts | 4 + .../src/components/table-action/typing.ts | 31 + .../web-antd/src/components/tinymce/helper.ts | 85 + apps/web-antd/src/components/tinymce/index.ts | 1 + .../src/components/tinymce/tinymce.ts | 17 + apps/web-antd/src/components/upload/index.ts | 3 + apps/web-antd/src/layouts/index.ts | 6 + apps/web-antd/src/locales/README.md | 3 + apps/web-antd/src/locales/index.ts | 102 + .../src/locales/langs/en-US/utils.json | 14 + .../src/locales/langs/zh-CN/utils.json | 14 + apps/web-antd/src/main.ts | 31 + apps/web-antd/src/preferences.ts | 25 + apps/web-antd/src/router/access.ts | 41 + apps/web-antd/src/router/index.ts | 40 + apps/web-antd/src/router/routes/core.ts | 114 + apps/web-antd/src/router/routes/index.ts | 47 + .../src/router/routes/modules/dashboard.ts | 48 + .../web-antd/src/router/routes/modules/pay.ts | 16 + .../src/router/routes/modules/system.ts | 16 + apps/web-antd/src/router/tongji.ts | 30 + apps/web-antd/src/store/auth.ts | 157 + apps/web-antd/src/views/_core/README.md | 3 + apps/web-antd/src/views/_core/about/index.vue | 9 + .../views/_core/authentication/code-login.vue | 173 + .../src/views/_core/authentication/login.vue | 192 + .../_core/authentication/qrcode-login.vue | 10 + .../views/_core/authentication/register.vue | 221 + .../_core/authentication/social-login.vue | 210 + .../src/views/_core/fallback/coming-soon.vue | 7 + .../src/views/_core/fallback/forbidden.vue | 9 + .../views/_core/fallback/internal-error.vue | 9 + .../src/views/_core/fallback/not-found.vue | 9 + .../src/views/_core/fallback/offline.vue | 9 + .../views/_core/profile/modules/reset-pwd.vue | 94 + .../src/views/ai/music/index/index.vue | 29 + .../ai/music/index/list/songCard/index.vue | 50 + .../ai/music/index/list/songInfo/index.vue | 25 + .../src/views/ai/music/index/mode/desc.vue | 70 + .../src/views/ai/music/index/mode/lyric.vue | 103 + .../src/views/ai/music/index/title/index.vue | 27 + .../crm/statistics/funnel/chartOptions.ts | 271 + .../statistics/performance/chartOptions.ts | 394 ++ .../dashboard/analytics/analytics-trends.vue | 98 + .../analytics/analytics-visits-data.vue | 82 + .../analytics/analytics-visits-source.vue | 65 + .../dashboard/analytics/analytics-visits.vue | 55 + .../src/views/dashboard/analytics/index.vue | 90 + .../infra/codegen/modules/basic-info.vue | 45 + .../src/views/infra/demo/demo02/data.ts | 120 + .../inner/modules/demo03-grade-form.vue | 51 + .../normal/modules/demo03-grade-form.vue | 51 + .../inner/modules/demo03-grade-form.vue | 67 + .../normal/modules/demo03-grade-form.vue | 67 + .../src/views/infra/job/modules/form.vue | 82 + .../views/infra/redis/modules/commands.vue | 101 + .../src/views/infra/redis/modules/memory.vue | 135 + .../mall/promotion/bargain/record/index.vue | 83 + .../promotion/bargain/record/modules/list.vue | 67 + .../promotion/combination/record/index.vue | 81 + .../combination/record/modules/list.vue | 63 + .../src/views/system/area/modules/form.vue | 50 + apps/web-antd/src/views/system/dict/index.vue | 33 + .../system/mail/account/modules/form.vue | 89 + .../system/mail/template/modules/form.vue | 89 + .../views/system/user/modules/import-form.vue | 82 + .../user/modules/reset-password-form.vue | 66 + apps/web-antd/tailwind.config.mjs | 1 + apps/web-antd/tsconfig.node.json | 10 + apps/web-antd/vite.config.mts | 20 + apps/web-ele/.env.analyze | 7 + apps/web-ele/index.html | 34 + apps/web-ele/postcss.config.mjs | 1 + apps/web-ele/public/favicon.ico | Bin 0 -> 5430 bytes .../public/tinymce/icons/default/icons.min.js | 1 + apps/web-ele/public/tinymce/langs/README.md | 3 + apps/web-ele/public/tinymce/langs/zh_CN.js | 1 + apps/web-ele/public/tinymce/license.md | 6 + .../public/tinymce/models/dom/model.min.js | 4 + .../tinymce/plugins/accordion/plugin.min.js | 4 + .../tinymce/plugins/advlist/plugin.min.js | 4 + .../tinymce/plugins/anchor/plugin.min.js | 4 + .../tinymce/plugins/autolink/plugin.min.js | 4 + .../tinymce/plugins/autoresize/plugin.min.js | 4 + .../tinymce/plugins/autosave/plugin.min.js | 4 + .../tinymce/plugins/charmap/plugin.min.js | 4 + .../public/tinymce/plugins/code/plugin.min.js | 4 + .../tinymce/plugins/codesample/plugin.min.js | 4 + .../plugins/directionality/plugin.min.js | 4 + .../plugins/emoticons/js/emojiimages.js | 1 + .../plugins/emoticons/js/emojiimages.min.js | 3 + .../tinymce/plugins/emoticons/js/emojis.js | 1 + .../plugins/emoticons/js/emojis.min.js | 2 + .../tinymce/plugins/emoticons/plugin.min.js | 4 + .../tinymce/plugins/fullscreen/plugin.min.js | 4 + .../tinymce/plugins/help/js/i18n/keynav/ar.js | 93 + .../plugins/help/js/i18n/keynav/bg_BG.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ca.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/cs.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/da.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/de.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/el.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/en.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/es.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/eu.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/fa.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/fi.js | 93 + .../plugins/help/js/i18n/keynav/fr_FR.js | 93 + .../plugins/help/js/i18n/keynav/he_IL.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/hi.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/hr.js | 93 + .../plugins/help/js/i18n/keynav/hu_HU.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/id.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/it.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ja.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/kk.js | 93 + .../plugins/help/js/i18n/keynav/ko_KR.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ms.js | 93 + .../plugins/help/js/i18n/keynav/nb_NO.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/nl.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/pl.js | 93 + .../plugins/help/js/i18n/keynav/pt_BR.js | 93 + .../plugins/help/js/i18n/keynav/pt_PT.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ro.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/ru.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/sk.js | 93 + .../plugins/help/js/i18n/keynav/sl_SI.js | 93 + .../plugins/help/js/i18n/keynav/sv_SE.js | 93 + .../plugins/help/js/i18n/keynav/th_TH.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/tr.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/uk.js | 93 + .../tinymce/plugins/help/js/i18n/keynav/vi.js | 93 + .../plugins/help/js/i18n/keynav/zh_CN.js | 87 + .../plugins/help/js/i18n/keynav/zh_TW.js | 93 + .../public/tinymce/plugins/help/plugin.min.js | 4 + .../tinymce/plugins/image/plugin.min.js | 4 + .../tinymce/plugins/importcss/plugin.min.js | 4 + .../plugins/insertdatetime/plugin.min.js | 4 + .../public/tinymce/plugins/link/plugin.min.js | 4 + .../tinymce/plugins/lists/plugin.min.js | 4 + .../tinymce/plugins/media/plugin.min.js | 4 + .../tinymce/plugins/nonbreaking/plugin.min.js | 4 + .../tinymce/plugins/pagebreak/plugin.min.js | 4 + .../tinymce/plugins/preview/plugin.min.js | 4 + .../tinymce/plugins/quickbars/plugin.min.js | 4 + .../public/tinymce/plugins/save/plugin.min.js | 4 + .../plugins/searchreplace/plugin.min.js | 4 + .../tinymce/plugins/table/plugin.min.js | 4 + .../plugins/visualblocks/plugin.min.js | 4 + .../tinymce/plugins/visualchars/plugin.min.js | 4 + .../tinymce/plugins/wordcount/plugin.min.js | 4 + .../tinymce/skins/content/dark/content.js | 1 + .../skins/content/dark/content.min.css | 1 + .../tinymce/skins/content/default/content.js | 1 + .../skins/content/default/content.min.css | 1 + .../tinymce/skins/content/document/content.js | 1 + .../skins/content/document/content.min.css | 1 + .../skins/content/tinymce-5-dark/content.js | 1 + .../content/tinymce-5-dark/content.min.css | 1 + .../skins/content/tinymce-5/content.js | 1 + .../skins/content/tinymce-5/content.min.css | 1 + .../tinymce/skins/content/writer/content.js | 1 + .../skins/content/writer/content.min.css | 1 + .../skins/ui/oxide-dark/content.inline.js | 1 + .../ui/oxide-dark/content.inline.min.css | 1 + .../tinymce/skins/ui/oxide-dark/content.js | 1 + .../skins/ui/oxide-dark/content.min.css | 1 + .../tinymce/skins/ui/oxide-dark/skin.js | 1 + .../tinymce/skins/ui/oxide-dark/skin.min.css | 1 + .../skins/ui/oxide-dark/skin.shadowdom.js | 1 + .../ui/oxide-dark/skin.shadowdom.min.css | 1 + .../tinymce/skins/ui/oxide/content.inline.js | 1 + .../skins/ui/oxide/content.inline.min.css | 1 + .../public/tinymce/skins/ui/oxide/content.js | 1 + .../tinymce/skins/ui/oxide/content.min.css | 1 + .../public/tinymce/skins/ui/oxide/skin.js | 1 + .../tinymce/skins/ui/oxide/skin.min.css | 1 + .../tinymce/skins/ui/oxide/skin.shadowdom.js | 1 + .../skins/ui/oxide/skin.shadowdom.min.css | 1 + .../skins/ui/tinymce-5-dark/content.inline.js | 1 + .../ui/tinymce-5-dark/content.inline.min.css | 1 + .../skins/ui/tinymce-5-dark/content.js | 1 + .../skins/ui/tinymce-5-dark/content.min.css | 1 + .../tinymce/skins/ui/tinymce-5-dark/skin.js | 1 + .../skins/ui/tinymce-5-dark/skin.min.css | 1 + .../skins/ui/tinymce-5-dark/skin.shadowdom.js | 1 + .../ui/tinymce-5-dark/skin.shadowdom.min.css | 1 + .../skins/ui/tinymce-5/content.inline.js | 1 + .../skins/ui/tinymce-5/content.inline.min.css | 1 + .../tinymce/skins/ui/tinymce-5/content.js | 1 + .../skins/ui/tinymce-5/content.min.css | 1 + .../public/tinymce/skins/ui/tinymce-5/skin.js | 1 + .../tinymce/skins/ui/tinymce-5/skin.min.css | 1 + .../skins/ui/tinymce-5/skin.shadowdom.js | 1 + .../skins/ui/tinymce-5/skin.shadowdom.min.css | 1 + .../public/tinymce/themes/silver/theme.min.js | 332 ++ apps/web-ele/public/tinymce/tinymce.d.ts | 3350 ++++++++++++ apps/web-ele/public/tinymce/tinymce.min.js | 331 ++ apps/web-ele/src/api/bpm/oa/leave/index.ts | 40 + apps/web-ele/src/api/core/index.ts | 1 + .../src/api/crm/contract/config/index.ts | 21 + .../src/api/crm/customer/limitConfig/index.ts | 56 + .../src/api/crm/customer/poolConfig/index.ts | 26 + .../src/api/crm/product/category/index.ts | 44 + apps/web-ele/src/api/index.ts | 1 + .../src/api/infra/api-access-log/index.ts | 44 + .../src/api/infra/api-error-log/index.ts | 55 + apps/web-ele/src/api/infra/config/index.ts | 67 + .../src/api/infra/data-source-config/index.ts | 53 + apps/web-ele/src/api/infra/file/index.ts | 78 + apps/web-ele/src/api/infra/job-log/index.ts | 41 + apps/web-ele/src/api/infra/redis/index.ts | 190 + apps/web-ele/src/api/mall/statistics/pay.ts | 16 + .../src/api/mall/trade/config/index.ts | 33 + apps/web-ele/src/api/member/address/index.ts | 20 + apps/web-ele/src/api/member/config/index.ts | 22 + .../src/api/member/experience-record/index.ts | 33 + apps/web-ele/src/api/member/group/index.ts | 50 + .../src/api/member/point/record/index.ts | 28 + .../src/api/member/signin/config/index.ts | 41 + .../src/api/member/signin/record/index.ts | 23 + apps/web-ele/src/api/member/tag/index.ts | 43 + apps/web-ele/src/api/mp/autoReply/index.ts | 49 + apps/web-ele/src/api/mp/freePublish/index.ts | 45 + .../src/api/pay/demo/withdraw/index.ts | 40 + .../src/api/pay/wallet/transaction/index.ts | 24 + apps/web-ele/src/api/system/area/index.ts | 24 + .../web-ele/src/api/system/login-log/index.ts | 33 + .../src/api/system/mail/account/index.ts | 64 + apps/web-ele/src/api/system/notice/index.ts | 59 + .../src/api/system/notify/message/index.ts | 65 + .../src/api/system/notify/template/index.ts | 79 + .../src/api/system/oauth2/client/index.ts | 64 + .../src/api/system/oauth2/open/index.ts | 58 + .../src/api/system/oauth2/token/index.ts | 34 + .../src/api/system/operate-log/index.ts | 39 + .../src/api/system/permission/index.ts | 57 + apps/web-ele/src/api/system/post/index.ts | 63 + apps/web-ele/src/api/system/role/index.ts | 63 + .../src/api/system/sms/channel/index.ts | 67 + apps/web-ele/src/api/system/sms/log/index.ts | 45 + .../src/api/system/sms/template/index.ts | 77 + .../src/api/system/social/client/index.ts | 55 + .../src/api/system/social/user/index.ts | 66 + .../src/api/system/tenant-package/index.ts | 64 + .../src/api/system/user/profile/index.ts | 56 + apps/web-ele/src/app.vue | 17 + apps/web-ele/src/components/cropper/index.ts | 3 + apps/web-ele/src/components/cropper/typing.ts | 68 + .../src/components/description/index.ts | 3 + apps/web-ele/src/components/dict-tag/index.ts | 1 + .../src/components/form-create/rules/index.ts | 6 + .../src/components/table-action/index.ts | 4 + .../src/components/table-action/typing.ts | 36 + apps/web-ele/src/components/tinymce/helper.ts | 85 + apps/web-ele/src/components/tinymce/index.ts | 1 + .../web-ele/src/components/tinymce/tinymce.ts | 17 + apps/web-ele/src/components/upload/index.ts | 3 + apps/web-ele/src/layouts/index.ts | 6 + apps/web-ele/src/locales/README.md | 3 + apps/web-ele/src/locales/index.ts | 102 + .../src/locales/langs/en-US/utils.json | 14 + .../src/locales/langs/zh-CN/utils.json | 14 + apps/web-ele/src/main.ts | 31 + apps/web-ele/src/plugins/form-create/index.ts | 103 + apps/web-ele/src/preferences.ts | 25 + apps/web-ele/src/router/access.ts | 41 + apps/web-ele/src/router/index.ts | 40 + apps/web-ele/src/router/routes/core.ts | 114 + apps/web-ele/src/router/routes/index.ts | 47 + .../src/router/routes/modules/dashboard.ts | 48 + apps/web-ele/src/router/routes/modules/pay.ts | 16 + .../src/router/routes/modules/system.ts | 16 + apps/web-ele/src/router/tongji.ts | 30 + apps/web-ele/src/store/auth.ts | 157 + apps/web-ele/src/views/_core/README.md | 3 + apps/web-ele/src/views/_core/about/index.vue | 9 + .../views/_core/authentication/code-login.vue | 173 + .../_core/authentication/forget-password.vue | 216 + .../src/views/_core/authentication/login.vue | 192 + .../_core/authentication/qrcode-login.vue | 10 + .../views/_core/authentication/register.vue | 221 + .../_core/authentication/social-login.vue | 210 + .../src/views/_core/fallback/coming-soon.vue | 7 + .../src/views/_core/fallback/forbidden.vue | 9 + .../views/_core/fallback/internal-error.vue | 9 + .../src/views/_core/fallback/not-found.vue | 9 + .../src/views/_core/fallback/offline.vue | 9 + .../web-ele/src/views/_core/profile/index.vue | 65 + .../_core/profile/modules/profile-user.vue | 145 + .../views/_core/profile/modules/reset-pwd.vue | 106 + .../dashboard/analytics/analytics-trends.vue | 98 + .../analytics/analytics-visits-data.vue | 82 + .../analytics/analytics-visits-source.vue | 65 + .../dashboard/analytics/analytics-visits.vue | 55 + .../src/views/dashboard/analytics/index.vue | 90 + .../infra/codegen/modules/basic-info.vue | 45 + .../inner/modules/demo03-grade-form.vue | 51 + .../normal/modules/demo03-grade-form.vue | 51 + .../demo/general/demo02/modules/form.vue | 138 + .../demo03/erp/modules/demo03-course-form.vue | 114 + .../demo03/erp/modules/demo03-grade-form.vue | 114 + .../inner/modules/demo03-course-form.vue | 95 + .../inner/modules/demo03-grade-form.vue | 67 + .../normal/modules/demo03-grade-form.vue | 67 + .../mall/promotion/bargain/record/index.vue | 84 + .../promotion/bargain/record/modules/list.vue | 67 + .../promotion/combination/record/index.vue | 82 + .../combination/record/modules/list.vue | 63 + .../promotion/seckill/activity/formatter.ts | 34 + .../src/views/system/area/modules/form.vue | 50 + .../system/sms/template/modules/form.vue | 89 + .../user/modules/reset-password-form.vue | 66 + apps/web-ele/tailwind.config.mjs | 1 + apps/web-ele/tsconfig.json | 12 + apps/web-ele/tsconfig.node.json | 10 + apps/web-ele/vite.config.mts | 27 + apps/web-naive/.env.analyze | 7 + apps/web-naive/.env.development | 21 + apps/web-naive/.env.production | 23 + apps/web-naive/index.html | 35 + apps/web-naive/postcss.config.mjs | 1 + apps/web-naive/public/favicon.ico | Bin 0 -> 5430 bytes apps/web-naive/src/adapter/naive.ts | 25 + apps/web-naive/src/api/core/index.ts | 1 + apps/web-naive/src/api/index.ts | 1 + .../src/api/infra/api-access-log/index.ts | 44 + .../src/api/infra/api-error-log/index.ts | 55 + apps/web-naive/src/api/infra/job-log/index.ts | 41 + apps/web-naive/src/api/infra/redis/index.ts | 190 + apps/web-naive/src/api/system/area/index.ts | 24 + .../src/api/system/login-log/index.ts | 33 + .../src/api/system/notify/message/index.ts | 65 + .../src/api/system/oauth2/open/index.ts | 58 + .../src/api/system/oauth2/token/index.ts | 34 + .../src/api/system/operate-log/index.ts | 39 + .../src/api/system/permission/index.ts | 57 + .../web-naive/src/api/system/sms/log/index.ts | 45 + .../src/api/system/social/user/index.ts | 66 + .../src/api/system/user/profile/index.ts | 56 + apps/web-naive/src/app.vue | 56 + apps/web-naive/src/bootstrap.ts | 76 + .../src/components/dict-tag/index.ts | 1 + apps/web-naive/src/layouts/index.ts | 6 + apps/web-naive/src/locales/README.md | 3 + .../src/locales/langs/en-US/utils.json | 14 + .../src/locales/langs/zh-CN/utils.json | 14 + apps/web-naive/src/main.ts | 31 + apps/web-naive/src/preferences.ts | 25 + apps/web-naive/src/router/access.ts | 41 + apps/web-naive/src/router/index.ts | 40 + apps/web-naive/src/router/routes/core.ts | 114 + apps/web-naive/src/router/routes/index.ts | 47 + .../src/router/routes/modules/system.ts | 16 + apps/web-naive/src/router/tongji.ts | 30 + apps/web-naive/src/views/_core/README.md | 3 + .../web-naive/src/views/_core/about/index.vue | 9 + .../views/_core/authentication/code-login.vue | 172 + .../_core/authentication/forget-password.vue | 215 + .../src/views/_core/authentication/login.vue | 192 + .../_core/authentication/qrcode-login.vue | 10 + .../views/_core/authentication/register.vue | 221 + .../_core/authentication/social-login.vue | 210 + .../views/_core/authentication/sso-login.vue | 221 + .../src/views/_core/fallback/coming-soon.vue | 7 + .../src/views/_core/fallback/forbidden.vue | 9 + .../views/_core/fallback/internal-error.vue | 9 + .../src/views/_core/fallback/not-found.vue | 9 + .../src/views/_core/fallback/offline.vue | 9 + .../dashboard/analytics/analytics-trends.vue | 98 + .../analytics/analytics-visits-data.vue | 82 + .../analytics/analytics-visits-source.vue | 65 + .../dashboard/analytics/analytics-visits.vue | 55 + .../src/views/dashboard/analytics/index.vue | 90 + .../src/views/dashboard/workspace/index.vue | 266 + .../infra/codegen/modules/basic-info.vue | 45 + .../src/views/system/area/modules/form.vue | 49 + .../system/sms/template/modules/form.vue | 88 + .../user/modules/reset-password-form.vue | 65 + apps/web-naive/tailwind.config.mjs | 1 + apps/web-naive/tsconfig.json | 12 + apps/web-naive/tsconfig.node.json | 10 + apps/web-naive/vite.config.mts | 20 + docs/.vitepress/components/index.ts | 1 + docs/.vitepress/config/en.mts | 231 + docs/.vitepress/config/index.mts | 25 + docs/.vitepress/config/shared.mts | 172 + docs/.vitepress/config/zh.mts | 358 ++ .../theme/components/site-layout.vue | 96 + .../theme/components/vben-contributors.vue | 29 + docs/.vitepress/theme/index.ts | 29 + docs/.vitepress/theme/plugins/hm.ts | 28 + docs/.vitepress/theme/styles/base.css | 22 + docs/.vitepress/theme/styles/index.ts | 4 + docs/.vitepress/theme/styles/variables.css | 132 + docs/src/_env/adapter/component.ts | 128 + docs/src/_env/adapter/form.ts | 47 + docs/src/_env/adapter/vxe-table.ts | 70 + docs/src/_env/node/adapter/form.ts | 4 + docs/src/_env/node/adapter/vxe-table.ts | 3 + docs/src/commercial/community.md | 30 + docs/src/commercial/customized.md | 12 + docs/src/commercial/technical-support.md | 8 + .../common-ui/vben-api-component.md | 173 + .../common-ui/vben-count-to-animator.md | 59 + docs/src/components/common-ui/vben-drawer.md | 156 + .../common-ui/vben-ellipsis-text.md | 64 + .../components/common-ui/vben-vxe-table.md | 276 + docs/src/components/introduction.md | 15 + docs/src/components/layout-ui/page.md | 44 + docs/src/demos/vben-alert/alert/index.vue | 36 + docs/src/demos/vben-alert/confirm/index.vue | 75 + docs/src/demos/vben-alert/prompt/index.vue | 118 + .../vben-api-component/cascader/index.vue | 100 + .../vben-count-to-animator/basic/index.vue | 6 + .../vben-count-to-animator/custom/index.vue | 12 + .../demos/vben-drawer/auto-height/index.vue | 21 + docs/src/demos/vben-drawer/basic/index.vue | 11 + docs/src/demos/vben-drawer/dynamic/drawer.vue | 26 + docs/src/demos/vben-drawer/dynamic/index.vue | 29 + docs/src/demos/vben-drawer/extra/drawer.vue | 8 + docs/src/demos/vben-drawer/extra/index.vue | 21 + .../demos/vben-drawer/shared-data/drawer.vue | 26 + .../demos/vben-drawer/shared-data/index.vue | 27 + .../vben-ellipsis-text/auto-display/index.vue | 16 + .../demos/vben-ellipsis-text/expand/index.vue | 10 + .../demos/vben-ellipsis-text/line/index.vue | 10 + .../vben-ellipsis-text/tooltip/index.vue | 14 + docs/src/demos/vben-form/api/index.vue | 236 + docs/src/demos/vben-form/basic/index.vue | 231 + docs/src/demos/vben-form/custom/index.vue | 68 + docs/src/demos/vben-form/dynamic/index.vue | 168 + docs/src/demos/vben-form/query/index.vue | 94 + docs/src/demos/vben-form/rules/index.vue | 190 + .../demos/vben-modal/auto-height/index.vue | 21 + docs/src/demos/vben-modal/basic/index.vue | 11 + docs/src/demos/vben-modal/draggable/index.vue | 21 + docs/src/demos/vben-modal/draggable/modal.vue | 10 + docs/src/demos/vben-modal/dynamic/index.vue | 29 + docs/src/demos/vben-modal/dynamic/modal.vue | 38 + docs/src/demos/vben-modal/extra/index.vue | 21 + docs/src/demos/vben-modal/extra/modal.vue | 8 + .../demos/vben-modal/shared-data/index.vue | 27 + .../demos/vben-modal/shared-data/modal.vue | 26 + docs/src/demos/vben-vxe-table/basic/index.vue | 85 + .../demos/vben-vxe-table/edit-cell/index.vue | 55 + .../demos/vben-vxe-table/edit-row/index.vue | 92 + docs/src/demos/vben-vxe-table/fixed/index.vue | 67 + docs/src/demos/vben-vxe-table/form/index.vue | 127 + docs/src/demos/vben-vxe-table/mock-api.ts | 36 + .../src/demos/vben-vxe-table/remote/index.vue | 112 + docs/src/demos/vben-vxe-table/table-data.ts | 384 ++ docs/src/demos/vben-vxe-table/tree/index.vue | 80 + .../demos/vben-vxe-table/virtual/index.vue | 64 + docs/src/en/guide/essentials/build.md | 243 + docs/src/en/guide/essentials/concept.md | 70 + .../en/guide/essentials/external-module.md | 58 + docs/src/en/guide/essentials/icons.md | 78 + docs/src/en/guide/essentials/route.md | 603 +++ docs/src/en/guide/essentials/server.md | 356 ++ docs/src/en/guide/essentials/styles.md | 106 + docs/src/en/guide/in-depth/access.md | 356 ++ docs/src/en/guide/in-depth/check-updates.md | 48 + docs/src/en/guide/in-depth/features.md | 84 + docs/src/en/guide/in-depth/layout.md | 1 + docs/src/en/guide/in-depth/loading.md | 44 + docs/src/en/guide/in-depth/locale.md | 227 + docs/src/en/guide/in-depth/login.md | 119 + docs/src/en/guide/in-depth/theme.md | 1295 +++++ docs/src/en/guide/in-depth/ui-framework.md | 17 + docs/src/en/guide/introduction/changelog.md | 3 + docs/src/en/guide/introduction/quick-start.md | 95 + docs/src/en/guide/introduction/roadmap.md | 3 + docs/src/en/guide/introduction/vben.md | 49 + docs/src/en/guide/introduction/why.md | 9 + docs/src/en/guide/other/faq.md | 159 + docs/src/en/guide/other/project-update.md | 54 + docs/src/en/guide/other/remove-code.md | 18 + docs/src/en/guide/project/changeset.md | 21 + docs/src/en/guide/project/cli.md | 106 + docs/src/en/guide/project/dir.md | 68 + docs/src/en/guide/project/standard.md | 210 + docs/src/en/guide/project/tailwindcss.md | 13 + docs/src/en/guide/project/test.md | 33 + docs/src/en/guide/project/vite.md | 33 + docs/src/en/index.md | 76 + docs/src/friend-links/index.md | 26 + docs/src/guide/essentials/build.md | 243 + docs/src/guide/essentials/concept.md | 70 + docs/src/guide/essentials/external-module.md | 58 + docs/src/guide/essentials/icons.md | 78 + docs/src/guide/essentials/route.md | 644 +++ docs/src/guide/essentials/server.md | 387 ++ docs/src/guide/essentials/styles.md | 106 + docs/src/guide/in-depth/access.md | 357 ++ docs/src/guide/in-depth/check-updates.md | 92 + docs/src/guide/in-depth/features.md | 84 + docs/src/guide/in-depth/layout.md | 1 + docs/src/guide/in-depth/loading.md | 46 + docs/src/guide/in-depth/locale.md | 227 + docs/src/guide/in-depth/login.md | 220 + docs/src/guide/in-depth/theme.md | 1295 +++++ docs/src/guide/in-depth/ui-framework.md | 17 + docs/src/guide/introduction/changelog.md | 3 + docs/src/guide/introduction/quick-start.md | 111 + docs/src/guide/introduction/roadmap.md | 3 + docs/src/guide/introduction/vben.md | 49 + docs/src/guide/introduction/why.md | 23 + docs/src/guide/other/faq.md | 159 + docs/src/guide/other/project-update.md | 55 + docs/src/guide/other/remove-code.md | 18 + docs/src/guide/project/changeset.md | 21 + docs/src/guide/project/cli.md | 113 + docs/src/guide/project/dir.md | 68 + docs/src/guide/project/standard.md | 210 + docs/src/guide/project/tailwindcss.md | 17 + docs/src/guide/project/test.md | 33 + docs/src/guide/project/vite.md | 33 + docs/src/index.md | 111 + docs/src/public/favicon.ico | Bin 0 -> 5430 bytes docs/src/public/guide/devtools.png | Bin 0 -> 402172 bytes docs/src/public/guide/loading.png | Bin 0 -> 89250 bytes docs/src/public/guide/locale.png | Bin 0 -> 482275 bytes docs/src/public/guide/login-expired.png | Bin 0 -> 569303 bytes docs/src/public/guide/login.png | Bin 0 -> 480224 bytes docs/src/public/guide/preferences.png | Bin 0 -> 126147 bytes docs/src/public/guide/qq.png | Bin 0 -> 457417 bytes docs/src/public/guide/qq_channel.png | Bin 0 -> 458478 bytes docs/src/public/guide/report.png | Bin 0 -> 1024246 bytes docs/src/public/guide/test.png | Bin 0 -> 254971 bytes docs/src/public/guide/update-notice.png | Bin 0 -> 410070 bytes docs/src/public/logos/nitro.svg | 42 + docs/src/public/logos/shadcn-ui.svg | 1 + docs/src/public/logos/turborepo.svg | 32 + docs/src/public/logos/vite.svg | 15 + docs/src/sponsor/personal.md | 12 + docs/tailwind.config.mjs | 11 + docs/tsconfig.json | 19 + eslint.config.mjs | 5 + .../eslint-config/build.config.ts | 7 + .../lint-configs/eslint-config/package.json | 56 + .../eslint-config/src/configs/comments.ts | 24 + .../eslint-config/src/configs/disableds.ts | 28 + .../eslint-config/src/configs/import.ts | 25 + .../eslint-config/src/configs/index.ts | 17 + .../eslint-config/src/configs/javascript.ts | 241 + .../eslint-config/src/configs/jsdoc.ts | 34 + .../eslint-config/src/configs/jsonc.ts | 258 + .../eslint-config/src/configs/prettier.ts | 19 + .../eslint-config/src/configs/regexp.ts | 20 + .../eslint-config/src/configs/test.ts | 45 + .../eslint-config/src/configs/unicorn.ts | 45 + .../lint-configs/eslint-config/src/index.ts | 60 + .../lint-configs/eslint-config/src/util.ts | 8 + .../lint-configs/prettier-config/index.mjs | 18 + .../lint-configs/prettier-config/package.json | 28 + .../lint-configs/stylelint-config/index.mjs | 141 + internal/node-utils/build.config.ts | 7 + .../node-utils/src/__tests__/hash.test.ts | 52 + .../node-utils/src/__tests__/path.test.ts | 67 + internal/node-utils/src/constants.ts | 6 + internal/node-utils/src/date.ts | 12 + internal/node-utils/src/fs.ts | 39 + internal/node-utils/src/git.ts | 34 + internal/node-utils/src/hash.ts | 18 + internal/node-utils/src/index.ts | 19 + internal/node-utils/src/monorepo.ts | 46 + internal/node-utils/src/path.ts | 11 + internal/node-utils/src/prettier.ts | 21 + internal/node-utils/src/spinner.ts | 26 + internal/node-utils/tsconfig.json | 6 + internal/tailwind-config/build.config.ts | 10 + internal/tailwind-config/src/module.d.ts | 3 + internal/tailwind-config/src/plugins/entry.ts | 53 + .../tailwind-config/src/postcss.config.ts | 15 + internal/tailwind-config/tsconfig.json | 9 + internal/tsconfig/base.json | 40 + internal/tsconfig/library.json | 13 + internal/tsconfig/node.json | 12 + internal/tsconfig/web-app.json | 8 + internal/tsconfig/web.json | 14 + internal/vite-config/build.config.ts | 7 + internal/vite-config/src/config/common.ts | 13 + internal/vite-config/src/config/index.ts | 37 + internal/vite-config/src/config/library.ts | 59 + internal/vite-config/src/index.ts | 4 + internal/vite-config/src/options.ts | 45 + internal/vite-config/src/plugins/archiver.ts | 75 + .../src/plugins/extra-app-config.ts | 92 + internal/vite-config/src/plugins/importmap.ts | 245 + internal/vite-config/src/plugins/index.ts | 247 + .../src/plugins/inject-app-loading/README.md | 3 + .../default-loading-antd.html | 107 + .../inject-app-loading/default-loading.html | 113 + .../src/plugins/inject-app-loading/index.ts | 66 + .../src/plugins/inject-metadata.ts | 111 + internal/vite-config/src/plugins/license.ts | 63 + .../vite-config/src/plugins/nitro-mock.ts | 98 + internal/vite-config/src/plugins/print.ts | 28 + internal/vite-config/src/plugins/vxe-table.ts | 20 + internal/vite-config/src/typing.ts | 343 ++ internal/vite-config/src/utils/env.ts | 110 + internal/vite-config/tsconfig.json | 6 + lefthook.yml | 76 + packages/@core/README.md | 3 + packages/@core/base/README.md | 5 + packages/@core/base/design/src/css/global.css | 160 + .../@core/base/design/src/css/nprogress.css | 59 + .../@core/base/design/src/css/transition.css | 236 + .../base/design/src/design-tokens/dark.css | 446 ++ .../base/design/src/design-tokens/default.css | 382 ++ .../@core/base/design/src/scss-bem/bem.scss | 34 + .../base/design/src/scss-bem/constants.scss | 5 + packages/@core/base/design/tsconfig.json | 6 + packages/@core/base/design/vite.config.mts | 9 + packages/@core/base/icons/build.config.ts | 7 + packages/@core/base/icons/src/create-icon.ts | 14 + packages/@core/base/icons/src/index.ts | 11 + packages/@core/base/icons/tsconfig.json | 6 + packages/@core/base/shared/build.config.ts | 14 + .../cache/__tests__/storage-manager.test.ts | 130 + packages/@core/base/shared/src/cache/index.ts | 1 + .../base/shared/src/cache/storage-manager.ts | 118 + packages/@core/base/shared/src/cache/types.ts | 17 + .../src/color/__tests__/convert.test.ts | 58 + packages/@core/base/shared/src/color/color.ts | 9 + .../@core/base/shared/src/color/convert.ts | 62 + .../@core/base/shared/src/color/generator.ts | 45 + packages/@core/base/shared/src/color/index.ts | 3 + .../base/shared/src/constants/globals.ts | 16 + .../@core/base/shared/src/constants/index.ts | 2 + .../@core/base/shared/src/global-state.ts | 45 + packages/@core/base/shared/src/store.ts | 1 + .../shared/src/utils/__tests__/diff.test.ts | 53 + .../shared/src/utils/__tests__/dom.test.ts | 127 + .../src/utils/__tests__/inference.test.ts | 183 + .../shared/src/utils/__tests__/letter.test.ts | 116 + .../src/utils/__tests__/state-handler.test.ts | 60 + .../shared/src/utils/__tests__/tree.test.ts | 196 + .../shared/src/utils/__tests__/unique.test.ts | 60 + .../__tests__/update-css-variables.test.ts | 30 + .../shared/src/utils/__tests__/util.test.ts | 156 + .../shared/src/utils/__tests__/window.test.ts | 33 + packages/@core/base/shared/src/utils/cn.ts | 10 + packages/@core/base/shared/src/utils/diff.ts | 96 + packages/@core/base/shared/src/utils/dom.ts | 95 + .../@core/base/shared/src/utils/download.ts | 271 + .../@core/base/shared/src/utils/inference.ts | 165 + .../@core/base/shared/src/utils/letter.ts | 47 + packages/@core/base/shared/src/utils/merge.ts | 10 + .../@core/base/shared/src/utils/nprogress.ts | 43 + .../base/shared/src/utils/state-handler.ts | 50 + packages/@core/base/shared/src/utils/time.ts | 299 ++ packages/@core/base/shared/src/utils/to.ts | 21 + packages/@core/base/shared/src/utils/tree.ts | 211 + .../@core/base/shared/src/utils/unique.ts | 15 + .../shared/src/utils/update-css-variables.ts | 35 + packages/@core/base/shared/src/utils/uuid.ts | 39 + packages/@core/base/shared/tsconfig.json | 6 + packages/@core/base/typings/build.config.ts | 7 + packages/@core/base/typings/src/basic.d.ts | 35 + packages/@core/base/typings/src/helper.d.ts | 132 + packages/@core/base/typings/src/index.ts | 6 + .../@core/base/typings/src/menu-record.ts | 99 + packages/@core/base/typings/src/tabs.ts | 8 + .../@core/base/typings/src/vue-router.d.ts | 153 + packages/@core/base/typings/tsconfig.json | 6 + packages/@core/base/typings/vue-router.d.ts | 9 + packages/@core/composables/build.config.ts | 7 + .../src/__tests__/use-sortable.test.ts | 48 + .../@core/composables/src/use-is-mobile.ts | 7 + .../@core/composables/src/use-layout-style.ts | 87 + .../@core/composables/src/use-namespace.ts | 106 + .../composables/src/use-priority-value.ts | 94 + .../@core/composables/src/use-scroll-lock.ts | 54 + .../src/use-simple-locale/README.md | 3 + .../src/use-simple-locale/index.ts | 27 + .../src/use-simple-locale/messages.ts | 24 + .../@core/composables/src/use-sortable.ts | 29 + packages/@core/composables/tsconfig.json | 6 + .../preferences/__tests__/config.test.ts | 10 + .../preferences/__tests__/preferences.test.ts | 253 + packages/@core/preferences/build.config.ts | 7 + packages/@core/preferences/src/index.ts | 35 + .../preferences/src/update-css-variables.ts | 116 + .../@core/preferences/src/use-preferences.ts | 254 + packages/@core/preferences/tsconfig.json | 6 + packages/@core/ui-kit/README.md | 3 + .../ui-kit/form-ui/__tests__/form-api.test.ts | 189 + packages/@core/ui-kit/form-ui/build.config.ts | 21 + .../@core/ui-kit/form-ui/postcss.config.mjs | 1 + packages/@core/ui-kit/form-ui/src/config.ts | 87 + .../ui-kit/form-ui/src/form-render/context.ts | 24 + .../form-ui/src/form-render/dependencies.ts | 124 + .../form-ui/src/form-render/expandable.ts | 105 + .../ui-kit/form-ui/src/form-render/helper.ts | 60 + .../ui-kit/form-ui/src/form-render/index.ts | 3 + packages/@core/ui-kit/form-ui/src/index.ts | 12 + .../@core/ui-kit/form-ui/src/use-vben-form.ts | 50 + .../@core/ui-kit/form-ui/tailwind.config.mjs | 1 + packages/@core/ui-kit/form-ui/tsconfig.json | 6 + .../@core/ui-kit/layout-ui/build.config.ts | 21 + .../@core/ui-kit/layout-ui/postcss.config.mjs | 1 + .../ui-kit/layout-ui/src/components/index.ts | 5 + .../layout-ui/src/components/widgets/index.ts | 2 + .../ui-kit/layout-ui/src/hooks/use-layout.ts | 53 + packages/@core/ui-kit/layout-ui/src/index.ts | 2 + .../@core/ui-kit/layout-ui/src/vben-layout.ts | 175 + .../ui-kit/layout-ui/tailwind.config.mjs | 1 + packages/@core/ui-kit/layout-ui/tsconfig.json | 6 + packages/@core/ui-kit/menu-ui/README.md | 1 + packages/@core/ui-kit/menu-ui/build.config.ts | 26 + .../@core/ui-kit/menu-ui/postcss.config.mjs | 1 + .../src/components/collapse-transition.vue | 96 + .../ui-kit/menu-ui/src/components/index.ts | 4 + .../menu-ui/src/components/menu-badge-dot.vue | 28 + .../menu-ui/src/components/menu-item.vue | 122 + .../ui-kit/menu-ui/src/components/menu.vue | 872 ++++ .../src/components/normal-menu/index.ts | 2 + .../src/components/normal-menu/normal-menu.ts | 27 + .../src/components/sub-menu-content.vue | 105 + .../@core/ui-kit/menu-ui/src/hooks/index.ts | 2 + .../menu-ui/src/hooks/use-menu-context.ts | 55 + .../menu-ui/src/hooks/use-menu-scroll.ts | 46 + .../ui-kit/menu-ui/src/hooks/use-menu.ts | 48 + packages/@core/ui-kit/menu-ui/src/index.ts | 4 + packages/@core/ui-kit/menu-ui/src/menu.vue | 32 + .../@core/ui-kit/menu-ui/src/sub-menu.vue | 71 + packages/@core/ui-kit/menu-ui/src/types.ts | 145 + .../@core/ui-kit/menu-ui/src/utils/index.ts | 52 + .../@core/ui-kit/menu-ui/tailwind.config.mjs | 1 + packages/@core/ui-kit/menu-ui/tsconfig.json | 6 + .../@core/ui-kit/popup-ui/build.config.ts | 21 + packages/@core/ui-kit/popup-ui/package.json | 48 + .../@core/ui-kit/popup-ui/postcss.config.mjs | 1 + .../@core/ui-kit/popup-ui/src/alert/alert.ts | 99 + .../@core/ui-kit/popup-ui/src/alert/index.ts | 14 + .../src/drawer/__tests__/drawer-api.test.ts | 116 + .../ui-kit/popup-ui/src/drawer/drawer-api.ts | 183 + .../ui-kit/popup-ui/src/drawer/drawer.ts | 179 + .../@core/ui-kit/popup-ui/src/drawer/index.ts | 3 + .../ui-kit/popup-ui/src/drawer/use-drawer.ts | 142 + packages/@core/ui-kit/popup-ui/src/index.ts | 3 + .../src/modal/__tests__/modal-api.test.ts | 117 + .../@core/ui-kit/popup-ui/src/modal/index.ts | 3 + .../ui-kit/popup-ui/src/modal/use-modal.ts | 151 + .../@core/ui-kit/popup-ui/tailwind.config.mjs | 1 + packages/@core/ui-kit/popup-ui/tsconfig.json | 6 + .../@core/ui-kit/shadcn-ui/build.config.ts | 27 + .../@core/ui-kit/shadcn-ui/components.json | 16 + .../@core/ui-kit/shadcn-ui/postcss.config.mjs | 1 + .../shadcn-ui/src/components/avatar/index.ts | 1 + .../src/components/back-top/backtop.ts | 38 + .../src/components/back-top/index.ts | 1 + .../src/components/back-top/use-backtop.ts | 45 + .../src/components/breadcrumb/breadcrumb.vue | 98 + .../src/components/breadcrumb/index.ts | 3 + .../src/components/breadcrumb/types.ts | 17 + .../src/components/button/button-group.vue | 98 + .../components/button/check-button-group.vue | 196 + .../src/components/button/icon-button.vue | 68 + .../shadcn-ui/src/components/button/index.ts | 5 + .../src/components/checkbox/index.ts | 1 + .../src/components/context-menu/index.ts | 3 + .../src/components/context-menu/interface.ts | 38 + .../count-to-animator/count-to-animator.vue | 128 + .../src/components/count-to-animator/index.ts | 1 + .../src/components/dropdown-menu/index.ts | 4 + .../src/components/dropdown-menu/interface.ts | 32 + .../expandable-arrow/expandable-arrow.vue | 31 + .../src/components/expandable-arrow/index.ts | 1 + .../src/components/full-screen/index.ts | 1 + .../shadcn-ui/src/components/icon/icon.vue | 35 + .../shadcn-ui/src/components/icon/index.ts | 1 + .../ui-kit/shadcn-ui/src/components/index.ts | 23 + .../src/components/input-password/index.ts | 1 + .../shadcn-ui/src/components/logo/index.ts | 1 + .../src/components/pin-input/index.ts | 3 + .../src/components/pin-input/types.ts | 30 + .../shadcn-ui/src/components/popover/index.ts | 1 + .../src/components/render-content/index.ts | 1 + .../render-content/render-content.vue | 56 + .../src/components/scrollbar/index.ts | 1 + .../src/components/segmented/index.ts | 3 + .../src/components/segmented/types.ts | 6 + .../shadcn-ui/src/components/select/index.ts | 1 + .../src/components/select/select.vue | 57 + .../src/components/spine-text/index.ts | 1 + .../src/components/spine-text/spine-text.vue | 49 + .../shadcn-ui/src/components/spinner/index.ts | 2 + .../shadcn-ui/src/components/tooltip/index.ts | 2 + .../shadcn-ui/src/ui/accordion/index.ts | 4 + .../shadcn-ui/src/ui/alert-dialog/index.ts | 6 + .../ui-kit/shadcn-ui/src/ui/avatar/avatar.ts | 22 + .../ui-kit/shadcn-ui/src/ui/avatar/index.ts | 4 + .../ui-kit/shadcn-ui/src/ui/badge/Badge.vue | 18 + .../ui-kit/shadcn-ui/src/ui/badge/badge.ts | 25 + .../ui-kit/shadcn-ui/src/ui/badge/index.ts | 3 + .../src/ui/breadcrumb/Breadcrumb.vue | 11 + .../src/ui/breadcrumb/BreadcrumbEllipsis.vue | 22 + .../src/ui/breadcrumb/BreadcrumbSeparator.vue | 21 + .../shadcn-ui/src/ui/breadcrumb/index.ts | 7 + .../ui-kit/shadcn-ui/src/ui/button/button.ts | 34 + .../ui-kit/shadcn-ui/src/ui/button/index.ts | 5 + .../ui-kit/shadcn-ui/src/ui/button/types.ts | 20 + .../shadcn-ui/src/ui/card/CardContent.vue | 13 + .../shadcn-ui/src/ui/card/CardFooter.vue | 13 + .../shadcn-ui/src/ui/card/CardHeader.vue | 13 + .../shadcn-ui/src/ui/card/CardTitle.vue | 13 + .../ui-kit/shadcn-ui/src/ui/card/index.ts | 6 + .../ui-kit/shadcn-ui/src/ui/checkbox/index.ts | 1 + .../shadcn-ui/src/ui/context-menu/index.ts | 14 + .../shadcn-ui/src/ui/dialog/DialogFooter.vue | 15 + .../shadcn-ui/src/ui/dialog/DialogHeader.vue | 15 + .../ui-kit/shadcn-ui/src/ui/dialog/index.ts | 9 + .../ui/dropdown-menu/DropdownMenuShortcut.vue | 13 + .../ui-kit/shadcn-ui/src/ui/form/FormItem.vue | 20 + .../ui-kit/shadcn-ui/src/ui/form/index.ts | 11 + .../shadcn-ui/src/ui/form/injectionKeys.ts | 4 + .../shadcn-ui/src/ui/form/useFormField.ts | 38 + .../shadcn-ui/src/ui/hover-card/index.ts | 3 + .../@core/ui-kit/shadcn-ui/src/ui/index.ts | 31 + .../ui-kit/shadcn-ui/src/ui/input/index.ts | 1 + .../ui-kit/shadcn-ui/src/ui/label/index.ts | 1 + .../ui/number-field/NumberFieldContent.vue | 20 + .../shadcn-ui/src/ui/number-field/index.ts | 5 + .../shadcn-ui/src/ui/pin-input/index.ts | 4 + .../shadcn-ui/src/ui/radio-group/index.ts | 2 + .../shadcn-ui/src/ui/scroll-area/index.ts | 2 + .../ui-kit/shadcn-ui/src/ui/select/index.ts | 11 + .../shadcn-ui/src/ui/separator/index.ts | 1 + .../shadcn-ui/src/ui/sheet/SheetFooter.vue | 15 + .../shadcn-ui/src/ui/sheet/SheetHeader.vue | 11 + .../ui-kit/shadcn-ui/src/ui/sheet/index.ts | 10 + .../ui-kit/shadcn-ui/src/ui/sheet/sheet.ts | 24 + .../ui-kit/shadcn-ui/src/ui/switch/index.ts | 1 + .../ui-kit/shadcn-ui/src/ui/textarea/index.ts | 1 + .../shadcn-ui/src/ui/toggle-group/index.ts | 2 + .../ui-kit/shadcn-ui/src/ui/toggle/index.ts | 2 + .../ui-kit/shadcn-ui/src/ui/toggle/toggle.ts | 27 + .../ui-kit/shadcn-ui/src/ui/tooltip/index.ts | 4 + .../ui-kit/shadcn-ui/tailwind.config.mjs | 1 + packages/@core/ui-kit/shadcn-ui/tsconfig.json | 12 + packages/@core/ui-kit/tabs-ui/build.config.ts | 21 + .../@core/ui-kit/tabs-ui/postcss.config.mjs | 1 + .../ui-kit/tabs-ui/src/components/index.ts | 2 + .../tabs-ui/src/components/widgets/index.ts | 2 + packages/@core/ui-kit/tabs-ui/src/index.ts | 3 + packages/@core/ui-kit/tabs-ui/src/types.ts | 73 + .../@core/ui-kit/tabs-ui/src/use-tabs-drag.ts | 124 + .../@core/ui-kit/tabs-ui/tailwind.config.mjs | 1 + packages/@core/ui-kit/tabs-ui/tsconfig.json | 6 + packages/constants/README.md | 19 + packages/constants/src/core.ts | 23 + packages/constants/tsconfig.json | 6 + packages/effects/README.md | 10 + .../effects/access/src/access-control.vue | 47 + packages/effects/access/src/accessible.ts | 156 + packages/effects/access/src/directive.ts | 42 + packages/effects/access/src/index.ts | 4 + packages/effects/access/src/use-access.ts | 53 + packages/effects/access/tsconfig.json | 6 + .../api-component/api-component.vue | 288 ++ .../src/components/api-component/index.ts | 1 + .../captcha/hooks/useCaptchaPoints.ts | 19 + .../common-ui/src/components/captcha/index.ts | 9 + .../captcha/point-selection-captcha/index.vue | 176 + .../point-selection-captcha-card.vue | 84 + .../captcha/slider-captcha/index.vue | 244 + .../slider-captcha/slider-captcha-action.vue | 65 + .../slider-captcha/slider-captcha-bar.vue | 40 + .../slider-captcha/slider-captcha-content.vue | 53 + .../captcha/slider-rotate-captcha/index.vue | 213 + .../slider-translate-captcha/index.vue | 311 ++ .../common-ui/src/components/captcha/types.ts | 211 + .../components/captcha/verification/typing.ts | 25 + .../captcha/verification/utils/util.ts | 102 + .../captcha/verification/verify.css | 279 + .../src/components/col-page/col-page.vue | 107 + .../src/components/col-page/index.ts | 2 + .../src/components/col-page/types.ts | 26 + .../src/components/count-to/count-to.vue | 123 + .../src/components/count-to/index.ts | 2 + .../src/components/count-to/types.ts | 53 + .../src/components/doc-alert/doc-alert.vue | 55 + .../src/components/doc-alert/index.ts | 2 + .../src/components/doc-alert/types.ts | 4 + .../ellipsis-text/ellipsis-text.vue | 232 + .../src/components/ellipsis-text/index.ts | 1 + .../src/components/icon-picker/icons.ts | 56 + .../src/components/icon-picker/index.ts | 1 + .../src/components/json-viewer/index.ts | 3 + .../src/components/json-viewer/types.ts | 44 + .../src/components/loading/directive.ts | 132 + .../common-ui/src/components/loading/index.ts | 3 + .../src/components/loading/loading.vue | 39 + .../src/components/loading/spinner.vue | 28 + .../components/page/__tests__/page.test.ts | 89 + .../common-ui/src/components/page/index.ts | 2 + .../common-ui/src/components/page/types.ts | 17 + .../common-ui/src/components/resize/index.ts | 1 + .../src/components/tippy/directive.ts | 100 + .../common-ui/src/components/tippy/index.ts | 67 + packages/effects/common-ui/src/index.ts | 2 + .../effects/common-ui/src/ui/about/about.ts | 14 + .../effects/common-ui/src/ui/about/about.vue | 183 + .../effects/common-ui/src/ui/about/index.ts | 1 + .../src/ui/authentication/auth-title.vue | 13 + .../src/ui/authentication/doc-link.vue | 48 + .../src/ui/authentication/forget-password.vue | 116 + .../common-ui/src/ui/authentication/index.ts | 9 + .../ui/authentication/login-expired-modal.vue | 95 + .../src/ui/authentication/register.vue | 121 + .../common-ui/src/ui/authentication/types.ts | 70 + .../analysis/analysis-chart-card.vue | 24 + .../analysis/analysis-charts-tabs.vue | 40 + .../dashboard/analysis/analysis-overview.vue | 55 + .../src/ui/dashboard/analysis/index.ts | 3 + .../common-ui/src/ui/dashboard/index.ts | 3 + .../common-ui/src/ui/dashboard/typing.ts | 48 + .../src/ui/dashboard/workbench/index.ts | 5 + .../dashboard/workbench/workbench-header.vue | 46 + .../workbench/workbench-quick-nav.vue | 56 + .../dashboard/workbench/workbench-trends.vue | 64 + .../common-ui/src/ui/fallback/fallback.ts | 25 + .../common-ui/src/ui/fallback/fallback.vue | 164 + .../src/ui/fallback/icons/icon-403.vue | 151 + .../src/ui/fallback/icons/icon-404.vue | 154 + .../src/ui/fallback/icons/icon-500.vue | 215 + .../ui/fallback/icons/icon-coming-soon.vue | 262 + .../src/ui/fallback/icons/icon-offline.vue | 112 + .../src/ui/fallback/icons/warning.svg | 1 + .../common-ui/src/ui/fallback/index.ts | 2 + packages/effects/common-ui/tsconfig.json | 6 + packages/effects/hooks/README.md | 19 + .../effects/hooks/src/use-content-maximize.ts | 44 + .../effects/hooks/src/use-design-tokens.ts | 321 ++ .../effects/hooks/src/use-hover-toggle.ts | 163 + packages/effects/hooks/src/use-refresh.ts | 16 + packages/effects/hooks/src/use-tabs.ts | 133 + packages/effects/hooks/src/use-watermark.ts | 84 + packages/effects/hooks/tsconfig.json | 9 + .../src/authentication/icons/slogan.vue | 4568 +++++++++++++++++ .../layouts/src/authentication/index.ts | 2 + .../layouts/src/authentication/toolbar.vue | 49 + .../layouts/src/authentication/types.ts | 1 + packages/effects/layouts/src/basic/README.md | 7 + .../src/basic/content/content-spinner.vue | 12 + .../layouts/src/basic/content/content.vue | 148 + .../layouts/src/basic/content/index.ts | 2 + .../src/basic/content/use-content-spinner.ts | 50 + .../layouts/src/basic/copyright/copyright.vue | 48 + .../layouts/src/basic/copyright/index.ts | 1 + .../layouts/src/basic/footer/footer.vue | 11 + .../effects/layouts/src/basic/footer/index.ts | 1 + .../effects/layouts/src/basic/header/index.ts | 1 + packages/effects/layouts/src/basic/index.ts | 1 + .../layouts/src/basic/menu/extra-menu.vue | 41 + .../effects/layouts/src/basic/menu/index.ts | 5 + .../effects/layouts/src/basic/menu/menu.vue | 45 + .../layouts/src/basic/menu/mixed-menu.vue | 46 + .../layouts/src/basic/menu/use-extra-menu.ts | 133 + .../layouts/src/basic/menu/use-mixed-menu.ts | 172 + .../effects/layouts/src/basic/tabbar/index.ts | 2 + .../layouts/src/basic/tabbar/tabbar.vue | 75 + .../layouts/src/basic/tabbar/use-tabbar.ts | 227 + .../layouts/src/iframe/iframe-router-view.vue | 86 + .../layouts/src/iframe/iframe-view.vue | 3 + packages/effects/layouts/src/iframe/index.ts | 2 + packages/effects/layouts/src/index.ts | 4 + .../layouts/src/widgets/breadcrumb.vue | 74 + .../widgets/check-updates/check-updates.vue | 136 + .../src/widgets/check-updates/index.ts | 1 + .../layouts/src/widgets/color-toggle.vue | 64 + .../widgets/global-search/global-search.vue | 157 + .../src/widgets/global-search/index.ts | 1 + .../effects/layouts/src/widgets/help/help.vue | 106 + .../effects/layouts/src/widgets/help/index.ts | 1 + .../layouts/src/widgets/layout-toggle.vue | 64 + .../layouts/src/widgets/lock-screen/index.ts | 2 + .../layouts/src/widgets/notification/index.ts | 3 + .../src/widgets/preferences/blocks/block.vue | 22 + .../preferences/blocks/checkbox-item.vue | 63 + .../preferences/blocks/general/animation.vue | 51 + .../src/widgets/preferences/blocks/index.ts | 19 + .../preferences/blocks/layout/breadcrumb.vue | 56 + .../preferences/blocks/layout/content.vue | 53 + .../preferences/blocks/layout/copyright.vue | 44 + .../preferences/blocks/layout/footer.vue | 17 + .../preferences/blocks/layout/header.vue | 74 + .../preferences/blocks/layout/layout.vue | 112 + .../preferences/blocks/layout/navigation.vue | 45 + .../preferences/blocks/layout/sidebar.vue | 100 + .../preferences/blocks/layout/tabbar.vue | 94 + .../preferences/blocks/layout/widget.vue | 71 + .../preferences/blocks/number-field-item.vue | 74 + .../preferences/blocks/select-item.vue | 68 + .../blocks/shortcut-keys/global.vue | 50 + .../preferences/blocks/theme/color-mode.vue | 26 + .../preferences/blocks/theme/radius.vue | 38 + .../preferences/blocks/theme/theme.vue | 83 + .../preferences/blocks/toggle-item.vue | 46 + .../preferences/icons/content-compact.vue | 119 + .../preferences/icons/full-content.vue | 50 + .../preferences/icons/header-mixed-nav.vue | 202 + .../widgets/preferences/icons/header-nav.vue | 119 + .../preferences/icons/header-sidebar-nav.vue | 177 + .../src/widgets/preferences/icons/index.ts | 12 + .../widgets/preferences/icons/mixed-nav.vue | 161 + .../src/widgets/preferences/icons/setting.vue | 12 + .../preferences/icons/sidebar-mixed-nav.vue | 173 + .../widgets/preferences/icons/sidebar-nav.vue | 153 + .../layouts/src/widgets/preferences/index.ts | 3 + .../src/widgets/preferences/preferences.vue | 72 + .../preferences/use-open-preferences.ts | 16 + .../src/widgets/tenant-dropdown/index.ts | 1 + .../layouts/src/widgets/theme-toggle/index.ts | 1 + .../src/widgets/theme-toggle/theme-toggle.vue | 83 + .../src/widgets/user-dropdown/index.ts | 1 + .../widgets/user-dropdown/user-dropdown.vue | 262 + packages/effects/layouts/tsconfig.json | 6 + packages/effects/plugins/README.md | 28 + .../plugins/src/echarts/echarts-ui.vue | 15 + packages/effects/plugins/src/echarts/index.ts | 3 + .../plugins/src/echarts/map/china.json | 1 + packages/effects/plugins/src/markmap/index.ts | 5 + packages/effects/plugins/src/motion/index.ts | 8 + packages/effects/plugins/src/motion/types.ts | 26 + packages/effects/plugins/src/vxe-table/api.ts | 128 + .../effects/plugins/src/vxe-table/extends.ts | 81 + .../effects/plugins/src/vxe-table/types.ts | 93 + .../plugins/src/vxe-table/use-vxe-grid.ts | 70 + .../plugins/src/vxe-table/use-vxe-grid.vue | 479 ++ packages/effects/plugins/tsconfig.json | 6 + packages/effects/request/src/index.ts | 3 + .../request/src/request-client/index.ts | 3 + .../src/request-client/modules/interceptor.ts | 40 + .../request-client/modules/uploader.test.ts | 118 + .../src/request-client/modules/uploader.ts | 42 + .../src/request-client/preset-interceptors.ts | 166 + .../src/request-client/request-client.test.ts | 99 + packages/effects/request/tsconfig.json | 6 + packages/icons/README.md | 19 + packages/icons/src/icons/empty-icon.vue | 27 + packages/icons/src/index.ts | 3 + packages/icons/src/svg/icons/antdv-logo.svg | 29 + packages/icons/src/svg/icons/avatar-1.svg | 1 + packages/icons/src/svg/icons/avatar-2.svg | 1 + packages/icons/src/svg/icons/avatar-3.svg | 1 + packages/icons/src/svg/icons/avatar-4.svg | 1 + packages/icons/src/svg/icons/bell.svg | 1 + packages/icons/src/svg/icons/cake.svg | 1 + packages/icons/src/svg/icons/card.svg | 1 + packages/icons/src/svg/icons/download.svg | 1 + packages/icons/src/svg/load.ts | 61 + packages/icons/tsconfig.json | 6 + packages/locales/src/index.ts | 30 + packages/locales/src/langs/en-US/common.json | 26 + packages/locales/src/langs/zh-CN/common.json | 26 + packages/locales/src/typing.ts | 25 + packages/locales/tsconfig.json | 6 + packages/preferences/src/index.ts | 17 + packages/preferences/tsconfig.json | 6 + packages/stores/src/index.ts | 3 + packages/stores/src/modules/access.test.ts | 46 + packages/stores/src/modules/access.ts | 147 + packages/stores/src/modules/tabbar.test.ts | 300 ++ packages/stores/src/modules/user.test.ts | 37 + packages/stores/src/modules/user.ts | 60 + packages/stores/src/setup.ts | 60 + packages/stores/tsconfig.json | 5 + packages/styles/README.md | 19 + packages/styles/src/antd/index.css | 75 + packages/styles/src/ele/index.css | 44 + packages/styles/src/global/index.scss | 1 + packages/styles/src/index.ts | 1 + packages/styles/src/naive/index.css | 20 + packages/styles/tsconfig.json | 6 + packages/types/README.md | 20 + packages/types/src/index.ts | 2 + packages/types/src/user.ts | 19 + packages/types/tsconfig.json | 6 + packages/utils/README.md | 19 + .../__tests__/find-menu-by-path.test.ts | 88 + .../helpers/__tests__/generate-menus.test.ts | 233 + .../generate-routes-frontend.test.ts | 105 + .../__tests__/merge-route-modules.test.ts | 68 + .../utils/src/helpers/find-menu-by-path.ts | 37 + .../src/helpers/generate-routes-backend.ts | 87 + .../src/helpers/generate-routes-frontend.ts | 58 + .../utils/src/helpers/get-popup-container.ts | 39 + packages/utils/src/helpers/index.ts | 8 + .../utils/src/helpers/merge-route-modules.ts | 28 + packages/utils/src/helpers/reset-routes.ts | 31 + .../src/helpers/unmount-global-loading.ts | 31 + packages/utils/tsconfig.json | 9 + scripts/deploy/Dockerfile | 37 + scripts/deploy/build-local-docker-image.sh | 55 + scripts/deploy/nginx.conf | 75 + scripts/turbo-run/README.md | 59 + scripts/turbo-run/bin/turbo-run.mjs | 3 + scripts/turbo-run/build.config.ts | 7 + scripts/turbo-run/src/index.ts | 29 + scripts/turbo-run/src/run.ts | 67 + scripts/turbo-run/tsconfig.json | 6 + scripts/vsh/README.md | 56 + scripts/vsh/bin/vsh.mjs | 3 + scripts/vsh/build.config.ts | 7 + scripts/vsh/src/check-circular/index.ts | 170 + scripts/vsh/src/code-workspace/index.ts | 78 + scripts/vsh/src/index.ts | 74 + scripts/vsh/src/lint/index.ts | 48 + scripts/vsh/src/publint/index.ts | 185 + scripts/vsh/tsconfig.json | 6 + stylelint.config.mjs | 4 + tea.yaml | 6 + vitest.config.ts | 11 + vitest.workspace.ts | 3 + 1320 files changed, 83513 insertions(+) create mode 100644 .browserslistrc create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json create mode 100644 .commitlintrc.js create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitconfig create mode 100644 .gitpod.yml create mode 100644 .node-version create mode 100644 .prettierignore create mode 100644 .prettierrc.mjs create mode 100644 .stylelintignore create mode 100644 LICENSE create mode 100644 apps/web-antd/.env.analyze create mode 100644 apps/web-antd/.env.development create mode 100644 apps/web-antd/.env.production create mode 100644 apps/web-antd/index.html create mode 100644 apps/web-antd/postcss.config.mjs create mode 100644 apps/web-antd/public/favicon.ico create mode 100644 apps/web-antd/public/static/imgs/ai/dall2.jpg create mode 100644 apps/web-antd/public/static/imgs/ai/dall3.jpg create mode 100644 apps/web-antd/public/static/imgs/ai/qingxi.jpg create mode 100644 apps/web-antd/public/static/imgs/ai/ziran.jpg create mode 100644 apps/web-antd/public/tinymce/icons/default/icons.min.js create mode 100644 apps/web-antd/public/tinymce/langs/README.md create mode 100644 apps/web-antd/public/tinymce/langs/zh_CN.js create mode 100644 apps/web-antd/public/tinymce/license.md create mode 100644 apps/web-antd/public/tinymce/models/dom/model.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/accordion/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/advlist/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/anchor/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/autolink/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/autoresize/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/autosave/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/charmap/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/code/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/codesample/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/directionality/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.js create mode 100644 apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.js create mode 100644 apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/emoticons/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ar.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ca.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/cs.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/da.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/de.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/el.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/en.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/es.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/eu.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fa.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fi.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hi.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hr.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/id.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/it.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ja.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/kk.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ms.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nl.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pl.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ro.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ru.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sk.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/tr.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/uk.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/vi.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js create mode 100644 apps/web-antd/public/tinymce/plugins/help/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/image/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/importcss/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/insertdatetime/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/link/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/lists/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/media/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/nonbreaking/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/pagebreak/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/preview/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/quickbars/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/save/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/table/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/visualchars/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/plugins/wordcount/plugin.min.js create mode 100644 apps/web-antd/public/tinymce/skins/content/dark/content.js create mode 100644 apps/web-antd/public/tinymce/skins/content/dark/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/content/default/content.js create mode 100644 apps/web-antd/public/tinymce/skins/content/default/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/content/document/content.js create mode 100644 apps/web-antd/public/tinymce/skins/content/document/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/content/tinymce-5-dark/content.js create mode 100644 apps/web-antd/public/tinymce/skins/content/tinymce-5-dark/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/content/tinymce-5/content.js create mode 100644 apps/web-antd/public/tinymce/skins/content/tinymce-5/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/content/writer/content.js create mode 100644 apps/web-antd/public/tinymce/skins/content/writer/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/content.inline.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/content.inline.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/content.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/skin.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/skin.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/content.inline.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/content.inline.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/content.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/skin.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/skin.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/skin.shadowdom.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/content.inline.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/content.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/skin.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/skin.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/content.inline.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/content.inline.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/content.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/content.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/skin.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/skin.min.css create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js create mode 100644 apps/web-antd/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css create mode 100644 apps/web-antd/public/tinymce/themes/silver/theme.min.js create mode 100644 apps/web-antd/public/tinymce/tinymce.d.ts create mode 100644 apps/web-antd/public/tinymce/tinymce.min.js create mode 100644 apps/web-antd/src/api/bpm/oa/leave/index.ts create mode 100644 apps/web-antd/src/api/core/index.ts create mode 100644 apps/web-antd/src/api/crm/contract/config/index.ts create mode 100644 apps/web-antd/src/api/crm/customer/limitConfig/index.ts create mode 100644 apps/web-antd/src/api/crm/customer/poolConfig/index.ts create mode 100644 apps/web-antd/src/api/crm/product/category/index.ts create mode 100644 apps/web-antd/src/api/index.ts create mode 100644 apps/web-antd/src/api/infra/api-access-log/index.ts create mode 100644 apps/web-antd/src/api/infra/api-error-log/index.ts create mode 100644 apps/web-antd/src/api/infra/config/index.ts create mode 100644 apps/web-antd/src/api/infra/job-log/index.ts create mode 100644 apps/web-antd/src/api/infra/redis/index.ts create mode 100644 apps/web-antd/src/api/mall/statistics/pay.ts create mode 100644 apps/web-antd/src/api/mall/trade/config/index.ts create mode 100644 apps/web-antd/src/api/member/address/index.ts create mode 100644 apps/web-antd/src/api/member/config/index.ts create mode 100644 apps/web-antd/src/api/member/experience-record/index.ts create mode 100644 apps/web-antd/src/api/member/group/index.ts create mode 100644 apps/web-antd/src/api/member/point/record/index.ts create mode 100644 apps/web-antd/src/api/member/signin/config/index.ts create mode 100644 apps/web-antd/src/api/member/signin/record/index.ts create mode 100644 apps/web-antd/src/api/member/tag/index.ts create mode 100644 apps/web-antd/src/api/mp/autoReply/index.ts create mode 100644 apps/web-antd/src/api/mp/freePublish/index.ts create mode 100644 apps/web-antd/src/api/pay/demo/withdraw/index.ts create mode 100644 apps/web-antd/src/api/pay/wallet/transaction/index.ts create mode 100644 apps/web-antd/src/api/system/area/index.ts create mode 100644 apps/web-antd/src/api/system/dept/index.ts create mode 100644 apps/web-antd/src/api/system/login-log/index.ts create mode 100644 apps/web-antd/src/api/system/mail/account/index.ts create mode 100644 apps/web-antd/src/api/system/menu/index.ts create mode 100644 apps/web-antd/src/api/system/notice/index.ts create mode 100644 apps/web-antd/src/api/system/notify/message/index.ts create mode 100644 apps/web-antd/src/api/system/operate-log/index.ts create mode 100644 apps/web-antd/src/api/system/post/index.ts create mode 100644 apps/web-antd/src/api/system/role/index.ts create mode 100644 apps/web-antd/src/api/system/sms/channel/index.ts create mode 100644 apps/web-antd/src/api/system/sms/log/index.ts create mode 100644 apps/web-antd/src/api/system/tenant-package/index.ts create mode 100644 apps/web-antd/src/app.vue create mode 100644 apps/web-antd/src/components/cron-tab/index.ts create mode 100644 apps/web-antd/src/components/cropper/cropper.vue create mode 100644 apps/web-antd/src/components/cropper/index.ts create mode 100644 apps/web-antd/src/components/cropper/typing.ts create mode 100644 apps/web-antd/src/components/description/index.ts create mode 100644 apps/web-antd/src/components/dict-tag/index.ts create mode 100644 apps/web-antd/src/components/form-create/rules/data.ts create mode 100644 apps/web-antd/src/components/form-create/rules/index.ts create mode 100644 apps/web-antd/src/components/markdown-view/index.ts create mode 100644 apps/web-antd/src/components/markdown-view/markdown-view.vue create mode 100644 apps/web-antd/src/components/markdown-view/typing.ts create mode 100644 apps/web-antd/src/components/operate-log/typing.ts create mode 100644 apps/web-antd/src/components/select-modal/dept-select-modal.vue create mode 100644 apps/web-antd/src/components/select-modal/index.ts create mode 100644 apps/web-antd/src/components/table-action/index.ts create mode 100644 apps/web-antd/src/components/table-action/typing.ts create mode 100644 apps/web-antd/src/components/tinymce/helper.ts create mode 100644 apps/web-antd/src/components/tinymce/index.ts create mode 100644 apps/web-antd/src/components/tinymce/tinymce.ts create mode 100644 apps/web-antd/src/components/upload/index.ts create mode 100644 apps/web-antd/src/layouts/index.ts create mode 100644 apps/web-antd/src/locales/README.md create mode 100644 apps/web-antd/src/locales/index.ts create mode 100644 apps/web-antd/src/locales/langs/en-US/utils.json create mode 100644 apps/web-antd/src/locales/langs/zh-CN/utils.json create mode 100644 apps/web-antd/src/main.ts create mode 100644 apps/web-antd/src/preferences.ts create mode 100644 apps/web-antd/src/router/access.ts create mode 100644 apps/web-antd/src/router/index.ts create mode 100644 apps/web-antd/src/router/routes/core.ts create mode 100644 apps/web-antd/src/router/routes/index.ts create mode 100644 apps/web-antd/src/router/routes/modules/dashboard.ts create mode 100644 apps/web-antd/src/router/routes/modules/pay.ts create mode 100644 apps/web-antd/src/router/routes/modules/system.ts create mode 100644 apps/web-antd/src/router/tongji.ts create mode 100644 apps/web-antd/src/store/auth.ts create mode 100644 apps/web-antd/src/views/_core/README.md create mode 100644 apps/web-antd/src/views/_core/about/index.vue create mode 100644 apps/web-antd/src/views/_core/authentication/code-login.vue create mode 100644 apps/web-antd/src/views/_core/authentication/login.vue create mode 100644 apps/web-antd/src/views/_core/authentication/qrcode-login.vue create mode 100644 apps/web-antd/src/views/_core/authentication/register.vue create mode 100644 apps/web-antd/src/views/_core/authentication/social-login.vue create mode 100644 apps/web-antd/src/views/_core/fallback/coming-soon.vue create mode 100644 apps/web-antd/src/views/_core/fallback/forbidden.vue create mode 100644 apps/web-antd/src/views/_core/fallback/internal-error.vue create mode 100644 apps/web-antd/src/views/_core/fallback/not-found.vue create mode 100644 apps/web-antd/src/views/_core/fallback/offline.vue create mode 100644 apps/web-antd/src/views/_core/profile/modules/reset-pwd.vue create mode 100644 apps/web-antd/src/views/ai/music/index/index.vue create mode 100644 apps/web-antd/src/views/ai/music/index/list/songCard/index.vue create mode 100644 apps/web-antd/src/views/ai/music/index/list/songInfo/index.vue create mode 100644 apps/web-antd/src/views/ai/music/index/mode/desc.vue create mode 100644 apps/web-antd/src/views/ai/music/index/mode/lyric.vue create mode 100644 apps/web-antd/src/views/ai/music/index/title/index.vue create mode 100644 apps/web-antd/src/views/crm/statistics/funnel/chartOptions.ts create mode 100644 apps/web-antd/src/views/crm/statistics/performance/chartOptions.ts create mode 100644 apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue create mode 100644 apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue create mode 100644 apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue create mode 100644 apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue create mode 100644 apps/web-antd/src/views/dashboard/analytics/index.vue create mode 100644 apps/web-antd/src/views/infra/codegen/modules/basic-info.vue create mode 100644 apps/web-antd/src/views/infra/demo/demo02/data.ts create mode 100644 apps/web-antd/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue create mode 100644 apps/web-antd/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue create mode 100644 apps/web-antd/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue create mode 100644 apps/web-antd/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue create mode 100644 apps/web-antd/src/views/infra/job/modules/form.vue create mode 100644 apps/web-antd/src/views/infra/redis/modules/commands.vue create mode 100644 apps/web-antd/src/views/infra/redis/modules/memory.vue create mode 100644 apps/web-antd/src/views/mall/promotion/bargain/record/index.vue create mode 100644 apps/web-antd/src/views/mall/promotion/bargain/record/modules/list.vue create mode 100644 apps/web-antd/src/views/mall/promotion/combination/record/index.vue create mode 100644 apps/web-antd/src/views/mall/promotion/combination/record/modules/list.vue create mode 100644 apps/web-antd/src/views/system/area/modules/form.vue create mode 100644 apps/web-antd/src/views/system/dict/index.vue create mode 100644 apps/web-antd/src/views/system/mail/account/modules/form.vue create mode 100644 apps/web-antd/src/views/system/mail/template/modules/form.vue create mode 100644 apps/web-antd/src/views/system/user/modules/import-form.vue create mode 100644 apps/web-antd/src/views/system/user/modules/reset-password-form.vue create mode 100644 apps/web-antd/tailwind.config.mjs create mode 100644 apps/web-antd/tsconfig.node.json create mode 100644 apps/web-antd/vite.config.mts create mode 100644 apps/web-ele/.env.analyze create mode 100644 apps/web-ele/index.html create mode 100644 apps/web-ele/postcss.config.mjs create mode 100644 apps/web-ele/public/favicon.ico create mode 100644 apps/web-ele/public/tinymce/icons/default/icons.min.js create mode 100644 apps/web-ele/public/tinymce/langs/README.md create mode 100644 apps/web-ele/public/tinymce/langs/zh_CN.js create mode 100644 apps/web-ele/public/tinymce/license.md create mode 100644 apps/web-ele/public/tinymce/models/dom/model.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/accordion/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/advlist/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/anchor/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/autolink/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/autoresize/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/autosave/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/charmap/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/code/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/codesample/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/directionality/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.js create mode 100644 apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.js create mode 100644 apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/emoticons/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ar.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ca.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/cs.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/da.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/de.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/el.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/en.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/es.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/eu.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fa.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fi.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hi.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hr.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/id.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/it.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ja.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/kk.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ms.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nl.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pl.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ro.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ru.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sk.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/tr.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/uk.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/vi.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js create mode 100644 apps/web-ele/public/tinymce/plugins/help/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/image/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/importcss/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/insertdatetime/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/link/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/lists/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/media/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/nonbreaking/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/pagebreak/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/preview/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/quickbars/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/save/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/table/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/visualchars/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/plugins/wordcount/plugin.min.js create mode 100644 apps/web-ele/public/tinymce/skins/content/dark/content.js create mode 100644 apps/web-ele/public/tinymce/skins/content/dark/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/content/default/content.js create mode 100644 apps/web-ele/public/tinymce/skins/content/default/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/content/document/content.js create mode 100644 apps/web-ele/public/tinymce/skins/content/document/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/content/tinymce-5-dark/content.js create mode 100644 apps/web-ele/public/tinymce/skins/content/tinymce-5-dark/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/content/tinymce-5/content.js create mode 100644 apps/web-ele/public/tinymce/skins/content/tinymce-5/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/content/writer/content.js create mode 100644 apps/web-ele/public/tinymce/skins/content/writer/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/content.inline.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/content.inline.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/content.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/skin.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/skin.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/content.inline.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/content.inline.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/content.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/skin.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/skin.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/skin.shadowdom.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/content.inline.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/content.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/skin.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/skin.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/content.inline.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/content.inline.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/content.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/content.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/skin.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/skin.min.css create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js create mode 100644 apps/web-ele/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css create mode 100644 apps/web-ele/public/tinymce/themes/silver/theme.min.js create mode 100644 apps/web-ele/public/tinymce/tinymce.d.ts create mode 100644 apps/web-ele/public/tinymce/tinymce.min.js create mode 100644 apps/web-ele/src/api/bpm/oa/leave/index.ts create mode 100644 apps/web-ele/src/api/core/index.ts create mode 100644 apps/web-ele/src/api/crm/contract/config/index.ts create mode 100644 apps/web-ele/src/api/crm/customer/limitConfig/index.ts create mode 100644 apps/web-ele/src/api/crm/customer/poolConfig/index.ts create mode 100644 apps/web-ele/src/api/crm/product/category/index.ts create mode 100644 apps/web-ele/src/api/index.ts create mode 100644 apps/web-ele/src/api/infra/api-access-log/index.ts create mode 100644 apps/web-ele/src/api/infra/api-error-log/index.ts create mode 100644 apps/web-ele/src/api/infra/config/index.ts create mode 100644 apps/web-ele/src/api/infra/data-source-config/index.ts create mode 100644 apps/web-ele/src/api/infra/file/index.ts create mode 100644 apps/web-ele/src/api/infra/job-log/index.ts create mode 100644 apps/web-ele/src/api/infra/redis/index.ts create mode 100644 apps/web-ele/src/api/mall/statistics/pay.ts create mode 100644 apps/web-ele/src/api/mall/trade/config/index.ts create mode 100644 apps/web-ele/src/api/member/address/index.ts create mode 100644 apps/web-ele/src/api/member/config/index.ts create mode 100644 apps/web-ele/src/api/member/experience-record/index.ts create mode 100644 apps/web-ele/src/api/member/group/index.ts create mode 100644 apps/web-ele/src/api/member/point/record/index.ts create mode 100644 apps/web-ele/src/api/member/signin/config/index.ts create mode 100644 apps/web-ele/src/api/member/signin/record/index.ts create mode 100644 apps/web-ele/src/api/member/tag/index.ts create mode 100644 apps/web-ele/src/api/mp/autoReply/index.ts create mode 100644 apps/web-ele/src/api/mp/freePublish/index.ts create mode 100644 apps/web-ele/src/api/pay/demo/withdraw/index.ts create mode 100644 apps/web-ele/src/api/pay/wallet/transaction/index.ts create mode 100644 apps/web-ele/src/api/system/area/index.ts create mode 100644 apps/web-ele/src/api/system/login-log/index.ts create mode 100644 apps/web-ele/src/api/system/mail/account/index.ts create mode 100644 apps/web-ele/src/api/system/notice/index.ts create mode 100644 apps/web-ele/src/api/system/notify/message/index.ts create mode 100644 apps/web-ele/src/api/system/notify/template/index.ts create mode 100644 apps/web-ele/src/api/system/oauth2/client/index.ts create mode 100644 apps/web-ele/src/api/system/oauth2/open/index.ts create mode 100644 apps/web-ele/src/api/system/oauth2/token/index.ts create mode 100644 apps/web-ele/src/api/system/operate-log/index.ts create mode 100644 apps/web-ele/src/api/system/permission/index.ts create mode 100644 apps/web-ele/src/api/system/post/index.ts create mode 100644 apps/web-ele/src/api/system/role/index.ts create mode 100644 apps/web-ele/src/api/system/sms/channel/index.ts create mode 100644 apps/web-ele/src/api/system/sms/log/index.ts create mode 100644 apps/web-ele/src/api/system/sms/template/index.ts create mode 100644 apps/web-ele/src/api/system/social/client/index.ts create mode 100644 apps/web-ele/src/api/system/social/user/index.ts create mode 100644 apps/web-ele/src/api/system/tenant-package/index.ts create mode 100644 apps/web-ele/src/api/system/user/profile/index.ts create mode 100644 apps/web-ele/src/app.vue create mode 100644 apps/web-ele/src/components/cropper/index.ts create mode 100644 apps/web-ele/src/components/cropper/typing.ts create mode 100644 apps/web-ele/src/components/description/index.ts create mode 100644 apps/web-ele/src/components/dict-tag/index.ts create mode 100644 apps/web-ele/src/components/form-create/rules/index.ts create mode 100644 apps/web-ele/src/components/table-action/index.ts create mode 100644 apps/web-ele/src/components/table-action/typing.ts create mode 100644 apps/web-ele/src/components/tinymce/helper.ts create mode 100644 apps/web-ele/src/components/tinymce/index.ts create mode 100644 apps/web-ele/src/components/tinymce/tinymce.ts create mode 100644 apps/web-ele/src/components/upload/index.ts create mode 100644 apps/web-ele/src/layouts/index.ts create mode 100644 apps/web-ele/src/locales/README.md create mode 100644 apps/web-ele/src/locales/index.ts create mode 100644 apps/web-ele/src/locales/langs/en-US/utils.json create mode 100644 apps/web-ele/src/locales/langs/zh-CN/utils.json create mode 100644 apps/web-ele/src/main.ts create mode 100644 apps/web-ele/src/plugins/form-create/index.ts create mode 100644 apps/web-ele/src/preferences.ts create mode 100644 apps/web-ele/src/router/access.ts create mode 100644 apps/web-ele/src/router/index.ts create mode 100644 apps/web-ele/src/router/routes/core.ts create mode 100644 apps/web-ele/src/router/routes/index.ts create mode 100644 apps/web-ele/src/router/routes/modules/dashboard.ts create mode 100644 apps/web-ele/src/router/routes/modules/pay.ts create mode 100644 apps/web-ele/src/router/routes/modules/system.ts create mode 100644 apps/web-ele/src/router/tongji.ts create mode 100644 apps/web-ele/src/store/auth.ts create mode 100644 apps/web-ele/src/views/_core/README.md create mode 100644 apps/web-ele/src/views/_core/about/index.vue create mode 100644 apps/web-ele/src/views/_core/authentication/code-login.vue create mode 100644 apps/web-ele/src/views/_core/authentication/forget-password.vue create mode 100644 apps/web-ele/src/views/_core/authentication/login.vue create mode 100644 apps/web-ele/src/views/_core/authentication/qrcode-login.vue create mode 100644 apps/web-ele/src/views/_core/authentication/register.vue create mode 100644 apps/web-ele/src/views/_core/authentication/social-login.vue create mode 100644 apps/web-ele/src/views/_core/fallback/coming-soon.vue create mode 100644 apps/web-ele/src/views/_core/fallback/forbidden.vue create mode 100644 apps/web-ele/src/views/_core/fallback/internal-error.vue create mode 100644 apps/web-ele/src/views/_core/fallback/not-found.vue create mode 100644 apps/web-ele/src/views/_core/fallback/offline.vue create mode 100644 apps/web-ele/src/views/_core/profile/index.vue create mode 100644 apps/web-ele/src/views/_core/profile/modules/profile-user.vue create mode 100644 apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue create mode 100644 apps/web-ele/src/views/dashboard/analytics/analytics-trends.vue create mode 100644 apps/web-ele/src/views/dashboard/analytics/analytics-visits-data.vue create mode 100644 apps/web-ele/src/views/dashboard/analytics/analytics-visits-source.vue create mode 100644 apps/web-ele/src/views/dashboard/analytics/analytics-visits.vue create mode 100644 apps/web-ele/src/views/dashboard/analytics/index.vue create mode 100644 apps/web-ele/src/views/infra/codegen/modules/basic-info.vue create mode 100644 apps/web-ele/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue create mode 100644 apps/web-ele/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue create mode 100644 apps/web-ele/src/views/infra/demo/general/demo02/modules/form.vue create mode 100644 apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-course-form.vue create mode 100644 apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-grade-form.vue create mode 100644 apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-course-form.vue create mode 100644 apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue create mode 100644 apps/web-ele/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue create mode 100644 apps/web-ele/src/views/mall/promotion/bargain/record/index.vue create mode 100644 apps/web-ele/src/views/mall/promotion/bargain/record/modules/list.vue create mode 100644 apps/web-ele/src/views/mall/promotion/combination/record/index.vue create mode 100644 apps/web-ele/src/views/mall/promotion/combination/record/modules/list.vue create mode 100644 apps/web-ele/src/views/mall/promotion/seckill/activity/formatter.ts create mode 100644 apps/web-ele/src/views/system/area/modules/form.vue create mode 100644 apps/web-ele/src/views/system/sms/template/modules/form.vue create mode 100644 apps/web-ele/src/views/system/user/modules/reset-password-form.vue create mode 100644 apps/web-ele/tailwind.config.mjs create mode 100644 apps/web-ele/tsconfig.json create mode 100644 apps/web-ele/tsconfig.node.json create mode 100644 apps/web-ele/vite.config.mts create mode 100644 apps/web-naive/.env.analyze create mode 100644 apps/web-naive/.env.development create mode 100644 apps/web-naive/.env.production create mode 100644 apps/web-naive/index.html create mode 100644 apps/web-naive/postcss.config.mjs create mode 100644 apps/web-naive/public/favicon.ico create mode 100644 apps/web-naive/src/adapter/naive.ts create mode 100644 apps/web-naive/src/api/core/index.ts create mode 100644 apps/web-naive/src/api/index.ts create mode 100644 apps/web-naive/src/api/infra/api-access-log/index.ts create mode 100644 apps/web-naive/src/api/infra/api-error-log/index.ts create mode 100644 apps/web-naive/src/api/infra/job-log/index.ts create mode 100644 apps/web-naive/src/api/infra/redis/index.ts create mode 100644 apps/web-naive/src/api/system/area/index.ts create mode 100644 apps/web-naive/src/api/system/login-log/index.ts create mode 100644 apps/web-naive/src/api/system/notify/message/index.ts create mode 100644 apps/web-naive/src/api/system/oauth2/open/index.ts create mode 100644 apps/web-naive/src/api/system/oauth2/token/index.ts create mode 100644 apps/web-naive/src/api/system/operate-log/index.ts create mode 100644 apps/web-naive/src/api/system/permission/index.ts create mode 100644 apps/web-naive/src/api/system/sms/log/index.ts create mode 100644 apps/web-naive/src/api/system/social/user/index.ts create mode 100644 apps/web-naive/src/api/system/user/profile/index.ts create mode 100644 apps/web-naive/src/app.vue create mode 100644 apps/web-naive/src/bootstrap.ts create mode 100644 apps/web-naive/src/components/dict-tag/index.ts create mode 100644 apps/web-naive/src/layouts/index.ts create mode 100644 apps/web-naive/src/locales/README.md create mode 100644 apps/web-naive/src/locales/langs/en-US/utils.json create mode 100644 apps/web-naive/src/locales/langs/zh-CN/utils.json create mode 100644 apps/web-naive/src/main.ts create mode 100644 apps/web-naive/src/preferences.ts create mode 100644 apps/web-naive/src/router/access.ts create mode 100644 apps/web-naive/src/router/index.ts create mode 100644 apps/web-naive/src/router/routes/core.ts create mode 100644 apps/web-naive/src/router/routes/index.ts create mode 100644 apps/web-naive/src/router/routes/modules/system.ts create mode 100644 apps/web-naive/src/router/tongji.ts create mode 100644 apps/web-naive/src/views/_core/README.md create mode 100644 apps/web-naive/src/views/_core/about/index.vue create mode 100644 apps/web-naive/src/views/_core/authentication/code-login.vue create mode 100644 apps/web-naive/src/views/_core/authentication/forget-password.vue create mode 100644 apps/web-naive/src/views/_core/authentication/login.vue create mode 100644 apps/web-naive/src/views/_core/authentication/qrcode-login.vue create mode 100644 apps/web-naive/src/views/_core/authentication/register.vue create mode 100644 apps/web-naive/src/views/_core/authentication/social-login.vue create mode 100644 apps/web-naive/src/views/_core/authentication/sso-login.vue create mode 100644 apps/web-naive/src/views/_core/fallback/coming-soon.vue create mode 100644 apps/web-naive/src/views/_core/fallback/forbidden.vue create mode 100644 apps/web-naive/src/views/_core/fallback/internal-error.vue create mode 100644 apps/web-naive/src/views/_core/fallback/not-found.vue create mode 100644 apps/web-naive/src/views/_core/fallback/offline.vue create mode 100644 apps/web-naive/src/views/dashboard/analytics/analytics-trends.vue create mode 100644 apps/web-naive/src/views/dashboard/analytics/analytics-visits-data.vue create mode 100644 apps/web-naive/src/views/dashboard/analytics/analytics-visits-source.vue create mode 100644 apps/web-naive/src/views/dashboard/analytics/analytics-visits.vue create mode 100644 apps/web-naive/src/views/dashboard/analytics/index.vue create mode 100644 apps/web-naive/src/views/dashboard/workspace/index.vue create mode 100644 apps/web-naive/src/views/infra/codegen/modules/basic-info.vue create mode 100644 apps/web-naive/src/views/system/area/modules/form.vue create mode 100644 apps/web-naive/src/views/system/sms/template/modules/form.vue create mode 100644 apps/web-naive/src/views/system/user/modules/reset-password-form.vue create mode 100644 apps/web-naive/tailwind.config.mjs create mode 100644 apps/web-naive/tsconfig.json create mode 100644 apps/web-naive/tsconfig.node.json create mode 100644 apps/web-naive/vite.config.mts create mode 100644 docs/.vitepress/components/index.ts create mode 100644 docs/.vitepress/config/en.mts create mode 100644 docs/.vitepress/config/index.mts create mode 100644 docs/.vitepress/config/shared.mts create mode 100644 docs/.vitepress/config/zh.mts create mode 100644 docs/.vitepress/theme/components/site-layout.vue create mode 100644 docs/.vitepress/theme/components/vben-contributors.vue create mode 100644 docs/.vitepress/theme/index.ts create mode 100644 docs/.vitepress/theme/plugins/hm.ts create mode 100644 docs/.vitepress/theme/styles/base.css create mode 100644 docs/.vitepress/theme/styles/index.ts create mode 100644 docs/.vitepress/theme/styles/variables.css create mode 100644 docs/src/_env/adapter/component.ts create mode 100644 docs/src/_env/adapter/form.ts create mode 100644 docs/src/_env/adapter/vxe-table.ts create mode 100644 docs/src/_env/node/adapter/form.ts create mode 100644 docs/src/_env/node/adapter/vxe-table.ts create mode 100644 docs/src/commercial/community.md create mode 100644 docs/src/commercial/customized.md create mode 100644 docs/src/commercial/technical-support.md create mode 100644 docs/src/components/common-ui/vben-api-component.md create mode 100644 docs/src/components/common-ui/vben-count-to-animator.md create mode 100644 docs/src/components/common-ui/vben-drawer.md create mode 100644 docs/src/components/common-ui/vben-ellipsis-text.md create mode 100644 docs/src/components/common-ui/vben-vxe-table.md create mode 100644 docs/src/components/introduction.md create mode 100644 docs/src/components/layout-ui/page.md create mode 100644 docs/src/demos/vben-alert/alert/index.vue create mode 100644 docs/src/demos/vben-alert/confirm/index.vue create mode 100644 docs/src/demos/vben-alert/prompt/index.vue create mode 100644 docs/src/demos/vben-api-component/cascader/index.vue create mode 100644 docs/src/demos/vben-count-to-animator/basic/index.vue create mode 100644 docs/src/demos/vben-count-to-animator/custom/index.vue create mode 100644 docs/src/demos/vben-drawer/auto-height/index.vue create mode 100644 docs/src/demos/vben-drawer/basic/index.vue create mode 100644 docs/src/demos/vben-drawer/dynamic/drawer.vue create mode 100644 docs/src/demos/vben-drawer/dynamic/index.vue create mode 100644 docs/src/demos/vben-drawer/extra/drawer.vue create mode 100644 docs/src/demos/vben-drawer/extra/index.vue create mode 100644 docs/src/demos/vben-drawer/shared-data/drawer.vue create mode 100644 docs/src/demos/vben-drawer/shared-data/index.vue create mode 100644 docs/src/demos/vben-ellipsis-text/auto-display/index.vue create mode 100644 docs/src/demos/vben-ellipsis-text/expand/index.vue create mode 100644 docs/src/demos/vben-ellipsis-text/line/index.vue create mode 100644 docs/src/demos/vben-ellipsis-text/tooltip/index.vue create mode 100644 docs/src/demos/vben-form/api/index.vue create mode 100644 docs/src/demos/vben-form/basic/index.vue create mode 100644 docs/src/demos/vben-form/custom/index.vue create mode 100644 docs/src/demos/vben-form/dynamic/index.vue create mode 100644 docs/src/demos/vben-form/query/index.vue create mode 100644 docs/src/demos/vben-form/rules/index.vue create mode 100644 docs/src/demos/vben-modal/auto-height/index.vue create mode 100644 docs/src/demos/vben-modal/basic/index.vue create mode 100644 docs/src/demos/vben-modal/draggable/index.vue create mode 100644 docs/src/demos/vben-modal/draggable/modal.vue create mode 100644 docs/src/demos/vben-modal/dynamic/index.vue create mode 100644 docs/src/demos/vben-modal/dynamic/modal.vue create mode 100644 docs/src/demos/vben-modal/extra/index.vue create mode 100644 docs/src/demos/vben-modal/extra/modal.vue create mode 100644 docs/src/demos/vben-modal/shared-data/index.vue create mode 100644 docs/src/demos/vben-modal/shared-data/modal.vue create mode 100644 docs/src/demos/vben-vxe-table/basic/index.vue create mode 100644 docs/src/demos/vben-vxe-table/edit-cell/index.vue create mode 100644 docs/src/demos/vben-vxe-table/edit-row/index.vue create mode 100644 docs/src/demos/vben-vxe-table/fixed/index.vue create mode 100644 docs/src/demos/vben-vxe-table/form/index.vue create mode 100644 docs/src/demos/vben-vxe-table/mock-api.ts create mode 100644 docs/src/demos/vben-vxe-table/remote/index.vue create mode 100644 docs/src/demos/vben-vxe-table/table-data.ts create mode 100644 docs/src/demos/vben-vxe-table/tree/index.vue create mode 100644 docs/src/demos/vben-vxe-table/virtual/index.vue create mode 100644 docs/src/en/guide/essentials/build.md create mode 100644 docs/src/en/guide/essentials/concept.md create mode 100644 docs/src/en/guide/essentials/external-module.md create mode 100644 docs/src/en/guide/essentials/icons.md create mode 100644 docs/src/en/guide/essentials/route.md create mode 100644 docs/src/en/guide/essentials/server.md create mode 100644 docs/src/en/guide/essentials/styles.md create mode 100644 docs/src/en/guide/in-depth/access.md create mode 100644 docs/src/en/guide/in-depth/check-updates.md create mode 100644 docs/src/en/guide/in-depth/features.md create mode 100644 docs/src/en/guide/in-depth/layout.md create mode 100644 docs/src/en/guide/in-depth/loading.md create mode 100644 docs/src/en/guide/in-depth/locale.md create mode 100644 docs/src/en/guide/in-depth/login.md create mode 100644 docs/src/en/guide/in-depth/theme.md create mode 100644 docs/src/en/guide/in-depth/ui-framework.md create mode 100644 docs/src/en/guide/introduction/changelog.md create mode 100644 docs/src/en/guide/introduction/quick-start.md create mode 100644 docs/src/en/guide/introduction/roadmap.md create mode 100644 docs/src/en/guide/introduction/vben.md create mode 100644 docs/src/en/guide/introduction/why.md create mode 100644 docs/src/en/guide/other/faq.md create mode 100644 docs/src/en/guide/other/project-update.md create mode 100644 docs/src/en/guide/other/remove-code.md create mode 100644 docs/src/en/guide/project/changeset.md create mode 100644 docs/src/en/guide/project/cli.md create mode 100644 docs/src/en/guide/project/dir.md create mode 100644 docs/src/en/guide/project/standard.md create mode 100644 docs/src/en/guide/project/tailwindcss.md create mode 100644 docs/src/en/guide/project/test.md create mode 100644 docs/src/en/guide/project/vite.md create mode 100644 docs/src/en/index.md create mode 100644 docs/src/friend-links/index.md create mode 100644 docs/src/guide/essentials/build.md create mode 100644 docs/src/guide/essentials/concept.md create mode 100644 docs/src/guide/essentials/external-module.md create mode 100644 docs/src/guide/essentials/icons.md create mode 100644 docs/src/guide/essentials/route.md create mode 100644 docs/src/guide/essentials/server.md create mode 100644 docs/src/guide/essentials/styles.md create mode 100644 docs/src/guide/in-depth/access.md create mode 100644 docs/src/guide/in-depth/check-updates.md create mode 100644 docs/src/guide/in-depth/features.md create mode 100644 docs/src/guide/in-depth/layout.md create mode 100644 docs/src/guide/in-depth/loading.md create mode 100644 docs/src/guide/in-depth/locale.md create mode 100644 docs/src/guide/in-depth/login.md create mode 100644 docs/src/guide/in-depth/theme.md create mode 100644 docs/src/guide/in-depth/ui-framework.md create mode 100644 docs/src/guide/introduction/changelog.md create mode 100644 docs/src/guide/introduction/quick-start.md create mode 100644 docs/src/guide/introduction/roadmap.md create mode 100644 docs/src/guide/introduction/vben.md create mode 100644 docs/src/guide/introduction/why.md create mode 100644 docs/src/guide/other/faq.md create mode 100644 docs/src/guide/other/project-update.md create mode 100644 docs/src/guide/other/remove-code.md create mode 100644 docs/src/guide/project/changeset.md create mode 100644 docs/src/guide/project/cli.md create mode 100644 docs/src/guide/project/dir.md create mode 100644 docs/src/guide/project/standard.md create mode 100644 docs/src/guide/project/tailwindcss.md create mode 100644 docs/src/guide/project/test.md create mode 100644 docs/src/guide/project/vite.md create mode 100644 docs/src/index.md create mode 100644 docs/src/public/favicon.ico create mode 100644 docs/src/public/guide/devtools.png create mode 100644 docs/src/public/guide/loading.png create mode 100644 docs/src/public/guide/locale.png create mode 100644 docs/src/public/guide/login-expired.png create mode 100644 docs/src/public/guide/login.png create mode 100644 docs/src/public/guide/preferences.png create mode 100644 docs/src/public/guide/qq.png create mode 100644 docs/src/public/guide/qq_channel.png create mode 100644 docs/src/public/guide/report.png create mode 100644 docs/src/public/guide/test.png create mode 100644 docs/src/public/guide/update-notice.png create mode 100644 docs/src/public/logos/nitro.svg create mode 100644 docs/src/public/logos/shadcn-ui.svg create mode 100644 docs/src/public/logos/turborepo.svg create mode 100644 docs/src/public/logos/vite.svg create mode 100644 docs/src/sponsor/personal.md create mode 100644 docs/tailwind.config.mjs create mode 100644 docs/tsconfig.json create mode 100644 eslint.config.mjs create mode 100644 internal/lint-configs/eslint-config/build.config.ts create mode 100644 internal/lint-configs/eslint-config/package.json create mode 100644 internal/lint-configs/eslint-config/src/configs/comments.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/disableds.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/import.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/index.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/javascript.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/jsdoc.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/jsonc.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/prettier.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/regexp.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/test.ts create mode 100644 internal/lint-configs/eslint-config/src/configs/unicorn.ts create mode 100644 internal/lint-configs/eslint-config/src/index.ts create mode 100644 internal/lint-configs/eslint-config/src/util.ts create mode 100644 internal/lint-configs/prettier-config/index.mjs create mode 100644 internal/lint-configs/prettier-config/package.json create mode 100644 internal/lint-configs/stylelint-config/index.mjs create mode 100644 internal/node-utils/build.config.ts create mode 100644 internal/node-utils/src/__tests__/hash.test.ts create mode 100644 internal/node-utils/src/__tests__/path.test.ts create mode 100644 internal/node-utils/src/constants.ts create mode 100644 internal/node-utils/src/date.ts create mode 100644 internal/node-utils/src/fs.ts create mode 100644 internal/node-utils/src/git.ts create mode 100644 internal/node-utils/src/hash.ts create mode 100644 internal/node-utils/src/index.ts create mode 100644 internal/node-utils/src/monorepo.ts create mode 100644 internal/node-utils/src/path.ts create mode 100644 internal/node-utils/src/prettier.ts create mode 100644 internal/node-utils/src/spinner.ts create mode 100644 internal/node-utils/tsconfig.json create mode 100644 internal/tailwind-config/build.config.ts create mode 100644 internal/tailwind-config/src/module.d.ts create mode 100644 internal/tailwind-config/src/plugins/entry.ts create mode 100644 internal/tailwind-config/src/postcss.config.ts create mode 100644 internal/tailwind-config/tsconfig.json create mode 100644 internal/tsconfig/base.json create mode 100644 internal/tsconfig/library.json create mode 100644 internal/tsconfig/node.json create mode 100644 internal/tsconfig/web-app.json create mode 100644 internal/tsconfig/web.json create mode 100644 internal/vite-config/build.config.ts create mode 100644 internal/vite-config/src/config/common.ts create mode 100644 internal/vite-config/src/config/index.ts create mode 100644 internal/vite-config/src/config/library.ts create mode 100644 internal/vite-config/src/index.ts create mode 100644 internal/vite-config/src/options.ts create mode 100644 internal/vite-config/src/plugins/archiver.ts create mode 100644 internal/vite-config/src/plugins/extra-app-config.ts create mode 100644 internal/vite-config/src/plugins/importmap.ts create mode 100644 internal/vite-config/src/plugins/index.ts create mode 100644 internal/vite-config/src/plugins/inject-app-loading/README.md create mode 100644 internal/vite-config/src/plugins/inject-app-loading/default-loading-antd.html create mode 100644 internal/vite-config/src/plugins/inject-app-loading/default-loading.html create mode 100644 internal/vite-config/src/plugins/inject-app-loading/index.ts create mode 100644 internal/vite-config/src/plugins/inject-metadata.ts create mode 100644 internal/vite-config/src/plugins/license.ts create mode 100644 internal/vite-config/src/plugins/nitro-mock.ts create mode 100644 internal/vite-config/src/plugins/print.ts create mode 100644 internal/vite-config/src/plugins/vxe-table.ts create mode 100644 internal/vite-config/src/typing.ts create mode 100644 internal/vite-config/src/utils/env.ts create mode 100644 internal/vite-config/tsconfig.json create mode 100644 lefthook.yml create mode 100644 packages/@core/README.md create mode 100644 packages/@core/base/README.md create mode 100644 packages/@core/base/design/src/css/global.css create mode 100644 packages/@core/base/design/src/css/nprogress.css create mode 100644 packages/@core/base/design/src/css/transition.css create mode 100644 packages/@core/base/design/src/design-tokens/dark.css create mode 100644 packages/@core/base/design/src/design-tokens/default.css create mode 100644 packages/@core/base/design/src/scss-bem/bem.scss create mode 100644 packages/@core/base/design/src/scss-bem/constants.scss create mode 100644 packages/@core/base/design/tsconfig.json create mode 100644 packages/@core/base/design/vite.config.mts create mode 100644 packages/@core/base/icons/build.config.ts create mode 100644 packages/@core/base/icons/src/create-icon.ts create mode 100644 packages/@core/base/icons/src/index.ts create mode 100644 packages/@core/base/icons/tsconfig.json create mode 100644 packages/@core/base/shared/build.config.ts create mode 100644 packages/@core/base/shared/src/cache/__tests__/storage-manager.test.ts create mode 100644 packages/@core/base/shared/src/cache/index.ts create mode 100644 packages/@core/base/shared/src/cache/storage-manager.ts create mode 100644 packages/@core/base/shared/src/cache/types.ts create mode 100644 packages/@core/base/shared/src/color/__tests__/convert.test.ts create mode 100644 packages/@core/base/shared/src/color/color.ts create mode 100644 packages/@core/base/shared/src/color/convert.ts create mode 100644 packages/@core/base/shared/src/color/generator.ts create mode 100644 packages/@core/base/shared/src/color/index.ts create mode 100644 packages/@core/base/shared/src/constants/globals.ts create mode 100644 packages/@core/base/shared/src/constants/index.ts create mode 100644 packages/@core/base/shared/src/global-state.ts create mode 100644 packages/@core/base/shared/src/store.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/diff.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/dom.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/inference.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/letter.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/state-handler.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/tree.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/unique.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/update-css-variables.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/util.test.ts create mode 100644 packages/@core/base/shared/src/utils/__tests__/window.test.ts create mode 100644 packages/@core/base/shared/src/utils/cn.ts create mode 100644 packages/@core/base/shared/src/utils/diff.ts create mode 100644 packages/@core/base/shared/src/utils/dom.ts create mode 100644 packages/@core/base/shared/src/utils/download.ts create mode 100644 packages/@core/base/shared/src/utils/inference.ts create mode 100644 packages/@core/base/shared/src/utils/letter.ts create mode 100644 packages/@core/base/shared/src/utils/merge.ts create mode 100644 packages/@core/base/shared/src/utils/nprogress.ts create mode 100644 packages/@core/base/shared/src/utils/state-handler.ts create mode 100644 packages/@core/base/shared/src/utils/time.ts create mode 100644 packages/@core/base/shared/src/utils/to.ts create mode 100644 packages/@core/base/shared/src/utils/tree.ts create mode 100644 packages/@core/base/shared/src/utils/unique.ts create mode 100644 packages/@core/base/shared/src/utils/update-css-variables.ts create mode 100644 packages/@core/base/shared/src/utils/uuid.ts create mode 100644 packages/@core/base/shared/tsconfig.json create mode 100644 packages/@core/base/typings/build.config.ts create mode 100644 packages/@core/base/typings/src/basic.d.ts create mode 100644 packages/@core/base/typings/src/helper.d.ts create mode 100644 packages/@core/base/typings/src/index.ts create mode 100644 packages/@core/base/typings/src/menu-record.ts create mode 100644 packages/@core/base/typings/src/tabs.ts create mode 100644 packages/@core/base/typings/src/vue-router.d.ts create mode 100644 packages/@core/base/typings/tsconfig.json create mode 100644 packages/@core/base/typings/vue-router.d.ts create mode 100644 packages/@core/composables/build.config.ts create mode 100644 packages/@core/composables/src/__tests__/use-sortable.test.ts create mode 100644 packages/@core/composables/src/use-is-mobile.ts create mode 100644 packages/@core/composables/src/use-layout-style.ts create mode 100644 packages/@core/composables/src/use-namespace.ts create mode 100644 packages/@core/composables/src/use-priority-value.ts create mode 100644 packages/@core/composables/src/use-scroll-lock.ts create mode 100644 packages/@core/composables/src/use-simple-locale/README.md create mode 100644 packages/@core/composables/src/use-simple-locale/index.ts create mode 100644 packages/@core/composables/src/use-simple-locale/messages.ts create mode 100644 packages/@core/composables/src/use-sortable.ts create mode 100644 packages/@core/composables/tsconfig.json create mode 100644 packages/@core/preferences/__tests__/config.test.ts create mode 100644 packages/@core/preferences/__tests__/preferences.test.ts create mode 100644 packages/@core/preferences/build.config.ts create mode 100644 packages/@core/preferences/src/index.ts create mode 100644 packages/@core/preferences/src/update-css-variables.ts create mode 100644 packages/@core/preferences/src/use-preferences.ts create mode 100644 packages/@core/preferences/tsconfig.json create mode 100644 packages/@core/ui-kit/README.md create mode 100644 packages/@core/ui-kit/form-ui/__tests__/form-api.test.ts create mode 100644 packages/@core/ui-kit/form-ui/build.config.ts create mode 100644 packages/@core/ui-kit/form-ui/postcss.config.mjs create mode 100644 packages/@core/ui-kit/form-ui/src/config.ts create mode 100644 packages/@core/ui-kit/form-ui/src/form-render/context.ts create mode 100644 packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts create mode 100644 packages/@core/ui-kit/form-ui/src/form-render/expandable.ts create mode 100644 packages/@core/ui-kit/form-ui/src/form-render/helper.ts create mode 100644 packages/@core/ui-kit/form-ui/src/form-render/index.ts create mode 100644 packages/@core/ui-kit/form-ui/src/index.ts create mode 100644 packages/@core/ui-kit/form-ui/src/use-vben-form.ts create mode 100644 packages/@core/ui-kit/form-ui/tailwind.config.mjs create mode 100644 packages/@core/ui-kit/form-ui/tsconfig.json create mode 100644 packages/@core/ui-kit/layout-ui/build.config.ts create mode 100644 packages/@core/ui-kit/layout-ui/postcss.config.mjs create mode 100644 packages/@core/ui-kit/layout-ui/src/components/index.ts create mode 100644 packages/@core/ui-kit/layout-ui/src/components/widgets/index.ts create mode 100644 packages/@core/ui-kit/layout-ui/src/hooks/use-layout.ts create mode 100644 packages/@core/ui-kit/layout-ui/src/index.ts create mode 100644 packages/@core/ui-kit/layout-ui/src/vben-layout.ts create mode 100644 packages/@core/ui-kit/layout-ui/tailwind.config.mjs create mode 100644 packages/@core/ui-kit/layout-ui/tsconfig.json create mode 100644 packages/@core/ui-kit/menu-ui/README.md create mode 100644 packages/@core/ui-kit/menu-ui/build.config.ts create mode 100644 packages/@core/ui-kit/menu-ui/postcss.config.mjs create mode 100644 packages/@core/ui-kit/menu-ui/src/components/collapse-transition.vue create mode 100644 packages/@core/ui-kit/menu-ui/src/components/index.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/components/menu-badge-dot.vue create mode 100644 packages/@core/ui-kit/menu-ui/src/components/menu-item.vue create mode 100644 packages/@core/ui-kit/menu-ui/src/components/menu.vue create mode 100644 packages/@core/ui-kit/menu-ui/src/components/normal-menu/index.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/components/sub-menu-content.vue create mode 100644 packages/@core/ui-kit/menu-ui/src/hooks/index.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/hooks/use-menu-context.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/hooks/use-menu-scroll.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/hooks/use-menu.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/index.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/menu.vue create mode 100644 packages/@core/ui-kit/menu-ui/src/sub-menu.vue create mode 100644 packages/@core/ui-kit/menu-ui/src/types.ts create mode 100644 packages/@core/ui-kit/menu-ui/src/utils/index.ts create mode 100644 packages/@core/ui-kit/menu-ui/tailwind.config.mjs create mode 100644 packages/@core/ui-kit/menu-ui/tsconfig.json create mode 100644 packages/@core/ui-kit/popup-ui/build.config.ts create mode 100644 packages/@core/ui-kit/popup-ui/package.json create mode 100644 packages/@core/ui-kit/popup-ui/postcss.config.mjs create mode 100644 packages/@core/ui-kit/popup-ui/src/alert/alert.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/alert/index.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/drawer/index.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/index.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/modal/index.ts create mode 100644 packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts create mode 100644 packages/@core/ui-kit/popup-ui/tailwind.config.mjs create mode 100644 packages/@core/ui-kit/popup-ui/tsconfig.json create mode 100644 packages/@core/ui-kit/shadcn-ui/build.config.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/components.json create mode 100644 packages/@core/ui-kit/shadcn-ui/postcss.config.mjs create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/avatar/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/back-top/backtop.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/back-top/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/back-top/use-backtop.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/breadcrumb.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/button/icon-button.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/checkbox/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/context-menu/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/context-menu/interface.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/count-to-animator.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/count-to-animator/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/interface.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/expandable-arrow.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/expandable-arrow/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/full-screen/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/icon/icon.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/icon/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/input-password/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/logo/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/pin-input/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/pin-input/types.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/popover/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/render-content/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/render-content/render-content.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/scrollbar/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/segmented/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/select/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/select/select.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/spine-text/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/spine-text/spine-text.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/spinner/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/components/tooltip/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/accordion/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/alert-dialog/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/avatar/avatar.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/avatar/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/badge/Badge.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/badge/badge.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/badge/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/Breadcrumb.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbEllipsis.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/BreadcrumbSeparator.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/breadcrumb/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/button/button.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/button/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/card/CardContent.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/card/CardFooter.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/card/CardHeader.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/card/CardTitle.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/card/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/checkbox/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/context-menu/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogFooter.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogHeader.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/dialog/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/dropdown-menu/DropdownMenuShortcut.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/form/FormItem.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/form/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/form/useFormField.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/hover-card/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/input/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/label/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/number-field/NumberFieldContent.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/number-field/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/pin-input/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/radio-group/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/scroll-area/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/select/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/separator/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetFooter.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetHeader.vue create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/sheet/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/sheet/sheet.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/switch/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/textarea/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/toggle-group/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/toggle/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/toggle/toggle.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/src/ui/tooltip/index.ts create mode 100644 packages/@core/ui-kit/shadcn-ui/tailwind.config.mjs create mode 100644 packages/@core/ui-kit/shadcn-ui/tsconfig.json create mode 100644 packages/@core/ui-kit/tabs-ui/build.config.ts create mode 100644 packages/@core/ui-kit/tabs-ui/postcss.config.mjs create mode 100644 packages/@core/ui-kit/tabs-ui/src/components/index.ts create mode 100644 packages/@core/ui-kit/tabs-ui/src/components/widgets/index.ts create mode 100644 packages/@core/ui-kit/tabs-ui/src/index.ts create mode 100644 packages/@core/ui-kit/tabs-ui/src/types.ts create mode 100644 packages/@core/ui-kit/tabs-ui/src/use-tabs-drag.ts create mode 100644 packages/@core/ui-kit/tabs-ui/tailwind.config.mjs create mode 100644 packages/@core/ui-kit/tabs-ui/tsconfig.json create mode 100644 packages/constants/README.md create mode 100644 packages/constants/src/core.ts create mode 100644 packages/constants/tsconfig.json create mode 100644 packages/effects/README.md create mode 100644 packages/effects/access/src/access-control.vue create mode 100644 packages/effects/access/src/accessible.ts create mode 100644 packages/effects/access/src/directive.ts create mode 100644 packages/effects/access/src/index.ts create mode 100644 packages/effects/access/src/use-access.ts create mode 100644 packages/effects/access/tsconfig.json create mode 100644 packages/effects/common-ui/src/components/api-component/api-component.vue create mode 100644 packages/effects/common-ui/src/components/api-component/index.ts create mode 100644 packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts create mode 100644 packages/effects/common-ui/src/components/captcha/index.ts create mode 100644 packages/effects/common-ui/src/components/captcha/point-selection-captcha/index.vue create mode 100644 packages/effects/common-ui/src/components/captcha/point-selection-captcha/point-selection-captcha-card.vue create mode 100644 packages/effects/common-ui/src/components/captcha/slider-captcha/index.vue create mode 100644 packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-action.vue create mode 100644 packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-bar.vue create mode 100644 packages/effects/common-ui/src/components/captcha/slider-captcha/slider-captcha-content.vue create mode 100644 packages/effects/common-ui/src/components/captcha/slider-rotate-captcha/index.vue create mode 100644 packages/effects/common-ui/src/components/captcha/slider-translate-captcha/index.vue create mode 100644 packages/effects/common-ui/src/components/captcha/types.ts create mode 100644 packages/effects/common-ui/src/components/captcha/verification/typing.ts create mode 100644 packages/effects/common-ui/src/components/captcha/verification/utils/util.ts create mode 100644 packages/effects/common-ui/src/components/captcha/verification/verify.css create mode 100644 packages/effects/common-ui/src/components/col-page/col-page.vue create mode 100644 packages/effects/common-ui/src/components/col-page/index.ts create mode 100644 packages/effects/common-ui/src/components/col-page/types.ts create mode 100644 packages/effects/common-ui/src/components/count-to/count-to.vue create mode 100644 packages/effects/common-ui/src/components/count-to/index.ts create mode 100644 packages/effects/common-ui/src/components/count-to/types.ts create mode 100644 packages/effects/common-ui/src/components/doc-alert/doc-alert.vue create mode 100644 packages/effects/common-ui/src/components/doc-alert/index.ts create mode 100644 packages/effects/common-ui/src/components/doc-alert/types.ts create mode 100644 packages/effects/common-ui/src/components/ellipsis-text/ellipsis-text.vue create mode 100644 packages/effects/common-ui/src/components/ellipsis-text/index.ts create mode 100644 packages/effects/common-ui/src/components/icon-picker/icons.ts create mode 100644 packages/effects/common-ui/src/components/icon-picker/index.ts create mode 100644 packages/effects/common-ui/src/components/json-viewer/index.ts create mode 100644 packages/effects/common-ui/src/components/json-viewer/types.ts create mode 100644 packages/effects/common-ui/src/components/loading/directive.ts create mode 100644 packages/effects/common-ui/src/components/loading/index.ts create mode 100644 packages/effects/common-ui/src/components/loading/loading.vue create mode 100644 packages/effects/common-ui/src/components/loading/spinner.vue create mode 100644 packages/effects/common-ui/src/components/page/__tests__/page.test.ts create mode 100644 packages/effects/common-ui/src/components/page/index.ts create mode 100644 packages/effects/common-ui/src/components/page/types.ts create mode 100644 packages/effects/common-ui/src/components/resize/index.ts create mode 100644 packages/effects/common-ui/src/components/tippy/directive.ts create mode 100644 packages/effects/common-ui/src/components/tippy/index.ts create mode 100644 packages/effects/common-ui/src/index.ts create mode 100644 packages/effects/common-ui/src/ui/about/about.ts create mode 100644 packages/effects/common-ui/src/ui/about/about.vue create mode 100644 packages/effects/common-ui/src/ui/about/index.ts create mode 100644 packages/effects/common-ui/src/ui/authentication/auth-title.vue create mode 100644 packages/effects/common-ui/src/ui/authentication/doc-link.vue create mode 100644 packages/effects/common-ui/src/ui/authentication/forget-password.vue create mode 100644 packages/effects/common-ui/src/ui/authentication/index.ts create mode 100644 packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue create mode 100644 packages/effects/common-ui/src/ui/authentication/register.vue create mode 100644 packages/effects/common-ui/src/ui/authentication/types.ts create mode 100644 packages/effects/common-ui/src/ui/dashboard/analysis/analysis-chart-card.vue create mode 100644 packages/effects/common-ui/src/ui/dashboard/analysis/analysis-charts-tabs.vue create mode 100644 packages/effects/common-ui/src/ui/dashboard/analysis/analysis-overview.vue create mode 100644 packages/effects/common-ui/src/ui/dashboard/analysis/index.ts create mode 100644 packages/effects/common-ui/src/ui/dashboard/index.ts create mode 100644 packages/effects/common-ui/src/ui/dashboard/typing.ts create mode 100644 packages/effects/common-ui/src/ui/dashboard/workbench/index.ts create mode 100644 packages/effects/common-ui/src/ui/dashboard/workbench/workbench-header.vue create mode 100644 packages/effects/common-ui/src/ui/dashboard/workbench/workbench-quick-nav.vue create mode 100644 packages/effects/common-ui/src/ui/dashboard/workbench/workbench-trends.vue create mode 100644 packages/effects/common-ui/src/ui/fallback/fallback.ts create mode 100644 packages/effects/common-ui/src/ui/fallback/fallback.vue create mode 100644 packages/effects/common-ui/src/ui/fallback/icons/icon-403.vue create mode 100644 packages/effects/common-ui/src/ui/fallback/icons/icon-404.vue create mode 100644 packages/effects/common-ui/src/ui/fallback/icons/icon-500.vue create mode 100644 packages/effects/common-ui/src/ui/fallback/icons/icon-coming-soon.vue create mode 100644 packages/effects/common-ui/src/ui/fallback/icons/icon-offline.vue create mode 100644 packages/effects/common-ui/src/ui/fallback/icons/warning.svg create mode 100644 packages/effects/common-ui/src/ui/fallback/index.ts create mode 100644 packages/effects/common-ui/tsconfig.json create mode 100644 packages/effects/hooks/README.md create mode 100644 packages/effects/hooks/src/use-content-maximize.ts create mode 100644 packages/effects/hooks/src/use-design-tokens.ts create mode 100644 packages/effects/hooks/src/use-hover-toggle.ts create mode 100644 packages/effects/hooks/src/use-refresh.ts create mode 100644 packages/effects/hooks/src/use-tabs.ts create mode 100644 packages/effects/hooks/src/use-watermark.ts create mode 100644 packages/effects/hooks/tsconfig.json create mode 100644 packages/effects/layouts/src/authentication/icons/slogan.vue create mode 100644 packages/effects/layouts/src/authentication/index.ts create mode 100644 packages/effects/layouts/src/authentication/toolbar.vue create mode 100644 packages/effects/layouts/src/authentication/types.ts create mode 100644 packages/effects/layouts/src/basic/README.md create mode 100644 packages/effects/layouts/src/basic/content/content-spinner.vue create mode 100644 packages/effects/layouts/src/basic/content/content.vue create mode 100644 packages/effects/layouts/src/basic/content/index.ts create mode 100644 packages/effects/layouts/src/basic/content/use-content-spinner.ts create mode 100644 packages/effects/layouts/src/basic/copyright/copyright.vue create mode 100644 packages/effects/layouts/src/basic/copyright/index.ts create mode 100644 packages/effects/layouts/src/basic/footer/footer.vue create mode 100644 packages/effects/layouts/src/basic/footer/index.ts create mode 100644 packages/effects/layouts/src/basic/header/index.ts create mode 100644 packages/effects/layouts/src/basic/index.ts create mode 100644 packages/effects/layouts/src/basic/menu/extra-menu.vue create mode 100644 packages/effects/layouts/src/basic/menu/index.ts create mode 100644 packages/effects/layouts/src/basic/menu/menu.vue create mode 100644 packages/effects/layouts/src/basic/menu/mixed-menu.vue create mode 100644 packages/effects/layouts/src/basic/menu/use-extra-menu.ts create mode 100644 packages/effects/layouts/src/basic/menu/use-mixed-menu.ts create mode 100644 packages/effects/layouts/src/basic/tabbar/index.ts create mode 100644 packages/effects/layouts/src/basic/tabbar/tabbar.vue create mode 100644 packages/effects/layouts/src/basic/tabbar/use-tabbar.ts create mode 100644 packages/effects/layouts/src/iframe/iframe-router-view.vue create mode 100644 packages/effects/layouts/src/iframe/iframe-view.vue create mode 100644 packages/effects/layouts/src/iframe/index.ts create mode 100644 packages/effects/layouts/src/index.ts create mode 100644 packages/effects/layouts/src/widgets/breadcrumb.vue create mode 100644 packages/effects/layouts/src/widgets/check-updates/check-updates.vue create mode 100644 packages/effects/layouts/src/widgets/check-updates/index.ts create mode 100644 packages/effects/layouts/src/widgets/color-toggle.vue create mode 100644 packages/effects/layouts/src/widgets/global-search/global-search.vue create mode 100644 packages/effects/layouts/src/widgets/global-search/index.ts create mode 100644 packages/effects/layouts/src/widgets/help/help.vue create mode 100644 packages/effects/layouts/src/widgets/help/index.ts create mode 100644 packages/effects/layouts/src/widgets/layout-toggle.vue create mode 100644 packages/effects/layouts/src/widgets/lock-screen/index.ts create mode 100644 packages/effects/layouts/src/widgets/notification/index.ts create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/block.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/checkbox-item.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/general/animation.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/index.ts create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/breadcrumb.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/content.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/copyright.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/footer.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/layout.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/navigation.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/tabbar.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/layout/widget.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/number-field-item.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/select-item.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/shortcut-keys/global.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/theme/color-mode.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/theme/radius.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/theme/theme.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/toggle-item.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/content-compact.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/full-content.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/header-mixed-nav.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/header-nav.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/header-sidebar-nav.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/index.ts create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/mixed-nav.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/setting.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/sidebar-mixed-nav.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/icons/sidebar-nav.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/index.ts create mode 100644 packages/effects/layouts/src/widgets/preferences/preferences.vue create mode 100644 packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts create mode 100644 packages/effects/layouts/src/widgets/tenant-dropdown/index.ts create mode 100644 packages/effects/layouts/src/widgets/theme-toggle/index.ts create mode 100644 packages/effects/layouts/src/widgets/theme-toggle/theme-toggle.vue create mode 100644 packages/effects/layouts/src/widgets/user-dropdown/index.ts create mode 100644 packages/effects/layouts/src/widgets/user-dropdown/user-dropdown.vue create mode 100644 packages/effects/layouts/tsconfig.json create mode 100644 packages/effects/plugins/README.md create mode 100644 packages/effects/plugins/src/echarts/echarts-ui.vue create mode 100644 packages/effects/plugins/src/echarts/index.ts create mode 100644 packages/effects/plugins/src/echarts/map/china.json create mode 100644 packages/effects/plugins/src/markmap/index.ts create mode 100644 packages/effects/plugins/src/motion/index.ts create mode 100644 packages/effects/plugins/src/motion/types.ts create mode 100644 packages/effects/plugins/src/vxe-table/api.ts create mode 100644 packages/effects/plugins/src/vxe-table/extends.ts create mode 100644 packages/effects/plugins/src/vxe-table/types.ts create mode 100644 packages/effects/plugins/src/vxe-table/use-vxe-grid.ts create mode 100644 packages/effects/plugins/src/vxe-table/use-vxe-grid.vue create mode 100644 packages/effects/plugins/tsconfig.json create mode 100644 packages/effects/request/src/index.ts create mode 100644 packages/effects/request/src/request-client/index.ts create mode 100644 packages/effects/request/src/request-client/modules/interceptor.ts create mode 100644 packages/effects/request/src/request-client/modules/uploader.test.ts create mode 100644 packages/effects/request/src/request-client/modules/uploader.ts create mode 100644 packages/effects/request/src/request-client/preset-interceptors.ts create mode 100644 packages/effects/request/src/request-client/request-client.test.ts create mode 100644 packages/effects/request/tsconfig.json create mode 100644 packages/icons/README.md create mode 100644 packages/icons/src/icons/empty-icon.vue create mode 100644 packages/icons/src/index.ts create mode 100644 packages/icons/src/svg/icons/antdv-logo.svg create mode 100644 packages/icons/src/svg/icons/avatar-1.svg create mode 100644 packages/icons/src/svg/icons/avatar-2.svg create mode 100644 packages/icons/src/svg/icons/avatar-3.svg create mode 100644 packages/icons/src/svg/icons/avatar-4.svg create mode 100644 packages/icons/src/svg/icons/bell.svg create mode 100644 packages/icons/src/svg/icons/cake.svg create mode 100644 packages/icons/src/svg/icons/card.svg create mode 100644 packages/icons/src/svg/icons/download.svg create mode 100644 packages/icons/src/svg/load.ts create mode 100644 packages/icons/tsconfig.json create mode 100644 packages/locales/src/index.ts create mode 100644 packages/locales/src/langs/en-US/common.json create mode 100644 packages/locales/src/langs/zh-CN/common.json create mode 100644 packages/locales/src/typing.ts create mode 100644 packages/locales/tsconfig.json create mode 100644 packages/preferences/src/index.ts create mode 100644 packages/preferences/tsconfig.json create mode 100644 packages/stores/src/index.ts create mode 100644 packages/stores/src/modules/access.test.ts create mode 100644 packages/stores/src/modules/access.ts create mode 100644 packages/stores/src/modules/tabbar.test.ts create mode 100644 packages/stores/src/modules/user.test.ts create mode 100644 packages/stores/src/modules/user.ts create mode 100644 packages/stores/src/setup.ts create mode 100644 packages/stores/tsconfig.json create mode 100644 packages/styles/README.md create mode 100644 packages/styles/src/antd/index.css create mode 100644 packages/styles/src/ele/index.css create mode 100644 packages/styles/src/global/index.scss create mode 100644 packages/styles/src/index.ts create mode 100644 packages/styles/src/naive/index.css create mode 100644 packages/styles/tsconfig.json create mode 100644 packages/types/README.md create mode 100644 packages/types/src/index.ts create mode 100644 packages/types/src/user.ts create mode 100644 packages/types/tsconfig.json create mode 100644 packages/utils/README.md create mode 100644 packages/utils/src/helpers/__tests__/find-menu-by-path.test.ts create mode 100644 packages/utils/src/helpers/__tests__/generate-menus.test.ts create mode 100644 packages/utils/src/helpers/__tests__/generate-routes-frontend.test.ts create mode 100644 packages/utils/src/helpers/__tests__/merge-route-modules.test.ts create mode 100644 packages/utils/src/helpers/find-menu-by-path.ts create mode 100644 packages/utils/src/helpers/generate-routes-backend.ts create mode 100644 packages/utils/src/helpers/generate-routes-frontend.ts create mode 100644 packages/utils/src/helpers/get-popup-container.ts create mode 100644 packages/utils/src/helpers/index.ts create mode 100644 packages/utils/src/helpers/merge-route-modules.ts create mode 100644 packages/utils/src/helpers/reset-routes.ts create mode 100644 packages/utils/src/helpers/unmount-global-loading.ts create mode 100644 packages/utils/tsconfig.json create mode 100644 scripts/deploy/Dockerfile create mode 100644 scripts/deploy/build-local-docker-image.sh create mode 100644 scripts/deploy/nginx.conf create mode 100644 scripts/turbo-run/README.md create mode 100644 scripts/turbo-run/bin/turbo-run.mjs create mode 100644 scripts/turbo-run/build.config.ts create mode 100644 scripts/turbo-run/src/index.ts create mode 100644 scripts/turbo-run/src/run.ts create mode 100644 scripts/turbo-run/tsconfig.json create mode 100644 scripts/vsh/README.md create mode 100644 scripts/vsh/bin/vsh.mjs create mode 100644 scripts/vsh/build.config.ts create mode 100644 scripts/vsh/src/check-circular/index.ts create mode 100644 scripts/vsh/src/code-workspace/index.ts create mode 100644 scripts/vsh/src/index.ts create mode 100644 scripts/vsh/src/lint/index.ts create mode 100644 scripts/vsh/src/publint/index.ts create mode 100644 scripts/vsh/tsconfig.json create mode 100644 stylelint.config.mjs create mode 100644 tea.yaml create mode 100644 vitest.config.ts create mode 100644 vitest.workspace.ts diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 000000000..dc3bc09a2 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 000000000..5654e898b --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,5 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works with multi-package repos, or single-package repos to help you version and publish your code. You can find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 000000000..f954fb4ba --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", + "changelog": [ + "@changesets/changelog-github", + { "repo": "vbenjs/vue-vben-admin" } + ], + "commit": false, + "fixed": [["@vben-core/*", "@vben/*"]], + "snapshot": { + "prereleaseTemplate": "{tag}-{datetime}" + }, + "privatePackages": { "version": true, "tag": true }, + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.commitlintrc.js b/.commitlintrc.js new file mode 100644 index 000000000..02e33fa62 --- /dev/null +++ b/.commitlintrc.js @@ -0,0 +1 @@ +export { default } from '@vben/commitlint-config'; diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..52b833a96 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +node_modules +.git +.gitignore +*.md +dist +.turbo +dist.zip diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..179aec6f1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset=utf-8 +end_of_line=lf +insert_final_newline=true +indent_style=space +indent_size=2 +max_line_length = 100 +trim_trailing_whitespace = true +quote_type = single + +[*.{yml,yaml,json}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..d4e5bd3ed --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +# https://docs.github.com/cn/get-started/getting-started-with-git/configuring-git-to-handle-line-endings + +# Automatically normalize line endings (to LF) for all text-based files. +* text=auto eol=lf + +# Declare files that will always have CRLF line endings on checkout. +*.{cmd,[cC][mM][dD]} text eol=crlf +*.{bat,[bB][aA][tT]} text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.{ico,png,jpg,jpeg,gif,webp,svg,woff,woff2} binary \ No newline at end of file diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 000000000..4b28a69cd --- /dev/null +++ b/.gitconfig @@ -0,0 +1,2 @@ +[core] + ignorecase = false diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 000000000..5fda2cf70 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,6 @@ +ports: + - port: 5555 + onOpen: open-preview +tasks: + - init: npm i -g corepack && pnpm install + command: pnpm run dev:play diff --git a/.node-version b/.node-version new file mode 100644 index 000000000..ee5c24469 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +22.1.0 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..d0b0ca133 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,18 @@ +dist +dev-dist +.local +.output.js +node_modules +.nvmrc +coverage +CODEOWNERS +.nitro +.output + + +**/*.svg +**/*.sh + +public +.npmrc +*-lock.yaml diff --git a/.prettierrc.mjs b/.prettierrc.mjs new file mode 100644 index 000000000..3e25d2cfa --- /dev/null +++ b/.prettierrc.mjs @@ -0,0 +1 @@ +export { default } from '@vben/prettier-config'; diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 000000000..f4b2db2c1 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,4 @@ +dist +public +__tests__ +coverage diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..cec5b4274 --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2024-present, Vben + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/apps/web-antd/.env.analyze b/apps/web-antd/.env.analyze new file mode 100644 index 000000000..ffafa8dd5 --- /dev/null +++ b/apps/web-antd/.env.analyze @@ -0,0 +1,7 @@ +# public path +VITE_BASE=/ + +# Basic interface address SPA +VITE_GLOB_API_URL=/api + +VITE_VISUALIZER=true diff --git a/apps/web-antd/.env.development b/apps/web-antd/.env.development new file mode 100644 index 000000000..cff255764 --- /dev/null +++ b/apps/web-antd/.env.development @@ -0,0 +1,21 @@ +# 端口号 +VITE_PORT=5666 + +VITE_BASE=/ + +# 请求路径 +VITE_BASE_URL=http://127.0.0.1:48080 +# 接口地址 +VITE_GLOB_API_URL=/admin-api +# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 +VITE_UPLOAD_TYPE=server +# 是否打开 devtools,true 为打开,false 为关闭 +VITE_DEVTOOLS=false + +# 是否注入全局loading +VITE_INJECT_APP_LOADING=true + +# 默认登录用户名 +VITE_APP_DEFAULT_USERNAME=admin +# 默认登录密码 +VITE_APP_DEFAULT_PASSWORD=admin123 diff --git a/apps/web-antd/.env.production b/apps/web-antd/.env.production new file mode 100644 index 000000000..910fd64cc --- /dev/null +++ b/apps/web-antd/.env.production @@ -0,0 +1,23 @@ +VITE_BASE=/ + +# 请求路径 +VITE_BASE_URL=http://127.0.0.1:48080 +# 接口地址 +VITE_GLOB_API_URL=http://127.0.0.1:48080/admin-api +# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 +VITE_UPLOAD_TYPE=server + +# 是否开启压缩,可以设置为 none, brotli, gzip +VITE_COMPRESS=none + +# 是否开启 PWA +VITE_PWA=false + +# vue-router 的模式 +VITE_ROUTER_HISTORY=hash + +# 是否注入全局loading +VITE_INJECT_APP_LOADING=true + +# 打包后是否生成dist.zip +VITE_ARCHIVER=true diff --git a/apps/web-antd/index.html b/apps/web-antd/index.html new file mode 100644 index 000000000..dffc1503a --- /dev/null +++ b/apps/web-antd/index.html @@ -0,0 +1,35 @@ + + + + + + + + + + + + <%= VITE_APP_TITLE %> + + + + +
+ + + diff --git a/apps/web-antd/postcss.config.mjs b/apps/web-antd/postcss.config.mjs new file mode 100644 index 000000000..3d8070455 --- /dev/null +++ b/apps/web-antd/postcss.config.mjs @@ -0,0 +1 @@ +export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-antd/public/favicon.ico b/apps/web-antd/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fcf9818e2cf855039b272bdbfbb202d3ff3fa159 GIT binary patch literal 5430 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 SXiW~hX=AbrBb{xtWB=K5W|cqy literal 0 HcmV?d00001 diff --git a/apps/web-antd/public/static/imgs/ai/ziran.jpg b/apps/web-antd/public/static/imgs/ai/ziran.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62907242aedecf69d5a1222b0cd5f1deafbdf2ff GIT binary patch literal 124202 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 SUv03z>x(~o`O)k@n*Rk2oT4EB literal 0 HcmV?d00001 diff --git a/apps/web-antd/public/tinymce/icons/default/icons.min.js b/apps/web-antd/public/tinymce/icons/default/icons.min.js new file mode 100644 index 000000000..620f554ce --- /dev/null +++ b/apps/web-antd/public/tinymce/icons/default/icons.min.js @@ -0,0 +1 @@ +tinymce.IconManager.add("default",{icons:{"accessibility-check":'',"accordion-toggle":'',accordion:'',"action-next":'',"action-prev":'',addtag:'',"ai-prompt":'',ai:'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"arrow-left":'',"arrow-right":'',bold:'',bookmark:'',"border-style":'',"border-width":'',brightness:'',browse:'',cancel:'',"cell-background-color":'',"cell-border-color":'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',"cut-column":'',"cut-row":'',cut:'',"document-properties":'',drag:'',"duplicate-column":'',"duplicate-row":'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',export:'',fill:'',"flip-horizontally":'',"flip-vertically":'',footnote:'',"format-code":'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',"image-options":'',image:'',indent:'',info:'',"insert-character":'',"insert-time":'',invert:'',italic:'',language:'',"line-height":'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"math-equation":'',mentions:'',minus:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"export-pdf":'',"export-word":'',"import-word":'',"page-break":'',paragraph:'',"paste-column-after":'',"paste-column-before":'',"paste-row-after":'',"paste-row-before":'',"paste-text":'',paste:'',"permanent-pen":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"revision-history":'',"rotate-left":'',"rotate-right":'',rtl:'',save:'',search:'',"select-all":'',selected:'',send:'',settings:'',sharpen:'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',superscript:'',"table-caption":'',"table-cell-classes":'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-classes":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-numbering-rtl":'',"table-row-numbering":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',"template-add":'',template:'',"temporary-placeholder":'',"text-color":'',"text-size-decrease":'',"text-size-increase":'',toc:'',translate:'',typography:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',upload:'',"add-file":'',adjustments:'',"alt-text":'',"auto-image-enhancement":'',blur:'',box:'',camera:'',caption:'',dropbox:'',evernote:'',exposure:'',fb:'',flickr:'',folder:'',"google-drive":'',"google-photos":'',grayscale:'',huddle:'',"image-decorative":'',"image-enhancements":'',instagram:'',onedrive:'',"photo-filter":'',"revert-changes":'',saturation:'',"transform-image":'',vibrance:'',vk:'',warmth:'',user:'',"vertical-align":'',visualblocks:'',visualchars:'',warning:'',"zoom-in":'',"zoom-out":''}}); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/langs/README.md b/apps/web-antd/public/tinymce/langs/README.md new file mode 100644 index 000000000..cd93d8c85 --- /dev/null +++ b/apps/web-antd/public/tinymce/langs/README.md @@ -0,0 +1,3 @@ +This is where language files should be placed. + +Please DO NOT translate these directly, use this service instead: https://crowdin.com/project/tinymce diff --git a/apps/web-antd/public/tinymce/langs/zh_CN.js b/apps/web-antd/public/tinymce/langs/zh_CN.js new file mode 100644 index 000000000..58ed18871 --- /dev/null +++ b/apps/web-antd/public/tinymce/langs/zh_CN.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_CN",{"#":"#","Accessibility":"\u8f85\u52a9\u529f\u80fd","Accordion":"\u6298\u53e0\u9762\u677f","Accordion body...":"\u6298\u53e0\u9762\u677f\u6b63\u6587...","Accordion summary...":"\u6298\u53e0\u9762\u677f\u6458\u8981...","Action":"\u52a8\u4f5c","Activity":"\u6d3b\u52a8","Address":"\u5730\u5740","Advanced":"\u9ad8\u7ea7","Align":"\u5bf9\u9f50","Align center":"\u5c45\u4e2d\u5bf9\u9f50","Align left":"\u5de6\u5bf9\u9f50","Align right":"\u53f3\u5bf9\u9f50","Alignment":"\u5bf9\u9f50","Alignment {0}":"\u5bf9\u9f50{0}","All":"\u5168\u90e8","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Alternative source":"\u955c\u50cf","Alternative source URL":"\u66ff\u4ee3\u6765\u6e90\u7f51\u5740","Anchor":"\u951a\u70b9","Anchor...":"\u951a\u70b9...","Anchors":"\u951a\u70b9","Animals and Nature":"\u52a8\u7269\u548c\u81ea\u7136","Arrows":"\u7bad\u5934","B":"B","Background color":"\u80cc\u666f\u989c\u8272","Background color {0}":"\u80cc\u666f\u989c\u8272 {0}","Black":"\u9ed1\u8272","Block":"\u5757","Block {0}":"\u6587\u672c\u5757{0}","Blockquote":"Blockquote","Blocks":"\u6837\u5f0f","Blue":"\u84dd\u8272","Blue component":"\u767d\u8272\u90e8\u5206","Body":"\u8868\u4f53","Bold":"\u7c97\u4f53","Border":"\u6846\u7ebf","Border color":"\u6846\u7ebf\u989c\u8272","Border style":"\u8fb9\u6846\u6837\u5f0f","Border width":"\u8fb9\u6846\u5bbd\u5ea6","Bottom":"\u4e0b\u65b9\u5bf9\u9f50","Browse files":"\u6d4f\u89c8\u6587\u4ef6","Browse for an image":"\u6d4f\u89c8\u56fe\u7247","Browse links":"\u6d4f\u89c8\u94fe\u63a5","Bullet list":"\u65e0\u5e8f\u5217\u8868","Cancel":"\u53d6\u6d88","Caption":"\u6807\u9898","Cell":"\u5355\u5143\u683c","Cell padding":"\u5355\u5143\u683c\u5185\u8fb9\u8ddd","Cell properties":"\u5355\u5143\u683c\u5c5e\u6027","Cell spacing":"\u5355\u5143\u683c\u5916\u95f4\u8ddd","Cell styles":"\u5355\u5143\u683c\u6837\u5f0f","Cell type":"\u50a8\u5b58\u683c\u522b","Center":"\u5c45\u4e2d","Characters":"\u5b57\u7b26","Characters (no spaces)":"\u5b57\u7b26(\u65e0\u7a7a\u683c)","Circle":"\u7a7a\u5fc3\u5706","Class":"\u7c7b\u578b","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Close":"\u5173\u95ed","Code":"\u4ee3\u7801","Code sample...":"\u793a\u4f8b\u4ee3\u7801...","Code view":"\u4ee3\u7801\u89c6\u56fe","Color Picker":"\u9009\u8272\u5668","Color swatch":"\u989c\u8272\u6837\u672c","Cols":"\u5217","Column":"\u5217","Column clipboard actions":"\u5217\u526a\u8d34\u677f\u64cd\u4f5c","Column group":"\u5217\u7ec4","Column header":"\u5217\u6807\u9898","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","Copy":"\u590d\u5236","Copy column":"\u590d\u5236\u5217","Copy row":"\u590d\u5236\u884c","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9\u3002","Could not load emojis":"\u65e0\u6cd5\u52a0\u8f7dEmojis","Count":"\u8ba1\u6570","Currency":"\u8d27\u5e01","Current window":"\u5f53\u524d\u7a97\u53e3","Custom color":"\u81ea\u5b9a\u4e49\u989c\u8272","Custom...":"\u81ea\u5b9a\u4e49......","Cut":"\u526a\u5207","Cut column":"\u526a\u5207\u5217","Cut row":"\u526a\u5207\u884c","Dark Blue":"\u6df1\u84dd\u8272","Dark Gray":"\u6df1\u7070\u8272","Dark Green":"\u6df1\u7eff\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Red":"\u6df1\u7ea2\u8272","Dark Turquoise":"\u6df1\u84dd\u7eff\u8272","Dark Yellow":"\u6697\u9ec4\u8272","Dashed":"\u865a\u7ebf","Date/time":"\u65e5\u671f/\u65f6\u95f4","Decrease indent":"\u51cf\u5c11\u7f29\u8fdb","Default":"\u9884\u8bbe","Delete accordion":"\u5220\u9664\u6298\u53e0\u9762\u677f","Delete column":"\u5220\u9664\u5217","Delete row":"\u5220\u9664\u884c","Delete table":"\u5220\u9664\u8868\u683c","Dimensions":"\u5c3a\u5bf8","Disc":"\u5b9e\u5fc3\u5706","Div":"Div","Document":"\u6587\u6863","Dotted":"\u865a\u7ebf","Double":"\u53cc\u7cbe\u5ea6","Drop an image here":"\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64","Dropped file type is not supported":"\u6b64\u6587\u4ef6\u7c7b\u578b\u4e0d\u652f\u6301\u62d6\u653e","Edit":"\u7f16\u8f91","Embed":"\u5185\u5d4c","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u9519\u8bef","Error: Form submit field collision.":"\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002","Error: No form element found.":"\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002","Extended Latin":"\u62c9\u4e01\u8bed\u6269\u5145","Failed to initialize plugin: {0}":"\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}","Failed to load plugin url: {0}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}","Failed to load plugin: {0} from url {1}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}","Failed to upload image: {0}":"\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}","File":"\u6587\u4ef6","Find":"\u5bfb\u627e","Find (if searchreplace plugin activated)":"\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Find and Replace":"\u67e5\u627e\u548c\u66ff\u6362","Find and replace...":"\u67e5\u627e\u5e76\u66ff\u6362...","Find in selection":"\u5728\u9009\u533a\u4e2d\u67e5\u627e","Find whole words only":"\u5168\u5b57\u5339\u914d","Flags":"\u65d7\u5e1c","Focus to contextual toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355","Focus to element path":"\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84","Focus to menubar":"\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f","Focus to toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f","Font":"\u5b57\u4f53","Font size {0}":"\u5b57\u4f53\u5927\u5c0f{0}","Font sizes":"\u5b57\u4f53\u5927\u5c0f","Font {0}":"\u5b57\u4f53{0}","Fonts":"\u5b57\u4f53","Food and Drink":"\u98df\u7269\u548c\u996e\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {0}":"\u683c\u5f0f{0}","Formats":"\u683c\u5f0f","Fullscreen":"\u5168\u5c4f","G":"G","General":"\u4e00\u822c","Gray":"\u7070\u8272","Green":"\u7eff\u8272","Green component":"\u7eff\u8272\u90e8\u5206","Groove":"\u51f9\u69fd","Handy Shortcuts":"\u5feb\u6377\u952e","Header":"\u8868\u5934","Header cell":"\u8868\u5934\u5355\u5143\u683c","Heading 1":"\u4e00\u7ea7\u6807\u9898","Heading 2":"\u4e8c\u7ea7\u6807\u9898","Heading 3":"\u4e09\u7ea7\u6807\u9898","Heading 4":"\u56db\u7ea7\u6807\u9898","Heading 5":"\u4e94\u7ea7\u6807\u9898","Heading 6":"\u516d\u7ea7\u6807\u9898","Headings":"\u6807\u9898","Height":"\u9ad8\u5ea6","Help":"\u5e2e\u52a9","Hex color code":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801","Hidden":"\u9690\u85cf","Horizontal align":"\u6c34\u5e73\u5bf9\u9f50","Horizontal line":"\u6c34\u5e73\u5206\u5272\u7ebf","Horizontal space":"\u6c34\u5e73\u95f4\u8ddd","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u5e94\u8be5\u4ee5\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002","Image is decorative":"\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684","Image list":"\u56fe\u7247\u6e05\u5355","Image title":"\u56fe\u7247\u6807\u9898","Image...":"\u56fe\u7247...","ImageProxy HTTP error: Could not find Image Proxy":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u65e0\u6cd5\u627e\u5230\u56fe\u7247\u4ee3\u7406","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u56fe\u7247\u4ee3\u7406\u5730\u5740\u9519\u8bef","ImageProxy HTTP error: Rejected request":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u8bf7\u6c42\u88ab\u62d2\u7edd","ImageProxy HTTP error: Unknown ImageProxy error":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u672a\u77e5\u7684\u56fe\u7247\u4ee3\u7406\u9519\u8bef","Increase indent":"\u589e\u52a0\u7f29\u8fdb","Inline":"\u6587\u672c","Insert":"\u63d2\u5165","Insert Template":"\u63d2\u5165\u6a21\u677f","Insert accordion":"\u63d2\u5165\u6298\u53e0\u9762\u677f","Insert column after":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","Insert column before":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u65f6\u95f4","Insert image":"\u63d2\u5165\u56fe\u7247","Insert link (if link plugin activated)":"\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert table":"\u63d2\u5165\u8868\u683c","Insert template...":"\u63d2\u5165\u6a21\u677f...","Insert video":"\u63d2\u5165\u89c6\u9891","Insert/Edit code sample":"\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b","Insert/edit image":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","Insert/edit link":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","Insert/edit media":"\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53","Insert/edit video":"\u63d2\u5165/\u7f16\u8f91\u89c6\u9891","Inset":"\u5d4c\u5165","Invalid hex color code: {0}":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801\u65e0\u6548\uff1a {0}","Invalid input":"\u65e0\u6548\u8f93\u5165","Italic":"\u659c\u4f53","Justify":"\u4e24\u7aef\u5bf9\u9f50","Keyboard Navigation":"\u952e\u76d8\u6307\u5f15","Language":"\u8bed\u8a00","Learn more...":"\u4e86\u89e3\u66f4\u591a...","Left":"\u5de6","Left to right":"\u7531\u5de6\u5230\u53f3","Light Blue":"\u6d45\u84dd\u8272","Light Gray":"\u6d45\u7070\u8272","Light Green":"\u6d45\u7eff\u8272","Light Purple":"\u6d45\u7d2b\u8272","Light Red":"\u6d45\u7ea2\u8272","Light Yellow":"\u6d45\u9ec4\u8272","Line height":"Line height","Link list":"\u94fe\u63a5\u6e05\u5355","Link...":"\u94fe\u63a5...","List Properties":"\u5217\u8868\u5c5e\u6027","List properties...":"\u6807\u9898\u5b57\u4f53\u5c5e\u6027","Loading emojis...":"\u6b63\u5728\u52a0\u8f7dEmojis...","Loading...":"\u52a0\u8f7d\u4e2d...","Lower Alpha":"\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","Lower Roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","Match case":"\u5927\u5c0f\u5199\u5339\u914d","Mathematical":"\u6570\u5b66","Media poster (Image URL)":"\u5c01\u9762(\u56fe\u7247\u5730\u5740)","Media...":"\u591a\u5a92\u4f53...","Medium Blue":"\u4e2d\u84dd\u8272","Medium Gray":"\u4e2d\u7070\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Merge cells":"\u5408\u5e76\u5355\u5143\u683c","Middle":"\u5c45\u4e2d\u5bf9\u9f50","Midnight Blue":"\u6df1\u84dd\u8272","More...":"\u66f4\u591a...","Name":"\u540d\u79f0","Navy Blue":"\u6d77\u519b\u84dd","New document":"\u65b0\u5efa\u6587\u6863","New window":"\u65b0\u7a97\u53e3","Next":"\u4e0b\u4e00\u4e2a","No":"\u5426","No alignment":"\u672a\u5bf9\u9f50","No color":"\u65e0","Nonbreaking space":"\u4e0d\u95f4\u65ad\u7a7a\u683c","None":"\u65e0","Numbered list":"\u6709\u5e8f\u5217\u8868","OR":"\u6216","Objects":"\u7269\u4ef6","Ok":"\u786e\u5b9a","Open help dialog":"\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846","Open link":"\u6253\u5f00\u94fe\u63a5","Open link in...":"\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...","Open popup menu for split buttons":"\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae","Orange":"\u6a59\u8272","Outset":"\u5916\u7f6e","Page break":"\u5206\u9875\u7b26","Paragraph":"\u6bb5\u843d","Paste":"\u7c98\u8d34","Paste as text":"\u7c98\u8d34\u4e3a\u6587\u672c","Paste column after":"\u7c98\u8d34\u540e\u9762\u7684\u5217","Paste column before":"\u7c98\u8d34\u6b64\u5217\u524d","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","Paste or type a link":"\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5","Paste row after":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","Paste row before":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","Paste your embed code below:":"\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:","People":"\u4eba\u7c7b","Plugins":"\u63d2\u4ef6","Plugins installed ({0}):":"\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):","Powered by {0}":"\u7531{0}\u9a71\u52a8","Pre":"\u524d\u8a00","Preferences":"\u9996\u9009\u9879","Preformatted":"\u9884\u5148\u683c\u5f0f\u5316\u7684","Premium plugins:":"\u4f18\u79c0\u63d2\u4ef6\uff1a","Press the Up and Down arrow keys to resize the editor.":"\u6309\u4e0a\u4e0b\u7bad\u5934\u952e\u4ee5\u8c03\u6574\u7f16\u8f91\u5668\u5927\u5c0f\u3002","Press the arrow keys to resize the editor.":"\u6309\u7bad\u5934\u952e\u4ee5\u8c03\u6574\u7f16\u8f91\u5668\u5927\u5c0f\u3002","Press {0} for help":"\u6309 {0} \u83b7\u5f97\u5e2e\u52a9","Preview":"\u9884\u89c8","Previous":"\u4e0a\u4e00\u4e2a","Print":"\u6253\u5370","Print...":"\u6253\u5370...","Purple":"\u7d2b\u8272","Quotations":"\u5f15\u7528","R":"R","Range 0 to 255":"\u8303\u56f40\u81f3255","Red":"\u7ea2\u8272","Red component":"\u7ea2\u8272\u90e8\u5206","Redo":"\u91cd\u505a","Remove":"\u79fb\u9664","Remove color":"\u79fb\u9664\u989c\u8272","Remove link":"\u79fb\u9664\u94fe\u63a5","Replace":"\u66ff\u6362","Replace all":"\u66ff\u6362\u5168\u90e8","Replace with":"\u66ff\u6362\u4e3a","Resize":"\u8c03\u6574\u5927\u5c0f","Restore last draft":"\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f","Reveal or hide additional toolbar items":"\u663e\u793a\u6216\u9690\u85cf\u5176\u4ed6\u5de5\u5177\u680f\u9879","Rich Text Area":"\u5bcc\u6587\u672c\u533a\u57df","Rich Text Area. Press ALT-0 for help.":"\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7f16\u8f91\u533a\u3002\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9","Ridge":"\u6d77\u810a\u5ea7","Right":"\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u526a\u8d34\u677f\u64cd\u4f5c","Row group":"\u884c\u7ec4","Row header":"\u884c\u5934","Row properties":"\u884c\u5c5e\u6027","Row type":"\u884c\u7c7b\u578b","Rows":"\u884c\u6570","Save":"\u4fdd\u5b58","Save (if save plugin activated)":"\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Scope":"\u8303\u56f4","Search":"\u641c\u7d22","Select all":"\u5168\u9009","Select...":"\u9009\u62e9...","Selection":"\u9009\u62e9","Shortcut":"\u5feb\u6377\u65b9\u5f0f","Show blocks":"\u663e\u793a\u533a\u5757\u8fb9\u6846","Show caption":"\u663e\u793a\u6807\u9898","Show invisible characters":"\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26","Size":"\u5b57\u53f7","Solid":"\u5b9e\u7ebf","Source":"\u5730\u5740","Source code":"\u6e90\u4ee3\u7801","Special Character":"\u7279\u6b8a\u5b57\u7b26","Special character...":"\u7279\u6b8a\u5b57\u7b26...","Split cell":"\u62c6\u5206\u5355\u5143\u683c","Square":"\u5b9e\u5fc3\u65b9\u5757","Start list at number":"\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868","Strikethrough":"\u5220\u9664\u7ebf","Style":"\u6837\u5f0f","Subscript":"\u4e0b\u6807","Superscript":"\u4e0a\u6807","Switch to or from fullscreen mode":"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f","Symbols":"\u7b26\u53f7","System Font":"\u7cfb\u7edf\u5b57\u4f53","Table":"\u8868\u683c","Table caption":"\u8868\u683c\u6807\u9898","Table properties":"\u8868\u683c\u5c5e\u6027","Table styles":"\u8868\u683c\u6837\u5f0f","Template":"\u6a21\u677f","Templates":"\u6a21\u677f","Text":"\u6587\u5b57","Text color":"\u5b57\u4f53\u989c\u8272","Text color {0}":"\u5b57\u4f53\u989c\u8272 {0}","Text to display":"\u8981\u663e\u793a\u7684\u6587\u672c","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto: \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:// \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f","Title":"\u6807\u9898","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846","Toggle accordion":"\u5207\u6362\u6298\u53e0\u9762\u677f","Tools":"\u5de5\u5177","Top":"\u4e0a\u65b9\u5bf9\u9f50","Travel and Places":"\u65c5\u6e38\u548c\u5730\u70b9","Turquoise":"\u9752\u7eff\u8272","Underline":"\u4e0b\u5212\u7ebf","Undo":"\u64a4\u9500","Upload":"\u4e0a\u4f20","Uploading image":"\u4e0a\u4f20\u56fe\u7247","Upper Alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57","Url":"\u5730\u5740","User Defined":"\u81ea\u5b9a\u4e49","Valid":"\u6709\u6548","Version":"\u7248\u672c","Vertical align":"\u5782\u76f4\u5bf9\u9f50","Vertical space":"\u5782\u76f4\u95f4\u8ddd","View":"\u67e5\u770b","Visual aids":"\u7f51\u683c\u7ebf","Warn":"\u8b66\u544a","White":"\u767d\u8272","Width":"\u5bbd\u5ea6","Word count":"\u5b57\u6570","Words":"\u5355\u8bcd","Words: {0}":"\u5b57\u6570\uff1a{0}","Yellow":"\u9ec4\u8272","Yes":"\u662f","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u6377\u952e\u3002","alignment":"\u5bf9\u9f50","austral sign":"\u6fb3\u5143\u7b26\u53f7","cedi sign":"\u585e\u5730\u7b26\u53f7","colon sign":"\u5192\u53f7","cruzeiro sign":"\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7","currency sign":"\u8d27\u5e01\u7b26\u53f7","dollar sign":"\u7f8e\u5143\u7b26\u53f7","dong sign":"\u8d8a\u5357\u76fe\u7b26\u53f7","drachma sign":"\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7","euro-currency sign":"\u6b27\u5143\u7b26\u53f7","example":"\u793a\u4f8b","formatting":"\u683c\u5f0f\u5316","french franc sign":"\u6cd5\u90ce\u7b26\u53f7","german penny symbol":"\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u53f7","history":"\u5386\u53f2","hryvnia sign":"\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7","indentation":"\u7f29\u8fdb","indian rupee sign":"\u5370\u5ea6\u5362\u6bd4","kip sign":"\u8001\u631d\u57fa\u666e\u7b26\u53f7","lira sign":"\u91cc\u62c9\u7b26\u53f7","livre tournois sign":"\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7","manat sign":"\u9a6c\u7eb3\u7279\u7b26\u53f7","mill sign":"\u5bc6\u5c14\u7b26\u53f7","naira sign":"\u5948\u62c9\u7b26\u53f7","new sheqel sign":"\u65b0\u8c22\u514b\u5c14\u7b26\u53f7","nordic mark sign":"\u5317\u6b27\u9a6c\u514b","peseta sign":"\u6bd4\u585e\u5854\u7b26\u53f7","peso sign":"\u6bd4\u7d22\u7b26\u53f7","ruble sign":"\u5362\u5e03\u7b26\u53f7","rupee sign":"\u5362\u6bd4\u7b26\u53f7","spesmilo sign":"spesmilo\u7b26\u53f7","styles":"\u6837\u5f0f","tenge sign":"\u575a\u6208\u7b26\u53f7","tugrik sign":"\u56fe\u683c\u91cc\u514b\u7b26\u53f7","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","won sign":"\u97e9\u5143\u7b26\u53f7","yen character":"\u65e5\u5143\u5b57\u6837","yen/yuan character variant one":"\u5143\u5b57\u6837\uff08\u5927\u5199\uff09","yuan character":"\u4eba\u6c11\u5e01\u5143\u5b57\u6837","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09","{0} characters":"{0} \u4e2a\u5b57\u7b26","{0} columns, {1} rows":"{0} \u5217\uff0c{1} \u884c","{0} words":"{0} \u5b57"}); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/license.md b/apps/web-antd/public/tinymce/license.md new file mode 100644 index 000000000..70454a638 --- /dev/null +++ b/apps/web-antd/public/tinymce/license.md @@ -0,0 +1,6 @@ +# Software License Agreement + +**TinyMCE** – [](https://github.com/tinymce/tinymce) +Copyright (c) 2024, Ephox Corporation DBA Tiny Technologies, Inc. + +Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html). diff --git a/apps/web-antd/public/tinymce/models/dom/model.min.js b/apps/web-antd/public/tinymce/models/dom/model.min.js new file mode 100644 index 000000000..bce8e62e3 --- /dev/null +++ b/apps/web-antd/public/tinymce/models/dom/model.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.ModelManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(t)===e,o=e=>t=>typeof t===e,n=e=>t=>e===t,r=t("string"),s=t("object"),l=t("array"),a=n(null),c=o("boolean"),i=n(void 0),m=e=>!(e=>null==e)(e),d=o("function"),u=o("number"),f=()=>{},g=e=>()=>e,h=e=>e,p=(e,t)=>e===t;function b(e,...t){return(...o)=>{const n=t.concat(o);return e.apply(null,n)}}const w=e=>t=>!e(t),v=e=>e(),y=g(!1),x=g(!0);class C{constructor(e,t){this.tag=e,this.value=t}static some(e){return new C(!0,e)}static none(){return C.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?C.some(e(this.value)):C.none()}bind(e){return this.tag?e(this.value):C.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:C.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return m(e)?C.some(e):C.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}C.singletonNone=new C(!1);const S=Array.prototype.slice,T=Array.prototype.indexOf,R=Array.prototype.push,D=(e,t)=>{return o=e,n=t,T.call(o,n)>-1;var o,n},O=(e,t)=>{for(let o=0,n=e.length;o{const o=[];for(let n=0;n{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;o{const o=[],n=[];for(let r=0,s=e.length;r{const o=[];for(let n=0,r=e.length;n(((e,t)=>{for(let o=e.length-1;o>=0;o--)t(e[o],o)})(e,((e,n)=>{o=t(o,e,n)})),o),A=(e,t,o)=>(N(e,((e,n)=>{o=t(o,e,n)})),o),L=(e,t)=>((e,t,o)=>{for(let n=0,r=e.length;n{for(let o=0,n=e.length;o{const t=[];for(let o=0,n=e.length;oM(E(e,t)),P=(e,t)=>{for(let o=0,n=e.length;o{const o={};for(let n=0,r=e.length;nt>=0&&tF(e,0),$=e=>F(e,e.length-1),V=(e,t)=>{for(let o=0;o{const o=q(e);for(let n=0,r=o.length;nY(e,((e,o)=>({k:o,v:t(e,o)}))),Y=(e,t)=>{const o={};return G(e,((e,n)=>{const r=t(e,n);o[r.k]=r.v})),o},J=(e,t)=>{const o=[];return G(e,((e,n)=>{o.push(t(e,n))})),o},Q=e=>J(e,h),X=(e,t)=>U.call(e,t),Z="undefined"!=typeof window?window:Function("return this;")(),ee=(e,t)=>((e,t)=>{let o=null!=t?t:Z;for(let t=0;t{const t=ee("ownerDocument.defaultView",e);return s(e)&&((e=>((e,t)=>{const o=((e,t)=>ee(e,t))(e,t);if(null==o)throw new Error(e+" not available on this browser");return o})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(te(e).constructor.name))},ne=e=>e.dom.nodeName.toLowerCase(),re=e=>e.dom.nodeType,se=e=>t=>re(t)===e,le=e=>8===re(e)||"#comment"===ne(e),ae=e=>ce(e)&&oe(e.dom),ce=se(1),ie=se(3),me=se(9),de=se(11),ue=e=>t=>ce(t)&&ne(t)===e,fe=(e,t,o)=>{if(!(r(o)||c(o)||u(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},ge=(e,t,o)=>{fe(e.dom,t,o)},he=(e,t)=>{const o=e.dom;G(t,((e,t)=>{fe(o,t,e)}))},pe=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},be=(e,t)=>C.from(pe(e,t)),we=(e,t)=>{e.dom.removeAttribute(t)},ve=e=>A(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),ye=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},xe={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return ye(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return ye(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return ye(o)},fromDom:ye,fromPoint:(e,t,o)=>C.from(e.dom.elementFromPoint(t,o)).map(ye)},Ce=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},Se=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,Te=(e,t)=>{const o=void 0===t?document:t.dom;return Se(o)?C.none():C.from(o.querySelector(e)).map(xe.fromDom)},Re=(e,t)=>e.dom===t.dom,De=(e,t)=>{const o=e.dom,n=t.dom;return o!==n&&o.contains(n)},Oe=Ce,ke=e=>xe.fromDom(e.dom.ownerDocument),Ee=e=>me(e)?e:ke(e),Ne=e=>C.from(e.dom.parentNode).map(xe.fromDom),_e=e=>C.from(e.dom.parentElement).map(xe.fromDom),Be=(e,t)=>{const o=d(t)?t:y;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=xe.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r},ze=e=>C.from(e.dom.previousSibling).map(xe.fromDom),Ae=e=>C.from(e.dom.nextSibling).map(xe.fromDom),Le=e=>E(e.dom.childNodes,xe.fromDom),We=(e,t)=>{const o=e.dom.childNodes;return C.from(o[t]).map(xe.fromDom)},Me=(e,t)=>{Ne(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},je=(e,t)=>{Ae(e).fold((()=>{Ne(e).each((e=>{Ie(e,t)}))}),(e=>{Me(e,t)}))},Pe=(e,t)=>{const o=(e=>We(e,0))(e);o.fold((()=>{Ie(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},Ie=(e,t)=>{e.dom.appendChild(t.dom)},Fe=(e,t)=>{Me(e,t),Ie(t,e)},He=(e,t)=>{N(t,((o,n)=>{const r=0===n?e:t[n-1];je(r,o)}))},$e=(e,t)=>{N(t,(t=>{Ie(e,t)}))},Ve=e=>{e.dom.textContent="",N(Le(e),(e=>{qe(e)}))},qe=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Ue=e=>{const t=Le(e);t.length>0&&He(e,t),qe(e)},Ge=(e,t)=>xe.fromDom(e.dom.cloneNode(t)),Ke=e=>Ge(e,!1),Ye=e=>Ge(e,!0),Je=(e,t)=>{const o=xe.fromTag(t),n=ve(e);return he(o,n),o},Qe=["tfoot","thead","tbody","colgroup"],Xe=(e,t,o)=>({element:e,rowspan:t,colspan:o}),Ze=(e,t,o)=>({element:e,cells:t,section:o}),et=(e,t,o)=>({element:e,isNew:t,isLocked:o}),tt=(e,t,o,n)=>({element:e,cells:t,section:o,isNew:n}),ot=e=>de(e)&&m(e.dom.host),nt=e=>xe.fromDom(e.dom.getRootNode()),rt=e=>xe.fromDom(e.dom.host),st=e=>{const t=ie(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=nt(e);return ot(t)?C.some(t):C.none()})(xe.fromDom(t)).fold((()=>o.body.contains(t)),(n=st,r=rt,e=>n(r(e))));var n,r},lt=()=>at(xe.fromDom(document)),at=e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return xe.fromDom(t)},ct=(e,t)=>{let o=[];return N(Le(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(ct(e,t))})),o},it=(e,t,o)=>((e,o,n)=>B(Be(e,n),(e=>Ce(e,t))))(e,0,o),mt=(e,t)=>(e=>B(Le(e),(e=>Ce(e,t))))(e),dt=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return Se(o)?[]:E(o.querySelectorAll(e),xe.fromDom)})(t,e);var ut=(e,t,o,n,r)=>e(o,n)?C.some(o):d(r)&&r(o)?C.none():t(o,n,r);const ft=(e,t,o)=>{let n=e.dom;const r=d(o)?o:y;for(;n.parentNode;){n=n.parentNode;const e=xe.fromDom(n);if(t(e))return C.some(e);if(r(e))break}return C.none()},gt=(e,t,o)=>ut(((e,t)=>t(e)),ft,e,t,o),ht=(e,t,o)=>ft(e,(e=>Ce(e,t)),o),pt=(e,t)=>(e=>L(e.dom.childNodes,(e=>{return o=xe.fromDom(e),Ce(o,t);var o})).map(xe.fromDom))(e),bt=(e,t)=>Te(t,e),wt=(e,t,o)=>ut(((e,t)=>Ce(e,t)),ht,e,t,o),vt=(e,t,o=p)=>e.exists((e=>o(e,t))),yt=e=>{const t=[],o=e=>{t.push(e)};for(let t=0;te?C.some(t):C.none(),Ct=(e,t,o)=>""===t||e.length>=t.length&&e.substr(o,o+t.length)===t,St=(e,t,o=0,n)=>{const r=e.indexOf(t,o);return-1!==r&&(!!i(n)||r+t.length<=n)},Tt=(e,t)=>Ct(e,t,0),Rt=(e,t)=>Ct(e,t,e.length-t.length),Dt=(e=>t=>t.replace(e,""))(/^\s+|\s+$/g),Ot=e=>e.length>0,kt=e=>void 0!==e.style&&d(e.style.getPropertyValue),Et=(e,t,o)=>{if(!r(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);kt(e)&&e.style.setProperty(t,o)},Nt=(e,t,o)=>{const n=e.dom;Et(n,t,o)},_t=(e,t)=>{const o=e.dom;G(t,((e,t)=>{Et(o,t,e)}))},Bt=(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||st(e)?n:zt(o,t)},zt=(e,t)=>kt(e)?e.style.getPropertyValue(t):"",At=(e,t)=>{const o=e.dom,n=zt(o,t);return C.from(n).filter((e=>e.length>0))},Lt=(e,t)=>{((e,t)=>{kt(e)&&e.style.removeProperty(t)})(e.dom,t),vt(be(e,"style").map(Dt),"")&&we(e,"style")},Wt=(e,t,o=0)=>be(e,t).map((e=>parseInt(e,10))).getOr(o),Mt=(e,t)=>Wt(e,t,1),jt=e=>ue("col")(e)?Wt(e,"span",1)>1:Mt(e,"colspan")>1,Pt=(e,t)=>parseInt(Bt(e,t),10),It=g(10),Ft=g(10),Ht=(e,t)=>$t(e,t,x),$t=(e,t,o)=>j(Le(e),(e=>Ce(e,t)?o(e)?[e]:[]:$t(e,t,o))),Vt=(e,t)=>((e,t,o=y)=>o(t)?C.none():D(e,ne(t))?C.some(t):ht(t,e.join(","),(e=>Ce(e,"table")||o(e))))(["td","th"],e,t),qt=e=>Ht(e,"th,td"),Ut=e=>Ce(e,"colgroup")?mt(e,"col"):j(Yt(e),(e=>mt(e,"col"))),Gt=(e,t)=>wt(e,"table",t),Kt=e=>Ht(e,"tr"),Yt=e=>Gt(e).fold(g([]),(e=>mt(e,"colgroup"))),Jt=(e,t)=>E(e,(e=>{if("colgroup"===ne(e)){const t=E(Ut(e),(e=>{const t=Wt(e,"span",1);return Xe(e,1,t)}));return Ze(e,t,"colgroup")}{const o=E(qt(e),(e=>{const t=Wt(e,"rowspan",1),o=Wt(e,"colspan",1);return Xe(e,t,o)}));return Ze(e,o,t(e))}})),Qt=e=>Ne(e).map((e=>{const t=ne(e);return(e=>D(Qe,e))(t)?t:"tbody"})).getOr("tbody"),Xt=e=>{const t=Kt(e),o=[...Yt(e),...t];return Jt(o,Qt)},Zt=e=>{let t,o=!1;return(...n)=>(o||(o=!0,t=e.apply(null,n)),t)},eo=()=>to(0,0),to=(e,t)=>({major:e,minor:t}),oo={nu:to,detect:(e,t)=>{const o=String(t).toLowerCase();return 0===e.length?eo():((e,t)=>{const o=((e,t)=>{for(let o=0;oNumber(t.replace(o,"$"+e));return to(n(1),n(2))})(e,o)},unknown:eo},no=(e,t)=>{const o=String(t).toLowerCase();return L(e,(e=>e.search(o)))},ro=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,so=e=>t=>St(t,e),lo=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>St(e,"edge/")&&St(e,"chrome")&&St(e,"safari")&&St(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ro],search:e=>St(e,"chrome")&&!St(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>St(e,"msie")||St(e,"trident")},{name:"Opera",versionRegexes:[ro,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:so("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:so("firefox")},{name:"Safari",versionRegexes:[ro,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(St(e,"safari")||St(e,"mobile/"))&&St(e,"applewebkit")}],ao=[{name:"Windows",search:so("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>St(e,"iphone")||St(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:so("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:so("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:so("linux"),versionRegexes:[]},{name:"Solaris",search:so("sunos"),versionRegexes:[]},{name:"FreeBSD",search:so("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:so("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],co={browsers:g(lo),oses:g(ao)},io="Edge",mo="Chromium",uo="Opera",fo="Firefox",go="Safari",ho=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isEdge:n(io),isChromium:n(mo),isIE:n("IE"),isOpera:n(uo),isFirefox:n(fo),isSafari:n(go)}},po=()=>ho({current:void 0,version:oo.unknown()}),bo=ho,wo=(g(io),g(mo),g("IE"),g(uo),g(fo),g(go),"Windows"),vo="Android",yo="Linux",xo="macOS",Co="Solaris",So="FreeBSD",To="ChromeOS",Ro=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isWindows:n(wo),isiOS:n("iOS"),isAndroid:n(vo),isMacOS:n(xo),isLinux:n(yo),isSolaris:n(Co),isFreeBSD:n(So),isChromeOS:n(To)}},Do=()=>Ro({current:void 0,version:oo.unknown()}),Oo=Ro,ko=(g(wo),g("iOS"),g(vo),g(yo),g(xo),g(Co),g(So),g(To),e=>window.matchMedia(e).matches);let Eo=Zt((()=>((e,t,o)=>{const n=co.browsers(),r=co.oses(),s=t.bind((e=>((e,t)=>V(t.brands,(t=>{const o=t.brand.toLowerCase();return L(e,(e=>{var t;return o===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:oo.nu(parseInt(t.version,10),0)})))})))(n,e))).orThunk((()=>((e,t)=>no(e,t).map((e=>{const o=oo.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(n,e))).fold(po,bo),l=((e,t)=>no(e,t).map((e=>{const o=oo.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(r,e).fold(Do,Oo),a=((e,t,o,n)=>{const r=e.isiOS()&&!0===/ipad/i.test(o),s=e.isiOS()&&!r,l=e.isiOS()||e.isAndroid(),a=l||n("(pointer:coarse)"),c=r||!s&&l&&n("(min-device-width:768px)"),i=s||l&&!c,m=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(o),d=!i&&!c&&!m;return{isiPad:g(r),isiPhone:g(s),isTablet:g(c),isPhone:g(i),isTouch:g(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:g(m),isDesktop:g(d)}})(l,s,e,o);return{browser:s,os:l,deviceType:a}})(window.navigator.userAgent,C.from(window.navigator.userAgentData),ko)));const No=()=>Eo(),_o=(e,t)=>{const o=o=>{const n=t(o);if(n<=0||null===n){const t=Bt(o,e);return parseFloat(t)||0}return n},n=(e,t)=>A(t,((t,o)=>{const n=Bt(e,o),r=void 0===n?0:parseInt(n,10);return isNaN(r)?t:t+r}),0);return{set:(t,o)=>{if(!u(o)&&!o.match(/^[0-9]+$/))throw new Error(e+".set accepts only positive integer values. Value was "+o);const n=t.dom;kt(n)&&(n.style[e]=o+"px")},get:o,getOuter:o,aggregate:n,max:(e,t,o)=>{const r=n(e,o);return t>r?t-r:0}}},Bo=(e,t,o)=>((e,t)=>(e=>{const t=parseFloat(e);return isNaN(t)?C.none():C.some(t)})(e).getOr(t))(Bt(e,t),o),zo=_o("width",(e=>e.dom.offsetWidth)),Ao=e=>zo.get(e),Lo=e=>zo.getOuter(e),Wo=e=>((e,t)=>{const o=e.dom,n=o.getBoundingClientRect().width||o.offsetWidth;return"border-box"===t?n:((e,t,o,n)=>t-Bo(e,`padding-${o}`,0)-Bo(e,`padding-${n}`,0)-Bo(e,`border-${o}-width`,0)-Bo(e,`border-${n}-width`,0))(e,n,"left","right")})(e,"content-box"),Mo=(e,t,o)=>{const n=e.cells,r=n.slice(0,t),s=n.slice(t),l=r.concat(o).concat(s);return Io(e,l)},jo=(e,t,o)=>Mo(e,t,[o]),Po=(e,t,o)=>{e.cells[t]=o},Io=(e,t)=>tt(e.element,t,e.section,e.isNew),Fo=(e,t)=>e.cells[t],Ho=(e,t)=>Fo(e,t).element,$o=e=>e.cells.length,Vo=e=>{const t=_(e,(e=>"colgroup"===e.section));return{rows:t.fail,cols:t.pass}},qo=(e,t,o)=>{const n=E(e.cells,o);return tt(t(e.element),n,e.section,!0)},Uo="data-snooker-locked-cols",Go=e=>be(e,Uo).bind((e=>C.from(e.match(/\d+/g)))).map((e=>I(e,x))),Ko=e=>{const t=A(Vo(e).rows,((e,t)=>(N(t.cells,((t,o)=>{t.isLocked&&(e[o]=!0)})),e)),{}),o=J(t,((e,t)=>parseInt(t,10)));return(e=>{const t=S.call(e,0);return t.sort(void 0),t})(o)},Yo=(e,t)=>e+","+t,Jo=(e,t)=>{const o=j(e.all,(e=>e.cells));return B(o,t)},Qo=e=>{const t={},o=[],n=H(e).map((e=>e.element)).bind(Gt).bind(Go).getOr({});let r=0,s=0,l=0;const{pass:a,fail:c}=_(e,(e=>"colgroup"===e.section));N(c,(e=>{const a=[];N(e.cells,(e=>{let o=0;for(;void 0!==t[Yo(l,o)];)o++;const r=((e,t)=>X(e,t)&&void 0!==e[t]&&null!==e[t])(n,o.toString()),c=((e,t,o,n,r,s)=>({element:e,rowspan:t,colspan:o,row:n,column:r,isLocked:s}))(e.element,e.rowspan,e.colspan,l,o,r);for(let n=0;n{const t=(e=>{const t={};let o=0;return N(e.cells,(e=>{const n=e.colspan;k(n,(r=>{const s=o+r;t[s]=((e,t,o)=>({element:e,colspan:t,column:o}))(e.element,n,s)})),o+=n})),t})(e),o=((e,t)=>({element:e,columns:t}))(e.element,Q(t));return{colgroups:[o],columns:t}})).getOrThunk((()=>({colgroups:[],columns:{}}))),d=((e,t)=>({rows:e,columns:t}))(r,s);return{grid:d,access:t,all:o,columns:i,colgroups:m}},Xo=e=>{const t=Xt(e);return Qo(t)},Zo=Qo,en=(e,t,o)=>C.from(e.access[Yo(t,o)]),tn=(e,t,o)=>{const n=Jo(e,(e=>o(t,e.element)));return n.length>0?C.some(n[0]):C.none()},on=Jo,nn=e=>j(e.all,(e=>e.cells)),rn=e=>Q(e.columns),sn=e=>q(e.columns).length>0,ln=(e,t)=>C.from(e.columns[t]),an=(e,t=x)=>{const o=e.grid,n=k(o.columns,h),r=k(o.rows,h);return E(n,(o=>cn((()=>j(r,(t=>en(e,t,o).filter((e=>e.column===o)).toArray()))),(e=>1===e.colspan&&t(e.element)),(()=>en(e,0,o)))))},cn=(e,t,o)=>{const n=e();return L(n,t).orThunk((()=>C.from(n[0]).orThunk(o))).map((e=>e.element))},mn=e=>{const t=e.grid,o=k(t.rows,h),n=k(t.columns,h);return E(o,(t=>cn((()=>j(n,(o=>en(e,t,o).filter((e=>e.row===t)).fold(g([]),(e=>[e]))))),(e=>1===e.rowspan),(()=>en(e,t,0)))))},dn=(e,t)=>o=>"rtl"===un(o)?t:e,un=e=>"rtl"===Bt(e,"direction")?"rtl":"ltr",fn=_o("height",(e=>{const t=e.dom;return st(e)?t.getBoundingClientRect().height:t.offsetHeight})),gn=e=>fn.get(e),hn=e=>fn.getOuter(e),pn=(e,t)=>({left:e,top:t,translate:(o,n)=>pn(e+o,t+n)}),bn=pn,wn=(e,t)=>void 0!==e?e:void 0!==t?t:0,vn=e=>{const t=e.dom.ownerDocument,o=t.body,n=t.defaultView,r=t.documentElement;if(o===e.dom)return bn(o.offsetLeft,o.offsetTop);const s=wn(null==n?void 0:n.pageYOffset,r.scrollTop),l=wn(null==n?void 0:n.pageXOffset,r.scrollLeft),a=wn(r.clientTop,o.clientTop),c=wn(r.clientLeft,o.clientLeft);return yn(e).translate(l-c,s-a)},yn=e=>{const t=e.dom,o=t.ownerDocument.body;return o===t?bn(o.offsetLeft,o.offsetTop):st(e)?(e=>{const t=e.getBoundingClientRect();return bn(t.left,t.top)})(t):bn(0,0)},xn=(e,t)=>({row:e,y:t}),Cn=(e,t)=>({col:e,x:t}),Sn=e=>vn(e).left+Lo(e),Tn=e=>vn(e).left,Rn=(e,t)=>Cn(e,Tn(t)),Dn=(e,t)=>Cn(e,Sn(t)),On=e=>vn(e).top,kn=(e,t)=>xn(e,On(t)),En=(e,t)=>xn(e,On(t)+hn(t)),Nn=(e,t,o)=>{if(0===o.length)return[];const n=E(o.slice(1),((t,o)=>t.map((t=>e(o,t))))),r=o[o.length-1].map((e=>t(o.length-1,e)));return n.concat([r])},_n={delta:h,positions:e=>Nn(kn,En,e),edge:On},Bn=dn({delta:h,edge:Tn,positions:e=>Nn(Rn,Dn,e)},{delta:e=>-e,edge:Sn,positions:e=>Nn(Dn,Rn,e)}),zn={delta:(e,t)=>Bn(t).delta(e,t),positions:(e,t)=>Bn(t).positions(e,t),edge:e=>Bn(e).edge(e)},An={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},Ln=(()=>{const e="[0-9]+",t="[eE][+-]?"+e,o=e=>`(?:${e})?`,n=["Infinity",e+"\\."+o(e)+o(t),"\\."+e+o(t),e+o(t)].join("|");return new RegExp(`^([+-]?(?:${n}))(.*)$`)})(),Wn=/(\d+(\.\d+)?)%/,Mn=/(\d+(\.\d+)?)px|em/,jn=ue("col"),Pn=ue("tr"),In=(e,t,o)=>{const n=_e(e).getOrThunk((()=>at(ke(e))));return t(e)/o(n)*100},Fn=(e,t)=>{Nt(e,"width",t+"px")},Hn=(e,t)=>{Nt(e,"width",t+"%")},$n=(e,t)=>{Nt(e,"height",t+"px")},Vn=e=>{const t=(e=>{return Bo(t=e,"height",t.dom.offsetHeight)+"px";var t})(e);return t?((e,t,o,n)=>{const r=parseFloat(e);return Rt(e,"%")&&"table"!==ne(t)?((e,t,o,n)=>{const r=Gt(e).map((e=>{const n=o(e);return Math.floor(t/100*n)})).getOr(t);return n(e,r),r})(t,r,o,n):r})(t,e,gn,$n):gn(e)},qn=(e,t)=>At(e,t).orThunk((()=>be(e,t).map((e=>e+"px")))),Un=e=>qn(e,"width"),Gn=e=>In(e,Ao,Wo),Kn=e=>{return jn(e)?Ao(e):Bo(t=e,"width",t.dom.offsetWidth);var t},Yn=e=>Pn(e)?gn(e):((e,t,o)=>o(e)/Mt(e,"rowspan"))(e,0,Vn),Jn=(e,t,o)=>{Nt(e,"width",t+o)},Qn=e=>In(e,Ao,Wo)+"%",Xn=g(Wn),Zn=ue("col"),er=e=>Un(e).getOrThunk((()=>Kn(e)+"px")),tr=e=>{return(t=e,qn(t,"height")).getOrThunk((()=>Yn(e)+"px"));var t},or=(e,t,o,n,r,s)=>e.filter(n).fold((()=>s(((e,t)=>{if(t<0||t>=e.length-1)return C.none();const o=e[t].fold((()=>{const o=(e=>{const t=S.call(e,0);return t.reverse(),t})(e.slice(0,t));return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:0}))),n=e[t+1].fold((()=>{const o=e.slice(t+1);return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:1})));return o.bind((e=>n.map((t=>{const o=t.delta+e.delta;return Math.abs(t.value-e.value)/o}))))})(o,t))),(e=>r(e))),nr=(e,t,o,n)=>{const r=an(e),s=sn(e)?(e=>E(rn(e),(e=>C.from(e.element))))(e):r,l=[C.some(zn.edge(t))].concat(E(zn.positions(r,t),(e=>e.map((e=>e.x))))),a=w(jt);return E(s,((e,t)=>or(e,t,l,a,(e=>{if((e=>{const t=No().browser,o=t.isChromium()||t.isFirefox();return!Zn(e)||o})(e))return o(e);{const e=null!=(s=r[t])?h(s):C.none();return or(e,t,l,a,(e=>n(C.some(Ao(e)))),n)}var s}),n)))},rr=e=>e.map((e=>e+"px")).getOr(""),sr=(e,t,o)=>nr(e,t,Kn,(e=>e.getOrThunk(o.minCellWidth))),lr=(e,t,o,n)=>{const r=mn(e),s=E(e.all,(e=>C.some(e.element))),l=[C.some(_n.edge(t))].concat(E(_n.positions(r,t),(e=>e.map((e=>e.y)))));return E(s,((e,t)=>or(e,t,l,x,o,n)))},ar=(e,t)=>()=>st(e)?t(e):parseFloat(At(e,"width").getOr("0")),cr=e=>{const t=ar(e,(e=>parseFloat(Qn(e)))),o=ar(e,Ao);return{width:t,pixelWidth:o,getWidths:(t,o)=>((e,t,o)=>nr(e,t,Gn,(e=>e.fold((()=>o.minCellWidth()),(e=>e/o.pixelWidth()*100)))))(t,e,o),getCellDelta:e=>e/o()*100,singleColumnWidth:(e,t)=>[100-e],minCellWidth:()=>It()/o()*100,setElementWidth:Hn,adjustTableWidth:o=>{const n=t();Hn(e,n+o/100*n)},isRelative:!0,label:"percent"}},ir=e=>{const t=ar(e,Ao);return{width:t,pixelWidth:t,getWidths:(t,o)=>sr(t,e,o),getCellDelta:h,singleColumnWidth:(e,t)=>[Math.max(It(),e+t)-e],minCellWidth:It,setElementWidth:Fn,adjustTableWidth:o=>{const n=t()+o;Fn(e,n)},isRelative:!1,label:"pixel"}},mr=e=>Un(e).fold((()=>(e=>{const t=ar(e,Ao),o=g(0);return{width:t,pixelWidth:t,getWidths:(t,o)=>sr(t,e,o),getCellDelta:o,singleColumnWidth:g([0]),minCellWidth:o,setElementWidth:f,adjustTableWidth:f,isRelative:!0,label:"none"}})(e)),(t=>((e,t)=>null!==Xn().exec(t)?cr(e):ir(e))(e,t))),dr=ir,ur=cr,fr=(e,t,o)=>{const n=e[o].element,r=xe.fromTag("td");Ie(r,xe.fromTag("br")),(t?Ie:Pe)(n,r)},gr=(e=>{const t=t=>e(t)?C.from(t.dom.nodeValue):C.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(ie),hr=e=>gr.get(e),pr=e=>gr.getOption(e),br=(e,t)=>gr.set(e,t),wr=e=>"img"===ne(e)?1:pr(e).fold((()=>Le(e).length),(e=>e.length)),vr=["img","br"],yr=e=>pr(e).filter((e=>0!==e.trim().length||e.indexOf("\xa0")>-1)).isSome()||D(vr,ne(e))||(e=>ae(e)&&"false"===pe(e,"contenteditable"))(e),xr=e=>((e,t)=>{const o=e=>{for(let n=0;nSr(e,yr),Sr=(e,t)=>{const o=e=>{const n=Le(e);for(let e=n.length-1;e>=0;e--){const r=n[e];if(t(r))return C.some(r);const s=o(r);if(s.isSome())return s}return C.none()};return o(e)},Tr={scope:["row","col"]},Rr=e=>()=>{const t=xe.fromTag("td",e.dom);return Ie(t,xe.fromTag("br",e.dom)),t},Dr=e=>()=>xe.fromTag("col",e.dom),Or=e=>()=>xe.fromTag("colgroup",e.dom),kr=e=>()=>xe.fromTag("tr",e.dom),Er=(e,t,o)=>{const n=((e,t)=>{const o=Je(e,t),n=Le(Ye(e));return $e(o,n),o})(e,t);return G(o,((e,t)=>{null===e?we(n,t):ge(n,t,e)})),n},Nr=e=>e,_r=(e,t,o)=>{const n=(e,t)=>{((e,t)=>{const o=e.dom,n=t.dom;kt(o)&&kt(n)&&(n.style.cssText=o.style.cssText)})(e.element,t),Lt(t,"height"),1!==e.colspan&&Lt(t,"width")};return{col:o=>{const r=xe.fromTag(ne(o.element),t.dom);return n(o,r),e(o.element,r),r},colgroup:Or(t),row:kr(t),cell:r=>{const s=xe.fromTag(ne(r.element),t.dom),l=o.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),a=l.length>0?((e,t,o)=>xr(e).map((n=>{const r=o.join(","),s=it(n,r,(t=>Re(t,e)));return z(s,((e,t)=>{const o=Ke(t);return Ie(e,o),o}),t)})).getOr(t))(r.element,s,l):s;return Ie(a,xe.fromTag("br")),n(r,s),((e,t)=>{G(Tr,((o,n)=>be(e,n).filter((e=>D(o,e))).each((e=>ge(t,n,e)))))})(r.element,s),e(r.element,s),s},replace:Er,colGap:Dr(t),gap:Rr(t)}},Br=e=>({col:Dr(e),colgroup:Or(e),row:kr(e),cell:Rr(e),replace:Nr,colGap:Dr(e),gap:Rr(e)}),zr=e=>t=>t.options.get(e),Ar="100%",Lr=e=>{var t;const o=e.dom,n=null!==(t=o.getParent(e.selection.getStart(),o.isBlock))&&void 0!==t?t:e.getBody();return Wo(xe.fromDom(n))+"px"},Wr=e=>C.from(e.options.get("table_clone_elements")),Mr=zr("table_header_type"),jr=zr("table_column_resizing"),Pr=e=>"preservetable"===jr(e),Ir=e=>"resizetable"===jr(e),Fr=zr("table_sizing_mode"),Hr=e=>"relative"===Fr(e),$r=e=>"fixed"===Fr(e),Vr=e=>"responsive"===Fr(e),qr=zr("table_resize_bars"),Ur=zr("table_style_by_css"),Gr=zr("table_merge_content_on_paste"),Kr=e=>{const t=e.options,o=t.get("table_default_attributes");return t.isSet("table_default_attributes")?o:((e,t)=>Vr(e)||Ur(e)?t:$r(e)?{...t,width:Lr(e)}:{...t,width:Ar})(e,o)},Yr=zr("table_use_colgroups"),Jr=zr("fixed_toolbar_container"),Qr=zr("fixed_toolbar_container_target"),Xr=zr("ui_mode"),Zr=e=>wt(e,"[contenteditable]"),es=(e,t=!1)=>st(e)?e.dom.isContentEditable:Zr(e).fold(g(t),(e=>"true"===ts(e))),ts=e=>e.dom.contentEditable,os=e=>xe.fromDom(e.getBody()),ns=e=>t=>Re(t,os(e)),rs=e=>{we(e,"data-mce-style");const t=e=>we(e,"data-mce-style");N(qt(e),t),N(Ut(e),t),N(Kt(e),t)},ss=e=>xe.fromDom(e.selection.getStart()),ls=e=>e.getBoundingClientRect().width,as=e=>e.getBoundingClientRect().height,cs=e=>(t,o)=>{const n=t.dom.getStyle(o,e)||t.dom.getAttrib(o,e);return C.from(n).filter(Ot)},is=cs("width"),ms=cs("height"),ds=e=>gt(e,ue("table")).exists(es),us=(e,t)=>{const o=t.column,n=t.column+t.colspan-1,r=t.row,s=t.row+t.rowspan-1;return o<=e.finishCol&&n>=e.startCol&&r<=e.finishRow&&s>=e.startRow},fs=(e,t)=>t.column>=e.startCol&&t.column+t.colspan-1<=e.finishCol&&t.row>=e.startRow&&t.row+t.rowspan-1<=e.finishRow,gs=(e,t,o)=>{const n=tn(e,t,Re),r=tn(e,o,Re);return n.bind((e=>r.map((t=>{return o=e,n=t,{startRow:Math.min(o.row,n.row),startCol:Math.min(o.column,n.column),finishRow:Math.max(o.row+o.rowspan-1,n.row+n.rowspan-1),finishCol:Math.max(o.column+o.colspan-1,n.column+n.colspan-1)};var o,n}))))},hs=(e,t,o)=>gs(e,t,o).map((t=>{const o=on(e,b(us,t));return E(o,(e=>e.element))})),ps=(e,t)=>tn(e,t,((e,t)=>De(t,e))).map((e=>e.element)),bs=(e,t,o)=>{const n=vs(e);return hs(n,t,o)},ws=(e,t,o,n,r)=>{const s=vs(e),l=Re(e,o)?C.some(t):ps(s,t),a=Re(e,r)?C.some(n):ps(s,n);return l.bind((e=>a.bind((t=>hs(s,e,t)))))},vs=Xo;var ys=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],xs=()=>({up:g({selector:ht,closest:wt,predicate:ft,all:Be}),down:g({selector:dt,predicate:ct}),styles:g({get:Bt,getRaw:At,set:Nt,remove:Lt}),attrs:g({get:pe,set:ge,remove:we,copyTo:(e,t)=>{const o=ve(e);he(t,o)}}),insert:g({before:Me,after:je,afterAll:He,append:Ie,appendAll:$e,prepend:Pe,wrap:Fe}),remove:g({unwrap:Ue,remove:qe}),create:g({nu:xe.fromTag,clone:e=>xe.fromDom(e.dom.cloneNode(!1)),text:xe.fromText}),query:g({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:ze,nextSibling:Ae}),property:g({children:Le,name:ne,parent:Ne,document:e=>Ee(e).dom,isText:ie,isComment:le,isElement:ce,isSpecial:e=>{const t=ne(e);return D(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>ce(e)?be(e,"lang"):C.none(),getText:hr,setText:br,isBoundary:e=>!!ce(e)&&("body"===ne(e)||D(ys,ne(e))),isEmptyTag:e=>!!ce(e)&&D(["br","img","hr","input"],ne(e)),isNonEditable:e=>ce(e)&&"false"===pe(e,"contenteditable")}),eq:Re,is:Oe});const Cs=(e,t,o,n)=>{const r=t(e,o);return z(n,((o,n)=>{const r=t(e,n);return Ss(e,o,r)}),r)},Ss=(e,t,o)=>t.bind((t=>o.filter(b(e.eq,t)))),Ts=xs(),Rs=(e,t)=>((e,t,o)=>o.length>0?((e,t,o,n)=>n(e,t,o[0],o.slice(1)))(e,t,o,Cs):C.none())(Ts,((t,o)=>e(o)),t),Ds=e=>ht(e,"table"),Os=(e,t,o)=>{const n=e=>t=>void 0!==o&&o(t)||Re(t,e);return Re(e,t)?C.some({boxes:C.some([e]),start:e,finish:t}):Ds(e).bind((r=>Ds(t).bind((s=>{if(Re(r,s))return C.some({boxes:bs(r,e,t),start:e,finish:t});if(De(r,s)){const o=it(t,"td,th",n(r)),l=o.length>0?o[o.length-1]:t;return C.some({boxes:ws(r,e,r,t,s),start:e,finish:l})}if(De(s,r)){const o=it(e,"td,th",n(s)),l=o.length>0?o[o.length-1]:e;return C.some({boxes:ws(s,e,r,t,s),start:e,finish:l})}return((e,t)=>((e,t,o,n=y)=>{const r=[t].concat(e.up().all(t)),s=[o].concat(e.up().all(o)),l=e=>W(e,n).fold((()=>e),(t=>e.slice(0,t+1))),a=l(r),c=l(s),i=L(a,(t=>O(c,((e,t)=>b(e.eq,t))(e,t))));return{firstpath:a,secondpath:c,shared:i}})(Ts,e,t,void 0))(e,t).shared.bind((l=>wt(l,"table",o).bind((o=>{const l=it(t,"td,th",n(o)),a=l.length>0?l[l.length-1]:t,c=it(e,"td,th",n(o)),i=c.length>0?c[c.length-1]:e;return C.some({boxes:ws(o,e,r,t,s),start:i,finish:a})}))))}))))},ks=(e,t)=>{const o=dt(e,t);return o.length>0?C.some(o):C.none()},Es=(e,t,o)=>bt(e,t).bind((t=>bt(e,o).bind((e=>Rs(Ds,[t,e]).map((o=>({first:t,last:e,table:o}))))))),Ns=(e,t,o,n,r)=>((e,t)=>L(e,(e=>Ce(e,t))))(e,r).bind((e=>((e,t,o)=>Gt(e).bind((n=>((e,t,o,n)=>tn(e,t,Re).bind((t=>{const r=o>0?t.row+t.rowspan-1:t.row,s=n>0?t.column+t.colspan-1:t.column;return en(e,r+o,s+n).map((e=>e.element))})))(vs(n),e,t,o))))(e,t,o).bind((e=>((e,t)=>ht(e,"table").bind((o=>bt(o,t).bind((t=>Os(t,e).bind((e=>e.boxes.map((t=>({boxes:t,start:e.start,finish:e.finish}))))))))))(e,n))))),_s=(e,t)=>ks(e,t),Bs=(e,t,o)=>Es(e,t,o).bind((t=>{const o=t=>Re(e,t),n="thead,tfoot,tbody,table",r=ht(t.first,n,o),s=ht(t.last,n,o);return r.bind((e=>s.bind((o=>Re(e,o)?((e,t,o)=>((e,t,o)=>gs(e,t,o).bind((t=>((e,t)=>{let o=!0;const n=b(fs,t);for(let r=t.startRow;r<=t.finishRow;r++)for(let s=t.startCol;s<=t.finishCol;s++)o=o&&en(e,r,s).exists(n);return o?C.some(t):C.none()})(e,t))))(vs(e),t,o))(t.table,t.first,t.last):C.none()))))})),zs=h,As=e=>{const t=(e,t)=>be(e,t).exists((e=>parseInt(e,10)>1));return e.length>0&&P(e,(e=>t(e,"rowspan")||t(e,"colspan")))?C.some(e):C.none()},Ls=(e,t,o)=>t.length<=1?C.none():Bs(e,o.firstSelectedSelector,o.lastSelectedSelector).map((e=>({bounds:e,cells:t}))),Ws="data-mce-selected",Ms="data-mce-first-selected",js="data-mce-last-selected",Ps="["+Ws+"]",Is={selected:Ws,selectedSelector:"td["+Ws+"],th["+Ws+"]",firstSelected:Ms,firstSelectedSelector:"td["+Ms+"],th["+Ms+"]",lastSelected:js,lastSelectedSelector:"td["+js+"],th["+js+"]"},Fs=(e,t,o)=>({element:o,mergable:Ls(t,e,Is),unmergable:As(e),selection:zs(e)}),Hs=e=>(t,o)=>{const n=ne(t),r="col"===n||"colgroup"===n?Gt(s=t).bind((e=>_s(e,Is.firstSelectedSelector))).fold(g(s),(e=>e[0])):t;var s;return wt(r,e,o)},$s=Hs("th,td,caption"),Vs=Hs("th,td"),qs=e=>{return t=e.model.table.getSelectedCells(),E(t,xe.fromDom);var t},Us=(e,t)=>{e.on("BeforeGetContent",(t=>{const o=o=>{t.preventDefault(),(e=>Gt(e[0]).map((e=>{const t=((e,t)=>{const o=e=>Ce(e.element,t),n=Ye(e),r=Xt(n),s=mr(e),l=Zo(r),a=((e,t)=>{const o=e.grid.columns;let n=e.grid.rows,r=o,s=0,l=0;const a=[],c=[];return G(e.access,(e=>{if(a.push(e),t(e)){c.push(e);const t=e.row,o=t+e.rowspan-1,a=e.column,i=a+e.colspan-1;ts&&(s=o),al&&(l=i)}})),((e,t,o,n,r,s)=>({minRow:e,minCol:t,maxRow:o,maxCol:n,allCells:r,selectedCells:s}))(n,r,s,l,a,c)})(l,o),c="th:not("+t+"),td:not("+t+")",i=$t(n,"th,td",(e=>Ce(e,c)));N(i,qe),((e,t,o,n)=>{const r=B(e,(e=>"colgroup"!==e.section)),s=t.grid.columns,l=t.grid.rows;for(let e=0;eo.maxRow||ao.maxCol||(en(t,e,a).filter(n).isNone()?fr(r,l,e):l=!0)}})(r,l,a,o);const m=((e,t,o,n)=>{if(0===n.minCol&&t.grid.columns===n.maxCol+1)return 0;const r=sr(t,e,o),s=A(r,((e,t)=>e+t),0),l=A(r.slice(n.minCol,n.maxCol+1),((e,t)=>e+t),0),a=l/s*o.pixelWidth()-o.pixelWidth();return o.getCellDelta(a)})(e,Xo(e),s,a);return((e,t,o,n)=>{G(o.columns,(e=>{(e.columnt.maxCol)&&qe(e.element)}));const r=B(Ht(e,"tr"),(e=>0===e.dom.childElementCount));N(r,qe),t.minCol!==t.maxCol&&t.minRow!==t.maxRow||N(Ht(e,"th,td"),(e=>{we(e,"rowspan"),we(e,"colspan")})),we(e,Uo),we(e,"data-snooker-col-series"),mr(e).adjustTableWidth(n)})(n,a,l,m),n})(e,Ps);return rs(t),[t]})))(o).each((o=>{const n="text"===t.format?((e,t)=>{const o=e.getDoc(),n=nt(xe.fromDom(e.getBody())),r=xe.fromTag("div",o);ge(r,"data-mce-bogus","all"),_t(r,{position:"fixed",left:"-9999999px",top:"0",overflow:"hidden",opacity:"0"});const s=(e=>ot(e)?e:xe.fromDom(Ee(e).dom.body))(n);$e(r,t),Ie(s,r);const l=r.dom.innerText;return qe(r),l})(e,o):((e,t)=>E(t,(t=>e.selection.serializer.serialize(t.dom,{}))).join(""))(e,o);t.content=n}))};if(!0===t.selection){const t=(e=>B(qs(e),(e=>Ce(e,Is.selectedSelector))))(e);t.length>=1&&o(t)}})),e.on("BeforeSetContent",(o=>{if(!0===o.selection&&!0===o.paste){const n=qs(e);H(n).each((n=>{Gt(n).each((r=>{const s=B((e=>{const t=document.createElement("div");return t.innerHTML=e,Le(xe.fromDom(t))})(o.content),(e=>"meta"!==ne(e))),l=ue("table");if(Gr(e)&&1===s.length&&l(s[0])){o.preventDefault();const l=xe.fromDom(e.getDoc()),a=Br(l),c=((e,t,o)=>({element:e,clipboard:t,generators:o}))(n,s[0],a);t.pasteCells(r,c).each((()=>{e.focus()}))}}))}))}}))},Gs=(e,t)=>({element:e,offset:t}),Ks=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>Ks(e,t,o).orThunk((()=>C.some(t))))):C.none(),Ys=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,Js=(e,t)=>{const o=Ks(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return Gs(o,Ys(e,o));const n=e.property().children(o);return n.length>0?Js(e,n[n.length-1]):Gs(o,Ys(e,o))},Qs=Js,Xs=xs(),Zs=(e,t)=>{if(!jt(e)){const o=(e=>Un(e).bind((e=>{return t=e,o=["fixed","relative","empty"],C.from(Ln.exec(t)).bind((e=>{const t=Number(e[1]),n=e[2];return((e,t)=>O(t,(t=>O(An[t],(t=>e===t)))))(n,o)?C.some({value:t,unit:n}):C.none()}));var t,o})))(e);o.each((o=>{const n=o.value/2;Jn(e,n,o.unit),Jn(t,n,o.unit)}))}},el=e=>E(e,g(0)),tl=(e,t,o,n,r)=>r(e.slice(0,t)).concat(n).concat(r(e.slice(o))),ol=e=>(t,o,n,r)=>{if(e(n)){const e=Math.max(r,t[o]-Math.abs(n)),s=Math.abs(e-t[o]);return n>=0?s:-s}return n},nl=ol((e=>e<0)),rl=ol(x),sl=()=>{const e=(e,t,o,n)=>{const r=(100+o)/100,s=Math.max(n,(e[t]+o)/r);return E(e,((e,o)=>(o===t?s:e/r)-e))},t=(t,o,n,r,s,l)=>l?e(t,o,r,s):((e,t,o,n,r)=>{const s=nl(e,t,n,r);return tl(e,t,o+1,[s,0],el)})(t,o,n,r,s);return{resizeTable:(e,t)=>e(t),clampTableDelta:nl,calcLeftEdgeDeltas:t,calcMiddleDeltas:(e,o,n,r,s,l,a)=>t(e,n,r,s,l,a),calcRightEdgeDeltas:(t,o,n,r,s,l)=>{if(l)return e(t,n,r,s);{const e=nl(t,n,r,s);return el(t.slice(0,n)).concat([e])}},calcRedestributedWidths:(e,t,o,n)=>{if(n){const n=(t+o)/t,r=E(e,(e=>e/n));return{delta:100*n-100,newSizes:r}}return{delta:o,newSizes:e}}}},ll=()=>{const e=(e,t,o,n,r)=>{const s=rl(e,n>=0?o:t,n,r);return tl(e,t,o+1,[s,-s],el)};return{resizeTable:(e,t,o)=>{o&&e(t)},clampTableDelta:(e,t,o,n,r)=>{if(r){if(o>=0)return o;{const t=A(e,((e,t)=>e+t-n),0);return Math.max(-t,o)}}return nl(e,t,o,n)},calcLeftEdgeDeltas:e,calcMiddleDeltas:(t,o,n,r,s,l)=>e(t,n,r,s,l),calcRightEdgeDeltas:(e,t,o,n,r,s)=>{if(s)return el(e);{const t=n/e.length;return E(e,g(t))}},calcRedestributedWidths:(e,t,o,n)=>({delta:0,newSizes:e})}},al=e=>Xo(e).grid,cl=ue("th"),il=e=>P(e,(e=>cl(e.element))),ml=(e,t)=>e&&t?"sectionCells":e?"section":"cells",dl=e=>{const t="thead"===e.section,o=vt(ul(e.cells),"th");return"tfoot"===e.section?{type:"footer"}:t||o?{type:"header",subType:ml(t,o)}:{type:"body"}},ul=e=>{const t=B(e,(e=>cl(e.element)));return 0===t.length?C.some("td"):t.length===e.length?C.some("th"):C.none()},fl=(e,t,o)=>et(o(e.element,t),!0,e.isLocked),gl=(e,t)=>e.section!==t?tt(e.element,e.cells,t,e.isNew):e,hl=()=>({transformRow:gl,transformCell:(e,t,o)=>{const n=o(e.element,t),r="td"!==ne(n)?(e=>{const t=Je(e,"td");je(e,t);const o=Le(e);return $e(t,o),qe(e),t})(n):n;return et(r,e.isNew,e.isLocked)}}),pl=()=>({transformRow:gl,transformCell:fl}),bl=()=>({transformRow:(e,t)=>gl(e,"thead"===t?"tbody":t),transformCell:fl}),wl=hl,vl=pl,yl=bl,xl=()=>({transformRow:h,transformCell:fl}),Cl=(e,t,o,n)=>{o===n?we(e,t):ge(e,t,o)},Sl=(e,t,o)=>{$(mt(e,t)).fold((()=>Pe(e,o)),(e=>je(e,o)))},Tl=(e,t)=>{const o=[],n=[],r=e=>E(e,(e=>{e.isNew&&o.push(e.element);const t=e.element;return Ve(t),N(e.cells,(e=>{e.isNew&&n.push(e.element),Cl(e.element,"colspan",e.colspan,1),Cl(e.element,"rowspan",e.rowspan,1),Ie(t,e.element)})),t})),s=e=>j(e,(e=>E(e.cells,(e=>(Cl(e.element,"span",e.colspan,1),e.element))))),l=(t,o)=>{const n=((e,t)=>{const o=pt(e,t).getOrThunk((()=>{const o=xe.fromTag(t,ke(e).dom);return"thead"===t?Sl(e,"caption,colgroup",o):"colgroup"===t?Sl(e,"caption",o):Ie(e,o),o}));return Ve(o),o})(e,o),l=("colgroup"===o?s:r)(t);$e(n,l)},a=(t,o)=>{t.length>0?l(t,o):(t=>{pt(e,t).each(qe)})(o)},c=[],i=[],m=[],d=[];return N(t,(e=>{switch(e.section){case"thead":c.push(e);break;case"tbody":i.push(e);break;case"tfoot":m.push(e);break;case"colgroup":d.push(e)}})),a(d,"colgroup"),a(c,"thead"),a(i,"tbody"),a(m,"tfoot"),{newRows:o,newCells:n}},Rl=(e,t)=>{if(0===e.length)return 0;const o=e[0];return W(e,(e=>!t(o.element,e.element))).getOr(e.length)},Dl=(e,t)=>{const o=E(e,(e=>E(e.cells,y)));return E(e,((n,r)=>{const s=j(n.cells,((n,s)=>{if(!1===o[r][s]){const m=((e,t,o,n)=>{const r=((e,t)=>e[t])(e,t),s="colgroup"===r.section,l=Rl(r.cells.slice(o),n),a=s?1:Rl(((e,t)=>E(e,(e=>Fo(e,t))))(e.slice(t),o),n);return{colspan:l,rowspan:a}})(e,r,s,t);return((e,t,n,r)=>{for(let s=e;s({element:e,cells:t,section:o,isNew:n}))(n.element,s,n.section,n.isNew)}))},Ol=(e,t,o)=>{const n=[];N(e.colgroups,(r=>{const s=[];for(let n=0;net(e.element,o,!1))).getOrThunk((()=>et(t.colGap(),!0,!1)));s.push(r)}n.push(tt(r.element,s,"colgroup",o))}));for(let r=0;ret(e.element,o,e.isLocked))).getOrThunk((()=>et(t.gap(),!0,!1)));s.push(l)}const l=e.all[r],a=tt(l.element,s,l.section,o);n.push(a)}return n},kl=e=>Dl(e,Re),El=(e,t)=>V(e.all,(e=>L(e.cells,(e=>Re(t,e.element))))),Nl=(e,t,o)=>{const n=E(t.selection,(t=>Vt(t).bind((t=>El(e,t))).filter(o))),r=yt(n);return xt(r.length>0,r)},_l=(e,t,o,n,r)=>(s,l,a,c)=>{const i=Xo(s),m=C.from(null==c?void 0:c.section).getOrThunk(xl);return t(i,l).map((t=>{const o=((e,t)=>Ol(e,t,!1))(i,a),n=e(o,t,Re,r(a),m),s=Ko(n.grid);return{info:t,grid:kl(n.grid),cursor:n.cursor,lockedColumns:s}})).bind((e=>{const t=Tl(s,e.grid),r=C.from(null==c?void 0:c.sizing).getOrThunk((()=>mr(s))),l=C.from(null==c?void 0:c.resize).getOrThunk(ll);return o(s,e.grid,e.info,{sizing:r,resize:l,section:m}),n(s),we(s,Uo),e.lockedColumns.length>0&&ge(s,Uo,e.lockedColumns.join(",")),C.some({cursor:e.cursor,newRows:t.newRows,newCells:t.newCells})}))},Bl=(e,t)=>Nl(e,t,x).map((e=>({cells:e,generators:t.generators,clipboard:t.clipboard}))),zl=(e,t)=>Nl(e,t,x),Al=(e,t)=>Nl(e,t,(e=>!e.isLocked)),Ll=(e,t)=>P(t,(t=>((e,t)=>El(e,t).exists((e=>!e.isLocked)))(e,t))),Wl=(e,t,o,n)=>{const r=Vo(e).rows;let s=!0;for(let e=0;e{const t=t=>t(e),o=g(e),n=()=>r,r={tag:!0,inner:e,fold:(t,o)=>o(e),isValue:x,isError:y,map:t=>Pl.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:o,or:n,getOrThunk:o,orThunk:n,getOrDie:o,each:t=>{t(e)},toOptional:()=>C.some(e)};return r},jl=e=>{const t=()=>o,o={tag:!1,inner:e,fold:(t,o)=>t(e),isValue:y,isError:x,map:t,mapError:t=>Pl.error(t(e)),bind:t,exists:y,forall:x,getOr:h,or:h,getOrThunk:v,orThunk:v,getOrDie:(n=String(e),()=>{throw new Error(n)}),each:f,toOptional:C.none};var n;return o},Pl={value:Ml,error:jl,fromOption:(e,t)=>e.fold((()=>jl(t)),Ml)},Il=(e,t)=>({rowDelta:0,colDelta:$o(e[0])-$o(t[0])}),Fl=(e,t)=>({rowDelta:e.length-t.length,colDelta:0}),Hl=(e,t,o,n)=>{const r="colgroup"===t.section?o.col:o.cell;return k(e,(e=>et(r(),!0,n(e))))},$l=(e,t,o,n)=>{const r=e[e.length-1];return e.concat(k(t,(()=>{const e="colgroup"===r.section?o.colgroup:o.row,t=qo(r,e,h),s=Hl(t.cells.length,t,o,(e=>X(n,e.toString())));return Io(t,s)})))},Vl=(e,t,o,n)=>E(e,(e=>{const r=Hl(t,e,o,y);return Mo(e,n,r)})),ql=(e,t,o)=>{const n=t.colDelta<0?Vl:h,r=t.rowDelta<0?$l:h,s=Ko(e),l=$o(e[0]),a=O(s,(e=>e===l-1)),c=n(e,Math.abs(t.colDelta),o,a?l-1:l),i=Ko(c);return r(c,Math.abs(t.rowDelta),o,I(i,x))},Ul=(e,t,o,n)=>{const r=b(n,Fo(e[t],o).element),s=e[t];return e.length>1&&$o(s)>1&&(o>0&&r(Ho(s,o-1))||o0&&r(Ho(e[t-1],o))||tB(o,(o=>o>=e.column&&o<=$o(t[0])+e.column)),Kl=(e,t,o,n,r)=>{((e,t,o,n)=>{t>0&&t{const r=e.cells[t-1];let s=0;const l=n();for(;e.cells.length>t+s&&o(r.element,e.cells[t+s].element);)Po(e,t+s,et(l,!0,e.cells[t+s].isLocked)),s++}))})(t,e,r,n.cell);const s=Fl(o,t),l=ql(o,s,n),a=Fl(t,l),c=ql(t,a,n);return E(c,((t,o)=>Mo(t,e,l[o].cells)))},Yl=(e,t,o,n,r)=>{((e,t,o,n)=>{const r=Vo(e).rows;if(t>0&&tA(e,((e,o)=>O(e,(e=>t(e.element,o.element)))?e:e.concat([o])),[]))(r[t-1].cells,o);N(e,(e=>{let s=C.none();for(let l=t;l{Po(a,t,et(e,!0,c.isLocked))})))}}))}})(t,e,r,n.cell);const s=Ko(t),l=Il(t,o),a={...l,colDelta:l.colDelta-s.length},c=ql(t,a,n),{cols:i,rows:m}=Vo(c),d=Ko(c),u=Il(o,t),f={...u,colDelta:u.colDelta+d.length},g=(p=n,b=d,E(o,(e=>A(b,((t,o)=>{const n=Hl(1,e,p,x)[0];return jo(t,o,n)}),e)))),h=ql(g,f,n);var p,b;return[...i,...m.slice(0,e),...h,...m.slice(e,m.length)]},Jl=(e,t,o,n,r)=>{const{rows:s,cols:l}=Vo(e),a=s.slice(0,t),c=s.slice(t);return[...l,...a,((e,t,o,n)=>qo(e,(e=>n(e,o)),t))(s[o],((e,o)=>t>0&&tE(e,(e=>{const s=t>0&&t<$o(e)&&n(Ho(e,t-1),Ho(e,t)),l=((e,t,o,n,r,s,l)=>{if("colgroup"!==o&&n)return Fo(e,t);{const t=Fo(e,r);return et(l(t.element,s),!0,!1)}})(e,t,e.section,s,o,n,r);return jo(e,t,l)})),Xl=(e,t,o,n)=>((e,t,o,n)=>void 0!==Ho(e[t],o)&&t>0&&n(Ho(e[t-1],o),Ho(e[t],o)))(e,t,o,n)||((e,t,o)=>t>0&&o(Ho(e,t-1),Ho(e,t)))(e[t],o,n),Zl=(e,t,o,n)=>{const r=e=>(e=>"row"===e?(e=>Mt(e,"rowspan")>1)(t):jt(t))(e)?`${e}group`:e;return e?cl(t)?r(o):null:n&&cl(t)?r("row"===o?"col":"row"):null},ea=(e,t,o)=>et(o(e.element,t),!0,e.isLocked),ta=(e,t,o,n,r,s,l)=>E(e,((e,a)=>(e=>{const c=e.cells,i=E(c,((e,c)=>{if((e=>O(t,(t=>o(e.element,t.element))))(e)){const t=l(e,a,c)?r(e,o,n):e;return s(t,a,c).each((e=>{var o,n;o=t.element,n={scope:C.from(e)},G(n,((e,t)=>{e.fold((()=>{we(o,t)}),(e=>{fe(o.dom,t,e)}))}))})),t}return e}));return tt(e.element,i,e.section,e.isNew)})(e))),oa=(e,t,o)=>j(e,((n,r)=>Xl(e,r,t,o)?[]:[Fo(n,t)])),na=(e,t,o,n,r)=>{const s=Vo(e).rows,l=j(t,(e=>oa(s,e,n))),a=E(s,(e=>il(e.cells))),c=((e,t)=>P(t,h)&&il(e)?x:(e,o,n)=>!("th"===ne(e.element)&&t[o]))(l,a),i=((e,t)=>(o,n)=>C.some(Zl(e,o.element,"row",t[n])))(o,a);return ta(e,l,n,r,ea,i,c)},ra=(e,t,o,n)=>{const r=Vo(e).rows,s=E(t,(e=>Fo(r[e.row],e.column)));return ta(e,s,o,n,ea,C.none,x)},sa=e=>{if(!l(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],o={};return N(e,((n,r)=>{const s=q(n);if(1!==s.length)throw new Error("one and only one name per case");const a=s[0],c=n[a];if(void 0!==o[a])throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!l(c))throw new Error("case arguments must be an array");t.push(a),o[a]=(...o)=>{const n=o.length;if(n!==c.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+c.length+" ("+c+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[r].apply(null,o)},match:e=>{const n=q(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!P(t,(e=>D(n,e))))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,o)},log:e=>{console.log(e,{constructors:t,constructor:a,params:o})}}}})),o},la={...sa([{none:[]},{only:["index"]},{left:["index","next"]},{middle:["prev","index","next"]},{right:["prev","index"]}])},aa=(e,t,o)=>{const n=((e,t)=>sn(e)?((e,t)=>{const o=rn(e);return E(o,((e,o)=>({element:e.element,width:t[o],colspan:e.colspan})))})(e,t):((e,t)=>{const o=nn(e);return E(o,(e=>{const o=((e,t,o)=>{let n=0;for(let r=e;r{o.setElementWidth(e.element,e.width)}))},ca=(e,t,o,n,r)=>{const s=Xo(e),l=r.getCellDelta(t),a=r.getWidths(s,r),c=o===s.grid.columns-1,i=n.clampTableDelta(a,o,l,r.minCellWidth(),c),m=((e,t,o,n,r)=>{const s=e.slice(0),l=((e,t)=>0===e.length?la.none():1===e.length?la.only(0):0===t?la.left(0,1):t===e.length-1?la.right(t-1,t):t>0&&tn.singleColumnWidth(s[e],o)),((e,t)=>r.calcLeftEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)),((e,t,l)=>r.calcMiddleDeltas(s,e,t,l,o,n.minCellWidth(),n.isRelative)),((e,t)=>r.calcRightEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)))})(a,o,i,r,n),d=E(m,((e,t)=>e+a[t]));aa(s,d,r),n.resizeTable(r.adjustTableWidth,i,c)},ia=(e,t,o)=>{const n=Xo(e),r=((e,t)=>lr(e,t,Yn,(e=>e.getOrThunk(Ft))))(n,e),s=E(r,((e,n)=>o===n?Math.max(t+e,Ft()):e)),l=((e,t)=>E(e.all,((e,o)=>({element:e.element,height:t[o]}))))(n,s);N(l,(e=>{$n(e.element,e.height)})),N(nn(n),(e=>{(e=>{Lt(e,"height")})(e.element)}));const a=z(s,((e,t)=>e+t),0);$n(e,a)},ma=e=>A(e,((e,t)=>O(e,(e=>e.column===t.column))?e:e.concat([t])),[]).sort(((e,t)=>e.column-t.column)),da=ue("col"),ua=ue("colgroup"),fa=e=>"tr"===ne(e)||ua(e),ga=e=>({element:e,colspan:Wt(e,"colspan",1),rowspan:Wt(e,"rowspan",1)}),ha=e=>be(e,"scope").map((e=>e.substr(0,3))),pa=(e,t=ga)=>{const o=o=>{if(fa(o))return ua((r={element:o}).element)?e.colgroup(r):e.row(r);{const r=o,s=(t=>da(t.element)?e.col(t):e.cell(t))(t(r));return n=C.some({item:r,replacement:s}),s}var r};let n=C.none();return{getOrInit:(e,t)=>n.fold((()=>o(e)),(n=>t(e,n.item)?n.replacement:o(e)))}},ba=e=>t=>{const o=[],n=n=>{const r="td"===e?{scope:null}:{},s=t.replace(n,e,r);return o.push({item:n,sub:s}),s};return{replaceOrInit:(e,t)=>{if(fa(e)||da(e))return e;{const r=e;return((e,t)=>L(o,(o=>t(o.item,e))))(r,t).fold((()=>n(r)),(o=>t(e,o.item)?o.sub:n(r)))}}}},wa=e=>({unmerge:t=>{const o=ha(t);return o.each((e=>ge(t,"scope",e))),()=>{const n=e.cell({element:t,colspan:1,rowspan:1});return Lt(n,"width"),Lt(t,"width"),o.each((e=>ge(n,"scope",e))),n}},merge:e=>(Lt(e[0],"width"),(()=>{const t=yt(E(e,ha));if(0===t.length)return C.none();{const e=t[0],o=["row","col"];return O(t,(t=>t!==e&&D(o,t)))?C.none():C.from(e)}})().fold((()=>we(e[0],"scope")),(t=>ge(e[0],"scope",t+"group"))),g(e[0]))}),va=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],ya=xs(),xa=e=>((e,t)=>{const o=e.property().name(t);return D(va,o)})(ya,e),Ca=e=>((e,t)=>{const o=e.property().name(t);return D(["ol","ul"],o)})(ya,e),Sa=e=>{const t=ue("br"),o=e=>Cr(e).bind((o=>{const n=Ae(o).map((e=>!!xa(e)||!!((e,t)=>D(["br","img","hr","input"],e.property().name(t)))(ya,e)&&"img"!==ne(e))).getOr(!1);return Ne(o).map((r=>{return!0===n||("li"===ne(s=r)||ft(s,Ca).isSome())||t(o)||xa(r)&&!Re(e,r)?[]:[xe.fromTag("br")];var s}))})).getOr([]),n=(()=>{const n=j(e,(e=>{const n=Le(e);return(e=>P(e,(e=>t(e)||ie(e)&&0===hr(e).trim().length)))(n)?[]:n.concat(o(e))}));return 0===n.length?[xe.fromTag("br")]:n})();Ve(e[0]),$e(e[0],n)},Ta=e=>es(e,!0),Ra=e=>{0===qt(e).length&&qe(e)},Da=(e,t)=>({grid:e,cursor:t}),Oa=(e,t,o)=>{const n=((e,t,o)=>{var n,r;const s=Vo(e).rows;return C.from(null===(r=null===(n=s[t])||void 0===n?void 0:n.cells[o])||void 0===r?void 0:r.element).filter(Ta).orThunk((()=>(e=>V(e,(e=>V(e.cells,(e=>{const t=e.element;return xt(Ta(t),t)})))))(s)))})(e,t,o);return Da(e,n)},ka=e=>A(e,((e,t)=>O(e,(e=>e.row===t.row))?e:e.concat([t])),[]).sort(((e,t)=>e.row-t.row)),Ea=(e,t)=>(o,n,r,s,l)=>{const a=ka(n),c=E(a,(e=>e.row)),i=((e,t,o,n,r,s,l)=>{const{cols:a,rows:c}=Vo(e),i=c[t[0]],m=j(t,(e=>((e,t,o)=>{const n=e[t];return j(n.cells,((n,r)=>Xl(e,t,r,o)?[]:[n]))})(c,e,r))),d=E(i.cells,((e,t)=>il(oa(c,t,r)))),u=[...c];N(t,(e=>{u[e]=l.transformRow(c[e],o)}));const f=[...a,...u],g=((e,t)=>P(t,h)&&il(e.cells)?x:(e,o,n)=>!("th"===ne(e.element)&&t[n]))(i,d),p=((e,t)=>(o,n,r)=>C.some(Zl(e,o.element,"col",t[r])))(n,d);return ta(f,m,r,s,l.transformCell,p,g)})(o,c,e,t,r,s.replaceOrInit,l);return Oa(i,n[0].row,n[0].column)},Na=Ea("thead",!0),_a=Ea("tbody",!1),Ba=Ea("tfoot",!1),za=(e,t,o)=>{const n=((e,t)=>Jt(e,(()=>t)))(e,o.section),r=Zo(n);return Ol(r,t,!0)},Aa=(e,t,o,n)=>((e,t,o,n)=>{const r=Zo(t),s=n.getWidths(r,n);aa(r,s,n)})(0,t,0,n.sizing),La=(e,t,o,n)=>((e,t,o,n,r)=>{const s=Zo(t),l=n.getWidths(s,n),a=n.pixelWidth(),{newSizes:c,delta:i}=r.calcRedestributedWidths(l,a,o.pixelDelta,n.isRelative);aa(s,c,n),n.adjustTableWidth(i)})(0,t,o,n.sizing,n.resize),Wa=(e,t)=>O(t,(e=>0===e.column&&e.isLocked)),Ma=(e,t)=>O(t,(t=>t.column+t.colspan>=e.grid.columns&&t.isLocked)),ja=(e,t)=>{const o=an(e),n=ma(t);return A(n,((e,t)=>e+o[t.column].map(Lo).getOr(0)),0)},Pa=e=>(t,o)=>zl(t,o).filter((o=>!(e?Wa:Ma)(t,o))).map((e=>({details:e,pixelDelta:ja(t,e)}))),Ia=e=>(t,o)=>Bl(t,o).filter((o=>!(e?Wa:Ma)(t,o.cells))),Fa=ba("th"),Ha=ba("td"),$a=_l(((e,t,o,n)=>{const r=t[0].row,s=ka(t),l=z(s,((e,t)=>({grid:Jl(e.grid,r,t.row+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Oa(l,r,t[0].column)}),zl,f,f,pa),Va=_l(((e,t,o,n)=>{const r=ka(t),s=r[r.length-1],l=s.row+s.rowspan,a=z(r,((e,t)=>Jl(e,l,t.row,o,n.getOrInit)),e);return Oa(a,l,t[0].column)}),zl,f,f,pa),qa=_l(((e,t,o,n)=>{const r=t.details,s=ma(r),l=s[0].column,a=z(s,((e,t)=>({grid:Ql(e.grid,l,t.column+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Oa(a,r[0].row,l)}),Pa(!0),La,f,pa),Ua=_l(((e,t,o,n)=>{const r=t.details,s=r[r.length-1],l=s.column+s.colspan,a=ma(r),c=z(a,((e,t)=>Ql(e,l,t.column,o,n.getOrInit)),e);return Oa(c,r[0].row,l)}),Pa(!1),La,f,pa),Ga=_l(((e,t,o,n)=>{const r=ma(t.details),s=((e,t)=>j(e,(e=>{const o=e.cells,n=z(t,((e,t)=>t>=0&&t0?[tt(e.element,n,e.section,e.isNew)]:[]})))(e,E(r,(e=>e.column))),l=s.length>0?s[0].cells.length-1:0;return Oa(s,r[0].row,Math.min(r[0].column,l))}),((e,t)=>Al(e,t).map((t=>({details:t,pixelDelta:-ja(e,t)})))),La,Ra,pa),Ka=_l(((e,t,o,n)=>{const r=ka(t),s=((e,t,o)=>{const{rows:n,cols:r}=Vo(e);return[...r,...n.slice(0,t),...n.slice(o+1)]})(e,r[0].row,r[r.length-1].row),l=Math.max(Vo(s).rows.length-1,0);return Oa(s,Math.min(t[0].row,l),t[0].column)}),zl,f,Ra,pa),Ya=_l(((e,t,o,n)=>{const r=ma(t),s=E(r,(e=>e.column)),l=na(e,s,!0,o,n.replaceOrInit);return Oa(l,t[0].row,t[0].column)}),Al,f,f,Fa),Ja=_l(((e,t,o,n)=>{const r=ma(t),s=E(r,(e=>e.column)),l=na(e,s,!1,o,n.replaceOrInit);return Oa(l,t[0].row,t[0].column)}),Al,f,f,Ha),Qa=_l(Na,zl,f,f,Fa),Xa=_l(_a,zl,f,f,Ha),Za=_l(Ba,zl,f,f,Ha),ec=_l(((e,t,o,n)=>{const r=ra(e,t,o,n.replaceOrInit);return Oa(r,t[0].row,t[0].column)}),Al,f,f,Fa),tc=_l(((e,t,o,n)=>{const r=ra(e,t,o,n.replaceOrInit);return Oa(r,t[0].row,t[0].column)}),Al,f,f,Ha),oc=_l(((e,t,o,n)=>{const r=t.cells;Sa(r);const s=((e,t,o,n)=>{const r=Vo(e).rows;if(0===r.length)return e;for(let e=t.startRow;e<=t.finishRow;e++)for(let o=t.startCol;o<=t.finishCol;o++){const t=r[e],s=Fo(t,o).isLocked;Po(t,o,et(n(),!1,s))}return e})(e,t.bounds,0,n.merge(r));return Da(s,C.from(r[0]))}),((e,t)=>((e,t)=>t.mergable)(0,t).filter((t=>Ll(e,t.cells)))),Aa,f,wa),nc=_l(((e,t,o,n)=>{const r=z(t,((e,t)=>Wl(e,t,o,n.unmerge(t))),e);return Da(r,C.from(t[0]))}),((e,t)=>((e,t)=>t.unmergable)(0,t).filter((t=>Ll(e,t)))),Aa,f,wa),rc=_l(((e,t,o,n)=>{const r=((e,t)=>{const o=Xo(e);return Ol(o,t,!0)})(t.clipboard,t.generators);var s,l;return((e,t,o,n,r)=>{const s=Ko(t),l=((e,t,o)=>{const n=$o(t[0]),r=Vo(t).cols.length+e.row,s=k(n-e.column,(t=>t+e.column));return{row:r,column:L(s,(e=>P(o,(t=>t!==e)))).getOr(n-1)}})(e,t,s),a=Vo(o).rows,c=Gl(l,a,s),i=((e,t,o)=>{if(e.row>=t.length||e.column>$o(t[0]))return Pl.error("invalid start address out of table bounds, row: "+e.row+", column: "+e.column);const n=t.slice(e.row),r=n[0].cells.slice(e.column),s=$o(o[0]),l=o.length;return Pl.value({rowDelta:n.length-l,colDelta:r.length-s})})(l,t,a);return i.map((e=>{const o={...e,colDelta:e.colDelta-c.length},s=ql(t,o,n),i=Ko(s),m=Gl(l,a,i);return((e,t,o,n,r,s)=>{const l=e.row,a=e.column,c=l+o.length,i=a+$o(o[0])+s.length,m=I(s,x);for(let e=l;eDa(e,C.some(t.element))),(e=>Oa(e,t.row,t.column)))}),((e,t)=>Vt(t.element).bind((o=>El(e,o).map((e=>({...e,generators:t.generators,clipboard:t.clipboard})))))),Aa,f,pa),sc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[0].column,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Kl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,t.cells[0].column)}),Ia(!0),f,f,pa),lc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[t.cells.length-1].column+t.cells[t.cells.length-1].colspan,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Kl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,s)}),Ia(!1),f,f,pa),ac=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[0].row,l=r[s],a=za(t.clipboard,t.generators,l),c=Yl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,t.cells[0].column)}),Bl,f,f,pa),cc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[t.cells.length-1].row+t.cells[t.cells.length-1].rowspan,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Yl(s,e,a,t.generators,o);return Oa(c,s,t.cells[0].column)}),Bl,f,f,pa),ic=(e,t)=>{const o=Xo(e);return zl(o,t).bind((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=M(E(o.all,(e=>B(e.cells,(e=>e.column>=n&&e.column{const o=Xo(e);return zl(o,t).bind(ul).getOr("")},dc=(e,t)=>{const o=Xo(e);return zl(o,t).bind((e=>{const t=e[e.length-1],n=e[0].row,r=t.row+t.rowspan;return(e=>{const t=E(e,(e=>dl(e).type)),o=D(t,"header"),n=D(t,"footer");if(o||n){const e=D(t,"body");return!o||e||n?o||e||!n?C.none():C.some("footer"):C.some("header")}return C.some("body")})(o.all.slice(n,r))})).getOr("")},uc=(e,t)=>e.dispatch("NewRow",{node:t}),fc=(e,t)=>e.dispatch("NewCell",{node:t}),gc=(e,t,o)=>{e.dispatch("TableModified",{...o,table:t})},hc={structure:!1,style:!0},pc={structure:!0,style:!1},bc={structure:!0,style:!0},wc=(e,t)=>Hr(e)?ur(t):$r(e)?dr(t):mr(t),vc=(e,t,o)=>{const n=e=>"table"===ne(os(e)),r=Wr(e),s=Ir(e)?f:Zs,l=t=>{switch(Mr(e)){case"section":return wl();case"sectionCells":return vl();case"cells":return yl();default:return((e,t)=>{var o;switch((o=Xo(e),V(o.all,(e=>{const t=dl(e);return"header"===t.type?C.from(t.subType):C.none()}))).getOr(t)){case"section":return hl();case"sectionCells":return pl();case"cells":return bl()}})(t,"section")}},a=(n,s,a,c)=>(i,m,d=!1)=>{rs(i);const u=xe.fromDom(e.getDoc()),f=_r(a,u,r),g={sizing:wc(e,i),resize:Ir(e)?sl():ll(),section:l(i)};return s(i)?n(i,m,f,g).bind((n=>{t.refresh(i.dom),N(n.newRows,(t=>{uc(e,t.dom)})),N(n.newCells,(t=>{fc(e,t.dom)}));const r=((t,n)=>n.cursor.fold((()=>{const n=qt(t);return H(n).filter(st).map((n=>{o.clearSelectedCells(t.dom);const r=e.dom.createRng();return r.selectNode(n.dom),e.selection.setRng(r),ge(n,"data-mce-selected","1"),r}))}),(n=>{const r=Qs(Xs,n),s=e.dom.createRng();return s.setStart(r.element.dom,r.offset),s.setEnd(r.element.dom,r.offset),e.selection.setRng(s),o.clearSelectedCells(t.dom),C.some(s)})))(i,n);return st(i)&&(rs(i),d||gc(e,i.dom,c)),r.map((e=>({rng:e,effect:c})))})):C.none()},c=a(Ka,(t=>!n(e)||al(t).rows>1),f,pc),i=a(Ga,(t=>!n(e)||al(t).columns>1),f,pc);return{deleteRow:c,deleteColumn:i,insertRowsBefore:a($a,x,f,pc),insertRowsAfter:a(Va,x,f,pc),insertColumnsBefore:a(qa,x,s,pc),insertColumnsAfter:a(Ua,x,s,pc),mergeCells:a(oc,x,f,pc),unmergeCells:a(nc,x,f,pc),pasteColsBefore:a(sc,x,f,pc),pasteColsAfter:a(lc,x,f,pc),pasteRowsBefore:a(ac,x,f,pc),pasteRowsAfter:a(cc,x,f,pc),pasteCells:a(rc,x,f,bc),makeCellsHeader:a(ec,x,f,pc),unmakeCellsHeader:a(tc,x,f,pc),makeColumnsHeader:a(Ya,x,f,pc),unmakeColumnsHeader:a(Ja,x,f,pc),makeRowsHeader:a(Qa,x,f,pc),makeRowsBody:a(Xa,x,f,pc),makeRowsFooter:a(Za,x,f,pc),getTableRowType:dc,getTableCellType:mc,getTableColType:ic}},yc=(e,t,o)=>{const n=Wt(e,t,1);1===o||n<=1?we(e,t):ge(e,t,Math.min(o,n))},xc=(e,t)=>o=>{const n=o.column+o.colspan-1,r=o.column;return n>=e&&r{const n=o.substring(0,o.length-e.length),r=parseFloat(n);return n===r.toString()?t(r):Cc.invalid(o)},Tc={...Cc,from:e=>Rt(e,"%")?Sc("%",Cc.percent,e):Rt(e,"px")?Sc("px",Cc.pixels,e):Cc.invalid(e)},Rc=(e,t,o)=>{const n=Tc.from(o),r=P(e,(e=>"0px"===e))?((e,t)=>{const o=e.fold((()=>g("")),(e=>g(e/t+"px")),(()=>g(100/t+"%")));return k(t,o)})(n,e.length):((e,t,o)=>e.fold((()=>t),(e=>((e,t,o)=>{const n=o/t;return E(e,(e=>Tc.from(e).fold((()=>e),(e=>e*n+"px"),(e=>e/100*o+"px"))))})(t,o,e)),(e=>((e,t)=>E(e,(e=>Tc.from(e).fold((()=>e),(e=>e/t*100+"%"),(e=>e+"%")))))(t,o))))(n,e,t);return kc(r)},Dc=(e,t)=>0===e.length?t:z(e,((e,t)=>Tc.from(t).fold(g(0),h,h)+e),0),Oc=(e,t)=>Tc.from(e).fold(g(e),(e=>e+t+"px"),(e=>e+t+"%")),kc=e=>{if(0===e.length)return e;const t=z(e,((e,t)=>{const o=Tc.from(t).fold((()=>({value:t,remainder:0})),(e=>(e=>{const t=Math.floor(e);return{value:t+"px",remainder:e-t}})(e)),(e=>({value:e+"%",remainder:0})));return{output:[o.value].concat(e.output),remainder:e.remainder+o.remainder}}),{output:[],remainder:0}),o=t.output;return o.slice(0,o.length-1).concat([Oc(o[o.length-1],Math.round(t.remainder))])},Ec=Tc.from,Nc=(e,t,o)=>{const n=Xo(e),r=n.all,s=nn(n),l=rn(n);t.each((t=>{const o=Ec(t).fold(g("px"),g("px"),g("%")),r=Ao(e),a=((e,t)=>nr(e,t,er,rr))(n,e),c=Rc(a,r,t);sn(n)?((e,t,o)=>{N(t,((t,n)=>{const r=Dc([e[n]],It());Nt(t.element,"width",r+o)}))})(c,l,o):((e,t,o)=>{N(t,(t=>{const n=e.slice(t.column,t.colspan+t.column),r=Dc(n,It());Nt(t.element,"width",r+o)}))})(c,s,o),Nt(e,"width",t)})),o.each((t=>{const o=gn(e),l=((e,t)=>lr(e,t,tr,rr))(n,e);((e,t,o)=>{N(o,(e=>{Lt(e.element,"height")})),N(t,((t,o)=>{Nt(t.element,"height",e[o])}))})(Rc(l,o,t),r,s),Nt(e,"height",t)}))},_c=e=>Un(e).exists((e=>Wn.test(e))),Bc=e=>Un(e).exists((e=>Mn.test(e))),zc=e=>Un(e).isNone(),Ac=e=>{we(e,"width"),we(e,"height")},Lc=e=>{const t=Qn(e);Nc(e,C.some(t),C.none()),Ac(e)},Wc=e=>{const t=(e=>Ao(e)+"px")(e);Nc(e,C.some(t),C.none()),Ac(e)},Mc=e=>{Lt(e,"width");const t=Ut(e),o=t.length>0?t:qt(e);N(o,(e=>{Lt(e,"width"),Ac(e)})),Ac(e)},jc={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},colGroups:!1},Pc=(e,t,o,n)=>k(e,(e=>((e,t,o,n)=>{const r=xe.fromTag("tr");for(let s=0;s{e.selection.select(t.dom,!0),e.selection.collapse(!0)},Fc=(e,t,o,n,s)=>{const l=(e=>{const t=e.options,o=t.get("table_default_styles");return t.isSet("table_default_styles")?o:((e,t)=>Vr(e)||!Ur(e)?t:$r(e)?{...t,width:Lr(e)}:{...t,width:Ar})(e,o)})(e),a={styles:l,attributes:Kr(e),colGroups:Yr(e)};return e.undoManager.ignore((()=>{const r=((e,t,o,n,r,s=jc)=>{const l=xe.fromTag("table"),a="cells"!==r;_t(l,s.styles),he(l,s.attributes),s.colGroups&&Ie(l,(e=>{const t=xe.fromTag("colgroup");return k(e,(()=>Ie(t,xe.fromTag("col")))),t})(t));const c=Math.min(e,o);if(a&&o>0){const e=xe.fromTag("thead");Ie(l,e);const s=Pc(o,t,"sectionCells"===r?c:0,n);$e(e,s)}const i=xe.fromTag("tbody");Ie(l,i);const m=Pc(a?e-c:e,t,a?0:o,n);return $e(i,m),l})(o,t,s,n,Mr(e),a);ge(r,"data-mce-id","__mce");const l=(e=>{const t=xe.fromTag("div"),o=xe.fromDom(e.dom.cloneNode(!0));return Ie(t,o),(e=>e.dom.innerHTML)(t)})(r);e.insertContent(l),e.addVisual()})),bt(os(e),'table[data-mce-id="__mce"]').map((t=>($r(e)?Wc(t):Vr(e)?Mc(t):(Hr(e)||(e=>r(e)&&-1!==e.indexOf("%"))(l.width))&&Lc(t),rs(t),we(t,"data-mce-id"),((e,t)=>{N(dt(t,"tr"),(t=>{uc(e,t.dom),N(dt(t,"th,td"),(t=>{fc(e,t.dom)}))}))})(e,t),((e,t)=>{bt(t,"td,th").each(b(Ic,e))})(e,t),t.dom))).getOrNull()};var Hc=tinymce.util.Tools.resolve("tinymce.FakeClipboard");const $c="x-tinymce/dom-table-",Vc=$c+"rows",qc=$c+"columns",Uc=e=>{const t=Hc.FakeClipboardItem(e);Hc.write([t])},Gc=e=>{var t;const o=null!==(t=Hc.read())&&void 0!==t?t:[];return V(o,(t=>C.from(t.getType(e))))},Kc=e=>{Gc(e).isSome()&&Hc.clear()},Yc=e=>{e.fold(Qc,(e=>Uc({[Vc]:e})))},Jc=()=>Gc(Vc),Qc=()=>Kc(Vc),Xc=e=>{e.fold(ei,(e=>Uc({[qc]:e})))},Zc=()=>Gc(qc),ei=()=>Kc(qc),ti=e=>$s(ss(e),ns(e)).filter(ds),oi=(e,t)=>{const o=ns(e),n=e=>Gt(e,o),l=t=>(e=>Vs(ss(e),ns(e)).filter(ds))(e).bind((e=>n(e).map((o=>t(o,e))))),a=t=>{e.focus()},c=(t,o=!1)=>l(((n,r)=>{const s=Fs(qs(e),n,r);t(n,s,o).each(a)})),i=()=>l(((t,o)=>((e,t,o)=>{const n=Xo(e);return zl(n,t).bind((e=>{const t=Ol(n,o,!1),r=Vo(t).rows.slice(e[0].row,e[e.length-1].row+e[e.length-1].rowspan),s=j(r,(e=>{const t=B(e.cells,(e=>!e.isLocked));return t.length>0?[{...e,cells:t}]:[]})),l=kl(s);return xt(l.length>0,l)})).map((e=>E(e,(e=>{const t=Ke(e.element);return N(e.cells,(e=>{const o=Ye(e.element);Cl(o,"colspan",e.colspan,1),Cl(o,"rowspan",e.rowspan,1),Ie(t,o)})),t}))))})(t,Fs(qs(e),t,o),_r(f,xe.fromDom(e.getDoc()),C.none())))),m=()=>l(((t,o)=>((e,t)=>{const o=Xo(e);return Al(o,t).map((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=((e,t,o)=>{if(sn(e)){const n=B(rn(e),xc(t,o)),r=E(n,(e=>{const n=Ye(e.element);return yc(n,"span",o-t),n})),s=xe.fromTag("colgroup");return $e(s,r),[s]}return[]})(o,n,r),l=((e,t,o)=>E(e.all,(e=>{const n=B(e.cells,xc(t,o)),r=E(n,(e=>{const n=Ye(e.element);return yc(n,"colspan",o-t),n})),s=xe.fromTag("tr");return $e(s,r),s})))(o,n,r);return[...s,...l]}))})(t,Fs(qs(e),t,o)))),d=(t,o)=>o().each((o=>{const n=E(o,(e=>Ye(e)));l(((o,r)=>{const s=Br(xe.fromDom(e.getDoc())),l=((e,t,o,n)=>({selection:zs(e),clipboard:o,generators:n}))(qs(e),0,n,s);t(o,l).each(a)}))})),g=e=>(t,o)=>((e,t)=>X(e,t)?C.from(e[t]):C.none())(o,"type").each((t=>{c(e(t),o.no_events)}));G({mceTableSplitCells:()=>c(t.unmergeCells),mceTableMergeCells:()=>c(t.mergeCells),mceTableInsertRowBefore:()=>c(t.insertRowsBefore),mceTableInsertRowAfter:()=>c(t.insertRowsAfter),mceTableInsertColBefore:()=>c(t.insertColumnsBefore),mceTableInsertColAfter:()=>c(t.insertColumnsAfter),mceTableDeleteCol:()=>c(t.deleteColumn),mceTableDeleteRow:()=>c(t.deleteRow),mceTableCutCol:()=>m().each((e=>{Xc(e),c(t.deleteColumn)})),mceTableCutRow:()=>i().each((e=>{Yc(e),c(t.deleteRow)})),mceTableCopyCol:()=>m().each((e=>Xc(e))),mceTableCopyRow:()=>i().each((e=>Yc(e))),mceTablePasteColBefore:()=>d(t.pasteColsBefore,Zc),mceTablePasteColAfter:()=>d(t.pasteColsAfter,Zc),mceTablePasteRowBefore:()=>d(t.pasteRowsBefore,Jc),mceTablePasteRowAfter:()=>d(t.pasteRowsAfter,Jc),mceTableDelete:()=>ti(e).each((t=>{Gt(t,o).filter(w(o)).each((t=>{const o=xe.fromText("");if(je(t,o),qe(t),e.dom.isEmpty(e.getBody()))e.setContent(""),e.selection.setCursorLocation();else{const t=e.dom.createRng();t.setStart(o.dom,0),t.setEnd(o.dom,0),e.selection.setRng(t),e.nodeChanged()}}))})),mceTableCellToggleClass:(t,o)=>{l((t=>{const n=qs(e),r=P(n,(t=>e.formatter.match("tablecellclass",{value:o},t.dom))),s=r?e.formatter.remove:e.formatter.apply;N(n,(e=>s("tablecellclass",{value:o},e.dom))),gc(e,t.dom,hc)}))},mceTableToggleClass:(t,o)=>{l((t=>{e.formatter.toggle("tableclass",{value:o},t.dom),gc(e,t.dom,hc)}))},mceTableToggleCaption:()=>{ti(e).each((t=>{Gt(t,o).each((o=>{pt(o,"caption").fold((()=>{const t=xe.fromTag("caption");Ie(t,xe.fromText("Caption")),((e,t)=>{We(e,0).fold((()=>{Ie(e,t)}),(e=>{Me(e,t)}))})(o,t),e.selection.setCursorLocation(t.dom,0)}),(n=>{ue("caption")(t)&&Te("td",o).each((t=>e.selection.setCursorLocation(t.dom,0))),qe(n)})),gc(e,o.dom,pc)}))}))},mceTableSizingMode:(t,n)=>(t=>ti(e).each((n=>{Vr(e)||$r(e)||Hr(e)||Gt(n,o).each((o=>{"relative"!==t||_c(o)?"fixed"!==t||Bc(o)?"responsive"!==t||zc(o)||Mc(o):Wc(o):Lc(o),rs(o),gc(e,o.dom,pc)}))})))(n),mceTableCellType:g((e=>"th"===e?t.makeCellsHeader:t.unmakeCellsHeader)),mceTableColType:g((e=>"th"===e?t.makeColumnsHeader:t.unmakeColumnsHeader)),mceTableRowType:g((e=>{switch(e){case"header":return t.makeRowsHeader;case"footer":return t.makeRowsFooter;default:return t.makeRowsBody}}))},((t,o)=>e.addCommand(o,t))),e.addCommand("mceInsertTable",((t,o)=>{((e,t,o,n={})=>{const r=e=>u(e)&&e>0;if(r(t)&&r(o)){const r=n.headerRows||0,s=n.headerColumns||0;return Fc(e,o,t,s,r)}console.error("Invalid values for mceInsertTable - rows and columns values are required to insert a table.")})(e,o.rows,o.columns,o.options)})),e.addCommand("mceTableApplyCellStyle",((t,o)=>{const l=e=>"tablecell"+e.toLowerCase().replace("-","");if(!s(o))return;const a=B(qs(e),ds);if(0===a.length)return;const c=((e,t)=>{const o={};return((e,t,o,n)=>{G(e,((e,r)=>{(t(e,r)?o:n)(e,r)}))})(e,t,(e=>(t,o)=>{e[o]=t})(o),f),o})(o,((t,o)=>e.formatter.has(l(o))&&r(t)));(e=>{for(const t in e)if(U.call(e,t))return!1;return!0})(c)||(G(c,((t,o)=>{const n=l(o);N(a,(o=>{""===t?e.formatter.remove(n,{value:null},o.dom,!0):e.formatter.apply(n,{value:t},o.dom)}))})),n(a[0]).each((t=>gc(e,t.dom,hc))))}))},ni=sa([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),ri={before:ni.before,on:ni.on,after:ni.after,cata:(e,t,o,n)=>e.fold(t,o,n),getStart:e=>e.fold(h,h,h)},si=(e,t)=>({selection:e,kill:t}),li=(e,t)=>{const o=e.document.createRange();return o.selectNode(t.dom),o},ai=(e,t)=>{const o=e.document.createRange();return ci(o,t),o},ci=(e,t)=>e.selectNodeContents(t.dom),ii=(e,t,o)=>{const n=e.document.createRange();var r;return r=n,t.fold((e=>{r.setStartBefore(e.dom)}),((e,t)=>{r.setStart(e.dom,t)}),(e=>{r.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,o)=>{e.setEnd(t.dom,o)}),(t=>{e.setEndAfter(t.dom)}))})(n,o),n},mi=(e,t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},di=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}),ui=sa([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),fi=(e,t,o)=>t(xe.fromDom(o.startContainer),o.startOffset,xe.fromDom(o.endContainer),o.endOffset),gi=(e,t)=>{const o=((e,t)=>t.match({domRange:e=>({ltr:g(e),rtl:C.none}),relative:(t,o)=>({ltr:Zt((()=>ii(e,t,o))),rtl:Zt((()=>C.some(ii(e,o,t))))}),exact:(t,o,n,r)=>({ltr:Zt((()=>mi(e,t,o,n,r))),rtl:Zt((()=>C.some(mi(e,n,r,t,o))))})}))(e,t);return((e,t)=>{const o=t.ltr();return o.collapsed?t.rtl().filter((e=>!1===e.collapsed)).map((e=>ui.rtl(xe.fromDom(e.endContainer),e.endOffset,xe.fromDom(e.startContainer),e.startOffset))).getOrThunk((()=>fi(0,ui.ltr,o))):fi(0,ui.ltr,o)})(0,o)},hi=(e,t)=>gi(e,t).match({ltr:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},rtl:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(n.dom,r),s.setEnd(t.dom,o),s}});ui.ltr,ui.rtl;const pi=(e,t,o,n)=>({start:e,soffset:t,finish:o,foffset:n}),bi=(e,t,o,n)=>({start:ri.on(e,t),finish:ri.on(o,n)}),wi=(e,t)=>{const o=hi(e,t);return pi(xe.fromDom(o.startContainer),o.startOffset,xe.fromDom(o.endContainer),o.endOffset)},vi=bi,yi=(e,t,o,n,r)=>Re(o,n)?C.none():Os(o,n,t).bind((t=>{const n=t.boxes.getOr([]);return n.length>1?(r(e,n,t.start,t.finish),C.some(si(C.some(vi(o,0,o,wr(o))),!0))):C.none()})),xi=(e,t)=>({item:e,mode:t}),Ci=(e,t,o,n=Si)=>e.property().parent(t).map((e=>xi(e,n))),Si=(e,t,o,n=Ti)=>o.sibling(e,t).map((e=>xi(e,n))),Ti=(e,t,o,n=Ti)=>{const r=e.property().children(t);return o.first(r).map((e=>xi(e,n)))},Ri=[{current:Ci,next:Si,fallback:C.none()},{current:Si,next:Ti,fallback:C.some(Ci)},{current:Ti,next:Ti,fallback:C.some(Si)}],Di=(e,t,o,n,r=Ri)=>L(r,(e=>e.current===o)).bind((o=>o.current(e,t,n,o.next).orThunk((()=>o.fallback.bind((o=>Di(e,t,o,n))))))),Oi=(e,t,o,n,r,s)=>Di(e,t,n,r).bind((t=>s(t.item)?C.none():o(t.item)?C.some(t.item):Oi(e,t.item,o,t.mode,r,s))),ki=e=>t=>0===e.property().children(t).length,Ei=(e,t,o,n)=>Oi(e,t,o,Si,{sibling:(e,t)=>e.query().prevSibling(t),first:e=>e.length>0?C.some(e[e.length-1]):C.none()},n),Ni=(e,t,o,n)=>Oi(e,t,o,Si,{sibling:(e,t)=>e.query().nextSibling(t),first:e=>e.length>0?C.some(e[0]):C.none()},n),_i=xs(),Bi=(e,t)=>((e,t,o)=>Ei(e,t,ki(e),o))(_i,e,t),zi=(e,t)=>((e,t,o)=>Ni(e,t,ki(e),o))(_i,e,t),Ai=sa([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),Li=e=>wt(e,"tr"),Wi={...Ai,verify:(e,t,o,n,r,s,l)=>wt(n,"td,th",l).bind((o=>wt(t,"td,th",l).map((t=>Re(o,t)?Re(n,o)&&wr(o)===r?s(t):Ai.none("in same cell"):Rs(Li,[o,t]).fold((()=>((e,t,o)=>{const n=e.getRect(t),r=e.getRect(o);return r.right>n.left&&r.lefts(t))))))).getOr(Ai.none("default")),cata:(e,t,o,n,r)=>e.fold(t,o,n,r)},Mi=ue("br"),ji=(e,t,o)=>t(e,o).bind((e=>ie(e)&&0===hr(e).trim().length?ji(e,t,o):C.some(e))),Pi=(e,t,o,n)=>((e,t)=>We(e,t).filter(Mi).orThunk((()=>We(e,t-1).filter(Mi))))(t,o).bind((t=>n.traverse(t).fold((()=>ji(t,n.gather,e).map(n.relative)),(e=>(e=>Ne(e).bind((t=>{const o=Le(t);return((e,t)=>W(e,b(Re,t)))(o,e).map((n=>((e,t,o,n)=>({parent:e,children:t,element:o,index:n}))(t,o,e,n)))})))(e).map((e=>ri.on(e.parent,e.index))))))),Ii=(e,t)=>({left:e.left,top:e.top+t,right:e.right,bottom:e.bottom+t}),Fi=(e,t)=>({left:e.left,top:e.top-t,right:e.right,bottom:e.bottom-t}),Hi=(e,t,o)=>({left:e.left+t,top:e.top+o,right:e.right+t,bottom:e.bottom+o}),$i=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom}),Vi=(e,t)=>C.some(e.getRect(t)),qi=(e,t,o)=>ce(t)?Vi(e,t).map($i):ie(t)?((e,t,o)=>o>=0&&o0?e.getRangedRect(t,o-1,t,o):C.none())(e,t,o).map($i):C.none(),Ui=(e,t)=>ce(t)?Vi(e,t).map($i):ie(t)?e.getRangedRect(t,0,t,wr(t)).map($i):C.none(),Gi=sa([{none:[]},{retry:["caret"]}]),Ki=(e,t,o)=>gt(t,xa).fold(y,(t=>Ui(e,t).exists((e=>((e,t)=>e.leftt.right)(o,e))))),Yi={point:e=>e.bottom,adjuster:(e,t,o,n,r)=>{const s=Ii(r,5);return Math.abs(o.bottom-n.bottom)<1||o.top>r.bottom?Gi.retry(s):o.top===r.bottom?Gi.retry(Ii(r,1)):Ki(e,t,r)?Gi.retry(Hi(s,5,0)):Gi.none()},move:Ii,gather:zi},Ji=(e,t,o,n,r)=>0===r?C.some(n):((e,t,o)=>e.elementFromPoint(t,o).filter((e=>"table"===ne(e))).isSome())(e,n.left,t.point(n))?((e,t,o,n,r)=>Ji(e,t,o,t.move(n,5),r))(e,t,o,n,r-1):e.situsFromPoint(n.left,t.point(n)).bind((s=>s.start.fold(C.none,(s=>Ui(e,s).bind((l=>t.adjuster(e,s,l,o,n).fold(C.none,(n=>Ji(e,t,o,n,r-1))))).orThunk((()=>C.some(n)))),C.none))),Qi=(e,t,o)=>{const n=e.move(o,5),r=Ji(t,e,o,n,100).getOr(n);return((e,t,o)=>e.point(t)>o.getInnerHeight()?C.some(e.point(t)-o.getInnerHeight()):e.point(t)<0?C.some(-e.point(t)):C.none())(e,r,t).fold((()=>t.situsFromPoint(r.left,e.point(r))),(o=>(t.scrollBy(0,o),t.situsFromPoint(r.left,e.point(r)-o))))},Xi={tryUp:b(Qi,{point:e=>e.top,adjuster:(e,t,o,n,r)=>{const s=Fi(r,5);return Math.abs(o.top-n.top)<1||o.bottome.getSelection().bind((n=>((e,t,o,n)=>{const r=Mi(t)?((e,t,o)=>o.traverse(t).orThunk((()=>ji(t,o.gather,e))).map(o.relative))(e,t,n):Pi(e,t,o,n);return r.map((e=>({start:e,finish:e})))})(t,n.finish,n.foffset,o).fold((()=>C.some(Gs(n.finish,n.foffset))),(r=>{const s=e.fromSitus(r);return l=Wi.verify(e,n.finish,n.foffset,s.finish,s.foffset,o.failure,t),Wi.cata(l,(e=>C.none()),(()=>C.none()),(e=>C.some(Gs(e,0))),(e=>C.some(Gs(e,wr(e)))));var l})))),em=(e,t,o,n,r,s)=>0===s?C.none():nm(e,t,o,n,r).bind((l=>{const a=e.fromSitus(l),c=Wi.verify(e,o,n,a.finish,a.foffset,r.failure,t);return Wi.cata(c,(()=>C.none()),(()=>C.some(l)),(l=>Re(o,l)&&0===n?tm(e,o,n,Fi,r):em(e,t,l,0,r,s-1)),(l=>Re(o,l)&&n===wr(l)?tm(e,o,n,Ii,r):em(e,t,l,wr(l),r,s-1)))})),tm=(e,t,o,n,r)=>qi(e,t,o).bind((t=>om(e,r,n(t,Xi.getJumpSize())))),om=(e,t,o)=>{const n=No().browser;return n.isChromium()||n.isSafari()||n.isFirefox()?t.retry(e,o):C.none()},nm=(e,t,o,n,r)=>qi(e,o,n).bind((t=>om(e,r,t))),rm=(e,t,o,n,r)=>wt(n,"td,th",t).bind((n=>wt(n,"table",t).bind((s=>((e,t)=>ft(e,(e=>Ne(e).exists((e=>Re(e,t)))),void 0).isSome())(r,s)?((e,t,o)=>Zi(e,t,o).bind((n=>em(e,t,n.element,n.offset,o,20).map(e.fromSitus))))(e,t,o).bind((e=>wt(e.finish,"td,th",t).map((t=>({start:n,finish:t,range:e}))))):C.none())))),sm=(e,t,o,n,r,s)=>s(n,t).orThunk((()=>rm(e,t,o,n,r).map((e=>{const t=e.range;return si(C.some(vi(t.start,t.soffset,t.finish,t.foffset)),!0)})))),lm=(e,t)=>wt(e,"tr",t).bind((e=>wt(e,"table",t).bind((o=>{const n=dt(o,"tr");return Re(e,n[0])?((e,t,o)=>Ei(_i,e,(e=>Cr(e).isSome()),o))(o,0,t).map((e=>{const t=wr(e);return si(C.some(vi(e,t,e,t)),!0)})):C.none()})))),am=(e,t)=>wt(e,"tr",t).bind((e=>wt(e,"table",t).bind((o=>{const n=dt(o,"tr");return Re(e,n[n.length-1])?((e,t,o)=>Ni(_i,e,(e=>xr(e).isSome()),o))(o,0,t).map((e=>si(C.some(vi(e,0,e,0)),!0))):C.none()})))),cm=(e,t,o,n,r,s,l)=>rm(e,o,n,r,s).bind((e=>yi(t,o,e.start,e.finish,l))),im=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},mm=()=>{const e=(e=>{const t=im(C.none()),o=()=>t.get().each(e);return{clear:()=>{o(),t.set(C.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{o(),t.set(C.some(e))}}})(f);return{...e,on:t=>e.get().each(t)}},dm=(e,t)=>wt(e,"td,th",t),um=e=>_e(e).exists(es),fm={traverse:Ae,gather:zi,relative:ri.before,retry:Xi.tryDown,failure:Wi.failedDown},gm={traverse:ze,gather:Bi,relative:ri.before,retry:Xi.tryUp,failure:Wi.failedUp},hm=e=>t=>t===e,pm=hm(38),bm=hm(40),wm=e=>e>=37&&e<=40,vm={isBackward:hm(37),isForward:hm(39)},ym={isBackward:hm(39),isForward:hm(37)},xm=sa([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Cm={domRange:xm.domRange,relative:xm.relative,exact:xm.exact,exactFromRange:e=>xm.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>xe.fromDom(e.startContainer),relative:(e,t)=>ri.getStart(e),exact:(e,t,o,n)=>e}))(e);return xe.fromDom(Ee(t).dom.defaultView)},range:pi},Sm=(e,t)=>{const o=ne(e);return"input"===o?ri.after(e):D(["br","img"],o)?0===t?ri.before(e):ri.after(e):ri.on(e,t)},Tm=e=>C.from(e.getSelection()),Rm=(e,t)=>{Tm(e).each((e=>{e.removeAllRanges(),e.addRange(t)}))},Dm=(e,t,o,n,r)=>{const s=mi(e,t,o,n,r);Rm(e,s)},Om=(e,t)=>gi(e,t).match({ltr:(t,o,n,r)=>{Dm(e,t,o,n,r)},rtl:(t,o,n,r)=>{Tm(e).each((s=>{if(s.setBaseAndExtent)s.setBaseAndExtent(t.dom,o,n.dom,r);else if(s.extend)try{((e,t,o,n,r,s)=>{t.collapse(o.dom,n),t.extend(r.dom,s)})(0,s,t,o,n,r)}catch(s){Dm(e,n,r,t,o)}else Dm(e,n,r,t,o)}))}}),km=(e,t,o,n,r)=>{const s=((e,t,o,n)=>{const r=Sm(e,t),s=Sm(o,n);return Cm.relative(r,s)})(t,o,n,r);Om(e,s)},Em=(e,t,o)=>{const n=((e,t)=>{const o=e.fold(ri.before,Sm,ri.after),n=t.fold(ri.before,Sm,ri.after);return Cm.relative(o,n)})(t,o);Om(e,n)},Nm=e=>{if(e.rangeCount>0){const t=e.getRangeAt(0),o=e.getRangeAt(e.rangeCount-1);return C.some(pi(xe.fromDom(t.startContainer),t.startOffset,xe.fromDom(o.endContainer),o.endOffset))}return C.none()},_m=e=>{if(null===e.anchorNode||null===e.focusNode)return Nm(e);{const t=xe.fromDom(e.anchorNode),o=xe.fromDom(e.focusNode);return((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=ke(e).dom.createRange();return r.setStart(e.dom,t),r.setEnd(o.dom,n),r})(e,t,o,n),s=Re(e,o)&&t===n;return r.collapsed&&!s})(t,e.anchorOffset,o,e.focusOffset)?C.some(pi(t,e.anchorOffset,o,e.focusOffset)):Nm(e)}},Bm=(e,t,o=!0)=>{const n=(o?ai:li)(e,t);Rm(e,n)},zm=e=>(e=>Tm(e).filter((e=>e.rangeCount>0)).bind(_m))(e).map((e=>Cm.exact(e.start,e.soffset,e.finish,e.foffset))),Am=(e,t,o)=>((e,t,o)=>((e,t,o)=>e.caretPositionFromPoint?((e,t,o)=>{var n;return C.from(null===(n=e.caretPositionFromPoint)||void 0===n?void 0:n.call(e,t,o)).bind((t=>{if(null===t.offsetNode)return C.none();const o=e.createRange();return o.setStart(t.offsetNode,t.offset),o.collapse(),C.some(o)}))})(e,t,o):e.caretRangeFromPoint?((e,t,o)=>{var n;return C.from(null===(n=e.caretRangeFromPoint)||void 0===n?void 0:n.call(e,t,o))})(e,t,o):C.none())(e.document,t,o).map((e=>pi(xe.fromDom(e.startContainer),e.startOffset,xe.fromDom(e.endContainer),e.endOffset))))(e,t,o),Lm=e=>({elementFromPoint:(t,o)=>xe.fromPoint(xe.fromDom(e.document),t,o),getRect:e=>e.dom.getBoundingClientRect(),getRangedRect:(t,o,n,r)=>{const s=Cm.exact(t,o,n,r);return((e,t)=>(e=>{const t=e.getClientRects(),o=t.length>0?t[0]:e.getBoundingClientRect();return o.width>0||o.height>0?C.some(o).map(di):C.none()})(hi(e,t)))(e,s)},getSelection:()=>zm(e).map((t=>wi(e,t))),fromSitus:t=>{const o=Cm.relative(t.start,t.finish);return wi(e,o)},situsFromPoint:(t,o)=>Am(e,t,o).map((e=>bi(e.start,e.soffset,e.finish,e.foffset))),clearSelection:()=>{(e=>{Tm(e).each((e=>e.removeAllRanges()))})(e)},collapseSelection:(t=!1)=>{zm(e).each((o=>o.fold((e=>e.collapse(t)),((o,n)=>{const r=t?o:n;Em(e,r,r)}),((o,n,r,s)=>{const l=t?o:r,a=t?n:s;km(e,l,a,l,a)}))))},setSelection:t=>{km(e,t.start,t.soffset,t.finish,t.foffset)},setRelativeSelection:(t,o)=>{Em(e,t,o)},selectNode:t=>{Bm(e,t,!1)},selectContents:t=>{Bm(e,t)},getInnerHeight:()=>e.innerHeight,getScrollY:()=>(e=>{const t=void 0!==e?e.dom:document,o=t.body.scrollLeft||t.documentElement.scrollLeft,n=t.body.scrollTop||t.documentElement.scrollTop;return bn(o,n)})(xe.fromDom(e.document)).top,scrollBy:(t,o)=>{((e,t,o)=>{const n=(void 0!==o?o.dom:document).defaultView;n&&n.scrollBy(e,t)})(t,o,xe.fromDom(e.document))}}),Wm=(e,t)=>({rows:e,cols:t}),Mm=e=>gt(e,ae).exists(es),jm=(e,t)=>Mm(e)||Mm(t),Pm=e=>void 0!==e.dom.classList,Im=(e,t)=>((e,t,o)=>{const n=((e,t)=>{const o=pe(e,t);return void 0===o||""===o?[]:o.split(" ")})(e,t).concat([o]);return ge(e,t,n.join(" ")),!0})(e,"class",t),Fm=(e,t)=>{Pm(e)?e.dom.classList.add(t):Im(e,t)},Hm=(e,t)=>Pm(e)&&e.dom.classList.contains(t),$m=()=>({tag:"none"}),Vm=e=>({tag:"multiple",elements:e}),qm=e=>({tag:"single",element:e}),Um=e=>{const t=xe.fromDom((e=>{if(m(e.target)){const t=xe.fromDom(e.target);if(ce(t)&&m(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return H(t)}}return C.from(e.target)})(e).getOr(e.target)),o=()=>e.stopPropagation(),n=()=>e.preventDefault(),r=(s=n,l=o,(...e)=>s(l.apply(null,e)));var s,l;return((e,t,o,n,r,s,l)=>({target:e,x:t,y:o,stop:n,prevent:r,kill:s,raw:l}))(t,e.clientX,e.clientY,o,n,r,e)},Gm=(e,t,o,n)=>{e.dom.removeEventListener(t,o,n)},Km=x,Ym=(e,t,o)=>((e,t,o,n)=>((e,t,o,n,r)=>{const s=((e,t)=>o=>{e(o)&&t(Um(o))})(o,n);return e.dom.addEventListener(t,s,r),{unbind:b(Gm,e,t,s,r)}})(e,t,o,n,!1))(e,t,Km,o),Jm=Um,Qm=e=>!Hm(xe.fromDom(e.target),"ephox-snooker-resizer-bar"),Xm=(e,t)=>{const o=(r=Is.selectedSelector,{get:()=>_s(xe.fromDom(e.getBody()),r).fold((()=>Vs(ss(e),ns(e)).fold($m,qm)),Vm)}),n=((e,t,o)=>{const n=t=>{we(t,e.selected),we(t,e.firstSelected),we(t,e.lastSelected)},r=t=>{ge(t,e.selected,"1")},s=e=>{l(e),o()},l=t=>{const o=dt(t,`${e.selectedSelector},${e.firstSelectedSelector},${e.lastSelectedSelector}`);N(o,n)};return{clearBeforeUpdate:l,clear:s,selectRange:(o,n,l,a)=>{s(o),N(n,r),ge(l,e.firstSelected,"1"),ge(a,e.lastSelected,"1"),t(n,l,a)},selectedSelector:e.selectedSelector,firstSelectedSelector:e.firstSelectedSelector,lastSelectedSelector:e.lastSelectedSelector}})(Is,((t,o,n)=>{Gt(o).each((r=>{const s=E(t,(e=>e.dom)),l=Wr(e),a=_r(f,xe.fromDom(e.getDoc()),l),c=((e,t,o)=>{const n=Xo(e);return zl(n,t).map((e=>{const t=Ol(n,o,!1),{rows:r}=Vo(t),s=((e,t)=>{const o=e.slice(0,t[t.length-1].row+1),n=kl(o);return j(n,(e=>{const o=e.cells.slice(0,t[t.length-1].column+1);return E(o,(e=>e.element))}))})(r,e),l=((e,t)=>{const o=e.slice(t[0].row+t[0].rowspan-1,e.length),n=kl(o);return j(n,(e=>{const o=e.cells.slice(t[0].column+t[0].colspan-1,e.cells.length);return E(o,(e=>e.element))}))})(r,e);return{upOrLeftCells:s,downOrRightCells:l}}))})(r,{selection:qs(e)},a).map((e=>K(e,(e=>E(e,(e=>e.dom)))))).getOrUndefined();((e,t,o,n,r)=>{e.dispatch("TableSelectionChange",{cells:t,start:o,finish:n,otherCells:r})})(e,s,o.dom,n.dom,c)}))}),(()=>(e=>{e.dispatch("TableSelectionClear")})(e)));var r;return e.on("init",(o=>{const r=e.getWin(),s=os(e),l=ns(e),a=((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=mm(),s=r.clear,l=s=>{r.on((r=>{n.clearBeforeUpdate(t),dm(s.target,o).each((l=>{Os(r,l,o).each((o=>{const r=o.boxes.getOr([]);if(1===r.length){const e=r[0],o="false"===ts(e),l=vt(Zr(s.target),e,Re);o&&l&&n.selectRange(t,r,e,e)}else r.length>1&&(n.selectRange(t,r,o.start,o.finish),e.selectContents(l))}))}))}))};return{clearstate:s,mousedown:e=>{n.clear(t),dm(e.target,o).filter(um).each(r.set)},mouseover:e=>{l(e)},mouseup:e=>{l(e),s()}}})(Lm(e),t,o,n);return{clearstate:r.clearstate,mousedown:r.mousedown,mouseover:r.mouseover,mouseup:r.mouseup}})(r,s,l,n),c=((e,t,o,n)=>{const r=Lm(e),s=()=>(n.clear(t),C.none());return{keydown:(e,l,a,c,i,m)=>{const d=e.raw,u=d.which,f=!0===d.shiftKey,g=ks(t,n.selectedSelector).fold((()=>(wm(u)&&!f&&n.clearBeforeUpdate(t),wm(u)&&f&&!jm(l,c)?C.none:bm(u)&&f?b(cm,r,t,o,fm,c,l,n.selectRange):pm(u)&&f?b(cm,r,t,o,gm,c,l,n.selectRange):bm(u)?b(sm,r,o,fm,c,l,am):pm(u)?b(sm,r,o,gm,c,l,lm):C.none)),(e=>{const o=o=>()=>{const s=V(o,(o=>((e,t,o,n,r)=>Ns(n,e,t,r.firstSelectedSelector,r.lastSelectedSelector).map((e=>(r.clearBeforeUpdate(o),r.selectRange(o,e.boxes,e.start,e.finish),e.boxes))))(o.rows,o.cols,t,e,n)));return s.fold((()=>Es(t,n.firstSelectedSelector,n.lastSelectedSelector).map((e=>{const o=bm(u)||m.isForward(u)?ri.after:ri.before;return r.setRelativeSelection(ri.on(e.first,0),o(e.table)),n.clear(t),si(C.none(),!0)}))),(e=>C.some(si(C.none(),!0))))};return wm(u)&&f&&!jm(l,c)?C.none:bm(u)&&f?o([Wm(1,0)]):pm(u)&&f?o([Wm(-1,0)]):m.isBackward(u)&&f?o([Wm(0,-1),Wm(-1,0)]):m.isForward(u)&&f?o([Wm(0,1),Wm(1,0)]):wm(u)&&!f?s:C.none}));return g()},keyup:(e,r,s,l,a)=>ks(t,n.selectedSelector).fold((()=>{const c=e.raw,i=c.which;return!0===c.shiftKey&&wm(i)&&jm(r,l)?((e,t,o,n,r,s,l)=>Re(o,r)&&n===s?C.none():wt(o,"td,th",t).bind((o=>wt(r,"td,th",t).bind((n=>yi(e,t,o,n,l))))))(t,o,r,s,l,a,n.selectRange):C.none()}),C.none)}})(r,s,l,n),i=((e,t,o,n)=>{const r=Lm(e);return(e,s)=>{n.clearBeforeUpdate(t),Os(e,s,o).each((e=>{const o=e.boxes.getOr([]);n.selectRange(t,o,e.start,e.finish),r.selectContents(s),r.collapseSelection()}))}})(r,s,l,n);e.on("TableSelectorChange",(e=>i(e.start,e.finish)));const m=(t,o)=>{(e=>!0===e.raw.shiftKey)(t)&&(o.kill&&t.kill(),o.selection.each((t=>{const o=Cm.relative(t.start,t.finish),n=hi(r,o);e.selection.setRng(n)})))},d=e=>0===e.button,u=(()=>{const e=im(xe.fromDom(s)),t=im(0);return{touchEnd:o=>{const n=xe.fromDom(o.target);if(ue("td")(n)||ue("th")(n)){const r=e.get(),s=t.get();Re(r,n)&&o.timeStamp-s<300&&(o.preventDefault(),i(n,n))}e.set(n),t.set(o.timeStamp)}}})();e.on("dragstart",(e=>{a.clearstate()})),e.on("mousedown",(e=>{d(e)&&Qm(e)&&a.mousedown(Jm(e))})),e.on("mouseover",(e=>{var t;(void 0===(t=e).buttons||1&t.buttons)&&Qm(e)&&a.mouseover(Jm(e))})),e.on("mouseup",(e=>{d(e)&&Qm(e)&&a.mouseup(Jm(e))})),e.on("touchend",u.touchEnd),e.on("keyup",(t=>{const o=Jm(t);if(o.raw.shiftKey&&wm(o.raw.which)){const t=e.selection.getRng(),n=xe.fromDom(t.startContainer),r=xe.fromDom(t.endContainer);c.keyup(o,n,t.startOffset,r,t.endOffset).each((e=>{m(o,e)}))}})),e.on("keydown",(o=>{const n=Jm(o);t.hide();const r=e.selection.getRng(),s=xe.fromDom(r.startContainer),l=xe.fromDom(r.endContainer),a=dn(vm,ym)(xe.fromDom(e.selection.getStart()));c.keydown(n,s,r.startOffset,l,r.endOffset,a).each((e=>{m(n,e)})),t.show()})),e.on("NodeChange",(()=>{const t=e.selection,o=xe.fromDom(t.getStart()),r=xe.fromDom(t.getEnd());Rs(Gt,[o,r]).fold((()=>n.clear(s)),f)}))})),e.on("PreInit",(()=>{e.serializer.addTempAttr(Is.firstSelected),e.serializer.addTempAttr(Is.lastSelected)})),{getSelectedCells:()=>((e,t)=>{switch(e.tag){case"none":return t();case"single":return(e=>[e.dom])(e.element);case"multiple":return(e=>E(e,(e=>e.dom)))(e.elements)}})(o.get(),g([])),clearSelectedCells:e=>n.clear(xe.fromDom(e))}},Zm=e=>{let t=[];return{bind:e=>{if(void 0===e)throw new Error("Event bind error: undefined handler");t.push(e)},unbind:e=>{t=B(t,(t=>t!==e))},trigger:(...o)=>{const n={};N(e,((e,t)=>{n[e]=o[t]})),N(t,(e=>{e(n)}))}}},ed=e=>({registry:K(e,(e=>({bind:e.bind,unbind:e.unbind}))),trigger:K(e,(e=>e.trigger))}),td=e=>e.slice(0).sort(),od=(e,t)=>{const o=B(t,(t=>!D(e,t)));o.length>0&&(e=>{throw new Error("Unsupported keys for object: "+td(e).join(", "))})(o)},nd=e=>((e,t)=>((e,t,o)=>{if(0===t.length)throw new Error("You must specify at least one required field.");return((e,t)=>{if(!l(t))throw new Error("The "+e+" fields must be an array. Was: "+t+".");N(t,(t=>{if(!r(t))throw new Error("The value "+t+" in the "+e+" fields was not a string.")}))})("required",t),(e=>{const t=td(e);L(t,((e,o)=>o{throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+t.join(", ")+"].")}))})(t),n=>{const r=q(n);P(t,(e=>D(r,e)))||((e,t)=>{throw new Error("All required keys ("+td(e).join(", ")+") were not specified. Specified keys were: "+td(t).join(", ")+".")})(t,r),e(t,r);const s=B(t,(e=>!o.validate(n[e],e)));return s.length>0&&((e,t)=>{throw new Error("All values need to be of type: "+t+". Keys ("+td(e).join(", ")+") were not.")})(s,o.label),n}})(e,t,{validate:d,label:"function"}))(od,e),rd=nd(["compare","extract","mutate","sink"]),sd=nd(["element","start","stop","destroy"]),ld=nd(["forceDrop","drop","move","delayDrop"]),ad=()=>{const e=(()=>{const e=ed({move:Zm(["info"])});return{onEvent:f,reset:f,events:e.registry}})(),t=(()=>{let e=C.none();const t=ed({move:Zm(["info"])});return{onEvent:(o,n)=>{n.extract(o).each((o=>{const r=((t,o)=>{const n=e.map((e=>t.compare(e,o)));return e=C.some(o),n})(n,o);r.each((e=>{t.trigger.move(e)}))}))},reset:()=>{e=C.none()},events:t.registry}})();let o=e;return{on:()=>{o.reset(),o=t},off:()=>{o.reset(),o=e},isOn:()=>o===t,onEvent:(e,t)=>{o.onEvent(e,t)},events:t.events}},cd=e=>{const t=e.replace(/\./g,"-");return{resolve:e=>t+"-"+e}},id=cd("ephox-dragster").resolve;var md=rd({compare:(e,t)=>bn(t.left-e.left,t.top-e.top),extract:e=>C.some(bn(e.x,e.y)),sink:(e,t)=>{const o=(e=>{const t={layerClass:id("blocker"),...e},o=xe.fromTag("div");return ge(o,"role","presentation"),_t(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),Fm(o,id("blocker")),Fm(o,t.layerClass),{element:g(o),destroy:()=>{qe(o)}}})(t),n=Ym(o.element(),"mousedown",e.forceDrop),r=Ym(o.element(),"mouseup",e.drop),s=Ym(o.element(),"mousemove",e.move),l=Ym(o.element(),"mouseout",e.delayDrop);return sd({element:o.element,start:e=>{Ie(e,o.element())},stop:()=>{qe(o.element())},destroy:()=>{o.destroy(),r.unbind(),s.unbind(),l.unbind(),n.unbind()}})},mutate:(e,t)=>{e.mutate(t.left,t.top)}});const dd=cd("ephox-snooker").resolve,ud=dd("resizer-bar"),fd=dd("resizer-rows"),gd=dd("resizer-cols"),hd=e=>{const t=dt(e.parent(),"."+ud);N(t,qe)},pd=(e,t,o)=>{const n=e.origin();N(t,(t=>{t.each((t=>{const r=o(n,t);Fm(r,ud),Ie(e.parent(),r)}))}))},bd=(e,t,o,n,r)=>{const s=vn(o),l=t.isResizable,a=n.length>0?_n.positions(n,o):[],c=a.length>0?((e,t)=>j(e.all,((e,o)=>t(e.element)?[o]:[])))(e,l):[];((e,t,o,n)=>{pd(e,t,((e,t)=>{const r=((e,t,o,n)=>{const r=xe.fromTag("div");return _t(r,{position:"absolute",left:t+"px",top:o-3.5+"px",height:"7px",width:n+"px"}),he(r,{"data-row":e,role:"presentation"}),r})(t.row,o.left-e.left,t.y-e.top,n);return Fm(r,fd),r}))})(t,B(a,((e,t)=>O(c,(e=>t===e)))),s,Lo(o));const i=r.length>0?zn.positions(r,o):[],m=i.length>0?((e,t)=>{const o=[];return k(e.grid.columns,(n=>{ln(e,n).map((e=>e.element)).forall(t)&&o.push(n)})),B(o,(o=>{const n=on(e,(e=>e.column===o));return P(n,(e=>t(e.element)))}))})(e,l):[];((e,t,o,n)=>{pd(e,t,((e,t)=>{const r=((e,t,o,n,r)=>{const s=xe.fromTag("div");return _t(s,{position:"absolute",left:t-3.5+"px",top:o+"px",height:r+"px",width:"7px"}),he(s,{"data-column":e,role:"presentation"}),s})(t.col,t.x-e.left,o.top-e.top,0,n);return Fm(r,gd),r}))})(t,B(i,((e,t)=>O(m,(e=>t===e)))),s,hn(o))},wd=(e,t)=>{if(hd(e),e.isResizable(t)){const o=Xo(t),n=mn(o),r=an(o);bd(o,e,t,n,r)}},vd=(e,t)=>{const o=dt(e.parent(),"."+ud);N(o,t)},yd=e=>{vd(e,(e=>{Nt(e,"display","none")}))},xd=e=>{vd(e,(e=>{Nt(e,"display","block")}))},Cd=dd("resizer-bar-dragging"),Sd=e=>{const t=(()=>{const e=ed({drag:Zm(["xDelta","yDelta","target"])});let t=C.none();const o=(()=>{const e=ed({drag:Zm(["xDelta","yDelta"])});return{mutate:(t,o)=>{e.trigger.drag(t,o)},events:e.registry}})();return o.events.drag.bind((o=>{t.each((t=>{e.trigger.drag(o.xDelta,o.yDelta,t)}))})),{assign:e=>{t=C.some(e)},get:()=>t,mutate:o.mutate,events:e.registry}})(),o=((e,t={})=>{var o;return((e,t,o)=>{let n=!1;const r=ed({start:Zm([]),stop:Zm([])}),s=ad(),l=()=>{m.stop(),s.isOn()&&(s.off(),r.trigger.stop())},c=(e=>{let t=null;const o=()=>{a(t)||(clearTimeout(t),t=null)};return{cancel:o,throttle:(...n)=>{o(),t=setTimeout((()=>{t=null,e.apply(null,n)}),200)}}})(l);s.events.move.bind((o=>{t.mutate(e,o.info)}));const i=e=>(...t)=>{n&&e.apply(null,t)},m=t.sink(ld({forceDrop:l,drop:i(l),move:i((e=>{c.cancel(),s.onEvent(e,t)})),delayDrop:i(c.throttle)}),o);return{element:m.element,go:e=>{m.start(e),s.on(),r.trigger.start()},on:()=>{n=!0},off:()=>{n=!1},isActive:()=>n,destroy:()=>{m.destroy()},events:r.registry}})(e,null!==(o=t.mode)&&void 0!==o?o:md,t)})(t,{});let n=C.none();const r=(e,t)=>C.from(pe(e,t));t.events.drag.bind((e=>{r(e.target,"data-row").each((t=>{const o=Pt(e.target,"top");Nt(e.target,"top",o+e.yDelta+"px")})),r(e.target,"data-column").each((t=>{const o=Pt(e.target,"left");Nt(e.target,"left",o+e.xDelta+"px")}))}));const s=(e,t)=>Pt(e,t)-Wt(e,"data-initial-"+t,0);o.events.stop.bind((()=>{t.get().each((t=>{n.each((o=>{r(t,"data-row").each((e=>{const n=s(t,"top");we(t,"data-initial-top"),d.trigger.adjustHeight(o,n,parseInt(e,10))})),r(t,"data-column").each((e=>{const n=s(t,"left");we(t,"data-initial-left"),d.trigger.adjustWidth(o,n,parseInt(e,10))})),wd(e,o)}))}))}));const l=(n,r)=>{d.trigger.startAdjust(),t.assign(n),ge(n,"data-initial-"+r,Pt(n,r)),Fm(n,Cd),Nt(n,"opacity","0.2"),o.go(e.dragContainer())},c=Ym(e.parent(),"mousedown",(e=>{var t;t=e.target,Hm(t,fd)&&l(e.target,"top"),(e=>Hm(e,gd))(e.target)&&l(e.target,"left")})),i=t=>Re(t,e.view()),m=Ym(e.view(),"mouseover",(t=>{var r;(r=t.target,wt(r,"table",i).filter(es)).fold((()=>{st(t.target)&&hd(e)}),(t=>{o.isActive()&&(n=C.some(t),wd(e,t))}))})),d=ed({adjustHeight:Zm(["table","delta","row"]),adjustWidth:Zm(["table","delta","column"]),startAdjust:Zm([])});return{destroy:()=>{c.unbind(),m.unbind(),o.destroy(),hd(e)},refresh:t=>{wd(e,t)},on:o.on,off:o.off,hideBars:b(yd,e),showBars:b(xd,e),events:d.registry}};let Td=0;const Rd=(e,t)=>{const o=(e=>!(e=>e.inline&&(e=>{var t;if(!e.inline)return C.none();const o=null!==(t=Jr(e))&&void 0!==t?t:"";if(o.length>0)return bt(lt(),o);const n=Qr(e);return m(n)?C.some(xe.fromDom(n)):C.none()})(e).isSome())(e)&&"split"===Xr(e))(e),n=xe.fromDom(e.getBody()),r=(e=>{const t=(e=>{const t=(new Date).getTime(),o=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return Td++,e+"_"+o+Td+String(t)})("resizer-container"),o=xe.fromTag("div");return ge(o,"id",t),_t(o,{position:e,height:"0",width:"0",padding:"0",margin:"0",border:"0"}),o})(o?"relative":"static"),s=lt();return o?(je(n,r),((e,t,o,n)=>({parent:g(t),view:g(e),dragContainer:g(o),origin:()=>vn(t),isResizable:n}))(n,r,s,t)):(Ie(s,r),((e,t,o)=>({parent:g(t),view:g(e),dragContainer:g(t),origin:g(bn(0,0)),isResizable:o}))(n,r,t))},Dd=e=>m(e)&&"TABLE"===e.nodeName,Od="bar-",kd=e=>"false"!==pe(e,"data-mce-resize"),Ed=e=>{const t=mm(),o=mm(),n=mm();let r,s,l,a;const c=t=>wc(e,t),i=()=>Pr(e)?ll():sl(),m=(t,o,n,m)=>{const d=(e=>{return Tt(t=e,"corner-")?(e=>e.substring(7))(t):t;var t})(o),u=Rt(d,"e"),f=Tt(d,"n");if(""===s&&Lc(t),""===a&&(e=>{const t=(e=>gn(e)+"px")(e);Nc(e,C.none(),C.some(t)),Ac(e)})(t),n!==r&&""!==s){Nt(t,"width",s);const o=i(),l=c(t),a=Pr(e)||u?(e=>al(e).columns)(t)-1:0;ca(t,n-r,a,o,l)}else if((e=>/^(\d+(\.\d+)?)%$/.test(e))(s)){const e=parseFloat(s.replace("%",""));Nt(t,"width",n*e/r+"%")}if((e=>/^(\d+(\.\d+)?)px$/.test(e))(s)&&(e=>{const t=Xo(e);sn(t)||N(qt(e),(e=>{const t=Bt(e,"width");Nt(e,"width",t),we(e,"width")}))})(t),m!==l&&""!==a){Nt(t,"height",a);const e=f?0:(e=>al(e).rows)(t)-1;ia(t,m-l,e)}};e.on("init",(()=>{const r=((e,t)=>e.inline?Rd(e,t):((e,t)=>{const o=me(e)?(e=>xe.fromDom(Ee(e).dom.documentElement))(e):e;return{parent:g(o),view:g(e),dragContainer:g(o),origin:g(bn(0,0)),isResizable:t}})(xe.fromDom(e.getDoc()),t))(e,kd);if(n.set(r),(e=>{const t=e.options.get("object_resizing");return D(t.split(","),"table")})(e)&&qr(e)){const n=((e,t,o)=>{const n=_n,r=zn,s=Sd(e),l=ed({beforeResize:Zm(["table","type"]),afterResize:Zm(["table","type"]),startDrag:Zm([])});return s.events.adjustHeight.bind((e=>{const t=e.table;l.trigger.beforeResize(t,"row");const o=n.delta(e.delta,t);ia(t,o,e.row),l.trigger.afterResize(t,"row")})),s.events.startAdjust.bind((e=>{l.trigger.startDrag()})),s.events.adjustWidth.bind((e=>{const n=e.table;l.trigger.beforeResize(n,"col");const s=r.delta(e.delta,n),a=o(n);ca(n,s,e.column,t,a),l.trigger.afterResize(n,"col")})),{on:s.on,off:s.off,refreshBars:s.refresh,hideBars:s.hideBars,showBars:s.showBars,destroy:s.destroy,events:l.registry}})(r,i(),c);e.mode.isReadOnly()||n.on(),n.events.startDrag.bind((o=>{t.set(e.selection.getRng())})),n.events.beforeResize.bind((t=>{const o=t.table.dom;((e,t,o,n,r)=>{e.dispatch("ObjectResizeStart",{target:t,width:o,height:n,origin:r})})(e,o,ls(o),as(o),Od+t.type)})),n.events.afterResize.bind((o=>{const n=o.table,r=n.dom;rs(n),t.on((t=>{e.selection.setRng(t),e.focus()})),((e,t,o,n,r)=>{e.dispatch("ObjectResized",{target:t,width:o,height:n,origin:r})})(e,r,ls(r),as(r),Od+o.type),e.undoManager.add()})),o.set(n)}})),e.on("ObjectResizeStart",(t=>{const o=t.target;if(Dd(o)&&!e.mode.isReadOnly()){const n=xe.fromDom(o);N(e.dom.select(".mce-clonedresizable"),(t=>{e.dom.addClass(t,"mce-"+jr(e)+"-columns")})),!Bc(n)&&$r(e)?Wc(n):!_c(n)&&Hr(e)&&Lc(n),zc(n)&&Tt(t.origin,Od)&&Lc(n),r=t.width,s=Vr(e)?"":is(e,o).getOr(""),l=t.height,a=ms(e,o).getOr("")}})),e.on("ObjectResized",(t=>{const o=t.target;if(Dd(o)){const n=xe.fromDom(o),r=t.origin;(e=>Tt(e,"corner-"))(r)&&m(n,r,t.width,t.height),rs(n),gc(e,n.dom,hc)}}));const d=()=>{o.on((e=>{e.on(),e.showBars()}))},u=()=>{o.on((e=>{e.off(),e.hideBars()}))};return e.on("DisabledStateChange",(e=>{e.state?u():d()})),e.on("SwitchMode",(()=>{e.mode.isReadOnly()?u():d()})),e.on("dragstart dragend",(e=>{"dragstart"===e.type?u():d()})),e.on("remove",(()=>{o.on((e=>{e.destroy()})),n.on((t=>{((e,t)=>{e.inline&&qe(t.parent())})(e,t)}))})),{refresh:e=>{o.on((t=>t.refreshBars(xe.fromDom(e))))},hide:()=>{o.on((e=>e.hideBars()))},show:()=>{o.on((e=>e.showBars()))}}},Nd=e=>{(e=>{const t=e.options.register;t("table_clone_elements",{processor:"string[]"}),t("table_use_colgroups",{processor:"boolean",default:!0}),t("table_header_type",{processor:e=>{const t=D(["section","cells","sectionCells","auto"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be one of: section, cells, sectionCells or auto."}},default:"section"}),t("table_sizing_mode",{processor:"string",default:"auto"}),t("table_default_attributes",{processor:"object",default:{border:"1"}}),t("table_default_styles",{processor:"object",default:{"border-collapse":"collapse"}}),t("table_column_resizing",{processor:e=>{const t=D(["preservetable","resizetable"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be preservetable, or resizetable."}},default:"preservetable"}),t("table_resize_bars",{processor:"boolean",default:!0}),t("table_style_by_css",{processor:"boolean",default:!0}),t("table_merge_content_on_paste",{processor:"boolean",default:!0})})(e);const t=Ed(e),o=Xm(e,t),n=vc(e,t,o);return oi(e,n),((e,t)=>{const o=ns(e),n=t=>Vs(ss(e)).bind((n=>Gt(n,o).map((o=>{const r=Fs(qs(e),o,n);return t(o,r)})))).getOr("");G({mceTableRowType:()=>n(t.getTableRowType),mceTableCellType:()=>n(t.getTableCellType),mceTableColType:()=>n(t.getTableColType)},((t,o)=>e.addQueryValueHandler(o,t)))})(e,n),Us(e,n),{getSelectedCells:o.getSelectedCells,clearSelectedCells:o.clearSelectedCells}};e.add("dom",(e=>({table:Nd(e)})))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/accordion/plugin.min.js b/apps/web-antd/public/tinymce/plugins/accordion/plugin.min.js new file mode 100644 index 000000000..3c8860445 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/accordion/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const o=e=>t=>typeof t===e,n=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(e),r=o("boolean"),s=e=>null==e,i=e=>!s(e),a=o("function"),d=o("number"),l=e=>()=>e,c=(e,t)=>e===t,m=l(!1);class u{constructor(e,t){this.tag=e,this.value=t}static some(e){return new u(!0,e)}static none(){return u.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?u.some(e(this.value)):u.none()}bind(e){return this.tag?e(this.value):u.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:u.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return i(e)?u.some(e):u.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}u.singletonNone=new u(!1);const g=Array.prototype.indexOf,p=(e,t)=>{return o=e,n=t,g.call(o,n)>-1;var o,n},h=(e,t)=>{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;oe.dom.nodeName.toLowerCase(),w=e=>e.dom.nodeType,b=e=>t=>w(t)===e,N=b(1),T=b(3),A=b(9),C=b(11),S=(e,t,o)=>{if(!(n(o)||r(o)||d(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},x=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},D=(e,t)=>u.from(x(e,t)),E=(e,t)=>{e.dom.removeAttribute(t)},O=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},M={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return O(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return O(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return O(o)},fromDom:O,fromPoint:(e,t,o)=>u.from(e.dom.elementFromPoint(t,o)).map(O)},P=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},R=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,k=P,B=(L=/^\s+|\s+$/g,e=>e.replace(L,""));var L;const $=e=>void 0!==e.style&&a(e.style.getPropertyValue),V=e=>u.from(e.dom.parentNode).map(M.fromDom),I=e=>u.from(e.dom.nextSibling).map(M.fromDom),j=e=>h(e.dom.childNodes,M.fromDom),q=e=>M.fromDom(e.dom.host),F=e=>{const t=T(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=(e=>M.fromDom(e.dom.getRootNode()))(e);return C(o=t)&&i(o.dom.host)?u.some(t):u.none();var o})(M.fromDom(t)).fold((()=>o.body.contains(t)),(n=F,r=q,e=>n(r(e))));var n,r},H=(e,t)=>$(e)?e.style.getPropertyValue(t):"",z=(e,t)=>{V(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},K=(e,t)=>{I(e).fold((()=>{V(e).each((e=>{U(e,t)}))}),(e=>{z(e,t)}))},U=(e,t)=>{e.dom.appendChild(t.dom)},Y=(e,t)=>{f(t,((o,n)=>{const r=0===n?e:t[n-1];K(r,o)}))},_=(e,t)=>{let o=[];return f(j(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(_(e,t))})),o},G=(e,t,o)=>{let n=e.dom;const r=a(o)?o:m;for(;n.parentNode;){n=n.parentNode;const e=M.fromDom(n);if(t(e))return u.some(e);if(r(e))break}return u.none()},J=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Q=(e,t,o)=>G(e,(e=>P(e,t)),o),W=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return R(o)?u.none():u.from(o.querySelector(e)).map(M.fromDom)})(t,e),X=(e=>{const t=t=>e(t)?u.from(t.dom.nodeValue):u.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(T);var Z=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];const ee=(e,t)=>({element:e,offset:t}),te=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>te(e,t,o).orThunk((()=>u.some(t))))):u.none(),oe=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,ne=(e,t)=>{const o=te(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return ee(o,oe(e,o));const n=e.property().children(o);return n.length>0?ne(e,n[n.length-1]):ee(o,oe(e,o))},re=ne,se={up:l({selector:Q,closest:(e,t,o)=>((e,t,o,n,r)=>((e,t)=>P(e,t))(o,n)?u.some(o):a(r)&&r(o)?u.none():t(o,n,r))(0,Q,e,t,o),predicate:G,all:(e,t)=>{const o=a(t)?t:m;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=M.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r}}),down:l({selector:(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return R(o)?[]:h(o.querySelectorAll(e),M.fromDom)})(t,e),predicate:_}),styles:l({get:(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||F(e)?n:H(o,t)},getRaw:(e,t)=>{const o=e.dom,n=H(o,t);return u.from(n).filter((e=>e.length>0))},set:(e,t,o)=>{((e,t,o)=>{if(!n(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);$(e)&&e.style.setProperty(t,o)})(e.dom,t,o)},remove:(e,t)=>{((e,t)=>{$(e)&&e.style.removeProperty(t)})(e.dom,t),((e,t,o=c)=>e.exists((e=>o(e,t))))(D(e,"style").map(B),"")&&E(e,"style")}}),attrs:l({get:x,set:(e,t,o)=>{S(e.dom,t,o)},remove:E,copyTo:(e,t)=>{const o=(n=e.dom.attributes,r=(e,t)=>(e[t.name]=t.value,e),s={},f(n,((e,t)=>{s=r(s,e)})),s);var n,r,s;((e,t)=>{const o=e.dom;((e,t)=>{const o=y(e);for(let n=0,r=o.length;n{S(o,t,e)}))})(t,o)}}),insert:l({before:z,after:K,afterAll:Y,append:U,appendAll:(e,t)=>{f(t,(t=>{U(e,t)}))},prepend:(e,t)=>{(e=>(e=>{const t=e.dom.childNodes;return u.from(t[0]).map(M.fromDom)})(e))(e).fold((()=>{U(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},wrap:(e,t)=>{z(e,t),U(t,e)}}),remove:l({unwrap:e=>{const t=j(e);t.length>0&&Y(e,t),J(e)},remove:J}),create:l({nu:M.fromTag,clone:e=>M.fromDom(e.dom.cloneNode(!1)),text:M.fromText}),query:l({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:e=>u.from(e.dom.previousSibling).map(M.fromDom),nextSibling:I}),property:l({children:j,name:v,parent:V,document:e=>{return(t=e,A(t)?t:M.fromDom(t.dom.ownerDocument)).dom;var t},isText:T,isComment:e=>8===w(e)||"#comment"===v(e),isElement:N,isSpecial:e=>{const t=v(e);return p(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>N(e)?D(e,"lang"):u.none(),getText:e=>X.get(e),setText:(e,t)=>X.set(e,t),isBoundary:e=>!!N(e)&&("body"===v(e)||p(Z,v(e))),isEmptyTag:e=>!!N(e)&&p(["br","img","hr","input"],v(e)),isNonEditable:e=>N(e)&&"false"===x(e,"contenteditable")}),eq:(e,t)=>e.dom===t.dom,is:k},ie="details",ae="mce-accordion",de="mce-accordion-summary",le="mce-accordion-body",ce="div";var me=tinymce.util.Tools.resolve("tinymce.util.Tools");const ue=e=>"SUMMARY"===(null==e?void 0:e.nodeName),ge=e=>"DETAILS"===(null==e?void 0:e.nodeName),pe=e=>e.hasAttribute("open"),he=e=>{const t=e.selection.getNode();return ue(t)||Boolean(e.dom.getParent(t,ue))},fe=e=>!he(e)&&e.dom.isEditable(e.selection.getNode())&&!e.mode.isReadOnly(),ye=e=>u.from(e.dom.getParent(e.selection.getNode(),ge)),ve=e=>(e.innerHTML='
',e),we=e=>ve(e.dom.create("p")),be=e=>t=>{((e,t)=>{if(ue(null==t?void 0:t.lastChild)){const o=we(e);t.appendChild(o),e.selection.setCursorLocation(o,0)}})(e,t),((e,t)=>{if(!ue(null==t?void 0:t.firstChild)){const o=(e=>ve(e.dom.create("summary")))(e);t.prepend(o),e.selection.setCursorLocation(o,0)}})(e,t)},Ne=e=>{if(!fe(e))return;const o=M.fromDom(e.getBody()),n=(e=>{const o=(new Date).getTime(),n=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return t++,e+"_"+n+t+String(o)})("acc"),r=e.dom.encode(e.selection.getRng().toString()||e.translate("Accordion summary...")),s=e.dom.encode(e.translate("Accordion body...")),i=`${r}`,a=`<${ce} class="${le}">

${s}

`;e.undoManager.transact((()=>{e.insertContent([`
`,i,a,"
"].join("")),W(o,`[data-mce-id="${n}"]`).each((t=>{E(t,"data-mce-id"),W(t,"summary").each((t=>{const o=e.dom.createRng(),n=re(se,t);o.setStart(n.element.dom,n.offset),o.setEnd(n.element.dom,n.offset),e.selection.setRng(o)}))}))}))},Te=(e,t)=>{const o=null!=t?t:!pe(e);return o?e.setAttribute("open","open"):e.removeAttribute("open"),o},Ae=e=>{e.addCommand("InsertAccordion",(()=>Ne(e))),e.addCommand("ToggleAccordion",((t,o)=>((e,t)=>{ye(e).each((o=>{((e,t,o)=>{e.dispatch("ToggledAccordion",{element:t,state:o})})(e,o,Te(o,t))}))})(e,o))),e.addCommand("ToggleAllAccordions",((t,o)=>((e,t)=>{const o=Array.from(e.getBody().querySelectorAll("details"));0!==o.length&&(f(o,(e=>Te(e,null!=t?t:!pe(e)))),((e,t,o)=>{e.dispatch("ToggledAllAccordions",{elements:t,state:o})})(e,o,t))})(e,o))),e.addCommand("RemoveAccordion",(()=>(e=>{e.mode.isReadOnly()||ye(e).each((t=>{const{nextSibling:o}=t;o?(e.selection.select(o,!0),e.selection.collapse(!0)):((e,t)=>{const o=we(e);t.insertAdjacentElement("afterend",o),e.selection.setCursorLocation(o,0)})(e,t),t.remove()}))})(e)))};var Ce=tinymce.util.Tools.resolve("tinymce.html.Node");const Se=e=>{var t,o;return null!==(o=null===(t=e.attr("class"))||void 0===t?void 0:t.split(" "))&&void 0!==o?o:[]},xe=(e,t)=>{const o=new Set([...Se(e),...t]),n=Array.from(o);n.length>0&&e.attr("class",n.join(" "))},De=(e,t)=>{const o=(e=>{const o=[];for(let r=0,s=e.length;r0?o.join(" "):null)},Ee=e=>e.name===ie&&p(Se(e),ae),Oe=e=>{const t=e.children();let o,n;const r=[];for(let e=0;e{const t=new Ce("br",1);t.attr("data-mce-bogus","1"),e.empty(),e.append(t)};var Pe=tinymce.util.Tools.resolve("tinymce.util.VK");const Re=e=>{(e=>{e.on("keydown",(t=>{(!t.shiftKey&&t.keyCode===Pe.ENTER&&he(e)||(e=>{const t=e.selection.getRng();return ge(t.startContainer)&&t.collapsed&&0===t.startOffset})(e))&&(t.preventDefault(),e.execCommand("ToggleAccordion"))}))})(e),e.on("ExecCommand",(t=>{const o=t.command.toLowerCase();"delete"!==o&&"forwarddelete"!==o||!(e=>ye(e).isSome())(e)||(e=>{me.each(me.grep(e.dom.select("details",e.getBody())),be(e))})(e)}))};var ke=tinymce.util.Tools.resolve("tinymce.Env");const Be=e=>t=>{const o=()=>t.setEnabled(fe(e));return e.on("NodeChange",o),()=>e.off("NodeChange",o)};e.add("accordion",(e=>{(e=>{const t=()=>e.execCommand("InsertAccordion");e.ui.registry.addButton("accordion",{icon:"accordion",tooltip:"Insert accordion",onSetup:Be(e),onAction:t}),e.ui.registry.addMenuItem("accordion",{icon:"accordion",text:"Accordion",onSetup:Be(e),onAction:t}),e.ui.registry.addToggleButton("accordiontoggle",{icon:"accordion-toggle",tooltip:"Toggle accordion",onAction:()=>e.execCommand("ToggleAccordion")}),e.ui.registry.addToggleButton("accordionremove",{icon:"remove",tooltip:"Delete accordion",onAction:()=>e.execCommand("RemoveAccordion")}),e.ui.registry.addContextToolbar("accordion",{predicate:t=>e.dom.is(t,"details")&&e.getBody().contains(t)&&e.dom.isEditable(t.parentNode),items:"accordiontoggle accordionremove",scope:"node",position:"node"})})(e),Ae(e),Re(e),(e=>{e.on("PreInit",(()=>{const{serializer:t,parser:o}=e;o.addNodeFilter(ie,(e=>{for(let t=0;t0)for(let e=0;e{const t=new Set([de]);for(let o=0;o{ke.browser.isSafari()&&e.on("click",(t=>{if(ue(t.target)){const o=t.target,n=e.selection.getRng();n.collapsed&&n.startContainer===o.parentNode&&0===n.startOffset&&e.selection.setCursorLocation(o,0)}}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/advlist/plugin.min.js b/apps/web-antd/public/tinymce/plugins/advlist/plugin.min.js new file mode 100644 index 000000000..781711d9d --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/advlist/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=(t,e,s)=>{const r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===s?null:{"list-style-type":s})},s=t=>e=>e.options.get(t),r=s("advlist_number_styles"),n=s("advlist_bullet_styles"),l=t=>null==t,i=t=>!l(t);class o{constructor(t,e){this.tag=t,this.value=e}static some(t){return new o(!0,t)}static none(){return o.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?o.some(t(this.value)):o.none()}bind(t){return this.tag?t(this.value):o.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:o.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return i(t)?o.some(t):o.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}o.singletonNone=new o(!1);const a=Array.prototype.indexOf,u=Object.keys;var d=tinymce.util.Tools.resolve("tinymce.util.Tools");const c=t=>e=>i(e)&&t.test(e.nodeName),h=c(/^(OL|UL|DL)$/),g=c(/^(TH|TD)$/),p=t=>l(t)||"default"===t?"":t,m=(t,e)=>s=>((t,e)=>{const s=t.selection.getNode();return e({parents:t.dom.getParents(s),element:s}),t.on("NodeChange",e),()=>t.off("NodeChange",e)})(t,(r=>((t,r)=>{const n=t.selection.getStart(!0);s.setActive(((t,e,s)=>((t,e,s)=>{for(let e=0,n=t.length;ee.nodeName===s&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))))(t,r,e)),s.setEnabled(!((t,e)=>{const s=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&!t.dom.isEditable(e))(t,s)||!t.selection.isEditable()})(t,n))})(t,r.parents))),v=(t,s,r,n,l,i)=>{const c={"lower-latin":"lower-alpha","upper-latin":"upper-alpha","lower-alpha":"lower-latin","upper-alpha":"upper-latin"},h=(g=t=>{return e=i,s=t,a.call(e,s)>-1;var e,s},((t,e)=>{const s={};return((t,e)=>{const s=u(t);for(let r=0,n=s.length;r{const n=e(t,r);s[n.k]=n.v})),s})(c,((t,e)=>({k:e,v:g(t)}))));var g;t.ui.registry.addSplitButton(s,{tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(d.map(i,(t=>{const e="OL"===l?"num":"bull",s="disc"===t||"decimal"===t?"default":t,r=p(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:r,icon:"list-"+e+"-"+s,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(s,r)=>{e(t,l,r)},select:e=>{const s=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),s=t.dom.getStyle(e,"listStyleType");return o.from(s)})(t);return s.exists((t=>e===t||c[t]===e&&!h[e]))},onSetup:m(t,l)})},y=(t,s,r,n,l,i)=>{i.length>1?v(t,s,r,n,l,i):((t,s,r,n,l,i)=>{t.ui.registry.addToggleButton(s,{active:!1,tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",onSetup:m(t,l),onAction:()=>t.queryCommandState(n)||""===i?t.execCommand(n):e(t,l,i)})})(t,s,r,n,l,p(i[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{y(t,"numlist","Numbered list","InsertOrderedList","OL",r(t)),y(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((s,r)=>{e(t,"UL",r["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((s,r)=>{e(t,"OL",r["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the List Styles plugin.")}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/anchor/plugin.min.js b/apps/web-antd/public/tinymce/plugins/anchor/plugin.min.js new file mode 100644 index 000000000..3c944ed47 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/anchor/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=e=>e.options.get("allow_html_in_named_anchor");const a="a:not([href])",r=e=>!e,i=e=>e.getAttribute("id")||e.getAttribute("name")||"",l=e=>(e=>"a"===e.nodeName.toLowerCase())(e)&&!e.getAttribute("href")&&""!==i(e),s=e=>e.dom.getParent(e.selection.getStart(),a),d=(e,a)=>{const r=s(e);r?((e,t,o)=>{o.removeAttribute("name"),o.id=t,e.addVisual(),e.undoManager.add()})(e,a,r):((e,a)=>{e.undoManager.transact((()=>{n(e)||e.selection.collapse(!0),e.selection.isCollapsed()?e.insertContent(e.dom.createHTML("a",{id:a})):((e=>{const n=e.dom;t(n).walk(e.selection.getRng(),(e=>{o.each(e,(e=>{var t;l(t=e)&&!t.firstChild&&n.remove(e,!1)}))}))})(e),e.formatter.remove("namedAnchor",void 0,void 0,!0),e.formatter.apply("namedAnchor",{value:a}),e.addVisual())}))})(e,a),e.focus()},c=e=>(e=>r(e.attr("href"))&&!r(e.attr("id")||e.attr("name")))(e)&&!e.firstChild,m=e=>t=>{for(let o=0;ot=>{const o=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",o),o(),()=>{e.off("NodeChange",o)}};e.add("anchor",(e=>{(e=>{(0,e.options.register)("allow_html_in_named_anchor",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreInit",(()=>{e.parser.addNodeFilter("a",m("false")),e.serializer.addNodeFilter("a",m(null))}))})(e),(e=>{e.addCommand("mceAnchor",(()=>{(e=>{const t=(e=>{const t=s(e);return t?i(t):""})(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:t=>{((e,t)=>/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)?(d(e,t),!0):(e.windowManager.alert("ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!1))(e,t.getData().id)&&t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand("mceAnchor");e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:t,onSetup:t=>{const o=e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind,n=u(e)(t);return()=>{o(),n()}}}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:t,onSetup:u(e)})})(e),e.on("PreInit",(()=>{(e=>{e.formatter.register("namedAnchor",{inline:"a",selector:a,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:(e,t,o)=>l(e)})})(e)}))}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/autolink/plugin.min.js b/apps/web-antd/public/tinymce/plugins/autolink/plugin.min.js new file mode 100644 index 000000000..ba87c861c --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/autolink/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e);const l=e=>undefined===e;const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]")||e.mode.isReadOnly())return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),w=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),h=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),w);if(!h)return null;let v=h.container;const _=k.backwards(h.container,h.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),w),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(h.container,h.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=4&&b.substr(0,4)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/autoresize/plugin.min.js b/apps/web-antd/public/tinymce/plugins/autoresize/plugin.min.js new file mode 100644 index 000000000..1f5e37f58 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/autoresize/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env");const o=e=>t=>t.options.get(e),n=o("min_height"),s=o("max_height"),i=o("autoresize_overflow_padding"),r=o("autoresize_bottom_margin"),g=(e,t)=>{const o=e.getBody();o&&(o.style.overflowY=t?"":"hidden",t||(o.scrollTop=0))},l=(e,t,o,n)=>{var s;const i=parseInt(null!==(s=e.getStyle(t,o,n))&&void 0!==s?s:"",10);return isNaN(i)?0:i},a=(e,o,r,c)=>{var d;const u=e.dom,h=e.getDoc();if(!h)return;if((e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen())(e))return void g(e,!0);const m=h.documentElement,f=c?c():i(e),p=null!==(d=n(e))&&void 0!==d?d:e.getElement().offsetHeight;let y=p;const S=l(u,m,"margin-top",!0),v=l(u,m,"margin-bottom",!0);let C=m.offsetHeight+S+v+f;C<0&&(C=0);const H=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;C+H>p&&(y=C+H);const b=s(e);b&&y>b?(y=b,g(e,!0)):g(e,!1);const w=o.get();if(w.set&&(e.dom.setStyles(e.getDoc().documentElement,{"min-height":0}),e.dom.setStyles(e.getBody(),{"min-height":"inherit"})),y!==w.totalHeight&&(C-f!==w.contentHeight||!w.set)){const n=y-w.totalHeight;if(u.setStyle(e.getContainer(),"height",y+"px"),o.set({totalHeight:y,contentHeight:C,set:!0}),(e=>{e.dispatch("ResizeEditor")})(e),t.browser.isSafari()&&(t.os.isMacOS()||t.os.isiOS())){const t=e.getWin();t.scrollTo(t.pageXOffset,t.pageYOffset)}e.hasFocus()&&(e=>{if("setcontent"===(null==e?void 0:e.type.toLowerCase())){const t=e;return!0===t.selection||!0===t.paste}return!1})(r)&&e.selection.scrollIntoView(),(t.browser.isSafari()||t.browser.isChromium())&&n<0&&a(e,o,r,c)}};e.add("autoresize",(e=>{if((e=>{const t=e.options.register;t("autoresize_overflow_padding",{processor:"number",default:1}),t("autoresize_bottom_margin",{processor:"number",default:50})})(e),e.options.isSet("resize")||e.options.set("resize",!1),!e.inline){const o=(()=>{let e={totalHeight:0,contentHeight:0,set:!1};return{get:()=>e,set:t=>{e=t}}})();((e,t)=>{e.addCommand("mceAutoResize",(()=>{a(e,t)}))})(e,o),((e,o)=>{const n=()=>r(e);e.on("init",(s=>{const r=i(e),g=e.dom;g.setStyles(e.getDoc().documentElement,{height:"auto"}),t.browser.isEdge()||t.browser.isIE()?g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r,"min-height":0}):g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r}),a(e,o,s,n)})),e.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",(t=>{a(e,o,t,n)}))})(e,o)}}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/autosave/plugin.min.js b/apps/web-antd/public/tinymce/plugins/autosave/plugin.min.js new file mode 100644 index 000000000..354d42e6a --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/autosave/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(r=o=t,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":e;var r,o,a,s})(t);const r=t=>undefined===t;var o=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),s=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=t=>{const e=/^(\d+)([ms]?)$/.exec(t);return(e&&e[2]?{s:1e3,m:6e4}[e[2]]:1)*parseInt(t,10)},i=t=>e=>e.options.get(t),u=i("autosave_ask_before_unload"),l=i("autosave_restore_when_empty"),c=i("autosave_interval"),d=i("autosave_retention"),m=t=>{const e=document.location;return t.options.get("autosave_prefix").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},v=(t,e)=>{if(r(e))return t.dom.isEmpty(t.getBody());{const r=s.trim(e);if(""===r)return!0;{const e=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(e)}}},f=t=>{var e;const r=parseInt(null!==(e=a.getItem(m(t)+"time"))&&void 0!==e?e:"0",10)||0;return!((new Date).getTime()-r>d(t)&&(p(t,!1),1))},p=(t,e)=>{const r=m(t);a.removeItem(r+"draft"),a.removeItem(r+"time"),!1!==e&&(t=>{t.dispatch("RemoveDraft")})(t)},y=t=>{const e=m(t);!v(t)&&t.isDirty()&&(a.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),a.setItem(e+"time",(new Date).getTime().toString()),(t=>{t.dispatch("StoreDraft")})(t))},g=t=>{var e;const r=m(t);f(t)&&(t.setContent(null!==(e=a.getItem(r+"draft"))&&void 0!==e?e:"",{format:"raw"}),(t=>{t.dispatch("RestoreDraft")})(t))};var D=tinymce.util.Tools.resolve("tinymce.EditorManager");const h=t=>e=>{const r=()=>f(t)&&!t.mode.isReadOnly();e.setEnabled(r());const o=()=>e.setEnabled(r());return t.on("StoreDraft RestoreDraft RemoveDraft",o),()=>t.off("StoreDraft RestoreDraft RemoveDraft",o)};t.add("autosave",(t=>((t=>{const r=t.options.register,o=t=>{const r=e(t);return r?{value:n(t),valid:r}:{valid:!1,message:"Must be a string."}};r("autosave_ask_before_unload",{processor:"boolean",default:!0}),r("autosave_prefix",{processor:"string",default:"tinymce-autosave-{path}{query}{hash}-{id}-"}),r("autosave_restore_when_empty",{processor:"boolean",default:!1}),r("autosave_interval",{processor:o,default:"30s"}),r("autosave_retention",{processor:o,default:"20m"})})(t),(t=>{t.editorManager.on("BeforeUnload",(t=>{let e;s.each(D.get(),(t=>{t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&u(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))})),e&&(t.preventDefault(),t.returnValue=e)}))})(t),(t=>{(t=>{const e=c(t);o.setEditorInterval(t,(()=>{y(t)}),e)})(t);const e=()=>{(t=>{t.undoManager.transact((()=>{g(t),p(t)})),t.focus()})(t)};t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)})})(t),t.on("init",(()=>{l(t)&&t.dom.isEmpty(t.getBody())&&g(t)})),(t=>({hasDraft:()=>f(t),storeDraft:()=>y(t),restoreDraft:()=>g(t),removeDraft:e=>p(t,e),isEmpty:e=>v(t,e)}))(t))))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/charmap/plugin.min.js b/apps/web-antd/public/tinymce/plugins/charmap/plugin.min.js new file mode 100644 index 000000000..cd905e69e --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/charmap/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=(e,t)=>{const r=((e,t)=>e.dispatch("insertCustomChar",{chr:t}))(e,t).chr;e.execCommand("mceInsertContent",!1,r)},r=e=>t=>e===t,a=e=>"array"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=a=e,(n=String).prototype.isPrototypeOf(r)||(null===(i=a.constructor)||void 0===i?void 0:i.name)===n.name)?"string":t;var r,a,n,i})(e);const n=r(null),i=r(void 0),o=e=>"function"==typeof e,s=()=>false;class l{constructor(e,t){this.tag=e,this.value=t}static some(e){return new l(!0,e)}static none(){return l.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?l.some(e(this.value)):l.none()}bind(e){return this.tag?e(this.value):l.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:l.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?l.none():l.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}l.singletonNone=new l(!1);const c=Array.prototype.push,u=(e,t)=>{const r=e.length,a=new Array(r);for(let n=0;nt=>t.options.get(e),m=h("charmap"),p=h("charmap_append"),d=g.isArray,f="User Defined",y=e=>{return d(e)?(t=e,g.grep(t,(e=>d(e)&&2===e.length))):"function"==typeof e?e():[];var t},b=e=>{const t=((e,t)=>{const r=m(e);r&&(t=[{name:f,characters:y(r)}]);const a=p(e);if(a){const e=g.grep(t,(e=>e.name===f));return e.length?(e[0].characters=[...e[0].characters,...y(a)],t):t.concat({name:f,characters:y(a)})}return t})(e,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return t.length>1?[{name:"All",characters:(r=t,n=e=>e.characters,(e=>{const t=[];for(let r=0,n=e.length;r{let t=e;return{get:()=>t,set:e=>{t=e}}},v=(e,t,r=0,a)=>{const n=e.indexOf(t,r);return-1!==n&&(!!i(a)||n+t.length<=a)},k=String.fromCodePoint,C=(e,t)=>{const r=[],a=t.toLowerCase();return(e=>{for(let n=0,i=e.length;n!!v(k(e).toLowerCase(),r)||v(t.toLowerCase(),r)||v(t.toLowerCase().replace(/\s+/g,""),r))((t=e[n])[0],t[1],a)&&r.push(t);var t})(e.characters),u(r,(e=>({text:e[1],value:k(e[0]),icon:k(e[0])})))},x="pattern",A=(e,r)=>{const a=()=>[{label:"Search",type:"input",name:x},{type:"collection",name:"results"}],i=1===r.length?w(f):w("All"),o=(e=>{let t=null;const r=()=>{n(t)||(clearTimeout(t),t=null)};return{cancel:r,throttle:(...a)=>{r(),t=setTimeout((()=>{t=null,e.apply(null,a)}),40)}}})((e=>{const t=e.getData().pattern;((e,t)=>{var a,n;(a=r,n=e=>e.name===i.get(),((e,t,r)=>{for(let a=0,n=e.length;a{const a=C(r,t);e.setData({results:a})}))})(e,t)})),c={title:"Special Character",size:"normal",body:1===r.length?{type:"panel",items:a()}:{type:"tabpanel",tabs:u(r,(e=>({title:e.name,name:e.name,items:a()})))},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{pattern:"",results:C(r[0],"")},onAction:(r,a)=>{"results"===a.name&&(t(e,a.value),r.close())},onTabChange:(e,t)=>{i.set(t.newTabName),o.throttle(e)},onChange:(e,t)=>{t.name===x&&o.throttle(e)}};e.windowManager.open(c).focus(x)},q=e=>t=>{const r=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",r),r(),()=>{e.off("NodeChange",r)}};e.add("charmap",(e=>{(e=>{const t=e.options.register,r=e=>o(e)||a(e);t("charmap",{processor:r}),t("charmap_append",{processor:r})})(e);const r=b(e);return((e,t)=>{e.addCommand("mceShowCharmap",(()=>{A(e,t)}))})(e,r),(e=>{const t=()=>e.execCommand("mceShowCharmap");e.ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:t,onSetup:q(e)}),e.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:t,onSetup:q(e)})})(e),((e,t)=>{e.ui.registry.addAutocompleter("charmap",{trigger:":",columns:"auto",minChars:2,fetch:(e,r)=>new Promise(((r,a)=>{r(C(t,e))})),onAction:(t,r,a)=>{e.selection.setRng(r),e.insertContent(a),t.hide()}})})(e,r[0]),(e=>({getCharMap:()=>b(e),insertChar:r=>{t(e,r)}}))(e)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/code/plugin.min.js b/apps/web-antd/public/tinymce/plugins/code/plugin.min.js new file mode 100644 index 000000000..54a780cdd --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/code/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/codesample/plugin.min.js b/apps/web-antd/public/tinymce/plugins/codesample/plugin.min.js new file mode 100644 index 000000000..2283bb91e --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/codesample/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>!(e=>null==e)(e),n=()=>{};class a{constructor(e,t){this.tag=e,this.value=t}static some(e){return new a(!0,e)}static none(){return a.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?a.some(e(this.value)):a.none()}bind(e){return this.tag?e(this.value):a.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:a.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return t(e)?a.some(e):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);var s=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils");const r="undefined"!=typeof window?window:Function("return this;")(),i=function(){const e=window.Prism;window.Prism={manual:!0};var t=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},s={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof r?new r(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=_.value.length,_=_.next){var F=_.value;if(t.length>e.length)return;if(!(F instanceof r)){var A,S=1;if(y){if(!(A=i(v,x,e,m))||A.index>=e.length)break;var $=A.index,z=A.index+A[0].length,E=x;for(E+=_.value.length;$>=E;)E+=(_=_.next).value.length;if(x=E-=_.value.length,_.value instanceof r)continue;for(var C=_;C!==t.tail&&(Ed.reach&&(d.reach=O);var P=_.prev;if(B&&(P=u(t,P,B),x+=B.length),c(t,P,S),_=u(t,P,new r(g,f?s.tokenize(j,f):j,w,j)),T&&u(t,_,T),S>1){var N={cause:g+","+b,reach:O};o(e,t,n,_.prev,x,N),d&&N.reach>d.reach&&(d.reach=N.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,n){var a=t.next,s={value:n,prev:t,next:a};return t.next=s,a.prev=s,e.length++,s}function c(e,t,n){for(var a=t.next,s=0;s"+r.content+""},!e.document)return e.addEventListener?(s.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var n=JSON.parse(t.data),a=n.language,r=n.code,i=n.immediateClose;e.postMessage(s.highlight(r,s.languages[a],a)),i&&e.close()}),!1),s):s;var d=s.util.currentScript();function g(){s.manual||s.highlightAll()}if(d&&(s.filename=d.src,d.hasAttribute("data-manual")&&(s.manual=!0)),!s.manual){var p=document.readyState;"loading"===p||"interactive"===p&&d&&d.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return s}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});return t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,s,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(s,(function(e){if("function"==typeof r&&!r(e))return e;for(var s,o=i.length;-1!==n.code.indexOf(s=t(a,o));)++o;return i[o]=e,s})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var s=0,r=Object.keys(n.tokenStack);!function i(o){for(var l=0;l=r.length);l++){var u=o[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=r[s],d=n.tokenStack[c],g="string"==typeof u?u:u.content,p=t(a,c),b=g.indexOf(p);if(b>-1){++s;var h=g.substring(0,b),f=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),m=g.substring(b+p.length),y=[];h&&y.push.apply(y,i([h])),y.push(f),m&&y.push.apply(y,i([m])),"string"==typeof u?o.splice.apply(o,[l,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return o}(n.tokens)}}}})}(t),t.languages.c=t.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),t.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),t.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},t.languages.c.string],char:t.languages.c.char,comment:t.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:t.languages.c}}}}),t.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete t.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(t),function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,a){return RegExp(t(e,n),a||"")}function a(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var s="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(r),c=RegExp(l(s+" "+r+" "+i+" "+o)),d=l(r+" "+i+" "+o),g=l(s+" "+r+" "+o),p=a(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),b=a(/\((?:[^()]|<>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,f=t(/<<0>>(?:\s*<<1>>)?/.source,[h,p]),m=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,f]),y=/\[\s*(?:,\s*)*\]/.source,w=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[m,y]),k=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,b,y]),v=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[k]),_=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[v,m,y]),x={keyword:c,punctuation:/[<>()?,.:[\]]/},F=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,A=/"(?:\\.|[^\\"\r\n])*"/.source,S=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[S]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,_]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,f]),lookbehind:!0,inside:x},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:x},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[_,g,h]),inside:x}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[b]),lookbehind:!0,alias:"class-name",inside:x},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[_,m]),inside:x,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[_]),lookbehind:!0,inside:x,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,p]),inside:{function:n(/^<<0>>/.source,[h]),generic:{pattern:RegExp(p),alias:"class-name",inside:x}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,f,h,_,c.source,b,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(_),greedy:!0,inside:x},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var $=A+"|"+F,z=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[$]),E=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),C=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,j=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[m,E]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[C,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[C]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[E]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var B=/:[^}\r\n]+/.source,T=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),O=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[T,B]),P=a(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[$]),2),N=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[P,B]);function R(t,a){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[a,B]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[O]),lookbehind:!0,greedy:!0,inside:R(O,T)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:R(N,P)}],char:{pattern:RegExp(F),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(t),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(t),function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:a.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:a.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:a.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(t),t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),t.languages.js=t.languages.javascript,t.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(e,n){var a={};a["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[n]},a.cdata=/^$/i;var s={"included-cdata":{pattern://i,inside:a}};s["language-"+n]={pattern:/[\s\S]+/,inside:t.languages[n]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:s},t.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(e,n){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:t.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:s,punctuation:r};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:s,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(t),t.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},t.languages.python["string-interpolation"].inside.interpolation.inside.rest=t.languages.python,t.languages.py=t.languages.python,function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",a=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+a),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+a+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(t),window.Prism=e,t}(),o=e=>t=>t.options.get(e),l=o("codesample_languages"),u=o("codesample_global_prismjs"),c=e=>r.Prism&&u(e)?r.Prism:i,d=e=>t(e)&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-"),g=e=>{const t=e.selection?e.selection.getNode():null;return d(t)?a.some(t):a.none()},p=e=>{const t=(e=>l(e)||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}])(e),n=(r=t,(e=>0""),(e=>e.value));var r;const i=((e,t)=>g(e).fold((()=>t),(e=>{const n=e.className.match(/language-(\w+)/);return n?n[1]:t})))(e,n),o=(e=>g(e).bind((e=>a.from(e.textContent))).getOr(""))(e);e.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"listbox",name:"language",label:"Language",items:t},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:i,code:o},onSubmit:t=>{const n=t.getData();((e,t,n)=>{const a=e.dom;e.undoManager.transact((()=>{const r=g(e);return n=s.DOM.encode(n),r.fold((()=>{e.insertContent('
'+n+"
");const s=a.select("#__new")[0];a.setAttrib(s,"id",null),e.selection.select(s)}),(s=>{a.setAttrib(s,"class","language-"+t),s.innerHTML=n,c(e).highlightElement(s),e.selection.select(s)}))}))})(e,n.language,n.code),t.close()}})},b=(h=/^\s+|\s+$/g,e=>e.replace(h,""));var h,f=tinymce.util.Tools.resolve("tinymce.util.Tools");const m=(e,t=n)=>n=>{const a=()=>{n.setEnabled(e.selection.isEditable()),t(n)};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("codesample",(e=>{(e=>{const t=e.options.register;t("codesample_languages",{processor:"object[]"}),t("codesample_global_prismjs",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreProcess",(t=>{const n=e.dom,a=n.select("pre[contenteditable=false]",t.node);f.each(f.grep(a,d),(e=>{const t=e.textContent;let a;for(n.setAttrib(e,"class",b(n.getAttrib(e,"class"))),n.setAttrib(e,"contentEditable",null),n.setAttrib(e,"data-mce-highlighted",null);a=e.firstChild;)e.removeChild(a);n.add(e,"code").textContent=t}))})),e.on("SetContent",(()=>{const t=e.dom,n=f.grep(t.select("pre"),(e=>d(e)&&"true"!==t.getAttrib(e,"data-mce-highlighted")));n.length&&e.undoManager.transact((()=>{f.each(n,(n=>{var a;f.each(t.select("br",n),(n=>{t.replace(e.getDoc().createTextNode("\n"),n)})),n.innerHTML=t.encode(null!==(a=n.textContent)&&void 0!==a?a:""),c(e).highlightElement(n),t.setAttrib(n,"data-mce-highlighted",!0),n.className=b(n.className)}))}))})),e.on("PreInit",(()=>{e.parser.addNodeFilter("pre",(e=>{var t;for(let n=0,a=e.length;n{const t=()=>e.execCommand("codesample");e.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:t,onSetup:m(e,(t=>{t.setActive((e=>{const t=e.selection.getStart();return e.dom.is(t,'pre[class*="language-"]')})(e))}))}),e.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:t,onSetup:m(e)})})(e),(e=>{e.addCommand("codesample",(()=>{const t=e.selection.getNode();e.selection.isCollapsed()||d(t)?p(e):e.formatter.toggle("code")}))})(e),e.on("dblclick",(t=>{d(t.target)&&p(e)}))}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/directionality/plugin.min.js b/apps/web-antd/public/tinymce/plugins/directionality/plugin.min.js new file mode 100644 index 000000000..a4f37805b --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/directionality/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>typeof e===t,o=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(o=r=t,(n=String).prototype.isPrototypeOf(o)||(null===(i=r.constructor)||void 0===i?void 0:i.name)===n.name)?"string":e;var o,r,n,i})(t),r=e("boolean"),n=t=>!(t=>null==t)(t),i=e("function"),s=e("number"),l=()=>false;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return n(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=(t,e)=>{for(let o=0,r=t.length;o{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},d=c,h=(t,e)=>{const o=t.dom;if(1!==o.nodeType)return!1;{const t=o;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}};"undefined"!=typeof window?window:Function("return this;")();const m=t=>e=>(t=>t.dom.nodeType)(e)===t,g=m(1),f=m(3),v=m(11),y=(t,e)=>{t.dom.removeAttribute(e)},p=t=>d(t.dom.host),w=t=>{const e=f(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;const o=e.ownerDocument;return(t=>{const e=(t=>d(t.dom.getRootNode()))(t);return v(o=e)&&n(o.dom.host)?a.some(e):a.none();var o})(d(e)).fold((()=>o.body.contains(e)),(r=w,i=p,t=>r(i(t))));var r,i},b=t=>"rtl"===((t,e)=>{const o=t.dom,r=window.getComputedStyle(o).getPropertyValue(e);return""!==r||w(t)?r:((t,e)=>(t=>void 0!==t.style&&i(t.style.getPropertyValue))(t)?t.style.getPropertyValue(e):"")(o,e)})(t,"direction")?"rtl":"ltr",S=(t,e)=>(t=>((t,e)=>{const o=[];for(let r=0,n=t.length;r{const o=t.length,r=new Array(o);for(let n=0;nh(t,e))))(t),N=t=>g(t)&&"li"===t.dom.nodeName.toLowerCase();const A=(t,e,n)=>{u(e,(e=>{const c=d(e),m=N(c),f=((t,e)=>{return(e?(o=t,r="ol,ul",((t,e,o)=>{let n=t.dom;const s=i(o)?o:l;for(;n.parentNode;){n=n.parentNode;const t=d(n);if(h(t,r))return a.some(t);if(s(t))break}return a.none()})(o,0,n)):a.some(t)).getOr(t);var o,r,n})(c,m);var v;(v=f,(t=>a.from(t.dom.parentNode).map(d))(v).filter(g)).each((e=>{if(t.setStyle(f.dom,"direction",null),b(e)===n?y(f,"dir"):((t,e,n)=>{((t,e,n)=>{if(!(o(n)||r(n)||s(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(t.dom,e,n)})(f,"dir",n),b(f)!==n&&t.setStyle(f.dom,"direction",n),m){const e=S(f,"li[dir],li[style]");u(e,(e=>{y(e,"dir"),t.setStyle(e.dom,"direction",null)}))}}))}))},T=(t,e)=>{t.selection.isEditable()&&(A(t.dom,t.selection.getSelectedBlocks(),e),t.nodeChanged())},C=(t,e)=>o=>{const r=r=>{const n=d(r.element);o.setActive(b(n)===e),o.setEnabled(t.selection.isEditable())};return t.on("NodeChange",r),o.setEnabled(t.selection.isEditable()),()=>t.off("NodeChange",r)};t.add("directionality",(t=>{(t=>{t.addCommand("mceDirectionLTR",(()=>{T(t,"ltr")})),t.addCommand("mceDirectionRTL",(()=>{T(t,"rtl")}))})(t),(t=>{t.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:()=>t.execCommand("mceDirectionLTR"),onSetup:C(t,"ltr")}),t.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:()=>t.execCommand("mceDirectionRTL"),onSetup:C(t,"rtl")})})(t)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.js b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.js new file mode 100644 index 000000000..6fcec717a --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'💯',fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'🔢',fitzpatrick_scale:false,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'😀',fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'😬',fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'😁',fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'😂',fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'🤣',fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'🥳',fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'😃',fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'😄',fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'😅',fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'😆',fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'😇',fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'😉',fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'😊',fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'🙂',fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'🙃',fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'☺️',fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'😋',fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'😌',fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'😍',fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'🥰',fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😘',fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'😗',fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'😙',fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😚',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'😜',fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'🤪',fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'🤨',fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'🧐',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'😝',fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'😛',fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'🤑',fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'🤓',fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'😎',fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'🤩',fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:'🤡',fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'🤠',fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:'🤗',fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'😏',fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'😶',fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'😐',fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'😑',fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'😒',fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'🙄',fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'🤔',fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'🤥',fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'🤭',fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'🤫',fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'🤬',fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'🤯',fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'😳',fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'😞',fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'😟',fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'😠',fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'😡',fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'😔',fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'😕',fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'🙁',fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'☹',fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'😣',fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'😖',fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'😫',fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'😩',fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'🥺',fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'😤',fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'😮',fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'😱',fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'😨',fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'😰',fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:'😯',fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:'😦',fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'😧',fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'😢',fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'😥',fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:'🤤',fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'😪',fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'😓',fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'🥵',fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'🥶',fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'😭',fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'😵',fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'😲',fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'🤐',fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'🤢',fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'🤧',fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:'🤮',fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'😷',fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'🤒',fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'🤕',fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'🥴',fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'😴',fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'💤',fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'💩',fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'😈',fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:'👿',fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'👹',fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'👺',fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'💀',fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'👻',fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'👽',fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:'🤖',fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'😺',fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'😸',fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'😹',fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'😻',fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'😼',fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'😽',fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'🙀',fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'😿',fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'😾',fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'🤲',fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'🙌',fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'👏',fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'👋',fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'🤙',fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'👍',fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'👎',fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'👊',fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'✊',fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'🤛',fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'🤜',fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'✌',fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'👌',fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'✋',fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'🤚',fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'👐',fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'💪',fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'🙏',fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:'🦶',fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:'🦵',fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:'🤝',fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'☝',fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'👆',fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'👇',fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'👈',fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'👉',fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'🖕',fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'🖐',fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'🤟',fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'🤘',fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'🤞',fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'🖖',fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'✍',fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:'🤳',fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'💅',fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:'👄',fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:'🦷',fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:'👅',fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'👂',fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:'👃',fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'👁',fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'👀',fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:'🧠',fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'👤',fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'👥',fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'🗣',fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'👶',fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:'🧒',fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'👦',fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:'👧',fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:'🧑',fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'👨',fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:'👩',fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'👱‍♀️',fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'👱',fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'🧔',fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'🧓',fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'👴',fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'👵',fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'👲',fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'🧕',fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'👳‍♀️',fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'👳',fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'👮‍♀️',fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'👮',fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'👷‍♀️',fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'👷',fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'💂‍♀️',fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'💂',fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'🕵️‍♀️',fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'🕵',fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'👩‍⚕️',fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'👨‍⚕️',fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'👩‍🌾',fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'👨‍🌾',fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'👩‍🍳',fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:'👨‍🍳',fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'👩‍🎓',fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:'👨‍🎓',fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'👩‍🎤',fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'👨‍🎤',fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'👩‍🏫',fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'👨‍🏫',fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'👩‍🏭',fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'👨‍🏭',fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'👩‍💻',fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'👨‍💻',fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'👩‍💼',fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'👨‍💼',fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'👩‍🔧',fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'👨‍🔧',fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'👩‍🔬',fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'👨‍🔬',fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'👩‍🎨',fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:'👨‍🎨',fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'👩‍🚒',fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'👨‍🚒',fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'👩‍✈️',fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'👨‍✈️',fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'👩‍🚀',fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'👨‍🚀',fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'👩‍⚖️',fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'👨‍⚖️',fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'🦸‍♀️',fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'🦸‍♂️',fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'🦹‍♀️',fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'🦹‍♂️',fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'🤶',fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'🎅',fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'🧙‍♀️',fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'🧙‍♂️',fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:'🧝‍♀️',fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:'🧝‍♂️',fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:'🧛‍♀️',fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'🧛‍♂️',fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'🧟‍♀️',fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'🧟‍♂️',fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:'🧞‍♀️',fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:'🧞‍♂️',fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'🧜‍♀️',fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:'🧜‍♂️',fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:'🧚‍♀️',fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:'🧚‍♂️',fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'👼',fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:'🤰',fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'🤱',fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'👸',fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'🤴',fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'👰',fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'🤵',fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'🏃‍♀️',fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'🏃',fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'🚶‍♀️',fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'🚶',fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'💃',fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'🕺',fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'👯',fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'👯‍♂️',fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'👫',fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'👬',fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'👭',fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'🙇‍♀️',fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'🙇',fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'🤦‍♂️',fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'🤦‍♀️',fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'🤷',fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'🤷‍♂️',fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'💁',fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'💁‍♂️',fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'🙅',fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'🙅‍♂️',fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'🙆',fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'🙆‍♂️',fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'🙋',fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'🙋‍♂️',fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'🙎',fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'🙎‍♂️',fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'🙍',fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'🙍‍♂️',fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'💇',fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'💇‍♂️',fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'💆',fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'💆‍♂️',fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'🧖‍♀️',fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'🧖‍♂️',fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'💑',fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👩‍❤️‍👩',fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👨‍❤️‍👨',fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'💏',fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👩‍❤️‍💋‍👩',fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👨‍❤️‍💋‍👨',fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'👪',fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'👨‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'🧶',fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'🧵',fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:'🧥',fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'🥼',fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'👚',fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'👕',fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:'👖',fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'👔',fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'👗',fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'👙',fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'👘',fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'💄',fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'💋',fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'👣',fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'🥿',fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'👠',fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'👡',fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:'👢',fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'👞',fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'👟',fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'🥾',fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:'🧦',fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'🧤',fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'🧣',fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'👒',fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'🎩',fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'🧢',fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'⛑',fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'🎓',fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'👑',fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'🎒',fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:'🧳',fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'👝',fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'👛',fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'👜',fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'💼',fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'👓',fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'🕶',fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'🥽',fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'💍',fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'🌂',fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'🐶',fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'🐱',fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'🐭',fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'🐹',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'🐰',fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'🦊',fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'🐻',fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'🐼',fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'🐨',fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'🐯',fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'🦁',fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐮',fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'🐷',fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'🐽',fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'🐸',fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'🦑',fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'🐙',fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'🦐',fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'🐵',fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'🦍',fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'🙈',fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'🙉',fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'🙊',fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'🐒',fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'🐔',fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'🐧',fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'🐦',fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'🐤',fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'🐣',fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'🐥',fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'🦆',fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'🦅',fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'🦉',fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'🦇',fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'🐺',fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'🐗',fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'🐴',fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'🦄',fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'🐝',fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'🐛',fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'🦋',fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'🐌',fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'🐞',fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'🐜',fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'🦗',fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'🕷',fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'🦂',fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'🦀',fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'🐍',fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'🦎',fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'🦖',fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'🦕',fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'🐢',fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'🐠',fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'🐟',fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'🐡',fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'🐬',fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'🦈',fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'🐳',fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'🐋',fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'🐊',fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'🐆',fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'🦓',fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'🐅',fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'🐃',fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'🐂',fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐄',fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'🦌',fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'🐪',fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'🐫',fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'🦒',fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'🐘',fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'🦏',fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'🐐',fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'🐏',fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'🐑',fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'🐎',fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'🐖',fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'🐀',fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'🐁',fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'🐓',fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'🦃',fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'🕊',fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'🐕',fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'🐩',fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'🐈',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'🐇',fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'🐿',fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'🦔',fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'🦝',fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'🦙',fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'🦛',fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'🦘',fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'🦡',fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'🦢',fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'🦚',fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'🦜',fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'🦞',fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'🦟',fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'🐾',fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'🐉',fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'🐲',fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'🌵',fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'🎄',fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'🌲',fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'🌳',fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'🌴',fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'🌱',fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'🌿',fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'☘',fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'🍀',fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'🎍',fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'🎋',fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'🍃',fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'🍂',fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'🍁',fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'🌾',fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'🌺',fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'🌻',fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'🌹',fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'🥀',fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'🌷',fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'🌼',fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'🌸',fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'💐',fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'🍄',fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'🌰',fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'🎃',fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'🐚',fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'🕸',fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'🌎',fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'🌍',fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'🌏',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'🌕',fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'🌖',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌗',fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌘',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌑',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌒',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌓',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'🌔',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌚',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌝',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌛',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌜',fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'🌞',fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'🌙',fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'⭐',fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'🌟',fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'💫',fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'✨',fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:'☄',fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'☀️',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'🌤',fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'⛅',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'🌥',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'🌦',fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'☁️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'🌧',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'⛈',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'🌩',fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'⚡',fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'🔥',fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'💥',fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'❄️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'🌨',fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'⛄',fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'☃',fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'🌬',fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'💨',fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'🌪',fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:'🌫',fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'☂',fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'☔',fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'💧',fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'💦',fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'🌊',fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'🍏',fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'🍎',fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'🍐',fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'🍊',fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'🍋',fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'🍌',fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'🍉',fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'🍇',fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'🍓',fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'🍈',fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'🍒',fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'🍑',fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'🍍',fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'🥥',fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'🥝',fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'🥭',fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'🥑',fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'🥦',fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'🍅',fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'🍆',fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'🥒',fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'🥕',fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'🌶',fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'🥔',fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'🌽',fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'🥬',fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'🍠',fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'🥜',fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'🍯',fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'🥐',fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'🍞',fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'🥖',fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'🥯',fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'🥨',fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'🧀',fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'🥚',fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'🥓',fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'🥩',fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'🥞',fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'🍗',fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'🍖',fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'🦴',fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'🍤',fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'🍳',fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'🍔',fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'🍟',fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'🥙',fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'🌭',fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'🍕',fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'🥪',fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'🥫',fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'🍝',fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'🌮',fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'🌯',fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'🥗',fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'🥘',fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'🍜',fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'🍲',fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'🍥',fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'🥠',fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'🍣',fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'🍱',fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'🍛',fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'🍙',fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'🍚',fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'🍘',fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'🍢',fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'🍡',fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'🍧',fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'🍨',fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'🍦',fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'🥧',fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'🍰',fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'🧁',fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'🥮',fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'🎂',fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'🍮',fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'🍬',fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'🍭',fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'🍫',fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'🍿',fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'🥟',fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'🍩',fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'🍪',fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'🥛',fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍺',fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍻',fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'🥂',fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'🍷',fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'🥃',fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'🍸',fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'🍹',fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'🍾',fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'🍶',fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'🍵',fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'🥤',fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'☕',fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'🍼',fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'🧂',fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'🥄',fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'🍴',fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'🍽',fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'🥣',fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'🥡',fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'🥢',fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'⚽',fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'🏀',fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'🏈',fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:'⚾',fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:'🥎',fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'🎾',fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:'🏐',fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:'🏉',fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'🥏',fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'🎱',fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'⛳',fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'🏌️‍♀️',fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:'🏌',fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'🏓',fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:'🏸',fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:'🥅',fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:'🏒',fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:'🏑',fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'🥍',fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:'🏏',fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'🎿',fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'⛷',fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'🏂',fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'🤺',fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♀️',fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♂️',fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♀️',fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♂️',fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'🤾‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:'🤾‍♂️',fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:'⛸',fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:'🥌',fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:'🛹',fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'🛷',fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'🏹',fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'🎣',fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'🥊',fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'🥋',fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'🚣‍♀️',fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'🚣',fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'🧗‍♀️',fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'🧗‍♂️',fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'🏊‍♀️',fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'🏊',fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♂️',fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♀️',fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♂️',fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'🏄‍♀️',fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'🏄',fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'🛀',fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'⛹️‍♀️',fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:'⛹',fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'🏋️‍♀️',fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'🏋',fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'🚴‍♀️',fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'🚴',fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'🚵‍♀️',fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'🚵',fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'🏇',fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'🕴',fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'🏆',fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'🎽',fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:'🏅',fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'🎖',fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'🥇',fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'🥈',fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'🥉',fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'🎗',fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'🏵',fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'🎫',fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'🎟',fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'🎭',fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'🎨',fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'🎪',fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♀️',fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♂️',fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'🎤',fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'🎧',fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'🎼',fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'🎹',fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'🥁',fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'🎷',fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:'🎺',fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:'🎸',fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'🎻',fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:'🎬',fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'🎮',fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'👾',fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'🎯',fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'🎲',fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'🎰',fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'🧩',fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'🎳',fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'🚗',fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'🚕',fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'🚙',fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'🚌',fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'🚎',fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'🏎',fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'🚓',fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'🚑',fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'🚒',fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'🚐',fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'🚚',fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'🚛',fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'🚜',fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'🛴',fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'🏍',fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'🚲',fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'🛵',fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'🚨',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'🚔',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'🚍',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'🚘',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'🚖',fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'🚡',fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'🚠',fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'🚟',fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'🚃',fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'🚋',fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'🚝',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'🚄',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'🚅',fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'🚈',fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'🚞',fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'🚂',fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'🚆',fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'🚇',fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'🚊',fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'🚉',fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'🛸',fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'🚁',fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'🛩',fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'✈️',fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'🛫',fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'🛬',fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'⛵',fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'🛥',fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'🚤',fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'⛴',fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'🛳',fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'🚀',fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'🛰',fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'💺',fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'🛶',fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'⚓',fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'🚧',fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'⛽',fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'🚏',fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'🚦',fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'🚥',fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'🏁',fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'🚢',fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'🎡',fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'🎢',fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'🎠',fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'🏗',fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'🌁',fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'🗼',fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'🏭',fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'⛲',fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'🎑',fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'⛰',fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'🏔',fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'🗻',fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'🌋',fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'🗾',fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'🏕',fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'⛺',fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'🏞',fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'🛣',fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'🛤',fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'🌅',fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'🌄',fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'🏜',fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'🏖',fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'🏝',fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'🌇',fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'🌆',fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'🏙',fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'🌃',fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'🌉',fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'🌌',fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'🌠',fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'🎇',fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'🎆',fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'🌈',fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'🏘',fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'🏰',fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'🏯',fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'🏟',fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'🗽',fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:'🏠',fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'🏡',fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'🏚',fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'🏢',fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'🏬',fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'🏣',fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'🏤',fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'🏥',fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'🏦',fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'🏨',fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'🏪',fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'🏫',fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'🏩',fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'💒',fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'🏛',fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'⛪',fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'🕌',fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'🕍',fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'🕋',fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'⛩',fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'⌚',fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'📱',fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:'📲',fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'💻',fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'⌨',fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'🖥',fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:'🖨',fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:'🖱',fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'🖲',fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:'🕹',fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:'🗜',fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'💽',fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'💾',fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'💿',fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'📀',fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'📼',fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:'📷',fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'📸',fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:'📹',fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:'🎥',fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'📽',fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:'🎞',fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'📞',fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'☎️',fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'📟',fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:'📠',fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'📺',fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'📻',fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'🎙',fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:'🎚',fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:'🎛',fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'🧭',fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'⏱',fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:'⏲',fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'⏰',fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'🕰',fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'⏳',fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'⌛',fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'📡',fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'🔋',fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:'🔌',fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'💡',fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'🔦',fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:'🕯',fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'🧯',fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'🗑',fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:'🛢',fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'💸',fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'💵',fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'💴',fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'💶',fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'💷',fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'💰',fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'💳',fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'💎',fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'⚖',fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'🧰',fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'🔧',fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:'🔨',fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'⚒',fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'🛠',fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:'⛏',fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'🔩',fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:'⚙',fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:'🧱',fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:'⛓',fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'🧲',fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'🔫',fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'💣',fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'🧨',fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'🔪',fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:'🗡',fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:'⚔',fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:'🛡',fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'🚬',fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'☠',fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'⚰',fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'⚱',fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:'🏺',fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'🔮',fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'📿',fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'🧿',fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:'💈',fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'⚗',fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'🔭',fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'🔬',fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:'🕳',fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'💊',fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'💉',fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'🧬',fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'🦠',fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'🧫',fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'🧪',fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'🌡',fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'🧹',fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:'🧺',fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:'🧻',fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:'🏷',fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'🔖',fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'🚽',fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'🚿',fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'🛁',fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'🧼',fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'🧽',fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'🧴',fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:'🔑',fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:'🗝',fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'🛋',fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'🛌',fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:'🛏',fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:'🚪',fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:'🛎',fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'🧸',fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:'🖼',fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:'🗺',fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'⛱',fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'🗿',fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'🛍',fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:'🛒',fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'🎈',fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'🎏',fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'🎀',fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'🎁',fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'🎊',fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'🎉',fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'🎎',fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'🎐',fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'🎌',fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'🏮',fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:'🧧',fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'✉️',fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'📩',fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'📨',fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'📧',fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'💌',fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'📮',fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'📪',fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'📫',fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'📬',fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'📭',fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'📦',fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'📯',fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'📥',fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'📤',fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'📜',fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'📃',fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'📑',fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'🧾',fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'📊',fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'📈',fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'📉',fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'📄',fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:'📅',fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'📆',fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'🗓',fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:'📇',fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'🗃',fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:'🗳',fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'🗄',fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'📋',fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'🗒',fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'📁',fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'📂',fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'🗂',fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'🗞',fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:'📰',fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'📓',fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'📕',fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'📗',fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'📘',fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'📙',fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'📔',fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:'📒',fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:'📚',fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'📖',fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:'🧷',fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:'🔗',fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'📎',fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'🖇',fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:'✂️',fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'📐',fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'📏',fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:'🧮',fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'📌',fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'📍',fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'🚩',fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'🏳',fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:'🏴',fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'🏳️‍🌈',fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'🔐',fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:'🔒',fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:'🔓',fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'🔏',fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'🖊',fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'🖋',fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'✒️',fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'📝',fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'✏️',fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'🖍',fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'🖌',fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'🔍',fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'🔎',fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:'❤️',fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'🧡',fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'💛',fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'💚',fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'💙',fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'💜',fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:'🖤',fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'💔',fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'❣',fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'💕',fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'💞',fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'💓',fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'💗',fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'💖',fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'💘',fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'💝',fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'💟',fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'☮',fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:'✝',fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'☪',fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'🕉',fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'☸',fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:'✡',fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'🔯',fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'🕎',fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:'☯',fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'☦',fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'🛐',fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'⛎',fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'♈',fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'♉',fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'♊',fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'♋',fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'♌',fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'♍',fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'♎',fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'♏',fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'♐',fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'♑',fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'♒',fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'♓',fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:'🆔',fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'⚛',fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'🈳',fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'🈹',fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'☢',fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:'☣',fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'📴',fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'📳',fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'🈶',fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'🈚',fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'🈸',fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'🈺',fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'🈷️',fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'✴️',fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:'🆚',fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'🉑',fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'💮',fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'🉐',fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'㊙️',fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'㊗️',fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'🈴',fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'🈵',fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'🈲',fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'🅰️',fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'🅱️',fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'🆎',fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'🆑',fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'🅾️',fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'🆘',fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'⛔',fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'📛',fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'🚫',fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'❌',fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:'⭕',fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:'🛑',fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:'💢',fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'♨️',fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'🚷',fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'🚯',fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'🚳',fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'🚱',fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'🔞',fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'📵',fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'❗',fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'❕',fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:'❓',fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'❔',fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'‼️',fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'⁉️',fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'🔅',fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'🔆',fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:'🔱',fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'⚜',fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'〽️',fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'⚠️',fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'🚸',fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:'🔰',fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'♻️',fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'🈯',fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'💹',fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'❇️',fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'✳️',fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'❎',fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'✅',fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'💠',fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'🌀',fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:'➿',fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'🌐',fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'Ⓜ️',fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'🏧',fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'🈂️',fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'🛂',fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'🛃',fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'🛄',fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'🛅',fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'♿',fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'🚭',fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'🚾',fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'🅿️',fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'🚰',fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'🚹',fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'🚺',fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'🚼',fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'🚻',fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'🚮',fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'🎦',fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'📶',fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'🈁',fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'🆖',fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'🆗',fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'🆙',fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:'🆒',fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'🆕',fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:'🆓',fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0️⃣',fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1️⃣',fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2️⃣',fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3️⃣',fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4️⃣',fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5️⃣',fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6️⃣',fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7️⃣',fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8️⃣',fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9️⃣',fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'🔟',fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*⃣',fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:'⏏️',fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'▶️',fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'⏸',fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'⏭',fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:'⏹',fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:'⏺',fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'⏯',fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:'⏮',fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'⏩',fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'⏪',fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'🔀',fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:'🔁',fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'🔂',fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'◀️',fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'🔼',fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'🔽',fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'⏫',fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'⏬',fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'➡️',fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'⬅️',fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'⬆️',fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'⬇️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'↗️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'↘️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'↙️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'↖️',fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'↕️',fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'↔️',fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'🔄',fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'↪️',fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'↩️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'⤴️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'⤵️',fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#️⃣',fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'ℹ️',fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'🔤',fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'🔡',fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'🔠',fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'🔣',fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'🎵',fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:'🎶',fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'〰️',fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'➰',fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'✔️',fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'🔃',fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'➕',fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'➖',fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'➗',fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'✖️',fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:'♾',fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'💲',fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'💱',fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'©️',fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'®️',fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'™️',fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:'🔚',fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:'🔙',fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:'🔛',fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:'🔝',fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:'🔜',fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'☑️',fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'🔘',fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:'⚪',fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'⚫',fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'🔴',fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'🔵',fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔸',fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔹',fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔶',fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔷',fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'🔺',fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'▪️',fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'▫️',fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'⬛',fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'⬜',fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'🔻',fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'◼️',fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'◻️',fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'◾',fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'◽',fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'🔲',fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'🔳',fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'🔈',fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'🔉',fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'🔊',fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'🔇',fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'📣',fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'📢',fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'🔔',fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'🔕',fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'🃏',fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'🀄',fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'♠️',fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'♣️',fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'♥️',fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'♦️',fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'🎴',fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'💭',fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'🗯',fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'💬',fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'🗨',fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'🕐',fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'🕑',fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'🕒',fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'🕓',fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'🕔',fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'🕕',fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'🕖',fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'🕗',fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'🕘',fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'🕙',fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'🕚',fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'🕛',fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'🕜',fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'🕝',fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'🕞',fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'🕟',fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'🕠',fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'🕡',fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'🕢',fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'🕣',fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'🕤',fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'🕥',fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'🕦',fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'🕧',fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'🇦🇫',fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:'🇦🇽',fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'🇦🇱',fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'🇩🇿',fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'🇦🇸',fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'🇦🇩',fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'🇦🇴',fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'🇦🇮',fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'🇦🇶',fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'🇦🇬',fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'🇦🇷',fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'🇦🇲',fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'🇦🇼',fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'🇦🇺',fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'🇦🇹',fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'🇦🇿',fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'🇧🇸',fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'🇧🇭',fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'🇧🇩',fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'🇧🇧',fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'🇧🇾',fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'🇧🇪',fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'🇧🇿',fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'🇧🇯',fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'🇧🇲',fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'🇧🇹',fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'🇧🇴',fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'🇧🇶',fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'🇧🇦',fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'🇧🇼',fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'🇧🇷',fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'🇮🇴',fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'🇻🇬',fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'🇧🇳',fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'🇧🇬',fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'🇧🇫',fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'🇧🇮',fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'🇨🇻',fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'🇰🇭',fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'🇨🇲',fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'🇨🇦',fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'🇮🇨',fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'🇰🇾',fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'🇨🇫',fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'🇹🇩',fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'🇨🇱',fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'🇨🇳',fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'🇨🇽',fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'🇨🇨',fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'🇨🇴',fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'🇰🇲',fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'🇨🇬',fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'🇨🇩',fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'🇨🇰',fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'🇨🇷',fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'🇭🇷',fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'🇨🇺',fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:'🇨🇼',fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'🇨🇾',fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'🇨🇿',fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'🇩🇰',fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'🇩🇯',fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'🇩🇲',fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'🇩🇴',fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'🇪🇨',fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'🇪🇬',fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'🇸🇻',fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'🇬🇶',fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'🇪🇷',fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'🇪🇪',fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'🇪🇹',fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'🇪🇺',fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'🇫🇰',fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'🇫🇴',fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'🇫🇯',fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'🇫🇮',fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'🇫🇷',fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'🇬🇫',fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'🇵🇫',fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'🇹🇫',fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'🇬🇦',fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'🇬🇲',fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'🇬🇪',fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'🇩🇪',fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'🇬🇭',fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'🇬🇮',fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'🇬🇷',fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'🇬🇱',fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'🇬🇩',fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'🇬🇵',fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'🇬🇺',fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'🇬🇹',fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'🇬🇬',fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'🇬🇳',fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'🇬🇼',fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'🇬🇾',fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'🇭🇹',fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'🇭🇳',fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'🇭🇰',fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'🇭🇺',fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'🇮🇸',fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'🇮🇳',fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'🇮🇩',fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'🇮🇷',fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'🇮🇶',fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'🇮🇪',fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'🇮🇲',fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'🇮🇱',fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'🇮🇹',fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'🇨🇮',fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'🇯🇲',fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'🇯🇵',fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'🇯🇪',fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'🇯🇴',fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'🇰🇿',fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'🇰🇪',fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'🇰🇮',fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'🇽🇰',fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'🇰🇼',fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'🇰🇬',fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'🇱🇦',fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'🇱🇻',fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'🇱🇧',fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'🇱🇸',fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'🇱🇷',fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'🇱🇾',fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'🇱🇮',fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'🇱🇹',fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'🇱🇺',fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'🇲🇴',fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'🇲🇰',fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'🇲🇬',fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'🇲🇼',fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'🇲🇾',fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'🇲🇻',fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'🇲🇱',fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'🇲🇹',fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'🇲🇭',fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'🇲🇶',fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'🇲🇷',fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'🇲🇺',fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'🇾🇹',fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'🇲🇽',fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'🇫🇲',fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'🇲🇩',fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'🇲🇨',fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'🇲🇳',fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'🇲🇪',fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'🇲🇸',fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'🇲🇦',fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'🇲🇿',fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'🇲🇲',fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'🇳🇦',fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'🇳🇷',fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'🇳🇵',fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'🇳🇱',fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'🇳🇨',fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'🇳🇿',fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'🇳🇮',fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'🇳🇪',fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'🇳🇬',fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'🇳🇺',fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'🇳🇫',fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'🇲🇵',fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'🇰🇵',fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'🇳🇴',fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'🇴🇲',fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'🇵🇰',fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'🇵🇼',fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'🇵🇸',fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'🇵🇦',fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'🇵🇬',fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'🇵🇾',fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'🇵🇪',fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'🇵🇭',fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'🇵🇳',fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'🇵🇱',fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'🇵🇹',fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'🇵🇷',fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'🇶🇦',fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:'🇷🇪',fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'🇷🇴',fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'🇷🇺',fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'🇷🇼',fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:'🇧🇱',fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'🇸🇭',fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'🇰🇳',fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'🇱🇨',fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'🇵🇲',fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'🇻🇨',fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'🇼🇸',fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'🇸🇲',fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'🇸🇹',fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'🇸🇦',fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'🇸🇳',fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'🇷🇸',fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'🇸🇨',fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'🇸🇱',fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'🇸🇬',fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'🇸🇽',fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'🇸🇰',fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'🇸🇮',fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'🇸🇧',fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'🇸🇴',fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'🇿🇦',fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'🇬🇸',fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'🇰🇷',fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'🇸🇸',fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'🇪🇸',fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'🇱🇰',fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'🇸🇩',fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'🇸🇷',fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'🇸🇿',fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'🇸🇪',fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'🇨🇭',fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'🇸🇾',fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'🇹🇼',fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'🇹🇯',fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'🇹🇿',fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'🇹🇭',fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'🇹🇱',fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'🇹🇬',fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'🇹🇰',fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'🇹🇴',fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'🇹🇹',fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'🇹🇳',fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'🇹🇷',fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'🇹🇲',fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'🇹🇨',fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'🇹🇻',fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'🇺🇬',fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'🇺🇦',fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'🇦🇪',fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'🇬🇧',fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:'🏴󠁧󠁢󠁥󠁮󠁧󠁿',fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:'🏴󠁧󠁢󠁳󠁣󠁴󠁿',fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:'🏴󠁧󠁢󠁷󠁬󠁳󠁿',fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'🇺🇸',fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'🇻🇮',fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'🇺🇾',fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'🇺🇿',fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'🇻🇺',fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'🇻🇦',fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'🇻🇪',fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'🇻🇳',fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'🇼🇫',fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'🇪🇭',fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'🇾🇪',fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'🇿🇲',fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'🇿🇼',fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'🇺🇳',fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'🏴‍☠️',fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.min.js b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.min.js new file mode 100644 index 000000000..37f3bcf83 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.min.js @@ -0,0 +1,3 @@ +// Source: npm package: emojilib +// Images provided by twemoji: https://github.com/twitter/twemoji +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'\u{1f4af}',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'\u{1f522}',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'\u{1f600}',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'\u{1f62c}',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'\u{1f601}',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'\u{1f602}',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'\u{1f923}',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'\u{1f973}',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'\u{1f603}',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'\u{1f604}',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'\u{1f605}',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'\u{1f606}',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'\u{1f607}',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'\u{1f609}',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'\u{1f60a}',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'\u{1f642}',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'\u{1f643}',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'\u263a\ufe0f',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'\u{1f60b}',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'\u{1f60c}',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'\u{1f60d}',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'\u{1f970}',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f618}',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'\u{1f617}',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'\u{1f619}',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f61a}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'\u{1f61c}',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'\u{1f92a}',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'\u{1f928}',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'\u{1f9d0}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'\u{1f61d}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'\u{1f61b}',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'\u{1f911}',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'\u{1f913}',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'\u{1f60e}',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'\u{1f929}',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:'\u{1f921}',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'\u{1f920}',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:'\u{1f917}',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'\u{1f60f}',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'\u{1f636}',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'\u{1f610}',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'\u{1f611}',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'\u{1f612}',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'\u{1f644}',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'\u{1f914}',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'\u{1f925}',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'\u{1f92d}',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'\u{1f92b}',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'\u{1f92c}',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'\u{1f92f}',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'\u{1f633}',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'\u{1f61e}',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'\u{1f61f}',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'\u{1f620}',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'\u{1f621}',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'\u{1f614}',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'\u{1f615}',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'\u{1f641}',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'\u2639',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'\u{1f623}',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'\u{1f616}',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'\u{1f62b}',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'\u{1f629}',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'\u{1f97a}',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'\u{1f624}',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'\u{1f62e}',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'\u{1f631}',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'\u{1f628}',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'\u{1f630}',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:'\u{1f62f}',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:'\u{1f626}',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'\u{1f627}',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'\u{1f622}',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'\u{1f625}',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:'\u{1f924}',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'\u{1f62a}',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'\u{1f613}',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'\u{1f975}',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'\u{1f976}',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'\u{1f62d}',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'\u{1f635}',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'\u{1f632}',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'\u{1f910}',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'\u{1f922}',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'\u{1f927}',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:'\u{1f92e}',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'\u{1f637}',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'\u{1f912}',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'\u{1f915}',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'\u{1f974}',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'\u{1f634}',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'\u{1f4a4}',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'\u{1f4a9}',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'\u{1f608}',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:'\u{1f47f}',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'\u{1f479}',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'\u{1f47a}',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'\u{1f480}',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'\u{1f47b}',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'\u{1f47d}',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:'\u{1f916}',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'\u{1f63a}',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'\u{1f638}',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'\u{1f639}',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'\u{1f63b}',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'\u{1f63c}',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'\u{1f63d}',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'\u{1f640}',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'\u{1f63f}',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'\u{1f63e}',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'\u{1f932}',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'\u{1f64c}',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'\u{1f44f}',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'\u{1f44b}',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'\u{1f919}',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'\u{1f44d}',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'\u{1f44e}',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'\u{1f44a}',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'\u270a',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'\u{1f91b}',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'\u{1f91c}',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'\u270c',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'\u{1f44c}',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'\u270b',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'\u{1f91a}',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'\u{1f450}',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'\u{1f4aa}',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'\u{1f64f}',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:'\u{1f9b6}',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:'\u{1f9b5}',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:'\u{1f91d}',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'\u261d',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'\u{1f446}',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'\u{1f447}',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'\u{1f448}',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'\u{1f449}',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'\u{1f595}',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'\u{1f590}',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'\u{1f91f}',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'\u{1f918}',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'\u{1f91e}',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'\u{1f596}',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'\u270d',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:'\u{1f933}',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'\u{1f485}',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:'\u{1f444}',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:'\u{1f9b7}',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:'\u{1f445}',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'\u{1f442}',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:'\u{1f443}',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'\u{1f441}',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'\u{1f440}',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:'\u{1f9e0}',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'\u{1f464}',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'\u{1f465}',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'\u{1f5e3}',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'\u{1f476}',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:'\u{1f9d2}',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'\u{1f466}',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:'\u{1f467}',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:'\u{1f9d1}',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'\u{1f468}',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:'\u{1f469}',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'\u{1f471}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'\u{1f471}',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'\u{1f9d4}',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'\u{1f9d3}',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'\u{1f474}',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'\u{1f475}',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'\u{1f472}',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'\u{1f9d5}',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'\u{1f473}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'\u{1f473}',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'\u{1f46e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'\u{1f46e}',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'\u{1f477}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'\u{1f477}',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'\u{1f482}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'\u{1f482}',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'\u{1f575}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'\u{1f575}',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'\u{1f469}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'\u{1f468}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'\u{1f469}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'\u{1f468}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'\u{1f469}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:'\u{1f468}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'\u{1f469}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:'\u{1f468}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'\u{1f469}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'\u{1f468}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'\u{1f469}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'\u{1f468}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'\u{1f469}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'\u{1f468}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'\u{1f469}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'\u{1f468}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'\u{1f469}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'\u{1f468}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'\u{1f469}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'\u{1f468}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'\u{1f469}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'\u{1f468}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'\u{1f469}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:'\u{1f468}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'\u{1f469}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'\u{1f468}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'\u{1f469}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'\u{1f468}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'\u{1f469}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'\u{1f468}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'\u{1f469}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'\u{1f468}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'\u{1f9b8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'\u{1f9b8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'\u{1f9b9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'\u{1f9b9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'\u{1f936}',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'\u{1f385}',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'\u{1f9d9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'\u{1f9d9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:'\u{1f9dd}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:'\u{1f9dd}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:'\u{1f9db}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'\u{1f9db}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'\u{1f9df}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'\u{1f9df}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:'\u{1f9de}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:'\u{1f9de}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'\u{1f9dc}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:'\u{1f9dc}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:'\u{1f9da}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:'\u{1f9da}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'\u{1f47c}',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:'\u{1f930}',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'\u{1f931}',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'\u{1f478}',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'\u{1f934}',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'\u{1f470}',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'\u{1f935}',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'\u{1f3c3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'\u{1f3c3}',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'\u{1f6b6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'\u{1f6b6}',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'\u{1f483}',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'\u{1f57a}',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'\u{1f46f}',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'\u{1f46f}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'\u{1f46b}',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'\u{1f46c}',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'\u{1f46d}',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'\u{1f647}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'\u{1f647}',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'\u{1f926}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'\u{1f926}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'\u{1f937}',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'\u{1f937}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'\u{1f481}',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'\u{1f481}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'\u{1f645}',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'\u{1f645}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'\u{1f646}',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'\u{1f646}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'\u{1f64b}',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'\u{1f64b}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'\u{1f64e}',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'\u{1f64e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'\u{1f487}',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'\u{1f487}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'\u{1f486}',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'\u{1f486}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f491}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f48f}',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'\u{1f46a}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'\u{1f9f6}',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'\u{1f9f5}',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:'\u{1f9e5}',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'\u{1f97c}',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'\u{1f45a}',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'\u{1f455}',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:'\u{1f456}',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'\u{1f454}',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'\u{1f457}',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'\u{1f459}',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'\u{1f458}',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'\u{1f484}',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'\u{1f48b}',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'\u{1f463}',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'\u{1f97f}',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'\u{1f460}',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'\u{1f461}',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:'\u{1f462}',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'\u{1f45e}',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'\u{1f45f}',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'\u{1f97e}',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:'\u{1f9e6}',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'\u{1f9e4}',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'\u{1f9e3}',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'\u{1f452}',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'\u{1f3a9}',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'\u{1f9e2}',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'\u26d1',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'\u{1f393}',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'\u{1f451}',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'\u{1f392}',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:'\u{1f9f3}',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'\u{1f45d}',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'\u{1f45b}',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'\u{1f45c}',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'\u{1f4bc}',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'\u{1f453}',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'\u{1f576}',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'\u{1f97d}',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'\u{1f48d}',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'\u{1f302}',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'\u{1f436}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'\u{1f431}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'\u{1f42d}',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'\u{1f439}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'\u{1f430}',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'\u{1f98a}',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'\u{1f43b}',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'\u{1f43c}',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'\u{1f428}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'\u{1f42f}',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'\u{1f981}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f42e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'\u{1f437}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'\u{1f43d}',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'\u{1f438}',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'\u{1f991}',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'\u{1f419}',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'\u{1f990}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'\u{1f435}',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'\u{1f98d}',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'\u{1f648}',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'\u{1f649}',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'\u{1f64a}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'\u{1f412}',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'\u{1f414}',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'\u{1f427}',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'\u{1f426}',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'\u{1f424}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'\u{1f423}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'\u{1f425}',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'\u{1f986}',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'\u{1f985}',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'\u{1f989}',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'\u{1f987}',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'\u{1f43a}',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'\u{1f417}',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'\u{1f434}',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'\u{1f984}',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'\u{1f41d}',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'\u{1f41b}',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'\u{1f98b}',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'\u{1f40c}',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'\u{1f41e}',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'\u{1f41c}',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'\u{1f997}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'\u{1f577}',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'\u{1f982}',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'\u{1f980}',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'\u{1f40d}',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'\u{1f98e}',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'\u{1f996}',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'\u{1f995}',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'\u{1f422}',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'\u{1f420}',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'\u{1f41f}',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'\u{1f421}',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'\u{1f42c}',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'\u{1f988}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'\u{1f433}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'\u{1f40b}',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'\u{1f40a}',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'\u{1f406}',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'\u{1f993}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'\u{1f405}',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'\u{1f403}',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'\u{1f402}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f404}',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'\u{1f98c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'\u{1f42a}',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'\u{1f42b}',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'\u{1f992}',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'\u{1f418}',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'\u{1f98f}',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'\u{1f410}',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'\u{1f40f}',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'\u{1f411}',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'\u{1f40e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'\u{1f416}',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'\u{1f400}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'\u{1f401}',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'\u{1f413}',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'\u{1f983}',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'\u{1f54a}',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'\u{1f415}',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'\u{1f429}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'\u{1f408}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'\u{1f407}',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'\u{1f43f}',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'\u{1f994}',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'\u{1f99d}',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'\u{1f999}',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'\u{1f99b}',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'\u{1f998}',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'\u{1f9a1}',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'\u{1f9a2}',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'\u{1f99a}',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'\u{1f99c}',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'\u{1f99e}',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'\u{1f99f}',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'\u{1f43e}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f409}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f432}',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'\u{1f335}',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'\u{1f384}',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'\u{1f332}',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'\u{1f333}',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'\u{1f334}',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'\u{1f331}',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'\u{1f33f}',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'\u2618',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'\u{1f340}',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'\u{1f38d}',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'\u{1f38b}',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'\u{1f343}',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'\u{1f342}',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'\u{1f341}',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'\u{1f33e}',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'\u{1f33a}',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'\u{1f33b}',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'\u{1f339}',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'\u{1f940}',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'\u{1f337}',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'\u{1f33c}',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'\u{1f338}',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'\u{1f490}',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'\u{1f344}',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'\u{1f330}',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'\u{1f383}',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'\u{1f41a}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'\u{1f578}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'\u{1f30e}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'\u{1f30d}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'\u{1f30f}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'\u{1f315}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'\u{1f316}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f317}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f318}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f311}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f312}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f313}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'\u{1f314}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31a}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31d}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31b}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31c}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'\u{1f31e}',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'\u{1f319}',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'\u2b50',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'\u{1f31f}',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'\u{1f4ab}',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'\u2728',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:'\u2604',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'\u2600\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'\u{1f324}',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'\u26c5',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'\u{1f325}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'\u{1f326}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'\u2601\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'\u{1f327}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'\u26c8',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'\u{1f329}',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'\u26a1',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'\u{1f525}',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'\u{1f4a5}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'\u2744\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'\u{1f328}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'\u26c4',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'\u2603',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'\u{1f32c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'\u{1f4a8}',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'\u{1f32a}',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:'\u{1f32b}',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'\u2602',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'\u2614',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'\u{1f4a7}',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'\u{1f4a6}',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'\u{1f30a}',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'\u{1f34f}',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'\u{1f34e}',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'\u{1f350}',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'\u{1f34a}',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'\u{1f34b}',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'\u{1f34c}',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'\u{1f349}',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'\u{1f347}',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'\u{1f353}',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'\u{1f348}',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'\u{1f352}',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'\u{1f351}',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'\u{1f34d}',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'\u{1f965}',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'\u{1f95d}',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'\u{1f96d}',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'\u{1f951}',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'\u{1f966}',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'\u{1f345}',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'\u{1f346}',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'\u{1f952}',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'\u{1f955}',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'\u{1f336}',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'\u{1f954}',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'\u{1f33d}',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'\u{1f96c}',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'\u{1f360}',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'\u{1f95c}',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'\u{1f36f}',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'\u{1f950}',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'\u{1f35e}',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'\u{1f956}',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'\u{1f96f}',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'\u{1f968}',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'\u{1f9c0}',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'\u{1f95a}',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'\u{1f953}',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'\u{1f969}',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'\u{1f95e}',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'\u{1f357}',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'\u{1f356}',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'\u{1f9b4}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'\u{1f364}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'\u{1f373}',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'\u{1f354}',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'\u{1f35f}',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'\u{1f959}',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'\u{1f32d}',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'\u{1f355}',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'\u{1f96a}',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'\u{1f96b}',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'\u{1f35d}',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'\u{1f32e}',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'\u{1f32f}',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'\u{1f957}',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'\u{1f958}',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'\u{1f35c}',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'\u{1f372}',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'\u{1f365}',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'\u{1f960}',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'\u{1f363}',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'\u{1f371}',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'\u{1f35b}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'\u{1f359}',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'\u{1f35a}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'\u{1f358}',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'\u{1f362}',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'\u{1f361}',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'\u{1f367}',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'\u{1f368}',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'\u{1f366}',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'\u{1f967}',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'\u{1f370}',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'\u{1f9c1}',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'\u{1f96e}',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'\u{1f382}',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'\u{1f36e}',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'\u{1f36c}',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'\u{1f36d}',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'\u{1f36b}',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'\u{1f37f}',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'\u{1f95f}',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'\u{1f369}',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'\u{1f36a}',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'\u{1f95b}',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37a}',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37b}',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'\u{1f942}',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'\u{1f377}',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'\u{1f943}',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'\u{1f378}',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'\u{1f379}',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'\u{1f37e}',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'\u{1f376}',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'\u{1f375}',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'\u{1f964}',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'\u2615',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'\u{1f37c}',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'\u{1f9c2}',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'\u{1f944}',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'\u{1f374}',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'\u{1f37d}',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'\u{1f963}',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'\u{1f961}',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'\u{1f962}',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'\u26bd',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'\u{1f3c0}',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'\u{1f3c8}',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:'\u26be',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:'\u{1f94e}',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'\u{1f3be}',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:'\u{1f3d0}',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:'\u{1f3c9}',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'\u{1f94f}',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'\u{1f3b1}',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'\u26f3',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'\u{1f3cc}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:'\u{1f3cc}',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'\u{1f3d3}',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:'\u{1f3f8}',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:'\u{1f945}',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:'\u{1f3d2}',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:'\u{1f3d1}',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'\u{1f94d}',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:'\u{1f3cf}',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'\u{1f3bf}',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'\u26f7',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'\u{1f3c2}',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'\u{1f93a}',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:'\u26f8',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:'\u{1f94c}',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:'\u{1f6f9}',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'\u{1f6f7}',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'\u{1f3f9}',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'\u{1f3a3}',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'\u{1f94a}',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'\u{1f94b}',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'\u{1f6a3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'\u{1f6a3}',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'\u{1f9d7}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'\u{1f9d7}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'\u{1f3ca}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'\u{1f3ca}',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'\u{1f3c4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'\u{1f3c4}',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'\u{1f6c0}',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'\u26f9\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:'\u26f9',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'\u{1f3cb}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'\u{1f3cb}',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'\u{1f6b4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'\u{1f6b4}',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'\u{1f6b5}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'\u{1f6b5}',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'\u{1f3c7}',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'\u{1f574}',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'\u{1f3c6}',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'\u{1f3bd}',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:'\u{1f3c5}',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'\u{1f396}',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'\u{1f947}',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'\u{1f948}',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'\u{1f949}',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'\u{1f397}',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'\u{1f3f5}',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'\u{1f3ab}',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'\u{1f39f}',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'\u{1f3ad}',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'\u{1f3a8}',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'\u{1f3aa}',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'\u{1f3a4}',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'\u{1f3a7}',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'\u{1f3bc}',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'\u{1f3b9}',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'\u{1f941}',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'\u{1f3b7}',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:'\u{1f3ba}',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:'\u{1f3b8}',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'\u{1f3bb}',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:'\u{1f3ac}',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'\u{1f3ae}',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'\u{1f47e}',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'\u{1f3af}',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'\u{1f3b2}',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'\u{1f3b0}',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'\u{1f9e9}',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'\u{1f3b3}',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'\u{1f697}',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'\u{1f695}',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'\u{1f699}',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'\u{1f68c}',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'\u{1f68e}',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'\u{1f3ce}',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'\u{1f693}',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'\u{1f691}',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'\u{1f692}',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'\u{1f690}',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'\u{1f69a}',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'\u{1f69b}',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'\u{1f69c}',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'\u{1f6f4}',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'\u{1f3cd}',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'\u{1f6b2}',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'\u{1f6f5}',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'\u{1f6a8}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'\u{1f694}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'\u{1f68d}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'\u{1f698}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'\u{1f696}',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a1}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a0}',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'\u{1f69f}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'\u{1f683}',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'\u{1f68b}',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'\u{1f69d}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'\u{1f684}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'\u{1f685}',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'\u{1f688}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'\u{1f69e}',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'\u{1f682}',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'\u{1f686}',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'\u{1f687}',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'\u{1f68a}',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'\u{1f689}',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'\u{1f6f8}',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'\u{1f681}',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'\u{1f6e9}',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'\u2708\ufe0f',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'\u{1f6eb}',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'\u{1f6ec}',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'\u26f5',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'\u{1f6e5}',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'\u{1f6a4}',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'\u26f4',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'\u{1f6f3}',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'\u{1f680}',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'\u{1f6f0}',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'\u{1f4ba}',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'\u{1f6f6}',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'\u2693',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'\u{1f6a7}',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'\u26fd',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'\u{1f68f}',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'\u{1f6a6}',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'\u{1f6a5}',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'\u{1f3c1}',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'\u{1f6a2}',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'\u{1f3a1}',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'\u{1f3a2}',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'\u{1f3a0}',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'\u{1f3d7}',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'\u{1f301}',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'\u{1f5fc}',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'\u{1f3ed}',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'\u26f2',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'\u{1f391}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'\u26f0',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'\u{1f3d4}',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'\u{1f5fb}',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'\u{1f30b}',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'\u{1f5fe}',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'\u{1f3d5}',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'\u26fa',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'\u{1f3de}',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'\u{1f6e3}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'\u{1f6e4}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'\u{1f305}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'\u{1f304}',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'\u{1f3dc}',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'\u{1f3d6}',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'\u{1f3dd}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'\u{1f307}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'\u{1f306}',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'\u{1f3d9}',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'\u{1f303}',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'\u{1f309}',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'\u{1f30c}',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'\u{1f320}',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'\u{1f387}',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'\u{1f386}',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'\u{1f308}',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'\u{1f3d8}',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'\u{1f3f0}',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'\u{1f3ef}',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'\u{1f3df}',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'\u{1f5fd}',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:'\u{1f3e0}',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'\u{1f3e1}',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'\u{1f3da}',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'\u{1f3e2}',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'\u{1f3ec}',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'\u{1f3e3}',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'\u{1f3e4}',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'\u{1f3e5}',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'\u{1f3e6}',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'\u{1f3e8}',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'\u{1f3ea}',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'\u{1f3eb}',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'\u{1f3e9}',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'\u{1f492}',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'\u{1f3db}',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'\u26ea',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'\u{1f54c}',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'\u{1f54d}',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'\u{1f54b}',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'\u26e9',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'\u231a',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'\u{1f4f1}',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:'\u{1f4f2}',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'\u{1f4bb}',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'\u2328',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'\u{1f5a5}',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:'\u{1f5a8}',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:'\u{1f5b1}',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'\u{1f5b2}',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:'\u{1f579}',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:'\u{1f5dc}',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'\u{1f4bd}',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'\u{1f4be}',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'\u{1f4bf}',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'\u{1f4c0}',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'\u{1f4fc}',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:'\u{1f4f7}',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'\u{1f4f8}',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:'\u{1f4f9}',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:'\u{1f3a5}',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'\u{1f4fd}',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:'\u{1f39e}',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'\u{1f4de}',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'\u260e\ufe0f',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'\u{1f4df}',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:'\u{1f4e0}',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'\u{1f4fa}',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'\u{1f4fb}',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'\u{1f399}',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:'\u{1f39a}',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:'\u{1f39b}',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'\u{1f9ed}',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'\u23f1',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:'\u23f2',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'\u23f0',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'\u{1f570}',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'\u23f3',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'\u231b',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'\u{1f4e1}',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'\u{1f50b}',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:'\u{1f50c}',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'\u{1f4a1}',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'\u{1f526}',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:'\u{1f56f}',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'\u{1f9ef}',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'\u{1f5d1}',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:'\u{1f6e2}',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'\u{1f4b8}',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'\u{1f4b5}',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'\u{1f4b4}',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'\u{1f4b6}',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'\u{1f4b7}',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'\u{1f4b0}',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'\u{1f4b3}',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'\u{1f48e}',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'\u2696',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'\u{1f9f0}',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'\u{1f527}',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:'\u{1f528}',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'\u2692',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'\u{1f6e0}',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:'\u26cf',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'\u{1f529}',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:'\u2699',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:'\u{1f9f1}',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:'\u26d3',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'\u{1f9f2}',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'\u{1f52b}',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'\u{1f4a3}',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'\u{1f9e8}',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'\u{1f52a}',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:'\u{1f5e1}',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:'\u2694',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:'\u{1f6e1}',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'\u{1f6ac}',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'\u2620',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'\u26b0',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'\u26b1',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:'\u{1f3fa}',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'\u{1f52e}',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'\u{1f4ff}',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'\u{1f9ff}',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:'\u{1f488}',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'\u2697',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'\u{1f52d}',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'\u{1f52c}',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:'\u{1f573}',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'\u{1f48a}',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'\u{1f489}',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'\u{1f9ec}',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'\u{1f9a0}',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'\u{1f9eb}',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'\u{1f9ea}',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'\u{1f321}',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'\u{1f9f9}',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:'\u{1f9fa}',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:'\u{1f9fb}',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:'\u{1f3f7}',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'\u{1f516}',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'\u{1f6bd}',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'\u{1f6bf}',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'\u{1f6c1}',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'\u{1f9fc}',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'\u{1f9fd}',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'\u{1f9f4}',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:'\u{1f511}',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:'\u{1f5dd}',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'\u{1f6cb}',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'\u{1f6cc}',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:'\u{1f6cf}',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:'\u{1f6aa}',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:'\u{1f6ce}',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'\u{1f9f8}',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:'\u{1f5bc}',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:'\u{1f5fa}',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'\u26f1',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'\u{1f5ff}',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'\u{1f6cd}',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:'\u{1f6d2}',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'\u{1f388}',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'\u{1f38f}',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'\u{1f380}',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'\u{1f381}',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'\u{1f38a}',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'\u{1f389}',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'\u{1f38e}',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'\u{1f390}',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'\u{1f38c}',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'\u{1f3ee}',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:'\u{1f9e7}',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'\u2709\ufe0f',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'\u{1f4e9}',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'\u{1f4e8}',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'\u{1f4e7}',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'\u{1f48c}',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'\u{1f4ee}',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'\u{1f4ea}',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'\u{1f4eb}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'\u{1f4ec}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'\u{1f4ed}',fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'\u{1f4e6}',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'\u{1f4ef}',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'\u{1f4e5}',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'\u{1f4e4}',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'\u{1f4dc}',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'\u{1f4c3}',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'\u{1f4d1}',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'\u{1f9fe}',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'\u{1f4ca}',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'\u{1f4c8}',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'\u{1f4c9}',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'\u{1f4c4}',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:'\u{1f4c5}',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'\u{1f4c6}',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'\u{1f5d3}',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:'\u{1f4c7}',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'\u{1f5c3}',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:'\u{1f5f3}',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'\u{1f5c4}',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'\u{1f4cb}',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'\u{1f5d2}',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'\u{1f4c1}',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'\u{1f4c2}',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'\u{1f5c2}',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'\u{1f5de}',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:'\u{1f4f0}',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'\u{1f4d3}',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'\u{1f4d5}',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'\u{1f4d7}',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'\u{1f4d8}',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'\u{1f4d9}',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'\u{1f4d4}',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:'\u{1f4d2}',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:'\u{1f4da}',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'\u{1f4d6}',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:'\u{1f9f7}',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:'\u{1f517}',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'\u{1f4ce}',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'\u{1f587}',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:'\u2702\ufe0f',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'\u{1f4d0}',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'\u{1f4cf}',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:'\u{1f9ee}',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'\u{1f4cc}',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'\u{1f4cd}',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'\u{1f6a9}',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'\u{1f3f3}',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:'\u{1f3f4}',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'\u{1f3f3}\ufe0f\u200d\u{1f308}',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'\u{1f510}',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:'\u{1f512}',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:'\u{1f513}',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'\u{1f50f}',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'\u{1f58a}',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'\u{1f58b}',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'\u2712\ufe0f',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'\u{1f4dd}',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'\u270f\ufe0f',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'\u{1f58d}',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'\u{1f58c}',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'\u{1f50d}',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'\u{1f50e}',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:'\u2764\ufe0f',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f9e1}',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49b}',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49a}',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f499}',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49c}',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:'\u{1f5a4}',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'\u{1f494}',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'\u2763',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'\u{1f495}',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'\u{1f49e}',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'\u{1f493}',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'\u{1f497}',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f496}',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'\u{1f498}',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'\u{1f49d}',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'\u{1f49f}',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'\u262e',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:'\u271d',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'\u262a',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u{1f549}',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u2638',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:'\u2721',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'\u{1f52f}',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'\u{1f54e}',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:'\u262f',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'\u2626',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'\u{1f6d0}',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'\u26ce',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2648',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2649',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264a',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264b',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264c',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264d',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264e',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'\u264f',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2650',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2651',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2652',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2653',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:'\u{1f194}',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'\u269b',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'\u{1f233}',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'\u{1f239}',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'\u2622',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:'\u2623',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'\u{1f4f4}',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'\u{1f4f3}',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'\u{1f236}',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'\u{1f21a}',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'\u{1f238}',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'\u{1f23a}',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'\u{1f237}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'\u2734\ufe0f',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:'\u{1f19a}',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'\u{1f251}',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'\u{1f4ae}',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'\u{1f250}',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'\u3299\ufe0f',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'\u3297\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'\u{1f234}',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'\u{1f235}',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'\u{1f232}',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'\u{1f170}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'\u{1f171}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'\u{1f18e}',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'\u{1f191}',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'\u{1f17e}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'\u{1f198}',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'\u26d4',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'\u{1f4db}',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'\u{1f6ab}',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'\u274c',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:'\u2b55',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:'\u{1f6d1}',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:'\u{1f4a2}',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'\u2668\ufe0f',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'\u{1f6b7}',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'\u{1f6af}',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'\u{1f6b3}',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'\u{1f6b1}',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'\u{1f51e}',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'\u{1f4f5}',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'\u2757',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'\u2755',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:'\u2753',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'\u2754',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'\u203c\ufe0f',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'\u2049\ufe0f',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'\u{1f505}',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'\u{1f506}',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:'\u{1f531}',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'\u269c',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'\u303d\ufe0f',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'\u26a0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'\u{1f6b8}',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:'\u{1f530}',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'\u267b\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'\u{1f22f}',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'\u{1f4b9}',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'\u2747\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'\u2733\ufe0f',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'\u274e',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'\u2705',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'\u{1f4a0}',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'\u{1f300}',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:'\u27bf',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'\u{1f310}',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'\u24c2\ufe0f',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'\u{1f3e7}',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'\u{1f202}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'\u{1f6c2}',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'\u{1f6c3}',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'\u{1f6c4}',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'\u{1f6c5}',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'\u267f',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'\u{1f6ad}',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'\u{1f6be}',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'\u{1f17f}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'\u{1f6b0}',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'\u{1f6b9}',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'\u{1f6ba}',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'\u{1f6bc}',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'\u{1f6bb}',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'\u{1f6ae}',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'\u{1f3a6}',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'\u{1f4f6}',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'\u{1f201}',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'\u{1f196}',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'\u{1f197}',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'\u{1f199}',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:'\u{1f192}',fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'\u{1f195}',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:'\u{1f193}',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'\u{1f51f}',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*\u20e3',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:'\u23cf\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'\u25b6\ufe0f',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'\u23f8',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'\u23ed',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:'\u23f9',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:'\u23fa',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'\u23ef',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:'\u23ee',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'\u23e9',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'\u23ea',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'\u{1f500}',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:'\u{1f501}',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'\u{1f502}',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'\u25c0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'\u{1f53c}',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'\u{1f53d}',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'\u23eb',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'\u23ec',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'\u27a1\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'\u2b05\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'\u2b06\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'\u2b07\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'\u2197\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'\u2198\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'\u2199\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'\u2196\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'\u2195\ufe0f',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'\u2194\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'\u{1f504}',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'\u21aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'\u21a9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'\u2934\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'\u2935\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'\u2139\ufe0f',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'\u{1f524}',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'\u{1f521}',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'\u{1f520}',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'\u{1f523}',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'\u{1f3b5}',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:'\u{1f3b6}',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'\u3030\ufe0f',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'\u27b0',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'\u2714\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'\u{1f503}',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'\u2795',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'\u2796',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'\u2797',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'\u2716\ufe0f',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:'\u267e',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'\u{1f4b2}',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'\u{1f4b1}',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'\xa9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'\xae\ufe0f',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'\u2122\ufe0f',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:'\u{1f51a}',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:'\u{1f519}',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:'\u{1f51b}',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:'\u{1f51d}',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:'\u{1f51c}',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'\u2611\ufe0f',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'\u{1f518}',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:'\u26aa',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'\u26ab',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'\u{1f534}',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'\u{1f535}',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f538}',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f539}',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f536}',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f537}',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'\u{1f53a}',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'\u25aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'\u25ab\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'\u2b1b',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'\u2b1c',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'\u{1f53b}',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'\u25fc\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'\u25fb\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'\u25fe',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'\u25fd',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'\u{1f532}',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'\u{1f533}',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'\u{1f508}',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'\u{1f509}',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'\u{1f50a}',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'\u{1f507}',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'\u{1f4e3}',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'\u{1f4e2}',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'\u{1f514}',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'\u{1f515}',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'\u{1f0cf}',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'\u{1f004}',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'\u2660\ufe0f',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'\u2663\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'\u2665\ufe0f',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'\u2666\ufe0f',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'\u{1f3b4}',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'\u{1f4ad}',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'\u{1f5ef}',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'\u{1f4ac}',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'\u{1f5e8}',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'\u{1f550}',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'\u{1f551}',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'\u{1f552}',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'\u{1f553}',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'\u{1f554}',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'\u{1f555}',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'\u{1f556}',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'\u{1f557}',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'\u{1f558}',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'\u{1f559}',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'\u{1f55a}',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'\u{1f55b}',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'\u{1f55c}',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'\u{1f55d}',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'\u{1f55e}',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'\u{1f55f}',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'\u{1f560}',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'\u{1f561}',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'\u{1f562}',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'\u{1f563}',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'\u{1f564}',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'\u{1f565}',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'\u{1f566}',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'\u{1f567}',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'\u{1f1e8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'\u{1f1ea}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'\u{1f1eb}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'\u{1f1e9}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'\u{1f1ef}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'\u{1f1fd}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'\u{1f1f4}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'\u{1f1f6}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'\u{1f1ec}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'\u{1f1fa}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'\u{1f3f4}\u200d\u2620\ufe0f',fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.js b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.js new file mode 100644 index 000000000..88455e9a4 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"😀",fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"😬",fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"😁",fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"😂",fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"🤣",fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"🥳",fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"😃",fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"😄",fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"😅",fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"😆",fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"😇",fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"😉",fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"😊",fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"🙂",fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"🙃",fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"☺️",fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"😋",fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"😌",fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"😍",fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"🥰",fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😘",fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"😗",fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"😙",fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😚",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"😜",fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"🤪",fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"🤨",fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"🧐",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"😝",fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"😛",fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"🤑",fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"🤓",fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"😎",fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"🤩",fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:"🤡",fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"🤠",fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:"🤗",fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"😏",fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"😶",fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"😐",fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"😑",fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"😒",fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"🙄",fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"🤔",fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"🤥",fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"🤭",fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"🤫",fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"🤬",fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"🤯",fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"😳",fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"😞",fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"😟",fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"😠",fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"😡",fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"😔",fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"😕",fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"🙁",fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"☹",fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"😣",fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"😖",fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"😫",fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"😩",fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"🥺",fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"😤",fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"😮",fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"😱",fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"😨",fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"😰",fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:"😯",fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:"😦",fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"😧",fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"😢",fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"😥",fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:"🤤",fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"😪",fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"😓",fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"🥵",fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"🥶",fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"😭",fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"😵",fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"😲",fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"🤐",fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"🤢",fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"🤧",fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:"🤮",fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"😷",fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"🤒",fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"🤕",fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"🥴",fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"😴",fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"💤",fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"💩",fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"😈",fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:"👿",fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"👹",fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"👺",fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"💀",fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"👻",fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"👽",fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:"🤖",fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"😺",fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"😸",fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"😹",fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"😻",fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"😼",fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"😽",fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"🙀",fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"😿",fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"😾",fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"🤲",fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"🙌",fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"👏",fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"👋",fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"🤙",fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"👍",fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"👎",fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"👊",fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"✊",fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"🤛",fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"🤜",fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"✌",fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"👌",fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"✋",fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"🤚",fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"👐",fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"💪",fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"🙏",fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:"🦶",fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:"🦵",fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:"🤝",fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"☝",fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"👆",fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"👇",fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"👈",fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"👉",fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"🖕",fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"🖐",fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"🤟",fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"🤘",fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"🤞",fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"🖖",fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"✍",fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:"🤳",fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"💅",fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:"👄",fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:"🦷",fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:"👅",fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"👂",fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:"👃",fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"👁",fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"👀",fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:"🧠",fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"👤",fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"👥",fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"🗣",fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"👶",fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:"🧒",fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"👦",fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:"👧",fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:"🧑",fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"👨",fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:"👩",fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"👱‍♀️",fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"👱",fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"🧔",fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"🧓",fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"👴",fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"👵",fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"👲",fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"🧕",fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"👳‍♀️",fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"👳",fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"👮‍♀️",fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"👮",fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"👷‍♀️",fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"👷",fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"💂‍♀️",fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"💂",fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"🕵️‍♀️",fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"🕵",fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"👩‍⚕️",fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"👨‍⚕️",fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"👩‍🌾",fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"👨‍🌾",fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"👩‍🍳",fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:"👨‍🍳",fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"👩‍🎓",fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:"👨‍🎓",fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"👩‍🎤",fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"👨‍🎤",fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"👩‍🏫",fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"👨‍🏫",fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"👩‍🏭",fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"👨‍🏭",fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"👩‍💻",fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"👨‍💻",fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"👩‍💼",fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"👨‍💼",fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"👩‍🔧",fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"👨‍🔧",fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"👩‍🔬",fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"👨‍🔬",fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"👩‍🎨",fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:"👨‍🎨",fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"👩‍🚒",fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"👨‍🚒",fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"👩‍✈️",fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"👨‍✈️",fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"👩‍🚀",fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"👨‍🚀",fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"👩‍⚖️",fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"👨‍⚖️",fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"🦸‍♀️",fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"🦸‍♂️",fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"🦹‍♀️",fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"🦹‍♂️",fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"🤶",fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"🎅",fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"🧙‍♀️",fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"🧙‍♂️",fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:"🧝‍♀️",fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:"🧝‍♂️",fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:"🧛‍♀️",fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"🧛‍♂️",fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"🧟‍♀️",fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"🧟‍♂️",fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:"🧞‍♀️",fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:"🧞‍♂️",fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"🧜‍♀️",fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:"🧜‍♂️",fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:"🧚‍♀️",fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:"🧚‍♂️",fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"👼",fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:"🤰",fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"🤱",fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"👸",fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"🤴",fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"👰",fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"🤵",fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"🏃‍♀️",fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"🏃",fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"🚶‍♀️",fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"🚶",fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"💃",fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"🕺",fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"👯",fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"👯‍♂️",fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"👫",fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"👬",fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"👭",fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"🙇‍♀️",fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"🙇",fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"🤦‍♂️",fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"🤦‍♀️",fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"🤷",fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"🤷‍♂️",fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"💁",fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"💁‍♂️",fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"🙅",fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"🙅‍♂️",fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"🙆",fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"🙆‍♂️",fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"🙋",fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"🙋‍♂️",fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"🙎",fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"🙎‍♂️",fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"🙍",fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"🙍‍♂️",fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"💇",fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"💇‍♂️",fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"💆",fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"💆‍♂️",fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"🧖‍♀️",fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"🧖‍♂️",fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"💑",fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👩‍❤️‍👩",fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👨‍❤️‍👨",fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"💏",fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👩‍❤️‍💋‍👩",fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👨‍❤️‍💋‍👨",fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"👪",fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"👨‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"🧶",fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"🧵",fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:"🧥",fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"🥼",fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"👚",fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"👕",fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:"👖",fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"👔",fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"👗",fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"👙",fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"👘",fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"💄",fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"💋",fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"👣",fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"🥿",fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"👠",fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"👡",fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:"👢",fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"👞",fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"👟",fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"🥾",fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:"🧦",fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"🧤",fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"🧣",fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"👒",fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"🎩",fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"🧢",fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"⛑",fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"🎓",fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"👑",fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"🎒",fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:"🧳",fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"👝",fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"👛",fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"👜",fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"💼",fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"👓",fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"🕶",fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"🥽",fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"💍",fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"🌂",fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"🐶",fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"🐱",fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"🐭",fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"🐹",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"🐰",fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"🦊",fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"🐻",fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"🐼",fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"🐨",fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"🐯",fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"🦁",fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐮",fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"🐷",fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"🐽",fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"🐸",fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"🦑",fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"🐙",fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"🦐",fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"🐵",fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"🦍",fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"🙈",fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"🙉",fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"🙊",fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"🐒",fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"🐔",fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"🐧",fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"🐦",fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"🐤",fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"🐣",fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"🐥",fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"🦆",fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"🦅",fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"🦉",fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"🦇",fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"🐺",fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"🐗",fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"🐴",fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"🦄",fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"🐝",fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"🐛",fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"🦋",fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"🐌",fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"🐞",fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"🐜",fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"🦗",fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"🕷",fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"🦂",fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"🦀",fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"🐍",fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"🦎",fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"🦖",fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"🦕",fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"🐢",fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"🐠",fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"🐟",fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"🐡",fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"🐬",fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"🦈",fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"🐳",fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"🐋",fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"🐊",fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"🐆",fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"🦓",fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"🐅",fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"🐃",fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"🐂",fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐄",fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"🦌",fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"🐪",fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"🐫",fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"🦒",fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"🐘",fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"🦏",fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"🐐",fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"🐏",fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"🐑",fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"🐎",fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"🐖",fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"🐀",fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"🐁",fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"🐓",fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"🦃",fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"🕊",fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"🐕",fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"🐩",fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"🐈",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"🐇",fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"🐿",fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"🦔",fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"🦝",fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"🦙",fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"🦛",fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"🦘",fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"🦡",fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"🦢",fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"🦚",fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"🦜",fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"🦞",fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"🦟",fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"🐾",fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"🐉",fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"🐲",fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"🌵",fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"🎄",fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"🌲",fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"🌳",fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"🌴",fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"🌱",fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"🌿",fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"☘",fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"🍀",fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"🎍",fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"🎋",fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"🍃",fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"🍂",fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"🍁",fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"🌾",fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"🌺",fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"🌻",fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"🌹",fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"🥀",fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"🌷",fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"🌼",fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"🌸",fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"💐",fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"🍄",fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"🌰",fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"🎃",fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"🐚",fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"🕸",fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"🌎",fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"🌍",fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"🌏",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"🌕",fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"🌖",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌗",fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌘",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌑",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌒",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌓",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"🌔",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌚",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌝",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌛",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌜",fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"🌞",fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"🌙",fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"⭐",fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"🌟",fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"💫",fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"✨",fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:"☄",fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"☀️",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"🌤",fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"⛅",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"🌥",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"🌦",fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"☁️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"🌧",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"⛈",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"🌩",fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"⚡",fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"🔥",fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"💥",fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"❄️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"🌨",fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"⛄",fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"☃",fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"🌬",fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"💨",fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"🌪",fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:"🌫",fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"☂",fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"☔",fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"💧",fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"💦",fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"🌊",fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"🍏",fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"🍎",fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"🍐",fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"🍊",fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"🍋",fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"🍌",fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"🍉",fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"🍇",fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"🍓",fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"🍈",fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"🍒",fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"🍑",fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"🍍",fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"🥥",fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"🥝",fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"🥭",fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"🥑",fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"🥦",fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"🍅",fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"🍆",fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"🥒",fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"🥕",fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"🌶",fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"🥔",fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"🌽",fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"🥬",fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"🍠",fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"🥜",fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"🍯",fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"🥐",fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"🍞",fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"🥖",fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"🥯",fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"🥨",fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"🧀",fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"🥚",fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"🥓",fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"🥩",fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"🥞",fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"🍗",fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"🍖",fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"🦴",fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"🍤",fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"🍳",fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"🍔",fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"🍟",fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"🥙",fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"🌭",fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"🍕",fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"🥪",fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"🥫",fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"🍝",fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"🌮",fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"🌯",fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"🥗",fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"🥘",fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"🍜",fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"🍲",fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"🍥",fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"🥠",fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"🍣",fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"🍱",fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"🍛",fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"🍙",fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"🍚",fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"🍘",fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"🍢",fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"🍡",fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"🍧",fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"🍨",fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"🍦",fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"🥧",fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"🍰",fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"🧁",fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"🥮",fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"🎂",fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"🍮",fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"🍬",fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"🍭",fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"🍫",fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"🍿",fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"🥟",fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"🍩",fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"🍪",fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"🥛",fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍺",fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍻",fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"🥂",fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"🍷",fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"🥃",fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"🍸",fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"🍹",fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"🍾",fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"🍶",fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"🍵",fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"🥤",fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"☕",fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"🍼",fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"🧂",fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"🥄",fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"🍴",fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"🍽",fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"🥣",fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"🥡",fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"🥢",fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"⚽",fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"🏀",fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"🏈",fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:"⚾",fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:"🥎",fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"🎾",fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:"🏐",fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:"🏉",fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"🥏",fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"🎱",fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"⛳",fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"🏌️‍♀️",fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:"🏌",fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"🏓",fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:"🏸",fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:"🥅",fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:"🏒",fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:"🏑",fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"🥍",fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:"🏏",fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"🎿",fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"⛷",fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"🏂",fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"🤺",fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♀️",fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♂️",fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♀️",fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♂️",fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"🤾‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:"🤾‍♂️",fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:"⛸",fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:"🥌",fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:"🛹",fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"🛷",fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"🏹",fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"🎣",fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"🥊",fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"🥋",fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"🚣‍♀️",fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"🚣",fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"🧗‍♀️",fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"🧗‍♂️",fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"🏊‍♀️",fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"🏊",fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♂️",fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♀️",fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♂️",fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"🏄‍♀️",fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"🏄",fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"🛀",fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"⛹️‍♀️",fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:"⛹",fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"🏋️‍♀️",fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"🏋",fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"🚴‍♀️",fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"🚴",fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"🚵‍♀️",fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"🚵",fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"🏇",fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"🕴",fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"🏆",fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"🎽",fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:"🏅",fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"🎖",fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"🥇",fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"🥈",fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"🥉",fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"🎗",fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"🏵",fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"🎫",fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"🎟",fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"🎭",fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"🎨",fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"🎪",fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♀️",fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♂️",fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"🎤",fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"🎧",fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"🎼",fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"🎹",fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"🥁",fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"🎷",fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:"🎺",fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:"🎸",fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"🎻",fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:"🎬",fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"🎮",fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"👾",fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"🎯",fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"🎲",fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"🎰",fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"🧩",fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"🎳",fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"🚗",fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"🚕",fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"🚙",fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"🚌",fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"🚎",fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"🏎",fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"🚓",fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"🚑",fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"🚒",fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"🚐",fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"🚚",fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"🚛",fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"🚜",fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"🛴",fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"🏍",fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"🚲",fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"🛵",fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"🚨",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"🚔",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"🚍",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"🚘",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"🚖",fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"🚡",fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"🚠",fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"🚟",fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"🚃",fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"🚋",fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"🚝",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"🚄",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"🚅",fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"🚈",fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"🚞",fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"🚂",fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"🚆",fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"🚇",fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"🚊",fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"🚉",fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"🛸",fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"🚁",fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"🛩",fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"✈️",fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"🛫",fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"🛬",fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"⛵",fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"🛥",fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"🚤",fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"⛴",fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"🛳",fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"🚀",fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"🛰",fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"💺",fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"🛶",fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"⚓",fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"🚧",fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"⛽",fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"🚏",fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"🚦",fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"🚥",fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"🏁",fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"🚢",fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"🎡",fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"🎢",fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"🎠",fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"🏗",fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"🌁",fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"🗼",fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"🏭",fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"⛲",fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"🎑",fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"⛰",fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"🏔",fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"🗻",fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"🌋",fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"🗾",fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"🏕",fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"⛺",fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"🏞",fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"🛣",fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"🛤",fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"🌅",fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"🌄",fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"🏜",fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"🏖",fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"🏝",fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"🌇",fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"🌆",fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"🏙",fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"🌃",fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"🌉",fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"🌌",fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"🌠",fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"🎇",fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"🎆",fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"🌈",fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"🏘",fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"🏰",fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"🏯",fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"🏟",fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"🗽",fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:"🏠",fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"🏡",fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"🏚",fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"🏢",fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"🏬",fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"🏣",fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"🏤",fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"🏥",fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"🏦",fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"🏨",fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"🏪",fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"🏫",fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"🏩",fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"💒",fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"🏛",fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"⛪",fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"🕌",fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"🕍",fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"🕋",fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"⛩",fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"⌚",fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"📱",fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:"📲",fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"💻",fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"⌨",fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"🖥",fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:"🖨",fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:"🖱",fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"🖲",fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:"🕹",fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:"🗜",fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"💽",fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"💾",fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"💿",fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"📀",fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"📼",fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:"📷",fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"📸",fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:"📹",fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:"🎥",fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"📽",fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:"🎞",fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"📞",fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"☎️",fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"📟",fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:"📠",fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"📺",fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"📻",fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"🎙",fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:"🎚",fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:"🎛",fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"🧭",fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"⏱",fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:"⏲",fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"⏰",fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"🕰",fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"⏳",fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"⌛",fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"📡",fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"🔋",fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:"🔌",fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"💡",fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"🔦",fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:"🕯",fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"🧯",fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"🗑",fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:"🛢",fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"💸",fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"💵",fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"💴",fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"💶",fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"💷",fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"💰",fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"💳",fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"💎",fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"⚖",fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"🧰",fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"🔧",fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:"🔨",fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"⚒",fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"🛠",fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:"⛏",fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"🔩",fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:"⚙",fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:"🧱",fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:"⛓",fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"🧲",fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"🔫",fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"💣",fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"🧨",fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"🔪",fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:"🗡",fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:"⚔",fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:"🛡",fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"🚬",fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"☠",fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"⚰",fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"⚱",fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:"🏺",fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"🔮",fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"📿",fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"🧿",fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:"💈",fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"⚗",fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"🔭",fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"🔬",fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:"🕳",fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"💊",fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"💉",fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"🧬",fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"🦠",fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"🧫",fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"🧪",fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"🌡",fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"🧹",fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:"🧺",fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:"🧻",fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:"🏷",fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"🔖",fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"🚽",fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"🚿",fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"🛁",fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"🧼",fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"🧽",fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"🧴",fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:"🔑",fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:"🗝",fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"🛋",fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"🛌",fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:"🛏",fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:"🚪",fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:"🛎",fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"🧸",fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:"🖼",fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:"🗺",fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"⛱",fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"🗿",fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"🛍",fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:"🛒",fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"🎈",fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"🎏",fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"🎀",fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"🎁",fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"🎊",fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"🎉",fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"🎎",fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"🎐",fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"🎌",fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"🏮",fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:"🧧",fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"✉️",fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"📩",fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"📨",fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"📧",fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"💌",fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"📮",fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"📪",fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"📫",fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"📬",fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"📭",fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"📦",fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"📯",fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"📥",fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"📤",fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"📜",fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"📃",fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"📑",fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"🧾",fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"📊",fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"📈",fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"📉",fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"📄",fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:"📅",fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"📆",fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"🗓",fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:"📇",fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"🗃",fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:"🗳",fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"🗄",fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"📋",fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"🗒",fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"📁",fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"📂",fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"🗂",fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"🗞",fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:"📰",fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"📓",fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"📕",fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"📗",fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"📘",fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"📙",fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"📔",fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:"📒",fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:"📚",fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"📖",fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:"🧷",fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:"🔗",fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"📎",fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"🖇",fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:"✂️",fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"📐",fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"📏",fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:"🧮",fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"📌",fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"📍",fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"🚩",fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"🏳",fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:"🏴",fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"🏳️‍🌈",fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"🔐",fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:"🔒",fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:"🔓",fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"🔏",fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"🖊",fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"🖋",fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"✒️",fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"📝",fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"✏️",fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"🖍",fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"🖌",fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"🔍",fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"🔎",fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:"❤️",fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"🧡",fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"💛",fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"💚",fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"💙",fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"💜",fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:"🖤",fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"💔",fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"❣",fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"💕",fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"💞",fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"💓",fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"💗",fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"💖",fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"💘",fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"💝",fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"💟",fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"☮",fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:"✝",fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"☪",fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"🕉",fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"☸",fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:"✡",fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"🔯",fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"🕎",fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:"☯",fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"☦",fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"🛐",fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"⛎",fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"♈",fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"♉",fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"♊",fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"♋",fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"♌",fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"♍",fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"♎",fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"♏",fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"♐",fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"♑",fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"♒",fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"♓",fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:"🆔",fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"⚛",fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"🈳",fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"🈹",fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"☢",fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:"☣",fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"📴",fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"📳",fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"🈶",fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"🈚",fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"🈸",fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"🈺",fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"🈷️",fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"✴️",fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:"🆚",fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"🉑",fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"💮",fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"🉐",fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"㊙️",fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"㊗️",fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"🈴",fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"🈵",fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"🈲",fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"🅰️",fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"🅱️",fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"🆎",fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"🆑",fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"🅾️",fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"🆘",fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"⛔",fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"📛",fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"🚫",fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"❌",fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:"⭕",fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:"🛑",fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:"💢",fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"♨️",fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"🚷",fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"🚯",fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"🚳",fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"🚱",fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"🔞",fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"📵",fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"❗",fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"❕",fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:"❓",fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"❔",fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"‼️",fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"⁉️",fitzpatrick_scale:false,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"💯",fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"🔅",fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"🔆",fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:"🔱",fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"⚜",fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"〽️",fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"⚠️",fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"🚸",fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:"🔰",fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"♻️",fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"🈯",fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"💹",fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"❇️",fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"✳️",fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"❎",fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"✅",fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"💠",fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"🌀",fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:"➿",fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"🌐",fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"Ⓜ️",fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"🏧",fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"🈂️",fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"🛂",fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"🛃",fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"🛄",fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"🛅",fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"♿",fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"🚭",fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"🚾",fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"🅿️",fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"🚰",fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"🚹",fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"🚺",fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"🚼",fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"🚻",fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"🚮",fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"🎦",fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"📶",fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"🈁",fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"🆖",fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"🆗",fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"🆙",fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:"🆒",fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"🆕",fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:"🆓",fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0️⃣",fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1️⃣",fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2️⃣",fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3️⃣",fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4️⃣",fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5️⃣",fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6️⃣",fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7️⃣",fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8️⃣",fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9️⃣",fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"🔟",fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*⃣",fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"🔢",fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:"⏏️",fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"▶️",fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"⏸",fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"⏭",fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:"⏹",fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:"⏺",fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"⏯",fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:"⏮",fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"⏩",fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"⏪",fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"🔀",fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:"🔁",fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"🔂",fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"◀️",fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"🔼",fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"🔽",fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"⏫",fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"⏬",fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"➡️",fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"⬅️",fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"⬆️",fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"⬇️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"↗️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"↘️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"↙️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"↖️",fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"↕️",fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"↔️",fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"🔄",fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"↪️",fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"↩️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"⤴️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"⤵️",fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#️⃣",fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"ℹ️",fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"🔤",fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"🔡",fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"🔠",fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"🔣",fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"🎵",fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:"🎶",fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"〰️",fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"➰",fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"✔️",fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"🔃",fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"➕",fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"➖",fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"➗",fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"✖️",fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:"♾",fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"💲",fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"💱",fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"©️",fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"®️",fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"™️",fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:"🔚",fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:"🔙",fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:"🔛",fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:"🔝",fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:"🔜",fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"☑️",fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"🔘",fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:"⚪",fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"⚫",fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"🔴",fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"🔵",fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔸",fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔹",fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔶",fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔷",fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"🔺",fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"▪️",fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"▫️",fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"⬛",fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"⬜",fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"🔻",fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"◼️",fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"◻️",fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"◾",fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"◽",fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"🔲",fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"🔳",fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"🔈",fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"🔉",fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"🔊",fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"🔇",fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"📣",fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"📢",fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"🔔",fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"🔕",fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"🃏",fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"🀄",fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"♠️",fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"♣️",fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"♥️",fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"♦️",fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"🎴",fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"💭",fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"🗯",fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"💬",fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"🗨",fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"🕐",fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"🕑",fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"🕒",fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"🕓",fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"🕔",fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"🕕",fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"🕖",fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"🕗",fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"🕘",fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"🕙",fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"🕚",fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"🕛",fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"🕜",fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"🕝",fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"🕞",fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"🕟",fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"🕠",fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"🕡",fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"🕢",fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"🕣",fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"🕤",fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"🕥",fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"🕦",fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"🕧",fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"🇦🇫",fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:"🇦🇽",fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"🇦🇱",fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"🇩🇿",fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"🇦🇸",fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"🇦🇩",fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"🇦🇴",fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"🇦🇮",fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"🇦🇶",fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"🇦🇬",fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"🇦🇷",fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"🇦🇲",fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"🇦🇼",fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"🇦🇺",fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"🇦🇹",fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"🇦🇿",fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"🇧🇸",fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"🇧🇭",fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"🇧🇩",fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"🇧🇧",fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"🇧🇾",fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"🇧🇪",fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"🇧🇿",fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"🇧🇯",fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"🇧🇲",fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"🇧🇹",fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"🇧🇴",fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"🇧🇶",fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"🇧🇦",fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"🇧🇼",fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"🇧🇷",fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"🇮🇴",fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"🇻🇬",fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"🇧🇳",fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"🇧🇬",fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"🇧🇫",fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"🇧🇮",fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"🇨🇻",fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"🇰🇭",fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"🇨🇲",fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"🇨🇦",fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"🇮🇨",fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"🇰🇾",fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"🇨🇫",fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"🇹🇩",fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"🇨🇱",fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"🇨🇳",fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"🇨🇽",fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"🇨🇨",fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"🇨🇴",fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"🇰🇲",fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"🇨🇬",fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"🇨🇩",fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"🇨🇰",fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"🇨🇷",fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"🇭🇷",fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"🇨🇺",fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:"🇨🇼",fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"🇨🇾",fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"🇨🇿",fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"🇩🇰",fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"🇩🇯",fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"🇩🇲",fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"🇩🇴",fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"🇪🇨",fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"🇪🇬",fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"🇸🇻",fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"🇬🇶",fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"🇪🇷",fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"🇪🇪",fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"🇪🇹",fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"🇪🇺",fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"🇫🇰",fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"🇫🇴",fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"🇫🇯",fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"🇫🇮",fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"🇫🇷",fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"🇬🇫",fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"🇵🇫",fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"🇹🇫",fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"🇬🇦",fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"🇬🇲",fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"🇬🇪",fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"🇩🇪",fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"🇬🇭",fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"🇬🇮",fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"🇬🇷",fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"🇬🇱",fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"🇬🇩",fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"🇬🇵",fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"🇬🇺",fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"🇬🇹",fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"🇬🇬",fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"🇬🇳",fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"🇬🇼",fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"🇬🇾",fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"🇭🇹",fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"🇭🇳",fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"🇭🇰",fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"🇭🇺",fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"🇮🇸",fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"🇮🇳",fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"🇮🇩",fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"🇮🇷",fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"🇮🇶",fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"🇮🇪",fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"🇮🇲",fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"🇮🇱",fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"🇮🇹",fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"🇨🇮",fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"🇯🇲",fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"🇯🇵",fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"🇯🇪",fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"🇯🇴",fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"🇰🇿",fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"🇰🇪",fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"🇰🇮",fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"🇽🇰",fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"🇰🇼",fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"🇰🇬",fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"🇱🇦",fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"🇱🇻",fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"🇱🇧",fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"🇱🇸",fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"🇱🇷",fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"🇱🇾",fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"🇱🇮",fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"🇱🇹",fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"🇱🇺",fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"🇲🇴",fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"🇲🇰",fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"🇲🇬",fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"🇲🇼",fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"🇲🇾",fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"🇲🇻",fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"🇲🇱",fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"🇲🇹",fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"🇲🇭",fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"🇲🇶",fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"🇲🇷",fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"🇲🇺",fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"🇾🇹",fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"🇲🇽",fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"🇫🇲",fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"🇲🇩",fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"🇲🇨",fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"🇲🇳",fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"🇲🇪",fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"🇲🇸",fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"🇲🇦",fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"🇲🇿",fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"🇲🇲",fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"🇳🇦",fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"🇳🇷",fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"🇳🇵",fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"🇳🇱",fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"🇳🇨",fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"🇳🇿",fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"🇳🇮",fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"🇳🇪",fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"🇳🇬",fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"🇳🇺",fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"🇳🇫",fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"🇲🇵",fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"🇰🇵",fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"🇳🇴",fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"🇴🇲",fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"🇵🇰",fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"🇵🇼",fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"🇵🇸",fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"🇵🇦",fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"🇵🇬",fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"🇵🇾",fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"🇵🇪",fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"🇵🇭",fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"🇵🇳",fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"🇵🇱",fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"🇵🇹",fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"🇵🇷",fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"🇶🇦",fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:"🇷🇪",fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"🇷🇴",fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"🇷🇺",fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"🇷🇼",fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:"🇧🇱",fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"🇸🇭",fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"🇰🇳",fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"🇱🇨",fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"🇵🇲",fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"🇻🇨",fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"🇼🇸",fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"🇸🇲",fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"🇸🇹",fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"🇸🇦",fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"🇸🇳",fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"🇷🇸",fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"🇸🇨",fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"🇸🇱",fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"🇸🇬",fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"🇸🇽",fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"🇸🇰",fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"🇸🇮",fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"🇸🇧",fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"🇸🇴",fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"🇿🇦",fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"🇬🇸",fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"🇰🇷",fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"🇸🇸",fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"🇪🇸",fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"🇱🇰",fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"🇸🇩",fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"🇸🇷",fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"🇸🇿",fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"🇸🇪",fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"🇨🇭",fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"🇸🇾",fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"🇹🇼",fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"🇹🇯",fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"🇹🇿",fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"🇹🇭",fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"🇹🇱",fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"🇹🇬",fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"🇹🇰",fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"🇹🇴",fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"🇹🇹",fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"🇹🇳",fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"🇹🇷",fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"🇹🇲",fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"🇹🇨",fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"🇹🇻",fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"🇺🇬",fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"🇺🇦",fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"🇦🇪",fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"🇬🇧",fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:"🏴󠁧󠁢󠁥󠁮󠁧󠁿",fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:"🏴󠁧󠁢󠁳󠁣󠁴󠁿",fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:"🏴󠁧󠁢󠁷󠁬󠁳󠁿",fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"🇺🇸",fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"🇻🇮",fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"🇺🇾",fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"🇺🇿",fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"🇻🇺",fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"🇻🇦",fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"🇻🇪",fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"🇻🇳",fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"🇼🇫",fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"🇪🇭",fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"🇾🇪",fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"🇿🇲",fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"🇿🇼",fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"🇺🇳",fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"🏴‍☠️",fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.min.js b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.min.js new file mode 100644 index 000000000..5a1c49160 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.min.js @@ -0,0 +1,2 @@ +// Source: npm package: emojilib, file:emojis.json +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"\u{1f600}",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"\u{1f62c}",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"\u{1f601}",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"\u{1f602}",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"\u{1f923}",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"\u{1f973}",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"\u{1f603}",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"\u{1f604}",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"\u{1f605}",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"\u{1f606}",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"\u{1f607}",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"\u{1f609}",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"\u{1f60a}",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"\u{1f642}",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"\u{1f643}",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"\u{1f60b}",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"\u{1f60c}",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"\u{1f60d}",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"\u{1f970}",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f618}",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"\u{1f617}",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"\u{1f619}",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f61a}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"\u{1f61c}",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"\u{1f92a}",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"\u{1f928}",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"\u{1f9d0}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"\u{1f61d}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"\u{1f61b}",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"\u{1f911}",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"\u{1f913}",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"\u{1f60e}",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"\u{1f929}",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:"\u{1f921}",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"\u{1f920}",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:"\u{1f917}",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"\u{1f60f}",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"\u{1f636}",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"\u{1f610}",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"\u{1f611}",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"\u{1f612}",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"\u{1f644}",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"\u{1f914}",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"\u{1f925}",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"\u{1f92d}",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"\u{1f92b}",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"\u{1f92c}",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"\u{1f92f}",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"\u{1f633}",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"\u{1f61e}",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"\u{1f61f}",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"\u{1f620}",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"\u{1f621}",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"\u{1f614}",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"\u{1f615}",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"\u{1f641}",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"\u{1f623}",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"\u{1f616}",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"\u{1f62b}",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"\u{1f629}",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"\u{1f97a}",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"\u{1f624}",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"\u{1f62e}",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"\u{1f631}",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"\u{1f628}",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"\u{1f630}",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:"\u{1f62f}",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:"\u{1f626}",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"\u{1f627}",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"\u{1f622}",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"\u{1f625}",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:"\u{1f924}",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"\u{1f62a}",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"\u{1f613}",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"\u{1f975}",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"\u{1f976}",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"\u{1f62d}",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"\u{1f635}",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"\u{1f632}",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"\u{1f910}",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"\u{1f922}",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"\u{1f927}",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:"\u{1f92e}",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"\u{1f637}",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"\u{1f912}",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"\u{1f915}",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"\u{1f974}",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"\u{1f634}",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"\u{1f4a4}",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"\u{1f4a9}",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"\u{1f608}",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:"\u{1f47f}",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"\u{1f479}",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"\u{1f47a}",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"\u{1f480}",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"\u{1f47b}",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"\u{1f47d}",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:"\u{1f916}",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"\u{1f63a}",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"\u{1f638}",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"\u{1f639}",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"\u{1f63b}",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"\u{1f63c}",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"\u{1f63d}",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"\u{1f640}",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"\u{1f63f}",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"\u{1f63e}",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"\u{1f932}",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"\u{1f64c}",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"\u{1f44f}",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"\u{1f44b}",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"\u{1f919}",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"\u{1f44d}",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"\u{1f44e}",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"\u{1f44a}",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"\u{1f91b}",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"\u{1f91c}",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"\u{1f44c}",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"\u{1f91a}",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"\u{1f450}",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"\u{1f4aa}",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"\u{1f64f}",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:"\u{1f9b6}",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:"\u{1f9b5}",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:"\u{1f91d}",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"\u{1f446}",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"\u{1f447}",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"\u{1f448}",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"\u{1f449}",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"\u{1f595}",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"\u{1f590}",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"\u{1f91f}",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"\u{1f918}",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"\u{1f91e}",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"\u{1f596}",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:"\u{1f933}",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"\u{1f485}",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:"\u{1f444}",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:"\u{1f9b7}",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:"\u{1f445}",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"\u{1f442}",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:"\u{1f443}",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"\u{1f441}",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"\u{1f440}",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:"\u{1f9e0}",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"\u{1f464}",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"\u{1f465}",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"\u{1f5e3}",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"\u{1f476}",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:"\u{1f9d2}",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"\u{1f466}",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:"\u{1f467}",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:"\u{1f9d1}",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"\u{1f468}",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:"\u{1f469}",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"\u{1f471}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"\u{1f471}",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"\u{1f9d4}",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"\u{1f9d3}",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"\u{1f474}",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"\u{1f475}",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"\u{1f472}",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"\u{1f9d5}",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"\u{1f473}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"\u{1f473}",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"\u{1f46e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"\u{1f46e}",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"\u{1f477}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"\u{1f477}",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"\u{1f482}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"\u{1f482}",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"\u{1f575}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"\u{1f575}",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"\u{1f469}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"\u{1f468}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"\u{1f469}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"\u{1f468}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"\u{1f469}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:"\u{1f468}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"\u{1f469}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:"\u{1f468}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"\u{1f469}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"\u{1f468}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"\u{1f469}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"\u{1f468}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"\u{1f469}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"\u{1f468}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"\u{1f469}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"\u{1f468}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"\u{1f469}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"\u{1f468}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"\u{1f469}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"\u{1f468}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"\u{1f469}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"\u{1f468}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"\u{1f469}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:"\u{1f468}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"\u{1f469}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"\u{1f468}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"\u{1f469}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"\u{1f468}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"\u{1f469}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"\u{1f468}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"\u{1f469}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"\u{1f468}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"\u{1f9b8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"\u{1f9b8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"\u{1f9b9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"\u{1f9b9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"\u{1f936}",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"\u{1f385}",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"\u{1f9d9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"\u{1f9d9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:"\u{1f9dd}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:"\u{1f9dd}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:"\u{1f9db}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"\u{1f9db}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"\u{1f9df}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"\u{1f9df}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:"\u{1f9de}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:"\u{1f9de}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"\u{1f9dc}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:"\u{1f9dc}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:"\u{1f9da}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:"\u{1f9da}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"\u{1f47c}",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:"\u{1f930}",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"\u{1f931}",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"\u{1f478}",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"\u{1f934}",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"\u{1f470}",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"\u{1f935}",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"\u{1f3c3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"\u{1f3c3}",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"\u{1f6b6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"\u{1f6b6}",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"\u{1f483}",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"\u{1f57a}",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"\u{1f46f}",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"\u{1f46f}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"\u{1f46b}",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"\u{1f46c}",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"\u{1f46d}",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"\u{1f647}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"\u{1f647}",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"\u{1f926}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"\u{1f926}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"\u{1f937}",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"\u{1f937}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"\u{1f481}",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"\u{1f481}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"\u{1f645}",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"\u{1f645}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"\u{1f646}",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"\u{1f646}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"\u{1f64b}",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"\u{1f64b}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"\u{1f64e}",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"\u{1f64e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"\u{1f487}",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"\u{1f487}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"\u{1f486}",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"\u{1f486}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f491}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f48f}",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"\u{1f46a}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"\u{1f9f6}",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"\u{1f9f5}",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:"\u{1f9e5}",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"\u{1f97c}",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"\u{1f45a}",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"\u{1f455}",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:"\u{1f456}",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"\u{1f454}",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"\u{1f457}",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"\u{1f459}",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"\u{1f458}",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"\u{1f484}",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"\u{1f48b}",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"\u{1f463}",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"\u{1f97f}",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"\u{1f460}",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"\u{1f461}",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:"\u{1f462}",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"\u{1f45e}",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"\u{1f45f}",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"\u{1f97e}",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:"\u{1f9e6}",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"\u{1f9e4}",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"\u{1f9e3}",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"\u{1f452}",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"\u{1f3a9}",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"\u{1f9e2}",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"\u{1f393}",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"\u{1f451}",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"\u{1f392}",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:"\u{1f9f3}",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"\u{1f45d}",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"\u{1f45b}",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"\u{1f45c}",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"\u{1f4bc}",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"\u{1f453}",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"\u{1f576}",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"\u{1f97d}",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"\u{1f48d}",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"\u{1f302}",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"\u{1f436}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"\u{1f431}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"\u{1f42d}",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"\u{1f439}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"\u{1f430}",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"\u{1f98a}",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"\u{1f43b}",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"\u{1f43c}",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"\u{1f428}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"\u{1f42f}",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"\u{1f981}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f42e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"\u{1f437}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"\u{1f43d}",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"\u{1f438}",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"\u{1f991}",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"\u{1f419}",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"\u{1f990}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"\u{1f435}",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"\u{1f98d}",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"\u{1f648}",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"\u{1f649}",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"\u{1f64a}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"\u{1f412}",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"\u{1f414}",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"\u{1f427}",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"\u{1f426}",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"\u{1f424}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"\u{1f423}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"\u{1f425}",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"\u{1f986}",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"\u{1f985}",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"\u{1f989}",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"\u{1f987}",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"\u{1f43a}",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"\u{1f417}",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"\u{1f434}",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"\u{1f984}",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"\u{1f41d}",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"\u{1f41b}",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"\u{1f98b}",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"\u{1f40c}",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"\u{1f41e}",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"\u{1f41c}",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"\u{1f997}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"\u{1f577}",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"\u{1f982}",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"\u{1f980}",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"\u{1f40d}",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"\u{1f98e}",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"\u{1f996}",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"\u{1f995}",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"\u{1f422}",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"\u{1f420}",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"\u{1f41f}",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"\u{1f421}",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"\u{1f42c}",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"\u{1f988}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"\u{1f433}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"\u{1f40b}",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"\u{1f40a}",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"\u{1f406}",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"\u{1f993}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"\u{1f405}",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"\u{1f403}",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"\u{1f402}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f404}",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"\u{1f98c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"\u{1f42a}",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"\u{1f42b}",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"\u{1f992}",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"\u{1f418}",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"\u{1f98f}",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"\u{1f410}",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"\u{1f40f}",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"\u{1f411}",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"\u{1f40e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"\u{1f416}",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"\u{1f400}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"\u{1f401}",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"\u{1f413}",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"\u{1f983}",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"\u{1f54a}",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"\u{1f415}",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"\u{1f429}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"\u{1f408}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"\u{1f407}",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"\u{1f43f}",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"\u{1f994}",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"\u{1f99d}",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"\u{1f999}",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"\u{1f99b}",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"\u{1f998}",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"\u{1f9a1}",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"\u{1f9a2}",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"\u{1f99a}",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"\u{1f99c}",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"\u{1f99e}",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"\u{1f99f}",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"\u{1f43e}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f409}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f432}",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"\u{1f335}",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"\u{1f384}",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"\u{1f332}",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"\u{1f333}",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"\u{1f334}",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"\u{1f331}",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"\u{1f33f}",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"\u{1f340}",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"\u{1f38d}",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"\u{1f38b}",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"\u{1f343}",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"\u{1f342}",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"\u{1f341}",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"\u{1f33e}",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"\u{1f33a}",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"\u{1f33b}",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"\u{1f339}",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"\u{1f940}",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"\u{1f337}",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"\u{1f33c}",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"\u{1f338}",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"\u{1f490}",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"\u{1f344}",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"\u{1f330}",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"\u{1f383}",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"\u{1f41a}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"\u{1f578}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"\u{1f30e}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"\u{1f30d}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"\u{1f30f}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"\u{1f315}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"\u{1f316}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f317}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f318}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f311}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f312}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f313}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"\u{1f314}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31a}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31d}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31b}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31c}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"\u{1f31e}",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"\u{1f319}",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"\u{1f31f}",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"\u{1f4ab}",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"\u{1f324}",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"\u{1f325}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"\u{1f326}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"\u{1f327}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"\u{1f329}",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"\u{1f525}",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"\u{1f4a5}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"\u{1f328}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"\u{1f32c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"\u{1f4a8}",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"\u{1f32a}",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:"\u{1f32b}",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"\u{1f4a7}",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"\u{1f4a6}",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"\u{1f30a}",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"\u{1f34f}",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"\u{1f34e}",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"\u{1f350}",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"\u{1f34a}",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"\u{1f34b}",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"\u{1f34c}",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"\u{1f349}",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"\u{1f347}",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"\u{1f353}",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"\u{1f348}",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"\u{1f352}",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"\u{1f351}",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"\u{1f34d}",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"\u{1f965}",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"\u{1f95d}",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"\u{1f96d}",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"\u{1f951}",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"\u{1f966}",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"\u{1f345}",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"\u{1f346}",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"\u{1f952}",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"\u{1f955}",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"\u{1f336}",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"\u{1f954}",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"\u{1f33d}",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"\u{1f96c}",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"\u{1f360}",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"\u{1f95c}",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"\u{1f36f}",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"\u{1f950}",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"\u{1f35e}",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"\u{1f956}",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"\u{1f96f}",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"\u{1f968}",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"\u{1f9c0}",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"\u{1f95a}",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"\u{1f953}",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"\u{1f969}",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"\u{1f95e}",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"\u{1f357}",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"\u{1f356}",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"\u{1f9b4}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"\u{1f364}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"\u{1f373}",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"\u{1f354}",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"\u{1f35f}",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"\u{1f959}",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"\u{1f32d}",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"\u{1f355}",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"\u{1f96a}",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"\u{1f96b}",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"\u{1f35d}",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"\u{1f32e}",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"\u{1f32f}",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"\u{1f957}",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"\u{1f958}",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"\u{1f35c}",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"\u{1f372}",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"\u{1f365}",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"\u{1f960}",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"\u{1f363}",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"\u{1f371}",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"\u{1f35b}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"\u{1f359}",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"\u{1f35a}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"\u{1f358}",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"\u{1f362}",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"\u{1f361}",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"\u{1f367}",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"\u{1f368}",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"\u{1f366}",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"\u{1f967}",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"\u{1f370}",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"\u{1f9c1}",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"\u{1f96e}",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"\u{1f382}",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"\u{1f36e}",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"\u{1f36c}",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"\u{1f36d}",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"\u{1f36b}",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"\u{1f37f}",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"\u{1f95f}",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"\u{1f369}",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"\u{1f36a}",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"\u{1f95b}",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37a}",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37b}",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"\u{1f942}",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"\u{1f377}",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"\u{1f943}",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"\u{1f378}",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"\u{1f379}",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"\u{1f37e}",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"\u{1f376}",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"\u{1f375}",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"\u{1f964}",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"\u{1f37c}",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"\u{1f9c2}",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"\u{1f944}",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"\u{1f374}",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"\u{1f37d}",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"\u{1f963}",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"\u{1f961}",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"\u{1f962}",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"\u{1f3c0}",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"\u{1f3c8}",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:"\u{1f94e}",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"\u{1f3be}",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:"\u{1f3d0}",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:"\u{1f3c9}",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"\u{1f94f}",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"\u{1f3b1}",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"\u{1f3cc}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:"\u{1f3cc}",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"\u{1f3d3}",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:"\u{1f3f8}",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:"\u{1f945}",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:"\u{1f3d2}",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:"\u{1f3d1}",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"\u{1f94d}",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:"\u{1f3cf}",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"\u{1f3bf}",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"\u{1f3c2}",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"\u{1f93a}",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:"\u{1f94c}",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:"\u{1f6f9}",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"\u{1f6f7}",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"\u{1f3f9}",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"\u{1f3a3}",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"\u{1f94a}",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"\u{1f94b}",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"\u{1f6a3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"\u{1f6a3}",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"\u{1f9d7}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"\u{1f9d7}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"\u{1f3ca}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"\u{1f3ca}",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"\u{1f3c4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"\u{1f3c4}",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"\u{1f6c0}",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"\u{1f3cb}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"\u{1f3cb}",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"\u{1f6b4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"\u{1f6b4}",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"\u{1f6b5}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"\u{1f6b5}",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"\u{1f3c7}",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"\u{1f574}",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"\u{1f3c6}",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"\u{1f3bd}",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:"\u{1f3c5}",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"\u{1f396}",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"\u{1f947}",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"\u{1f948}",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"\u{1f949}",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"\u{1f397}",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"\u{1f3f5}",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"\u{1f3ab}",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"\u{1f39f}",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"\u{1f3ad}",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"\u{1f3a8}",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"\u{1f3aa}",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"\u{1f3a4}",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"\u{1f3a7}",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"\u{1f3bc}",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"\u{1f3b9}",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"\u{1f941}",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"\u{1f3b7}",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:"\u{1f3ba}",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:"\u{1f3b8}",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"\u{1f3bb}",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:"\u{1f3ac}",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"\u{1f3ae}",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"\u{1f47e}",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"\u{1f3af}",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"\u{1f3b2}",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"\u{1f3b0}",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"\u{1f9e9}",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"\u{1f3b3}",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"\u{1f697}",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"\u{1f695}",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"\u{1f699}",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"\u{1f68c}",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"\u{1f68e}",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"\u{1f3ce}",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"\u{1f693}",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"\u{1f691}",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"\u{1f692}",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"\u{1f690}",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"\u{1f69a}",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"\u{1f69b}",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"\u{1f69c}",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"\u{1f6f4}",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"\u{1f3cd}",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"\u{1f6b2}",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"\u{1f6f5}",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"\u{1f6a8}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"\u{1f694}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"\u{1f68d}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"\u{1f698}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"\u{1f696}",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a1}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a0}",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"\u{1f69f}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"\u{1f683}",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"\u{1f68b}",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"\u{1f69d}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"\u{1f684}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"\u{1f685}",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"\u{1f688}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"\u{1f69e}",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"\u{1f682}",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"\u{1f686}",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"\u{1f687}",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"\u{1f68a}",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"\u{1f689}",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"\u{1f6f8}",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"\u{1f681}",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"\u{1f6e9}",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"\u{1f6eb}",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"\u{1f6ec}",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"\u{1f6e5}",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"\u{1f6a4}",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"\u{1f6f3}",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"\u{1f680}",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"\u{1f6f0}",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"\u{1f4ba}",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"\u{1f6f6}",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"\u{1f6a7}",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"\u{1f68f}",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"\u{1f6a6}",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"\u{1f6a5}",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"\u{1f3c1}",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"\u{1f6a2}",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"\u{1f3a1}",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"\u{1f3a2}",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"\u{1f3a0}",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"\u{1f3d7}",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"\u{1f301}",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"\u{1f5fc}",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"\u{1f3ed}",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"\u{1f391}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"\u{1f3d4}",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"\u{1f5fb}",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"\u{1f30b}",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"\u{1f5fe}",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"\u{1f3d5}",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"\u{1f3de}",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"\u{1f6e3}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"\u{1f6e4}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"\u{1f305}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"\u{1f304}",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"\u{1f3dc}",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"\u{1f3d6}",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"\u{1f3dd}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"\u{1f307}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"\u{1f306}",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"\u{1f3d9}",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"\u{1f303}",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"\u{1f309}",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"\u{1f30c}",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"\u{1f320}",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"\u{1f387}",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"\u{1f386}",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"\u{1f308}",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"\u{1f3d8}",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"\u{1f3f0}",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"\u{1f3ef}",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"\u{1f3df}",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"\u{1f5fd}",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:"\u{1f3e0}",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"\u{1f3e1}",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"\u{1f3da}",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"\u{1f3e2}",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"\u{1f3ec}",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"\u{1f3e3}",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"\u{1f3e4}",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"\u{1f3e5}",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"\u{1f3e6}",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"\u{1f3e8}",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"\u{1f3ea}",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"\u{1f3eb}",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"\u{1f3e9}",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"\u{1f492}",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"\u{1f3db}",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"\u{1f54c}",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"\u{1f54d}",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"\u{1f54b}",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"\u{1f4f1}",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:"\u{1f4f2}",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"\u{1f4bb}",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"\u{1f5a5}",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:"\u{1f5a8}",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:"\u{1f5b1}",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"\u{1f5b2}",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:"\u{1f579}",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:"\u{1f5dc}",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"\u{1f4bd}",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"\u{1f4be}",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"\u{1f4bf}",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"\u{1f4c0}",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"\u{1f4fc}",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:"\u{1f4f7}",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"\u{1f4f8}",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:"\u{1f4f9}",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:"\u{1f3a5}",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"\u{1f4fd}",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:"\u{1f39e}",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"\u{1f4de}",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"\u{1f4df}",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:"\u{1f4e0}",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"\u{1f4fa}",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"\u{1f4fb}",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"\u{1f399}",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:"\u{1f39a}",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:"\u{1f39b}",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"\u{1f9ed}",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"\u{1f570}",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"\u{1f4e1}",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"\u{1f50b}",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:"\u{1f50c}",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"\u{1f4a1}",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"\u{1f526}",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:"\u{1f56f}",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"\u{1f9ef}",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"\u{1f5d1}",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:"\u{1f6e2}",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"\u{1f4b8}",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"\u{1f4b5}",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"\u{1f4b4}",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"\u{1f4b6}",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"\u{1f4b7}",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"\u{1f4b0}",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"\u{1f4b3}",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"\u{1f48e}",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"\u{1f9f0}",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"\u{1f527}",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:"\u{1f528}",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"\u{1f6e0}",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"\u{1f529}",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:"\u{1f9f1}",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"\u{1f9f2}",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"\u{1f52b}",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"\u{1f4a3}",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"\u{1f9e8}",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"\u{1f52a}",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:"\u{1f5e1}",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:"\u{1f6e1}",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"\u{1f6ac}",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:"\u{1f3fa}",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"\u{1f52e}",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"\u{1f4ff}",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"\u{1f9ff}",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:"\u{1f488}",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"\u{1f52d}",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"\u{1f52c}",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:"\u{1f573}",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"\u{1f48a}",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"\u{1f489}",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"\u{1f9ec}",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"\u{1f9a0}",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"\u{1f9eb}",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"\u{1f9ea}",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"\u{1f321}",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"\u{1f9f9}",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:"\u{1f9fa}",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:"\u{1f9fb}",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:"\u{1f3f7}",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"\u{1f516}",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"\u{1f6bd}",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"\u{1f6bf}",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"\u{1f6c1}",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"\u{1f9fc}",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"\u{1f9fd}",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"\u{1f9f4}",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:"\u{1f511}",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:"\u{1f5dd}",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"\u{1f6cb}",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"\u{1f6cc}",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:"\u{1f6cf}",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:"\u{1f6aa}",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:"\u{1f6ce}",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"\u{1f9f8}",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:"\u{1f5bc}",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:"\u{1f5fa}",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"\u{1f5ff}",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"\u{1f6cd}",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:"\u{1f6d2}",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"\u{1f388}",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"\u{1f38f}",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"\u{1f380}",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"\u{1f381}",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"\u{1f38a}",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"\u{1f389}",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"\u{1f38e}",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"\u{1f390}",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"\u{1f38c}",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"\u{1f3ee}",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:"\u{1f9e7}",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"\u{1f4e9}",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"\u{1f4e8}",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"\u{1f4e7}",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"\u{1f48c}",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"\u{1f4ee}",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"\u{1f4ea}",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"\u{1f4eb}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"\u{1f4ec}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"\u{1f4ed}",fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"\u{1f4e6}",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"\u{1f4ef}",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"\u{1f4e5}",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"\u{1f4e4}",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"\u{1f4dc}",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"\u{1f4c3}",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"\u{1f4d1}",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"\u{1f9fe}",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"\u{1f4ca}",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"\u{1f4c8}",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"\u{1f4c9}",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"\u{1f4c4}",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:"\u{1f4c5}",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"\u{1f4c6}",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"\u{1f5d3}",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:"\u{1f4c7}",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"\u{1f5c3}",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:"\u{1f5f3}",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"\u{1f5c4}",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"\u{1f4cb}",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"\u{1f5d2}",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"\u{1f4c1}",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"\u{1f4c2}",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"\u{1f5c2}",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"\u{1f5de}",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:"\u{1f4f0}",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"\u{1f4d3}",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"\u{1f4d5}",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"\u{1f4d7}",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"\u{1f4d8}",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"\u{1f4d9}",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"\u{1f4d4}",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:"\u{1f4d2}",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:"\u{1f4da}",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"\u{1f4d6}",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:"\u{1f9f7}",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:"\u{1f517}",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"\u{1f4ce}",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"\u{1f587}",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"\u{1f4d0}",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"\u{1f4cf}",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:"\u{1f9ee}",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"\u{1f4cc}",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"\u{1f4cd}",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"\u{1f6a9}",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"\u{1f3f3}",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:"\u{1f3f4}",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"\u{1f3f3}\ufe0f\u200d\u{1f308}",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"\u{1f510}",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:"\u{1f512}",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:"\u{1f513}",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"\u{1f50f}",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"\u{1f58a}",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"\u{1f58b}",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"\u{1f4dd}",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"\u{1f58d}",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"\u{1f58c}",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"\u{1f50d}",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"\u{1f50e}",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f9e1}",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49b}",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49a}",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f499}",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49c}",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:"\u{1f5a4}",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"\u{1f494}",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"\u{1f495}",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"\u{1f49e}",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"\u{1f493}",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"\u{1f497}",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f496}",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"\u{1f498}",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"\u{1f49d}",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"\u{1f49f}",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u{1f549}",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"\u{1f52f}",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"\u{1f54e}",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"\u{1f6d0}",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:"\u{1f194}",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"\u{1f233}",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"\u{1f239}",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"\u{1f4f4}",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"\u{1f4f3}",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"\u{1f236}",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"\u{1f21a}",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"\u{1f238}",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"\u{1f23a}",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"\u{1f237}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:"\u{1f19a}",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"\u{1f251}",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"\u{1f4ae}",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"\u{1f250}",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"\u{1f234}",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"\u{1f235}",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"\u{1f232}",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"\u{1f170}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"\u{1f171}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"\u{1f18e}",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"\u{1f191}",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"\u{1f17e}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"\u{1f198}",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"\u{1f4db}",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"\u{1f6ab}",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:"\u{1f6d1}",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:"\u{1f4a2}",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"\u{1f6b7}",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"\u{1f6af}",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"\u{1f6b3}",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"\u{1f6b1}",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"\u{1f51e}",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"\u{1f4f5}",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"\u{1f4af}",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"\u{1f505}",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"\u{1f506}",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:"\u{1f531}",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"\u{1f6b8}",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:"\u{1f530}",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"\u{1f22f}",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"\u{1f4b9}",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"\u{1f4a0}",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"\u{1f300}",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"\u{1f310}",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"\u{1f3e7}",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"\u{1f202}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"\u{1f6c2}",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"\u{1f6c3}",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"\u{1f6c4}",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"\u{1f6c5}",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"\u{1f6ad}",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"\u{1f6be}",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"\u{1f17f}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"\u{1f6b0}",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"\u{1f6b9}",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"\u{1f6ba}",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"\u{1f6bc}",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"\u{1f6bb}",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"\u{1f6ae}",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"\u{1f3a6}",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"\u{1f4f6}",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"\u{1f201}",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"\u{1f196}",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"\u{1f197}",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"\u{1f199}",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:"\u{1f192}",fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"\u{1f195}",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:"\u{1f193}",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"\u{1f51f}",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"\u{1f522}",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"\u{1f500}",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:"\u{1f501}",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"\u{1f502}",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"\u{1f53c}",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"\u{1f53d}",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"\u{1f504}",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"\u{1f524}",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"\u{1f521}",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"\u{1f520}",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"\u{1f523}",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"\u{1f3b5}",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:"\u{1f3b6}",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"\u{1f503}",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"\u{1f4b2}",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"\u{1f4b1}",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:"\u{1f51a}",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:"\u{1f519}",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:"\u{1f51b}",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:"\u{1f51d}",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:"\u{1f51c}",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"\u{1f518}",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"\u{1f534}",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"\u{1f535}",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f538}",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f539}",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f536}",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f537}",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"\u{1f53a}",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"\u{1f53b}",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"\u{1f532}",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"\u{1f533}",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"\u{1f508}",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"\u{1f509}",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"\u{1f50a}",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"\u{1f507}",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"\u{1f4e3}",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"\u{1f4e2}",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"\u{1f514}",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"\u{1f515}",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"\u{1f0cf}",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"\u{1f004}",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"\u{1f3b4}",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"\u{1f4ad}",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"\u{1f5ef}",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"\u{1f4ac}",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"\u{1f5e8}",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"\u{1f550}",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"\u{1f551}",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"\u{1f552}",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"\u{1f553}",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"\u{1f554}",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"\u{1f555}",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"\u{1f556}",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"\u{1f557}",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"\u{1f558}",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"\u{1f559}",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"\u{1f55a}",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"\u{1f55b}",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"\u{1f55c}",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"\u{1f55d}",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"\u{1f55e}",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"\u{1f55f}",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"\u{1f560}",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"\u{1f561}",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"\u{1f562}",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"\u{1f563}",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"\u{1f564}",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"\u{1f565}",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"\u{1f566}",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"\u{1f567}",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"\u{1f1e8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"\u{1f1ea}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"\u{1f1eb}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"\u{1f1e9}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"\u{1f1ef}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"\u{1f1fd}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"\u{1f1f4}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"\u{1f1f6}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"\u{1f1ec}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"\u{1f1fa}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"\u{1f3f4}\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/emoticons/plugin.min.js b/apps/web-antd/public/tinymce/plugins/emoticons/plugin.min.js new file mode 100644 index 000000000..23fa192f3 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/emoticons/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>t===e,o=e(null),n=e(void 0),s=()=>{},r=()=>!1;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return null==t?a.none():a.some(t)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const i=(t,e)=>{const o=t.length,n=new Array(o);for(let s=0;s{let e=t;return{get:()=>e,set:t=>{e=t}}},c=Object.keys,u=Object.hasOwnProperty,g=(t,e)=>{const o=c(t);for(let n=0,s=o.length;nu.call(t,e),m=(h=(t,e)=>e,(...t)=>{if(0===t.length)throw new Error("Can't merge zero objects");const e={};for(let o=0;o{const t=(t=>{const e=l(a.none()),o=()=>e.get().each(t);return{clear:()=>{o(),e.set(a.none())},isSet:()=>e.get().isSome(),get:()=>e.get(),set:t=>{o(),e.set(a.some(t))}}})(s);return{...t,on:e=>t.get().each(e)}},y=(t,e,o=0,s)=>{const r=t.indexOf(e,o);return-1!==r&&(!!n(s)||r+e.length<=s)};var v=tinymce.util.Tools.resolve("tinymce.Resource");const f=t=>e=>e.options.get(t),b=f("emoticons_database"),w=f("emoticons_database_url"),j=f("emoticons_database_id"),C=f("emoticons_append"),_=f("emoticons_images_url"),A="All",k={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},O=(t,e)=>d(t,e)?t[e]:e,x=t=>{const e=C(t);return o=t=>({keywords:[],category:"user",...t}),((t,e)=>{const o={};return g(t,((t,n)=>{const s=e(t,n);o[s.k]=s.v})),o})(e,((t,e)=>({k:e,v:o(t)})));var o},E=(t,e)=>y(t.title.toLowerCase(),e)||(t=>{for(let n=0,s=t.length;n{const n=[],s=e.toLowerCase(),a=o.fold((()=>r),(t=>e=>e>=t));for(let o=0;o{const n={pattern:"",results:L(e.listAll(),"",a.some(300))},s=l(A),r=(t=>{let e=null;const n=()=>{o(e)||(clearTimeout(e),e=null)};return{cancel:n,throttle:(...o)=>{n(),e=setTimeout((()=>{e=null,t.apply(null,o)}),200)}}})((t=>{(t=>{const o=t.getData(),n=s.get(),r=e.listCategory(n),i=L(r,o[S],n===A?a.some(300):a.none());t.setData({results:i})})(t)})),c={label:"Search",type:"input",name:S},u={type:"collection",name:"results"},g=()=>({title:"Emojis",size:"normal",body:{type:"tabpanel",tabs:i(e.listCategories(),(t=>({title:t,name:t,items:[c,u]})))},initialData:n,onTabChange:(t,e)=>{s.set(e.newTabName),r.throttle(t)},onChange:r.throttle,onAction:(e,o)=>{"results"===o.name&&(((t,e)=>{t.insertContent(e)})(t,o.value),e.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}),d=t.windowManager.open(g());d.focus(S),e.hasLoaded()||(d.block("Loading emojis..."),e.waitForLoad().then((()=>{d.redial(g()),r.throttle(d),d.focus(S),d.unblock()})).catch((t=>{d.redial({title:"Emojis",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"Could not load emojis"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),d.focus(S),d.unblock()})))},T=t=>e=>{const o=()=>{e.setEnabled(t.selection.isEditable())};return t.on("NodeChange",o),o(),()=>{t.off("NodeChange",o)}};t.add("emoticons",((t,e)=>{((t,e)=>{const o=t.options.register;o("emoticons_database",{processor:"string",default:"emojis"}),o("emoticons_database_url",{processor:"string",default:`${e}/js/${b(t)}${t.suffix}.js`}),o("emoticons_database_id",{processor:"string",default:"tinymce.plugins.emoticons"}),o("emoticons_append",{processor:"object",default:{}}),o("emoticons_images_url",{processor:"string",default:"https://cdnjs.cloudflare.com/ajax/libs/twemoji/15.1.0/72x72/"})})(t,e);const o=((t,e,o)=>{const n=p(),s=p(),r=_(t),i=t=>{return o="=4&&e.substr(0,4)===o?t.char.replace(/src="([^"]+)"/,((t,e)=>`src="${r}${e}"`)):t.char;var e,o};t.on("init",(()=>{v.load(o,e).then((e=>{const o=x(t);(t=>{const e={},o=[];g(t,((t,n)=>{const s={title:n,keywords:t.keywords,char:i(t),category:O(k,t.category)},r=void 0!==e[s.category]?e[s.category]:[];e[s.category]=r.concat([s]),o.push(s)})),n.set(e),s.set(o)})(m(e,o))}),(t=>{console.log(`Failed to load emojis: ${t}`),n.set({}),s.set([])}))}));const l=()=>s.get().getOr([]),u=()=>n.isSet()&&s.isSet();return{listCategories:()=>[A].concat(c(n.get().getOr({}))),hasLoaded:u,waitForLoad:()=>u()?Promise.resolve(!0):new Promise(((t,o)=>{let n=15;const s=setInterval((()=>{u()?(clearInterval(s),t(!0)):(n--,n<0&&(console.log("Could not load emojis from url: "+e),clearInterval(s),o(!1)))}),100)})),listAll:l,listCategory:t=>t===A?l():n.get().bind((e=>a.from(e[t]))).getOr([])}})(t,w(t),j(t));return((t,e)=>{t.addCommand("mceEmoticons",(()=>N(t,e)))})(t,o),(t=>{const e=()=>t.execCommand("mceEmoticons");t.ui.registry.addButton("emoticons",{tooltip:"Emojis",icon:"emoji",onAction:e,onSetup:T(t)}),t.ui.registry.addMenuItem("emoticons",{text:"Emojis...",icon:"emoji",onAction:e,onSetup:T(t)})})(t),((t,e)=>{t.ui.registry.addAutocompleter("emoticons",{trigger:":",columns:"auto",minChars:2,fetch:(t,o)=>e.waitForLoad().then((()=>{const n=e.listAll();return L(n,t,a.some(o))})),onAction:(e,o,n)=>{t.selection.setRng(o),t.insertContent(n),e.hide()}})})(t,o),(t=>{t.on("PreInit",(()=>{t.parser.addAttributeFilter("data-emoticon",(t=>{(t=>{for(let o=0,n=t.length;oo.waitForLoad().then((()=>o.listAll()))}}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/fullscreen/plugin.min.js b/apps/web-antd/public/tinymce/plugins/fullscreen/plugin.min.js new file mode 100644 index 000000000..37f4522f9 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/fullscreen/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";const e=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}};var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const n=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=r=e,(o=String).prototype.isPrototypeOf(n)||(null===(s=r.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var n,r,o,s})(t)===e,r=e=>t=>typeof t===e,o=e=>t=>e===t,s=n("string"),i=n("object"),l=n("array"),a=o(null),c=r("boolean"),u=o(void 0),d=e=>!(e=>null==e)(e),m=r("function"),h=r("number"),g=()=>{},p=e=>()=>e;function f(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const v=p(!1),w=p(!0);class y{constructor(e,t){this.tag=e,this.value=t}static some(e){return new y(!0,e)}static none(){return y.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?y.some(e(this.value)):y.none()}bind(e){return this.tag?e(this.value):y.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:y.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?y.some(e):y.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}y.singletonNone=new y(!1);const b=Array.prototype.push,S=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o{for(let n=0,r=e.length;n{const n=[];for(let r=0,o=e.length;r((e,t,n)=>{for(let r=0,o=e.length;r{const n=e(y.none()),r=()=>n.get().each(t);return{clear:()=>{r(),n.set(y.none())},isSet:()=>n.get().isSome(),get:()=>n.get(),set:e=>{r(),n.set(y.some(e))}}},k=()=>O((e=>e.unbind())),T=Object.keys,C="undefined"!=typeof window?window:Function("return this;")(),A=(e,t)=>((e,t)=>{let n=null!=t?t:C;for(let t=0;t{const t=A("ownerDocument.defaultView",e);return i(e)&&((e=>((e,t)=>{const n=((e,t)=>A(e,t))(e,t);if(null==n)throw new Error(e+" not available on this browser");return n})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(R(e).constructor.name))},M=e=>t=>(e=>e.dom.nodeType)(t)===e,P=M(1),D=M(3),N=M(11),H=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},V=(e,t)=>{e.dom.removeAttribute(t)},W=(e,t,n=0,r)=>{const o=e.indexOf(t,n);return-1!==o&&(!!u(r)||o+t.length<=r)},q=e=>void 0!==e.style&&m(e.style.getPropertyValue),B=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},I=B,j=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},_=e=>I(e.dom.ownerDocument),z=e=>S(e.dom.childNodes,I),K=e=>{const t=(e=>I(e.dom.getRootNode()))(e);return N(n=t)&&d(n.dom.host)?y.some(t):y.none();var n},$=e=>I(e.dom.host),U=e=>{const t=D(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return K(I(t)).fold((()=>n.body.contains(t)),(r=U,o=$,e=>r(o(e))));var r,o},X=(e,t,n)=>{if(!s(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);q(e)&&e.style.setProperty(t,n)},Y=(e,t,n)=>{const r=e.dom;X(r,t,n)},G=(e,t)=>{const n=e.dom;((e,t)=>{const n=T(e);for(let r=0,o=n.length;r{X(n,t,e)}))},J=(e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return""!==r||U(e)?r:Q(n,t)},Q=(e,t)=>q(e)?e.style.getPropertyValue(t):"",Z=e=>{const t=I((e=>{if(d(e.target)){const t=I(e.target);if(P(t)&&d(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return(e=>0e.stopPropagation(),r=()=>e.preventDefault(),o=(s=r,i=n,(...e)=>s(i.apply(null,e)));var s,i;return((e,t,n,r,o,s,i)=>({target:e,x:t,y:n,stop:r,prevent:o,kill:s,raw:i}))(t,e.clientX,e.clientY,n,r,o,e)},ee=(e,t,n,r)=>{e.dom.removeEventListener(t,n,r)},te=w,ne=(e,t,n)=>((e,t,n,r)=>((e,t,n,r,o)=>{const s=((e,t)=>n=>{e(n)&&t(Z(n))})(n,r);return e.dom.addEventListener(t,s,o),{unbind:f(ee,e,t,s,o)}})(e,t,n,r,!1))(e,t,te,n),re=()=>oe(0,0),oe=(e,t)=>({major:e,minor:t}),se={nu:oe,detect:(e,t)=>{const n=String(t).toLowerCase();return 0===e.length?re():((e,t)=>{const n=((e,t)=>{for(let n=0;nNumber(t.replace(n,"$"+e));return oe(r(1),r(2))})(e,n)},unknown:re},ie=(e,t)=>{const n=String(t).toLowerCase();return F(e,(e=>e.search(n)))},le=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ae=e=>t=>W(t,e),ce=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>W(e,"edge/")&&W(e,"chrome")&&W(e,"safari")&&W(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,le],search:e=>W(e,"chrome")&&!W(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>W(e,"msie")||W(e,"trident")},{name:"Opera",versionRegexes:[le,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:ae("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:ae("firefox")},{name:"Safari",versionRegexes:[le,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(W(e,"safari")||W(e,"mobile/"))&&W(e,"applewebkit")}],ue=[{name:"Windows",search:ae("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>W(e,"iphone")||W(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:ae("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:ae("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:ae("linux"),versionRegexes:[]},{name:"Solaris",search:ae("sunos"),versionRegexes:[]},{name:"FreeBSD",search:ae("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:ae("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],de={browsers:p(ce),oses:p(ue)},me="Edge",he="Chromium",ge="Opera",pe="Firefox",fe="Safari",ve=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isEdge:r(me),isChromium:r(he),isIE:r("IE"),isOpera:r(ge),isFirefox:r(pe),isSafari:r(fe)}},we=()=>ve({current:void 0,version:se.unknown()}),ye=ve,be=(p(me),p(he),p("IE"),p(ge),p(pe),p(fe),"Windows"),Se="Android",xe="Linux",Ee="macOS",Fe="Solaris",Oe="FreeBSD",ke="ChromeOS",Te=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isWindows:r(be),isiOS:r("iOS"),isAndroid:r(Se),isMacOS:r(Ee),isLinux:r(xe),isSolaris:r(Fe),isFreeBSD:r(Oe),isChromeOS:r(ke)}},Ce=()=>Te({current:void 0,version:se.unknown()}),Ae=Te,Re=(p(be),p("iOS"),p(Se),p(xe),p(Ee),p(Fe),p(Oe),p(ke),(e,t,n)=>{const r=de.browsers(),o=de.oses(),s=t.bind((e=>((e,t)=>((e,t)=>{for(let n=0;n{const n=t.brand.toLowerCase();return F(e,(e=>{var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:se.nu(parseInt(t.version,10),0)})))})))(r,e))).orThunk((()=>((e,t)=>ie(e,t).map((e=>{const n=se.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(r,e))).fold(we,ye),i=((e,t)=>ie(e,t).map((e=>{const n=se.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(o,e).fold(Ce,Ae),l=((e,t,n,r)=>{const o=e.isiOS()&&!0===/ipad/i.test(n),s=e.isiOS()&&!o,i=e.isiOS()||e.isAndroid(),l=i||r("(pointer:coarse)"),a=o||!s&&i&&r("(min-device-width:768px)"),c=s||i&&!a,u=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),d=!c&&!a&&!u;return{isiPad:p(o),isiPhone:p(s),isTablet:p(a),isPhone:p(c),isTouch:p(l),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:p(u),isDesktop:p(d)}})(i,s,e,n);return{browser:s,os:i,deviceType:l}}),Le=e=>window.matchMedia(e).matches;let Me=(e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)})((()=>Re(window.navigator.userAgent,y.from(window.navigator.userAgentData),Le)));const Pe=(e,t)=>({left:e,top:t,translate:(n,r)=>Pe(e+n,t+r)}),De=Pe,Ne=e=>{const t=void 0===e?window:e;return Me().browser.isFirefox()?y.none():y.from(t.visualViewport)},He=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),Ve=e=>{const t=void 0===e?window:e,n=t.document,r=(e=>{const t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return De(n,r)})(I(n));return Ne(t).fold((()=>{const e=t.document.documentElement,n=e.clientWidth,o=e.clientHeight;return He(r.left,r.top,n,o)}),(e=>He(Math.max(e.pageLeft,r.left),Math.max(e.pageTop,r.top),e.width,e.height)))},We=(e,t,n)=>Ne(n).map((n=>{const r=e=>t(Z(e));return n.addEventListener(e,r),{unbind:()=>n.removeEventListener(e,r)}})).getOrThunk((()=>({unbind:g})));var qe=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Be=tinymce.util.Tools.resolve("tinymce.Env");const Ie=(e,t)=>{e.dispatch("FullscreenStateChanged",{state:t}),e.dispatch("ResizeEditor")},je=e=>e.options.get("fullscreen_native");const _e=e=>{return e.dom===(void 0!==(t=_(e).dom).fullscreenElement?t.fullscreenElement:void 0!==t.msFullscreenElement?t.msFullscreenElement:void 0!==t.webkitFullscreenElement?t.webkitFullscreenElement:null);var t},ze=(e,t,n)=>((e,t,n)=>E(((e,t)=>{const n=m(t)?t:v;let r=e.dom;const o=[];for(;null!==r.parentNode&&void 0!==r.parentNode;){const e=r.parentNode,t=I(e);if(o.push(t),!0===n(t))break;r=e}return o})(e,n),t))(e,(e=>j(e,t)),n),Ke=(e,t)=>(e=>{return E((e=>y.from(e.dom.parentNode).map(I))(n=e).map(z).map((e=>E(e,(e=>{return t=e,!(n.dom===t.dom);var t})))).getOr([]),(e=>j(e,t)));var n})(e),$e="data-ephox-mobile-fullscreen-style",Ue="position:absolute!important;",Xe="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",Ye=Be.os.isAndroid(),Ge=(e,t,n)=>{const r=t=>n=>{const r=H(n,"style"),o=void 0===r?"no-styles":r.trim();o!==t&&(((e,t,n)=>{((e,t,n)=>{if(!(s(n)||c(n)||h(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(e.dom,t,n)})(n,$e,o),G(n,e.parseStyle(t)))},o=ze(t,"*"),i=(e=>{const t=[];for(let n=0,r=e.length;nKe(e,"*:not(.tox-silver-sink)")))),a=(e=>{const t=J(e,"background-color");return void 0!==t&&""!==t?"background-color:"+t+"!important":"background-color:rgb(255,255,255)!important;"})(n);x(i,r("display:none!important;")),x(o,r(Ue+Xe+a)),r((!0===Ye?"":Ue)+Xe+a)(t)},Je=qe.DOM,Qe=Ne().fold((()=>({bind:g,unbind:g})),(e=>{const t=(()=>{const e=O(g);return{...e,on:t=>e.get().each(t)}})(),n=k(),r=k(),o=(e=>{let t=null;return{cancel:()=>{a(t)||(clearTimeout(t),t=null)},throttle:(...n)=>{a(t)&&(t=setTimeout((()=>{t=null,e.apply(null,n)}),50))}}})((()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0,window.requestAnimationFrame((()=>{t.on((t=>G(t,{top:e.offsetTop+"px",left:e.offsetLeft+"px",height:e.height+"px",width:e.width+"px"})))}))}));return{bind:e=>{t.set(e),o.throttle(),n.set(We("resize",o.throttle)),r.set(We("scroll",o.throttle))},unbind:()=>{t.on((()=>{n.clear(),r.clear()})),t.clear()}}})),Ze=(e,t)=>{const n=document.body,r=document.documentElement,o=e.getContainer(),s=I(o),i=(l=s,y.from(l.dom.nextSibling).map(I)).filter((e=>(e=>P(e)&&L(e.dom))(e)&&(e=>(e=>void 0!==e.dom.classList)(e)&&e.dom.classList.contains("tox-silver-sink"))(e)));var l;const a=(e=>{const t=I(e.getElement());return K(t).map($).getOrThunk((()=>(e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return I(t)})(_(t))))})(e),c=t.get(),u=I(e.getBody()),d=Be.deviceType.isTouch(),m=o.style,h=e.iframeElement,g=null==h?void 0:h.style,p=e=>{e(n,"tox-fullscreen"),e(r,"tox-fullscreen"),e(o,"tox-fullscreen"),K(s).map((e=>$(e).dom)).each((t=>{e(t,"tox-fullscreen"),e(t,"tox-shadowhost")}))},f=()=>{d&&(e=>{const t=(e=>{const t=document;return 1!==(n=t).nodeType&&9!==n.nodeType&&11!==n.nodeType||0===n.childElementCount?[]:S(t.querySelectorAll(e),I);var n})("["+$e+"]");x(t,(t=>{const n=H(t,$e);n&&"no-styles"!==n?G(t,e.parseStyle(n)):V(t,"style"),V(t,$e)}))})(e.dom),p(Je.removeClass),Qe.unbind(),y.from(t.get()).each((e=>e.fullscreenChangeHandler.unbind()))};if(c)c.fullscreenChangeHandler.unbind(),je(e)&&_e(a)&&(e=>{const t=e.dom;t.exitFullscreen?t.exitFullscreen():t.msExitFullscreen?t.msExitFullscreen():t.webkitCancelFullScreen&&t.webkitCancelFullScreen()})(_(a)),g.width=c.iframeWidth,g.height=c.iframeHeight,m.width=c.containerWidth,m.height=c.containerHeight,m.top=c.containerTop,m.left=c.containerLeft,w=i,b=c.sinkCssPosition,E=(e,t)=>{Y(e,"position",t)},w.isSome()&&b.isSome()?y.some(E(w.getOrDie(),b.getOrDie())):y.none(),f(),v=c.scrollPos,window.scrollTo(v.x,v.y),t.set(null),Ie(e,!1),e.off("remove",f);else{const n=ne(_(a),void 0!==document.fullscreenElement?"fullscreenchange":void 0!==document.msFullscreenElement?"MSFullscreenChange":void 0!==document.webkitFullscreenElement?"webkitfullscreenchange":"fullscreenchange",(n=>{je(e)&&(_e(a)||null===t.get()||Ze(e,t))})),r={scrollPos:Ve(window),containerWidth:m.width,containerHeight:m.height,containerTop:m.top,containerLeft:m.left,iframeWidth:g.width,iframeHeight:g.height,fullscreenChangeHandler:n,sinkCssPosition:i.map((e=>J(e,"position")))};d&&Ge(e.dom,s,u),g.width=g.height="100%",m.width=m.height="",p(Je.addClass),i.each((e=>{Y(e,"position","fixed")})),Qe.bind(s),e.on("remove",f),t.set(r),je(e)&&(e=>{const t=e.dom;t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitRequestFullScreen&&t.webkitRequestFullScreen()})(a),Ie(e,!0)}var v,w,b,E};var et=tinymce.util.Tools.resolve("tinymce.util.VK");const tt=(e,t)=>n=>{n.setActive(null!==t.get());const r=e=>n.setActive(e.state);return e.on("FullscreenStateChanged",r),()=>e.off("FullscreenStateChanged",r)};t.add("fullscreen",(t=>{const n=e(null);return t.inline||((e=>{(0,e.options.register)("fullscreen_native",{processor:"boolean",default:!1})})(t),((e,t)=>{e.addCommand("mceFullScreen",(()=>{Ze(e,t)}))})(t,n),((e,t)=>{const n=()=>e.execCommand("mceFullScreen");e.ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",icon:"fullscreen",shortcut:"Meta+Shift+F",onAction:n,onSetup:tt(e,t),context:"any"}),e.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:n,onSetup:tt(e,t),shortcut:"Meta+Shift+F",context:"any"})})(t,n),((e,t)=>{e.on("init",(()=>{e.on("keydown",(e=>{e.keyCode!==et.TAB||e.metaKey||e.ctrlKey||!t.get()||e.preventDefault()}))}))})(t,n),t.addShortcut("Meta+Shift+F","","mceFullScreen")),(e=>({isFullscreen:()=>null!==e.get()}))(n)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ar.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ar.js new file mode 100644 index 000000000..e2cf02f56 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ar.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar', +'

بدء التنقل بواسطة لوحة المفاتيح

\n' + + '\n' + + '
\n' + + '
التركيز على شريط القوائم
\n' + + '
نظاما التشغيل Windows أو Linux: Alt + F9
\n' + + '
نظام التشغيل macOS: ⌥F9
\n' + + '
التركيز على شريط الأدوات
\n' + + '
نظاما التشغيل Windows أو Linux: Alt + F10
\n' + + '
نظام التشغيل macOS: ⌥F10
\n' + + '
التركيز على التذييل
\n' + + '
نظاما التشغيل Windows أو Linux: Alt + F11
\n' + + '
نظام التشغيل macOS: ⌥F11
\n' + + '
تركيز الإشعارات
\n' + + '
نظاما التشغيل Windows أو Linux: Alt + F12
\n' + + '
نظام التشغيل macOS: ⌥F12
\n' + + '
التركيز على شريط أدوات السياق
\n' + + '
أنظمة التشغيل Windows أو Linux أو macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

سيبدأ التنقل عند عنصر واجهة المستخدم الأول، والذي سيتم تمييزه أو تسطيره في حالة العنصر الأول في\n' + + ' مسار عنصر التذييل.

\n' + + '\n' + + '

التنقل بين أقسام واجهة المستخدم

\n' + + '\n' + + '

للانتقال من أحد أقسام واجهة المستخدم إلى القسم التالي، اضغط على Tab.

\n' + + '\n' + + '

للانتقال من أحد أقسام واجهة المستخدم إلى القسم السابق، اضغط على Shift+Tab.

\n' + + '\n' + + '

ترتيب علامات Tab لأقسام واجهة المستخدم هذه هو:

\n' + + '\n' + + '
    \n' + + '
  1. شريط القوائم
  2. \n' + + '
  3. كل مجموعة شريط الأدوات
  4. \n' + + '
  5. الشريط الجانبي
  6. \n' + + '
  7. مسار العنصر في التذييل
  8. \n' + + '
  9. زر تبديل عدد الكلمات في التذييل
  10. \n' + + '
  11. رابط إدراج العلامة التجارية في التذييل
  12. \n' + + '
  13. مؤشر تغيير حجم المحرر في التذييل
  14. \n' + + '
\n' + + '\n' + + '

إذا لم يكن قسم واجهة المستخدم موجودًا، فسيتم تخطيه.

\n' + + '\n' + + '

إذا كان التذييل يحتوي على التركيز على ‏‫التنقل بواسطة لوحة المفاتيح، ولا يوجد شريط جانبي مرئي، فإن الضغط على Shift+Tab\n' + + ' ينقل التركيز إلى مجموعة شريط الأدوات الأولى، وليس الأخيرة.

\n' + + '\n' + + '

التنقل بين أقسام واجهة المستخدم

\n' + + '\n' + + '

للانتقال من أحد عناصر واجهة المستخدم إلى العنصر التالي، اضغط على مفتاح السهم المناسب.

\n' + + '\n' + + '

مفتاحا السهمين اليسار‎ واليمين‎

\n' + + '\n' + + '
    \n' + + '
  • التنقل بين القوائم في شريط القوائم.
  • \n' + + '
  • فتح قائمة فرعية في القائمة.
  • \n' + + '
  • التنقل بين الأزرار في مجموعة شريط الأدوات.
  • \n' + + '
  • التنقل بين العناصر في مسار عنصر التذييل.
  • \n' + + '
\n' + + '\n' + + '

مفتاحا السهمين لأسفل‎ ولأعلى‎

\n' + + '\n' + + '
    \n' + + '
  • التنقل بين عناصر القائمة في القائمة.
  • \n' + + '
  • التنقل بين العناصر في قائمة شريط الأدوات المنبثقة.
  • \n' + + '
\n' + + '\n' + + '

دورة مفاتيح الأسهم‎ داخل قسم واجهة المستخدم التي تم التركيز عليها.

\n' + + '\n' + + '

لإغلاق قائمة مفتوحة أو قائمة فرعية مفتوحة أو قائمة منبثقة مفتوحة، اضغط على مفتاح Esc.

\n' + + '\n' + + '

إذا كان التركيز الحالي على "الجزء العلوي" من قسم معين لواجهة المستخدم، فإن الضغط على مفتاح Esc يؤدي أيضًا إلى الخروج\n' + + ' من التنقل بواسطة لوحة المفاتيح بالكامل.

\n' + + '\n' + + '

تنفيذ عنصر قائمة أو زر شريط أدوات

\n' + + '\n' + + '

عندما يتم تمييز عنصر القائمة المطلوب أو زر شريط الأدوات، اضغط على زر Return، أو Enter،\n' + + ' أو مفتاح المسافة لتنفيذ العنصر.

\n' + + '\n' + + '

التنقل في مربعات الحوار غير المبوبة

\n' + + '\n' + + '

في مربعات الحوار غير المبوبة، يتم التركيز على المكون التفاعلي الأول عند فتح مربع الحوار.

\n' + + '\n' + + '

التنقل بين مكونات الحوار التفاعلي بالضغط على زر Tab أو Shift+Tab.

\n' + + '\n' + + '

التنقل في مربعات الحوار المبوبة

\n' + + '\n' + + '

في مربعات الحوار المبوبة، يتم التركيز على الزر الأول في قائمة علامات التبويب عند فتح مربع الحوار.

\n' + + '\n' + + '

التنقل بين المكونات التفاعلية لعلامة التبويب لمربع الحوار هذه بالضغط على زر Tab أو\n' + + ' Shift+Tab.

\n' + + '\n' + + '

التبديل إلى علامة تبويب أخرى لمربع الحوار من خلال التركيز على قائمة علامة التبويب ثم الضغط على زر السهم المناسب\n' + + ' مفتاح للتنقل بين علامات التبويب المتاحة.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js new file mode 100644 index 000000000..09eacf3a8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG', +'

Начало на навигацията с клавиатурата

\n' + + '\n' + + '
\n' + + '
Фокусиране върху лентата с менюта
\n' + + '
Windows или Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Фокусиране върху лентата с инструменти
\n' + + '
Windows или Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Фокусиране върху долния колонтитул
\n' + + '
Windows или Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Фокусиране на известието
\n' + + '
Windows или Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Фокусиране върху контекстуалната лента с инструменти
\n' + + '
Windows, Linux или macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Навигацията ще започне с първия елемент на ПИ, който ще бъде маркиран или подчертан в случая на първия елемент в\n' + + ' пътя до елемента в долния колонтитул.

\n' + + '\n' + + '

Навигиране между раздели на ПИ

\n' + + '\n' + + '

За да преминете от един раздел на ПИ към следващия, натиснете Tab.

\n' + + '\n' + + '

За да преминете от един раздел на ПИ към предишния, натиснете Shift+Tab.

\n' + + '\n' + + '

Редът за обхождане с табулация на тези раздели на ПИ е:

\n' + + '\n' + + '
    \n' + + '
  1. Лентата с менюта
  2. \n' + + '
  3. Всяка група на лентата с инструменти
  4. \n' + + '
  5. Страничната лента
  6. \n' + + '
  7. Пътят до елемента в долния колонтитул
  8. \n' + + '
  9. Бутонът за превключване на броя на думите в долния колонтитул
  10. \n' + + '
  11. Връзката за търговска марка в долния колонтитул
  12. \n' + + '
  13. Манипулаторът за преоразмеряване на редактора в долния колонтитул
  14. \n' + + '
\n' + + '\n' + + '

Ако някой раздел на ПИ липсва, той се пропуска.

\n' + + '\n' + + '

Ако долният колонтитул има фокус за навигация с клавиатурата и няма странична лента, натискането на Shift+Tab\n' + + ' премества фокуса към първата група на лентата с инструменти, а не към последната.

\n' + + '\n' + + '

Навигиране в разделите на ПИ

\n' + + '\n' + + '

За да преминете от един елемент на ПИ към следващия, натиснете съответния клавиш със стрелка.

\n' + + '\n' + + '

С клавишите със стрелка наляво и надясно

\n' + + '\n' + + '
    \n' + + '
  • се придвижвате между менютата в лентата с менюто;
  • \n' + + '
  • отваряте подменю в меню;
  • \n' + + '
  • се придвижвате между бутоните в група на лентата с инструменти;
  • \n' + + '
  • се придвижвате между елементи в пътя до елемент в долния колонтитул.
  • \n' + + '
\n' + + '\n' + + '

С клавишите със стрелка надолу и нагоре

\n' + + '\n' + + '
    \n' + + '
  • се придвижвате между елементите от менюто в дадено меню;
  • \n' + + '
  • се придвижвате между елементите в изскачащо меню на лентата с инструменти.
  • \n' + + '
\n' + + '\n' + + '

Клавишите със стрелки се придвижват в рамките на фокусирания раздел на ПИ.

\n' + + '\n' + + '

За да затворите отворено меню, подменю или изскачащо меню, натиснете клавиша Esc.

\n' + + '\n' + + '

Ако текущият фокус е върху „горната част“ на конкретен раздел на ПИ, натискането на клавиша Esc също излиза\n' + + ' напълно от навигацията с клавиатурата.

\n' + + '\n' + + '

Изпълнение на елемент от менюто или бутон от лентата с инструменти

\n' + + '\n' + + '

Когато желаният елемент от менюто или бутон от лентата с инструменти е маркиран, натиснете Return, Enter\n' + + ' или клавиша за интервал, за да изпълните елемента.

\n' + + '\n' + + '

Навигиране в диалогови прозорци без раздели

\n' + + '\n' + + '

В диалоговите прозорци без раздели първият интерактивен компонент се фокусира, когато се отвори диалоговият прозорец.

\n' + + '\n' + + '

Навигирайте между интерактивните компоненти на диалоговия прозорец, като натиснете Tab или Shift+Tab.

\n' + + '\n' + + '

Навигиране в диалогови прозорци с раздели

\n' + + '\n' + + '

В диалоговите прозорци с раздели първият бутон в менюто с раздели се фокусира, когато се отвори диалоговият прозорец.

\n' + + '\n' + + '

Навигирайте между интерактивните компоненти на този диалогов раздел, като натиснете Tab или\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Превключете към друг диалогов раздел, като фокусирате върху менюто с раздели и след това натиснете съответния клавиш със стрелка,\n' + + ' за да преминете през наличните раздели.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ca.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ca.js new file mode 100644 index 000000000..996e29cfe --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ca.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca', +'

Inici de la navegació amb el teclat

\n' + + '\n' + + '
\n' + + '
Enfocar la barra de menús
\n' + + '
Windows o Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + "
Enfocar la barra d'eines
\n" + + '
Windows o Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Enfocar el peu de pàgina
\n' + + '
Windows o Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Enfocar la notificació
\n' + + '
Windows o Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + "
Enfocar una barra d'eines contextual
\n" + + '
Windows, Linux o macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + "

La navegació començarà en el primer element de la interfície d'usuari, que es ressaltarà o subratllarà per al primer element a\n" + + " la ruta de l'element de peu de pàgina.

\n" + + '\n' + + "

Navegació entre seccions de la interfície d'usuari

\n" + + '\n' + + "

Per desplaçar-vos des d'una secció de la interfície d'usuari a la següent, premeu la tecla Tab.

\n" + + '\n' + + "

Per desplaçar-vos des d'una secció de la interfície d'usuari a l'anterior, premeu les tecles Maj+Tab.

\n" + + '\n' + + "

L'ordre en prémer la tecla Tab d'aquestes secciones de la interfície d'usuari és:

\n" + + '\n' + + '
    \n' + + '
  1. Barra de menús
  2. \n' + + "
  3. Cada grup de la barra d'eines
  4. \n" + + '
  5. Barra lateral
  6. \n' + + "
  7. Ruta de l'element del peu de pàgina
  8. \n" + + '
  9. Botó de commutació de recompte de paraules al peu de pàgina
  10. \n' + + '
  11. Enllaç de marca del peu de pàgina
  12. \n' + + "
  13. Control de canvi de mida de l'editor al peu de pàgina
  14. \n" + + '
\n' + + '\n' + + "

Si no hi ha una secció de la interfície d'usuari, s'ometrà.

\n" + + '\n' + + '

Si el peu de pàgina té el focus de navegació del teclat i no hi ha cap barra lateral visible, en prémer Maj+Tab\n' + + " el focus es mou al primer grup de la barra d'eines, no l'últim.

\n" + + '\n' + + "

Navegació dins de les seccions de la interfície d'usuari

\n" + + '\n' + + "

Per desplaçar-vos des d'un element de la interfície d'usuari al següent, premeu la tecla de Fletxa adequada.

\n" + + '\n' + + '

Les tecles de fletxa Esquerra i Dreta

\n' + + '\n' + + '
    \n' + + '
  • us permeten desplaçar-vos entre menús de la barra de menús.
  • \n' + + '
  • obren un submenú en un menú.
  • \n' + + "
  • us permeten desplaçar-vos entre botons d'un grup de la barra d'eines.
  • \n" + + "
  • us permeten desplaçar-vos entre elements de la ruta d'elements del peu de pàgina.
  • \n" + + '
\n' + + '\n' + + '

Les tecles de fletxa Avall i Amunt

\n' + + '\n' + + '
    \n' + + "
  • us permeten desplaçar-vos entre elements de menú d'un menú.
  • \n" + + "
  • us permeten desplaçar-vos entre elements d'un menú emergent de la barra d'eines.
  • \n" + + '
\n' + + '\n' + + "

Les tecles de Fletxa us permeten desplaçar-vos dins de la secció de la interfície d'usuari que té el focus.

\n" + + '\n' + + '

Per tancar un menú, un submenú o un menú emergent oberts, premeu la tecla Esc.

\n' + + '\n' + + "

Si el focus actual es troba a la ‘part superior’ d'una secció específica de la interfície d'usuari, en prémer la tecla Esc també es tanca\n" + + ' completament la navegació amb el teclat.

\n' + + '\n' + + "

Execució d'un element de menú o d'un botó de la barra d'eines

\n" + + '\n' + + "

Quan l'element del menú o el botó de la barra d'eines que desitgeu estigui ressaltat, premeu Retorn, Intro\n" + + " o la barra d'espai per executar l'element.

\n" + + '\n' + + '

Navegació per quadres de diàleg sense pestanyes

\n' + + '\n' + + "

En els quadres de diàleg sense pestanyes, el primer component interactiu pren el focus quan s'obre el quadre diàleg.

\n" + + '\n' + + '

Premeu la tecla Tab o les tecles Maj+Tab per desplaçar-vos entre components interactius del quadre de diàleg.

\n' + + '\n' + + '

Navegació per quadres de diàleg amb pestanyes

\n' + + '\n' + + "

En els quadres de diàleg amb pestanyes, el primer botó del menú de la pestanya pren el focus quan s'obre el quadre diàleg.

\n" + + '\n' + + "

Per desplaçar-vos entre components interactius d'aquest quadre de diàleg, premeu la tecla Tab o\n" + + ' les tecles Maj+Tab.

\n' + + '\n' + + "

Canvieu a la pestanya d'un altre quadre de diàleg, tot enfocant el menú de la pestanya, i després premeu la tecla Fletxa adequada\n" + + ' per canviar entre les pestanyes disponibles.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/cs.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/cs.js new file mode 100644 index 000000000..4a5a9026e --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/cs.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs', +'

Začínáme navigovat pomocí klávesnice

\n' + + '\n' + + '
\n' + + '
Přejít na řádek nabídek
\n' + + '
Windows nebo Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Přejít na panel nástrojů
\n' + + '
Windows nebo Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Přejít na zápatí
\n' + + '
Windows nebo Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Přejít na oznámení
\n' + + '
Windows nebo Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Přejít na kontextový panel nástrojů
\n' + + '
Windows, Linux nebo macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigace začne u první položky uživatelského rozhraní, která bude zvýrazněna nebo v případě první položky\n' + + ' cesty k prvku zápatí podtržena.

\n' + + '\n' + + '

Navigace mezi oddíly uživatelského rozhraní

\n' + + '\n' + + '

Stisknutím klávesy Tab se posunete z jednoho oddílu uživatelského rozhraní na další.

\n' + + '\n' + + '

Stisknutím kláves Shift+Tab se posunete z jednoho oddílu uživatelského rozhraní na předchozí.

\n' + + '\n' + + '

Pořadí přepínání mezi oddíly uživatelského rozhraní pomocí klávesy Tab:

\n' + + '\n' + + '
    \n' + + '
  1. Řádek nabídek
  2. \n' + + '
  3. Každá skupina panelu nástrojů
  4. \n' + + '
  5. Boční panel
  6. \n' + + '
  7. Cesta k prvku v zápatí.
  8. \n' + + '
  9. Tlačítko přepínače počtu slov v zápatí
  10. \n' + + '
  11. Odkaz na informace o značce v zápatí
  12. \n' + + '
  13. Úchyt pro změnu velikosti editoru v zápatí
  14. \n' + + '
\n' + + '\n' + + '

Pokud nějaký oddíl uživatelského rozhraní není přítomen, je přeskočen.

\n' + + '\n' + + '

Pokud je zápatí vybrané pro navigaci pomocí klávesnice a není zobrazen žádný boční panel, stisknutím kláves Shift+Tab\n' + + ' přejdete na první skupinu panelu nástrojů, nikoli na poslední.

\n' + + '\n' + + '

Navigace v rámci oddílů uživatelského rozhraní

\n' + + '\n' + + '

Chcete-li se přesunout z jednoho prvku uživatelského rozhraní na další, stiskněte příslušnou klávesu s šipkou.

\n' + + '\n' + + '

Klávesy s šipkou vlevovpravo

\n' + + '\n' + + '
    \n' + + '
  • umožňují přesun mezi nabídkami na řádku nabídek;
  • \n' + + '
  • otevírají podnabídku nabídky;
  • \n' + + '
  • umožňují přesun mezi tlačítky ve skupině panelu nástrojů;
  • \n' + + '
  • umožňují přesun mezi položkami cesty prvku v zápatí.
  • \n' + + '
\n' + + '\n' + + '

Klávesy se šipkou dolůnahoru

\n' + + '\n' + + '
    \n' + + '
  • umožňují přesun mezi položkami nabídky;
  • \n' + + '
  • umožňují přesun mezi položkami místní nabídky panelu nástrojů.
  • \n' + + '
\n' + + '\n' + + '

Šipky provádí přepínání v rámci vybraného oddílu uživatelského rozhraní.

\n' + + '\n' + + '

Chcete-li zavřít otevřenou nabídku, podnabídku nebo místní nabídku, stiskněte klávesu Esc.

\n' + + '\n' + + '

Pokud je aktuálně vybrána horní část oddílu uživatelského rozhraní, stisknutím klávesy Esc zcela ukončíte také\n' + + ' navigaci pomocí klávesnice.

\n' + + '\n' + + '

Provedení příkazu položky nabídky nebo tlačítka panelu nástrojů

\n' + + '\n' + + '

Pokud je zvýrazněna požadovaná položka nabídky nebo tlačítko panelu nástrojů, stisknutím klávesy Return, Enter\n' + + ' nebo mezerníku provedete příslušný příkaz.

\n' + + '\n' + + '

Navigace v dialogových oknech bez záložek

\n' + + '\n' + + '

Při otevření dialogových oken bez záložek přejdete na první interaktivní komponentu.

\n' + + '\n' + + '

Přecházet mezi interaktivními komponentami dialogového okna můžete stisknutím klávesy Tab nebo kombinace Shift+Tab.

\n' + + '\n' + + '

Navigace v dialogových oknech se záložkami

\n' + + '\n' + + '

Při otevření dialogových oken se záložkami přejdete na první tlačítko v nabídce záložek.

\n' + + '\n' + + '

Přecházet mezi interaktivními komponentami této záložky dialogového okna můžete stisknutím klávesy Tab nebo\n' + + ' kombinace Shift+Tab.

\n' + + '\n' + + '

Chcete-li přepnout na další záložku dialogového okna, přejděte na nabídku záložek a poté můžete stisknutím požadované šipky\n' + + ' přepínat mezi dostupnými záložkami.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/da.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/da.js new file mode 100644 index 000000000..4d1e1d4b9 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/da.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.da', +'

Start tastaturnavigation

\n' + + '\n' + + '
\n' + + '
Fokuser på menulinjen
\n' + + '
Windows eller Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokuser på værktøjslinjen
\n' + + '
Windows eller Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokuser på sidefoden
\n' + + '
Windows eller Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Fokuser på meddelelsen
\n' + + '
Windows eller Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokuser på kontekstuel værktøjslinje
\n' + + '
Windows, Linux eller macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigationen starter ved det første UI-element, som fremhæves eller understreges hvad angår det første element i\n' + + ' sidefodens sti til elementet.

\n' + + '\n' + + '

Naviger mellem UI-sektioner

\n' + + '\n' + + '

Gå fra én UI-sektion til den næste ved at trykke på Tab.

\n' + + '\n' + + '

Gå fra én UI-sektion til den forrige ved at trykke på Shift+Tab.

\n' + + '\n' + + '

Tab-rækkefølgen af disse UI-sektioner er:

\n' + + '\n' + + '
    \n' + + '
  1. Menulinje
  2. \n' + + '
  3. Hver værktøjsgruppe
  4. \n' + + '
  5. Sidepanel
  6. \n' + + '
  7. Sti til elementet i sidefoden
  8. \n' + + '
  9. Til/fra-knap for ordoptælling i sidefoden
  10. \n' + + '
  11. Brandinglink i sidefoden
  12. \n' + + '
  13. Tilpasningshåndtag for editor i sidefoden
  14. \n' + + '
\n' + + '\n' + + '

Hvis en UI-sektion ikke er til stede, springes den over.

\n' + + '\n' + + '

Hvis sidefoden har fokus til tastaturnavigation, og der ikke er noget synligt sidepanel, kan der trykkes på Shift+Tab\n' + + ' for at flytte fokus til den første værktøjsgruppe, ikke den sidste.

\n' + + '\n' + + '

Naviger inden for UI-sektioner

\n' + + '\n' + + '

Gå fra ét UI-element til det næste ved at trykke på den relevante piletast.

\n' + + '\n' + + '

Venstre og højre piletast

\n' + + '\n' + + '
    \n' + + '
  • flytter mellem menuerne i menulinjen.
  • \n' + + '
  • åbner en undermenu i en menu.
  • \n' + + '
  • flytter mellem knapperne i en værktøjsgruppe.
  • \n' + + '
  • flytter mellem elementer i sidefodens sti til elementet.
  • \n' + + '
\n' + + '\n' + + '

Pil ned og op

\n' + + '\n' + + '
    \n' + + '
  • flytter mellem menupunkterne i en menu.
  • \n' + + '
  • flytter mellem punkterne i en genvejsmenu i værktøjslinjen.
  • \n' + + '
\n' + + '\n' + + '

Piletasterne kører rundt inden for UI-sektionen, der fokuseres på.

\n' + + '\n' + + '

For at lukke en åben menu, en åben undermenu eller en åben genvejsmenu trykkes der på Esc-tasten.

\n' + + '\n' + + "

Hvis det aktuelle fokus er i 'toppen' af en bestemt UI-sektion, vil tryk på Esc-tasten også afslutte\n" + + ' tastaturnavigationen helt.

\n' + + '\n' + + '

Udfør et menupunkt eller en værktøjslinjeknap

\n' + + '\n' + + '

Når det ønskede menupunkt eller den ønskede værktøjslinjeknap er fremhævet, trykkes der på Retur, Enter\n' + + ' eller mellemrumstasten for at udføre elementet.

\n' + + '\n' + + '

Naviger i ikke-faneopdelte dialogbokse

\n' + + '\n' + + '

I ikke-faneopdelte dialogbokse får den første interaktive komponent fokus, når dialogboksen åbnes.

\n' + + '\n' + + '

Naviger mellem interaktive dialogbokskomponenter ved at trykke på Tab eller Shift+Tab.

\n' + + '\n' + + '

Naviger i faneopdelte dialogbokse

\n' + + '\n' + + '

I faneopdelte dialogbokse får den første knap i fanemenuen fokus, når dialogboksen åbnes.

\n' + + '\n' + + '

Naviger mellem interaktive komponenter i denne dialogboksfane ved at trykke på Tab eller\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Skift til en anden dialogboksfane ved at fokusere på fanemenuen og derefter trykke på den relevante piletast\n' + + ' for at køre igennem de tilgængelige faner.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/de.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/de.js new file mode 100644 index 000000000..b8711ed43 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/de.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.de', +'

Grundlagen der Tastaturnavigation

\n' + + '\n' + + '
\n' + + '
Fokus auf Menüleiste
\n' + + '
Windows oder Linux: ALT+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokus auf Symbolleiste
\n' + + '
Windows oder Linux: ALT+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokus auf Fußzeile
\n' + + '
Windows oder Linux: ALT+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Benachrichtigung fokussieren
\n' + + '
Windows oder Linux: ALT+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokus auf kontextbezogene Symbolleiste
\n' + + '
Windows, Linux oder macOS: STRG+F9
\n' + + '
\n' + + '\n' + + '

Die Navigation beginnt beim ersten Benutzeroberflächenelement, welches hervorgehoben ist. Falls sich das erste Element im Pfad der Fußzeile befindet,\n' + + ' ist es unterstrichen.

\n' + + '\n' + + '

Zwischen Abschnitten der Benutzeroberfläche navigieren

\n' + + '\n' + + '

Um von einem Abschnitt der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie TAB.

\n' + + '\n' + + '

Um von einem Abschnitt der Benutzeroberfläche zum vorherigen zu wechseln, drücken Sie UMSCHALT+TAB.

\n' + + '\n' + + '

Die Abschnitte der Benutzeroberfläche haben folgende TAB-Reihenfolge:

\n' + + '\n' + + '
    \n' + + '
  1. Menüleiste
  2. \n' + + '
  3. Einzelne Gruppen der Symbolleiste
  4. \n' + + '
  5. Randleiste
  6. \n' + + '
  7. Elementpfad in der Fußzeile
  8. \n' + + '
  9. Umschaltfläche „Wörter zählen“ in der Fußzeile
  10. \n' + + '
  11. Branding-Link in der Fußzeile
  12. \n' + + '
  13. Editor-Ziehpunkt zur Größenänderung in der Fußzeile
  14. \n' + + '
\n' + + '\n' + + '

Falls ein Abschnitt der Benutzeroberflächen nicht vorhanden ist, wird er übersprungen.

\n' + + '\n' + + '

Wenn in der Fußzeile die Tastaturnavigation fokussiert ist und keine Randleiste angezeigt wird, wechselt der Fokus durch Drücken von UMSCHALT+TAB\n' + + ' zur ersten Gruppe der Symbolleiste, nicht zur letzten.

\n' + + '\n' + + '

Innerhalb von Abschnitten der Benutzeroberfläche navigieren

\n' + + '\n' + + '

Um von einem Element der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie die entsprechende Pfeiltaste.

\n' + + '\n' + + '

Die Pfeiltasten Links und Rechts

\n' + + '\n' + + '
    \n' + + '
  • wechseln zwischen Menüs in der Menüleiste.
  • \n' + + '
  • öffnen das Untermenü eines Menüs.
  • \n' + + '
  • wechseln zwischen Schaltflächen in einer Gruppe der Symbolleiste.
  • \n' + + '
  • wechseln zwischen Elementen im Elementpfad der Fußzeile.
  • \n' + + '
\n' + + '\n' + + '

Die Pfeiltasten Abwärts und Aufwärts

\n' + + '\n' + + '
    \n' + + '
  • wechseln zwischen Menüelementen in einem Menü.
  • \n' + + '
  • wechseln zwischen Elementen in einem Popupmenü der Symbolleiste.
  • \n' + + '
\n' + + '\n' + + '

Die Pfeiltasten rotieren innerhalb des fokussierten Abschnitts der Benutzeroberfläche.

\n' + + '\n' + + '

Um ein geöffnetes Menü, ein geöffnetes Untermenü oder ein geöffnetes Popupmenü zu schließen, drücken Sie die ESC-Taste.

\n' + + '\n' + + '

Wenn sich der aktuelle Fokus ganz oben in einem bestimmten Abschnitt der Benutzeroberfläche befindet, wird durch Drücken der ESC-Taste auch\n' + + ' die Tastaturnavigation beendet.

\n' + + '\n' + + '

Ein Menüelement oder eine Symbolleistenschaltfläche ausführen

\n' + + '\n' + + '

Wenn das gewünschte Menüelement oder die gewünschte Symbolleistenschaltfläche hervorgehoben ist, drücken Sie Zurück, Eingabe\n' + + ' oder die Leertaste, um das Element auszuführen.

\n' + + '\n' + + '

In Dialogfeldern ohne Registerkarten navigieren

\n' + + '\n' + + '

In Dialogfeldern ohne Registerkarten ist beim Öffnen eines Dialogfelds die erste interaktive Komponente fokussiert.

\n' + + '\n' + + '

Navigieren Sie zwischen den interaktiven Komponenten eines Dialogfelds, indem Sie TAB oder UMSCHALT+TAB drücken.

\n' + + '\n' + + '

In Dialogfeldern mit Registerkarten navigieren

\n' + + '\n' + + '

In Dialogfeldern mit Registerkarten ist beim Öffnen eines Dialogfelds die erste Schaltfläche eines Registerkartenmenüs fokussiert.

\n' + + '\n' + + '

Navigieren Sie zwischen den interaktiven Komponenten auf dieser Registerkarte des Dialogfelds, indem Sie TAB oder\n' + + ' UMSCHALT+TAB drücken.

\n' + + '\n' + + '

Wechseln Sie zu einer anderen Registerkarte des Dialogfelds, indem Sie den Fokus auf das Registerkartenmenü legen und dann die entsprechende Pfeiltaste\n' + + ' drücken, um durch die verfügbaren Registerkarten zu rotieren.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/el.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/el.js new file mode 100644 index 000000000..98afabe94 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/el.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.el', +'

Έναρξη πλοήγησης μέσω πληκτρολογίου

\n' + + '\n' + + '
\n' + + '
Εστίαση στη γραμμή μενού
\n' + + '
Windows ή Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Εστίαση στη γραμμή εργαλείων
\n' + + '
Windows ή Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Εστίαση στο υποσέλιδο
\n' + + '
Windows ή Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Εστίαση στην ειδοποίηση
\n' + + '
Windows ή Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Εστίαση σε γραμμή εργαλείων βάσει περιεχομένου
\n' + + '
Windows, Linux ή macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Η πλοήγηση θα ξεκινήσει από το πρώτο στοιχείο περιβάλλοντος χρήστη, που θα επισημαίνεται ή θα είναι υπογραμμισμένο,\n' + + ' όπως στην περίπτωση της διαδρομής του στοιχείου Υποσέλιδου.

\n' + + '\n' + + '

Πλοήγηση μεταξύ ενοτήτων του περιβάλλοντος χρήστη

\n' + + '\n' + + '

Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην επόμενη, πιέστε το πλήκτρο Tab.

\n' + + '\n' + + '

Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην προηγούμενη, πιέστε τα πλήκτρα Shift+Tab.

\n' + + '\n' + + '

Η σειρά Tab αυτών των ενοτήτων περιβάλλοντος χρήστη είναι η εξής:

\n' + + '\n' + + '
    \n' + + '
  1. Γραμμή μενού
  2. \n' + + '
  3. Κάθε ομάδα γραμμής εργαλείων
  4. \n' + + '
  5. Πλαϊνή γραμμή
  6. \n' + + '
  7. Διαδρομή στοιχείου στο υποσέλιδο
  8. \n' + + '
  9. Κουμπί εναλλαγής μέτρησης λέξεων στο υποσέλιδο
  10. \n' + + '
  11. Σύνδεσμος επωνυμίας στο υποσέλιδο
  12. \n' + + '
  13. Λαβή αλλαγής μεγέθους προγράμματος επεξεργασίας στο υποσέλιδο
  14. \n' + + '
\n' + + '\n' + + '

Εάν δεν εμφανίζεται ενότητα περιβάλλοντος χρήστη, παραλείπεται.

\n' + + '\n' + + '

Εάν η εστίαση πλοήγησης βρίσκεται στο πληκτρολόγιο και δεν υπάρχει εμφανής πλαϊνή γραμμή, εάν πιέσετε Shift+Tab\n' + + ' η εστίαση μετακινείται στην πρώτη ομάδα γραμμής εργαλείων, όχι στην τελευταία.

\n' + + '\n' + + '

Πλοήγηση εντός των ενοτήτων του περιβάλλοντος χρήστη

\n' + + '\n' + + '

Για να μετακινηθείτε από ένα στοιχείο περιβάλλοντος χρήστη στο επόμενο, πιέστε το αντίστοιχο πλήκτρο βέλους.

\n' + + '\n' + + '

Με τα πλήκτρα αριστερού και δεξιού βέλους

\n' + + '\n' + + '
    \n' + + '
  • γίνεται μετακίνηση μεταξύ των μενού στη γραμμή μενού.
  • \n' + + '
  • ανοίγει ένα υπομενού σε ένα μενού.
  • \n' + + '
  • γίνεται μετακίνηση μεταξύ κουμπιών σε μια ομάδα γραμμής εργαλείων.
  • \n' + + '
  • γίνεται μετακίνηση μεταξύ στοιχείων στη διαδρομή στοιχείου στο υποσέλιδο.
  • \n' + + '
\n' + + '\n' + + '

Με τα πλήκτρα επάνω και κάτω βέλους

\n' + + '\n' + + '
    \n' + + '
  • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα μενού.
  • \n' + + '
  • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα αναδυόμενο μενού γραμμής εργαλείων.
  • \n' + + '
\n' + + '\n' + + '

Με τα πλήκτρα βέλους γίνεται κυκλική μετακίνηση εντός της εστιασμένης ενότητας περιβάλλοντος χρήστη.

\n' + + '\n' + + '

Για να κλείσετε ένα ανοιχτό μενού, ένα ανοιχτό υπομενού ή ένα ανοιχτό αναδυόμενο μενού, πιέστε το πλήκτρο Esc.

\n' + + '\n' + + '

Εάν η τρέχουσα εστίαση βρίσκεται στην κορυφή μιας ενότητας περιβάλλοντος χρήστη, πιέζοντας το πλήκτρο Esc,\n' + + ' γίνεται επίσης πλήρης έξοδος από την πλοήγηση μέσω πληκτρολογίου.

\n' + + '\n' + + '

Εκτέλεση ενός στοιχείου μενού ή κουμπιού γραμμής εργαλείων

\n' + + '\n' + + '

Όταν το επιθυμητό στοιχείο μενού ή κουμπί γραμμής εργαλείων είναι επισημασμένο, πιέστε τα πλήκτρα Return, Enter,\n' + + ' ή το πλήκτρο διαστήματος για να εκτελέσετε το στοιχείο.

\n' + + '\n' + + '

Πλοήγηση σε παράθυρα διαλόγου χωρίς καρτέλες

\n' + + '\n' + + '

Σε παράθυρα διαλόγου χωρίς καρτέλες, το πρώτο αλληλεπιδραστικό στοιχείο λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

\n' + + '\n' + + '

Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων παραθύρων διαλόγων πιέζοντας τα πλήκτρα Tab ή Shift+Tab.

\n' + + '\n' + + '

Πλοήγηση σε παράθυρα διαλόγου με καρτέλες

\n' + + '\n' + + '

Σε παράθυρα διαλόγου με καρτέλες, το πρώτο κουμπί στο μενού καρτέλας λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

\n' + + '\n' + + '

Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων αυτής της καρτέλα διαλόγου πιέζοντας τα πλήκτρα Tab ή\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Μπορείτε να κάνετε εναλλαγή σε άλλη καρτέλα του παραθύρου διαλόγου, μεταφέροντας την εστίαση στο μενού καρτέλας και πιέζοντας το κατάλληλο πλήκτρο βέλους\n' + + ' για να μετακινηθείτε κυκλικά στις διαθέσιμες καρτέλες.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/en.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/en.js new file mode 100644 index 000000000..5dd753e82 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/en.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.en', +'

Begin keyboard navigation

\n' + + '\n' + + '
\n' + + '
Focus the Menu bar
\n' + + '
Windows or Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Focus the Toolbar
\n' + + '
Windows or Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Focus the footer
\n' + + '
Windows or Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Focus the notification
\n' + + '
Windows or Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Focus a contextual toolbar
\n' + + '
Windows, Linux or macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigation will start at the first UI item, which will be highlighted, or underlined in the case of the first item in\n' + + ' the Footer element path.

\n' + + '\n' + + '

Navigate between UI sections

\n' + + '\n' + + '

To move from one UI section to the next, press Tab.

\n' + + '\n' + + '

To move from one UI section to the previous, press Shift+Tab.

\n' + + '\n' + + '

The Tab order of these UI sections is:

\n' + + '\n' + + '
    \n' + + '
  1. Menu bar
  2. \n' + + '
  3. Each toolbar group
  4. \n' + + '
  5. Sidebar
  6. \n' + + '
  7. Element path in the footer
  8. \n' + + '
  9. Word count toggle button in the footer
  10. \n' + + '
  11. Branding link in the footer
  12. \n' + + '
  13. Editor resize handle in the footer
  14. \n' + + '
\n' + + '\n' + + '

If a UI section is not present, it is skipped.

\n' + + '\n' + + '

If the footer has keyboard navigation focus, and there is no visible sidebar, pressing Shift+Tab\n' + + ' moves focus to the first toolbar group, not the last.

\n' + + '\n' + + '

Navigate within UI sections

\n' + + '\n' + + '

To move from one UI element to the next, press the appropriate Arrow key.

\n' + + '\n' + + '

The Left and Right arrow keys

\n' + + '\n' + + '
    \n' + + '
  • move between menus in the menu bar.
  • \n' + + '
  • open a sub-menu in a menu.
  • \n' + + '
  • move between buttons in a toolbar group.
  • \n' + + '
  • move between items in the footer’s element path.
  • \n' + + '
\n' + + '\n' + + '

The Down and Up arrow keys

\n' + + '\n' + + '
    \n' + + '
  • move between menu items in a menu.
  • \n' + + '
  • move between items in a toolbar pop-up menu.
  • \n' + + '
\n' + + '\n' + + '

Arrow keys cycle within the focused UI section.

\n' + + '\n' + + '

To close an open menu, an open sub-menu, or an open pop-up menu, press the Esc key.

\n' + + '\n' + + '

If the current focus is at the ‘top’ of a particular UI section, pressing the Esc key also exits\n' + + ' keyboard navigation entirely.

\n' + + '\n' + + '

Execute a menu item or toolbar button

\n' + + '\n' + + '

When the desired menu item or toolbar button is highlighted, press Return, Enter,\n' + + ' or the Space bar to execute the item.

\n' + + '\n' + + '

Navigate non-tabbed dialogs

\n' + + '\n' + + '

In non-tabbed dialogs, the first interactive component takes focus when the dialog opens.

\n' + + '\n' + + '

Navigate between interactive dialog components by pressing Tab or Shift+Tab.

\n' + + '\n' + + '

Navigate tabbed dialogs

\n' + + '\n' + + '

In tabbed dialogs, the first button in the tab menu takes focus when the dialog opens.

\n' + + '\n' + + '

Navigate between interactive components of this dialog tab by pressing Tab or\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Switch to another dialog tab by giving the tab menu focus and then pressing the appropriate Arrow\n' + + ' key to cycle through the available tabs.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/es.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/es.js new file mode 100644 index 000000000..e426c2e2e --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/es.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.es', +'

Iniciar la navegación con el teclado

\n' + + '\n' + + '
\n' + + '
Enfocar la barra de menús
\n' + + '
Windows o Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Enfocar la barra de herramientas
\n' + + '
Windows o Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Enfocar el pie de página
\n' + + '
Windows o Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Enfocar la notificación
\n' + + '
Windows o Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Enfocar una barra de herramientas contextual
\n' + + '
Windows, Linux o macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

La navegación comenzará por el primer elemento de la interfaz de usuario (IU), de tal manera que se resaltará, o bien se subrayará si se trata del primer elemento de\n' + + ' la ruta de elemento del pie de página.

\n' + + '\n' + + '

Navegar entre las secciones de la IU

\n' + + '\n' + + '

Para pasar de una sección de la IU a la siguiente, pulse la tecla Tab.

\n' + + '\n' + + '

Para pasar de una sección de la IU a la anterior, pulse Mayús+Tab.

\n' + + '\n' + + '

El orden de tabulación de estas secciones de la IU es:

\n' + + '\n' + + '
    \n' + + '
  1. Barra de menús
  2. \n' + + '
  3. Cada grupo de barra de herramientas
  4. \n' + + '
  5. Barra lateral
  6. \n' + + '
  7. Ruta del elemento en el pie de página
  8. \n' + + '
  9. Botón de alternancia de recuento de palabras en el pie de página
  10. \n' + + '
  11. Enlace de personalización de marca en el pie de página
  12. \n' + + '
  13. Controlador de cambio de tamaño en el pie de página
  14. \n' + + '
\n' + + '\n' + + '

Si una sección de la IU no está presente, esta se omite.

\n' + + '\n' + + '

Si el pie de página tiene un enfoque de navegación con el teclado y no hay ninguna barra lateral visible, al pulsar Mayús+Tab,\n' + + ' el enfoque se moverá al primer grupo de barra de herramientas, en lugar de al último.

\n' + + '\n' + + '

Navegar dentro de las secciones de la IU

\n' + + '\n' + + '

Para pasar de un elemento de la IU al siguiente, pulse la tecla de flecha correspondiente.

\n' + + '\n' + + '

Las teclas de flecha izquierda y derecha permiten

\n' + + '\n' + + '
    \n' + + '
  • desplazarse entre los menús de la barra de menús.
  • \n' + + '
  • abrir el submenú de un menú.
  • \n' + + '
  • desplazarse entre los botones de un grupo de barra de herramientas.
  • \n' + + '
  • desplazarse entre los elementos de la ruta de elemento del pie de página.
  • \n' + + '
\n' + + '\n' + + '

Las teclas de flecha abajo y arriba permiten

\n' + + '\n' + + '
    \n' + + '
  • desplazarse entre los elementos de menú de un menú.
  • \n' + + '
  • desplazarse entre los elementos de un menú emergente de una barra de herramientas.
  • \n' + + '
\n' + + '\n' + + '

Las teclas de flecha van cambiando dentro de la sección de la IU enfocada.

\n' + + '\n' + + '

Para cerrar un menú, un submenú o un menú emergente que estén abiertos, pulse la tecla Esc.

\n' + + '\n' + + '

Si el enfoque actual se encuentra en la parte superior de una sección de la IU determinada, al pulsar la tecla Esc saldrá\n' + + ' de la navegación con el teclado por completo.

\n' + + '\n' + + '

Ejecutar un elemento de menú o un botón de barra de herramientas

\n' + + '\n' + + '

Si el elemento de menú o el botón de barra de herramientas deseado está resaltado, pulse la tecla Retorno o Entrar,\n' + + ' o la barra espaciadora para ejecutar el elemento.

\n' + + '\n' + + '

Navegar por cuadros de diálogo sin pestañas

\n' + + '\n' + + '

En los cuadros de diálogo sin pestañas, el primer componente interactivo se enfoca al abrirse el cuadro de diálogo.

\n' + + '\n' + + '

Para navegar entre los componentes interactivos del cuadro de diálogo, pulse las teclas Tab o Mayús+Tab.

\n' + + '\n' + + '

Navegar por cuadros de diálogo con pestañas

\n' + + '\n' + + '

En los cuadros de diálogo con pestañas, el primer botón del menú de pestaña se enfoca al abrirse el cuadro de diálogo.

\n' + + '\n' + + '

Para navegar entre componentes interactivos de esta pestaña del cuadro de diálogo, pulse las teclas Tab o\n' + + ' Mayús+Tab.

\n' + + '\n' + + '

Si desea cambiar a otra pestaña del cuadro de diálogo, enfoque el menú de pestañas y, a continuación, pulse la tecla de flecha\n' + + ' correspondiente para moverse por las pestañas disponibles.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/eu.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/eu.js new file mode 100644 index 000000000..c18b94030 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/eu.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu', +'

Hasi teklatuaren nabigazioa

\n' + + '\n' + + '
\n' + + '
Fokuratu menu-barra
\n' + + '
Windows edo Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokuratu tresna-barra
\n' + + '
Windows edo Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokuratu orri-oina
\n' + + '
Windows edo Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Fokuratu jakinarazpena
\n' + + '
Windows edo Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokuratu testuinguruaren tresna-barra
\n' + + '
Windows, Linux edo macOS: Ktrl+F9
\n' + + '
\n' + + '\n' + + '

Nabigazioa EIko lehen elementuan hasiko da: elementu hori nabarmendu egingo da, edo azpimarratu lehen elementua bada\n' + + ' orri-oineko elementuaren bidea.

\n' + + '\n' + + '

Nabigatu EIko atalen artean

\n' + + '\n' + + '

EIko atal batetik hurrengora mugitzeko, sakatu Tabuladorea.

\n' + + '\n' + + '

EIko atal batetik aurrekora mugitzeko, sakatu Maius+Tabuladorea.

\n' + + '\n' + + '

EIko atal hauen Tabuladorea da:

\n' + + '\n' + + '
    \n' + + '
  1. Menu-barra
  2. \n' + + '
  3. Tresna-barraren talde bakoitza
  4. \n' + + '
  5. Alboko barra
  6. \n' + + '
  7. Orri-oineko elementuaren bidea
  8. \n' + + '
  9. Orri-oneko urrats-kontaketa txandakatzeko botoia
  10. \n' + + '
  11. Orri-oineko marken esteka
  12. \n' + + '
  13. Orri-oineko editorearen tamaina aldatzeko heldulekua
  14. \n' + + '
\n' + + '\n' + + '

EIko atal bat ez badago, saltatu egin da.

\n' + + '\n' + + '

Orri-oinak teklatuaren nabigazioa fokuratuta badago, eta alboko barra ikusgai ez badago, Maius+Tabuladorea sakatuz gero,\n' + + ' fokua tresna-barrako lehen taldera eramaten da, ez azkenera.

\n' + + '\n' + + '

Nabigatu EIko atalen barruan

\n' + + '\n' + + '

EIko elementu batetik hurrengora mugitzeko, sakatu dagokion Gezia tekla.

\n' + + '\n' + + '

Ezkerrera eta Eskuinera gezi-teklak

\n' + + '\n' + + '
    \n' + + '
  • menu-barrako menuen artean mugitzen da.
  • \n' + + '
  • ireki azpimenu bat menuan.
  • \n' + + '
  • mugitu botoi batetik bestera tresna-barren talde batean.
  • \n' + + '
  • mugitu orri-oineko elementuaren bideko elementu batetik bestera.
  • \n' + + '
\n' + + '\n' + + '

Gora eta Behera gezi-teklak

\n' + + '\n' + + '
    \n' + + '
  • mugitu menu bateko menu-elementuen artean.
  • \n' + + '
  • mugitu tresna-barrako menu gainerakor bateko menu-elementuen artean.
  • \n' + + '
\n' + + '\n' + + '

Gezia teklen zikloa nabarmendutako EI atalen barruan.

\n' + + '\n' + + '

Irekitako menu bat ixteko, ireki azpimenua, edo ireki menu gainerakorra, sakatu Ihes tekla.

\n' + + '\n' + + '

Une horretan fokuratzea EIko atal jakin baten "goialdean" badago, Ihes tekla sakatuz gero\n' + + ' teklatuaren nabigaziotik irtengo zara.

\n' + + '\n' + + '

Exekutatu menuko elementu bat edo tresna-barrako botoi bat

\n' + + '\n' + + '

Nahi den menuaren elementua edo tresna-barraren botoia nabarmenduta dagoenean, sakatu Itzuli, Sartu\n' + + ' edo Zuriune-barra elementua exekutatzeko.

\n' + + '\n' + + '

Nabigatu fitxarik gabeko elkarrizketak

\n' + + '\n' + + '

Fitxarik gabeko elkarrizketetan, lehen osagai interaktiboa fokuratzen da elkarrizketa irekitzen denean.

\n' + + '\n' + + '

Nabigatu elkarrizketa interaktiboko osagai batetik bestera Tabuladorea edo Maius+Tabuladorea sakatuta.

\n' + + '\n' + + '

Nabigatu fitxadun elkarrizketak

\n' + + '\n' + + '

Fitxadun elkarrizketetan, fitxa-menuko lehen botoia fokuratzen da elkarrizketa irekitzen denean.

\n' + + '\n' + + '

Nabigatu elkarrizketa-fitxa honen interaktiboko osagai batetik bestera Tabuladorea edo\n' + + ' Maius+Tabuladorea sakatuta.

\n' + + '\n' + + '

Aldatu beste elkarrizketa-fitxa batera fitxa-menua fokuratu eta dagokion Gezia\n' + + ' tekla sakatzeko, erabilgarri dauden fitxa batetik bestera txandakatzeko.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fa.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fa.js new file mode 100644 index 000000000..2a55012e8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fa.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa', +'

شروع پیمایش صفحه‌کلید

\n' + + '\n' + + '
\n' + + '
تمرکز بر نوار منو
\n' + + '
Windows یا Linux:‎‏: Alt+F9
\n' + + '
‎‏macOS: ⌥F9‎‏
\n' + + '
تمرکز بر نوار ابزار
\n' + + '
Windows یا Linux‎‏: Alt+F10
\n' + + '
‎‏macOS: ⌥F10‎‏
\n' + + '
تمرکز بر پانویس
\n' + + '
Windows یا Linux‎‏: Alt+F11
\n' + + '
‎‏macOS: ⌥F11‎‏
\n' + + '
تمرکز اعلان
\n' + + '
ویندوز یا لینوکس: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
تمرکز بر نوار ابزار بافتاری
\n' + + '
Windows ،Linux یا macOS:‏ Ctrl+F9
\n' + + '
\n' + + '\n' + + '

پیمایش در اولین مورد رابط کاربری شروع می‌شود و درخصوص اولین مورد در\n' + + ' مسیر عنصر پانویس، برجسته یا زیرخط‌دار می‌شود.

\n' + + '\n' + + '

پیمایش بین بخش‌های رابط کاربری

\n' + + '\n' + + '

برای جابجایی از یک بخش رابط کاربری به بخش بعدی، Tab را فشار دهید.

\n' + + '\n' + + '

برای جابجایی از یک بخش رابط کاربری به بخش قبلی، Shift+Tab را فشار دهید.

\n' + + '\n' + + '

ترتیب Tab این بخش‌های رابط کاربری عبارتند از:

\n' + + '\n' + + '
    \n' + + '
  1. نوار منو
  2. \n' + + '
  3. هر گروه نوار ابزار
  4. \n' + + '
  5. نوار کناری
  6. \n' + + '
  7. مسیر عنصر در پانویس
  8. \n' + + '
  9. دکمه تغییر وضعیت تعداد کلمات در پانویس
  10. \n' + + '
  11. پیوند نمانام‌سازی در پانویس
  12. \n' + + '
  13. دسته تغییر اندازه ویرایشگر در پانویس
  14. \n' + + '
\n' + + '\n' + + '

اگر بخشی از رابط کاربری موجود نباشد، رد می‌شود.

\n' + + '\n' + + '

اگر پانویس دارای تمرکز بر پیمایش صفحه‌کلید باشد،‌ و نوار کناری قابل‌مشاهده وجود ندارد، فشردن Shift+Tab\n' + + ' تمرکز را به گروه نوار ابزار اول می‌برد، نه آخر.

\n' + + '\n' + + '

پیمایش در بخش‌های رابط کاربری

\n' + + '\n' + + '

برای جابجایی از یک عنصر رابط کاربری به بعدی، کلید جهت‌نمای مناسب را فشار دهید.

\n' + + '\n' + + '

کلیدهای جهت‌نمای چپ و راست

\n' + + '\n' + + '
    \n' + + '
  • جابجایی بین منوها در نوار منو.
  • \n' + + '
  • باز کردن منوی فرعی در یک منو.
  • \n' + + '
  • جابجایی بین دکمه‌ها در یک گروه نوار ابزار.
  • \n' + + '
  • جابجایی بین موارد در مسیر عنصر پانویس.
  • \n' + + '
\n' + + '\n' + + '

کلیدهای جهت‌نمای پایین و بالا

\n' + + '\n' + + '
    \n' + + '
  • جابجایی بین موارد منو در یک منو.
  • \n' + + '
  • جابجایی بین موارد در یک منوی بازشوی نوار ابزار.
  • \n' + + '
\n' + + '\n' + + '

کلیدهایجهت‌نما در بخش رابط کاربری متمرکز می‌چرخند.

\n' + + '\n' + + '

برای بستن یک منوی باز، یک منوی فرعی باز، یا یک منوی بازشوی باز، کلید Esc را فشار دهید.

\n' + + '\n' + + '

اگر تمرکز فعلی در «بالای» یک بخش رابط کاربری خاص است، فشردن کلید Esc نیز موجب\n' + + ' خروج کامل از پیمایش صفحه‌کلید می‌شود.

\n' + + '\n' + + '

اجرای یک مورد منو یا دکمه نوار ابزار

\n' + + '\n' + + '

وقتی مورد منو یا دکمه نوار ابزار مورد نظر هایلایت شد، دکمه بازگشت، Enter،\n' + + ' یا نوار Space را فشار دهید تا مورد را اجرا کنید.

\n' + + '\n' + + '

پیمایش در کادرهای گفتگوی بدون زبانه

\n' + + '\n' + + '

در کادرهای گفتگوی بدون زبانه، وقتی کادر گفتگو باز می‌شود، اولین جزء تعاملی متمرکز می‌شود.

\n' + + '\n' + + '

با فشردن Tab یا Shift+Tab، بین اجزای کادر گفتگوی تعاملی پیمایش کنید.

\n' + + '\n' + + '

پیمایش کادرهای گفتگوی زبانه‌دار

\n' + + '\n' + + '

در کادرهای گفتگوی زبانه‌دار، وقتی کادر گفتگو باز می‌شود، اولین دکمه در منوی زبانه متمرکز می‌شود.

\n' + + '\n' + + '

با فشردن Tab یا\n' + + ' Shift+Tab، بین اجزای تعاملی این زبانه کادر گفتگو پیمایش کنید.

\n' + + '\n' + + '

با دادن تمرکز به منوی زبانه و سپس فشار دادن کلید جهت‌نمای\n' + + ' مناسب برای چرخش میان زبانه‌های موجود، به زبانه کادر گفتگوی دیگری بروید.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fi.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fi.js new file mode 100644 index 000000000..f01dc91c8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi', +'

Näppäimistönavigoinnin aloittaminen

\n' + + '\n' + + '
\n' + + '
Siirrä kohdistus valikkopalkkiin
\n' + + '
Windows tai Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Siirrä kohdistus työkalupalkkiin
\n' + + '
Windows tai Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Siirrä kohdistus alatunnisteeseen
\n' + + '
Windows tai Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Keskitä ilmoitukseen
\n' + + '
Windows ja Linux: Alt + F12
\n' + + '
macOS: ⌥F12
\n' + + '
Siirrä kohdistus kontekstuaaliseen työkalupalkkiin
\n' + + '
Windows, Linux tai macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigointi aloitetaan ensimmäisestä käyttöliittymän kohteesta, joka joko korostetaan tai alleviivataan, jos\n' + + ' kyseessä on Alatunniste-elementin polun ensimmäinen kohde.

\n' + + '\n' + + '

Käyttöliittymän eri osien välillä navigointi

\n' + + '\n' + + '

Paina sarkainnäppäintä siirtyäksesi käyttöliittymän osasta seuraavaan.

\n' + + '\n' + + '

Jos haluat siirtyä edelliseen käyttöliittymän osaan, paina Shift+sarkainnäppäin.

\n' + + '\n' + + '

Sarkainnäppäin siirtää sinua näissä käyttöliittymän osissa tässä järjestyksessä:

\n' + + '\n' + + '
    \n' + + '
  1. Valikkopalkki
  2. \n' + + '
  3. Työkalupalkin ryhmät
  4. \n' + + '
  5. Sivupalkki
  6. \n' + + '
  7. Elementin polku alatunnisteessa
  8. \n' + + '
  9. Sanalaskurin vaihtopainike alatunnisteessa
  10. \n' + + '
  11. Brändäyslinkki alatunnisteessa
  12. \n' + + '
  13. Editorin koon muuttamisen kahva alatunnisteessa
  14. \n' + + '
\n' + + '\n' + + '

Jos jotakin käyttöliittymän osaa ei ole, se ohitetaan.

\n' + + '\n' + + '

Jos kohdistus on siirretty alatunnisteeseen näppäimistönavigoinnilla eikä sivupalkkia ole näkyvissä, Shift+sarkainnäppäin\n' + + ' siirtää kohdistuksen työkalupalkin ensimmäiseen ryhmään, eikä viimeiseen.

\n' + + '\n' + + '

Käyttöliittymän eri osien sisällä navigointi

\n' + + '\n' + + '

Paina nuolinäppäimiä siirtyäksesi käyttöliittymäelementistä seuraavaan.

\n' + + '\n' + + '

Vasen- ja Oikea-nuolinäppäimet

\n' + + '\n' + + '
    \n' + + '
  • siirtävät sinua valikkopalkin valikoiden välillä.
  • \n' + + '
  • avaavat valikon alavalikon.
  • \n' + + '
  • siirtävät sinua työkalupalkin ryhmän painikkeiden välillä.
  • \n' + + '
  • siirtävät sinua kohteiden välillä alatunnisteen elementin polussa.
  • \n' + + '
\n' + + '\n' + + '

Alas- ja Ylös-nuolinäppäimet

\n' + + '\n' + + '
    \n' + + '
  • siirtävät sinua valikon valikkokohteiden välillä.
  • \n' + + '
  • siirtävät sinua työkalupalkin ponnahdusvalikon kohteiden välillä.
  • \n' + + '
\n' + + '\n' + + '

Nuolinäppäimet siirtävät sinua käyttöliittymän korostetun osan sisällä syklissä.

\n' + + '\n' + + '

Paina Esc-näppäintä sulkeaksesi avoimen valikon, avataksesi alavalikon tai avataksesi ponnahdusvalikon.

\n' + + '\n' + + '

Jos kohdistus on käyttöliittymän tietyn osion ylälaidassa, Esc-näppäimen painaminen\n' + + ' poistuu myös näppäimistönavigoinnista kokonaan.

\n' + + '\n' + + '

Suorita valikkokohde tai työkalupalkin painike

\n' + + '\n' + + '

Kun haluamasi valikkokohde tai työkalupalkin painike on korostettuna, paina Return-, Enter-\n' + + ' tai välilyöntinäppäintä suorittaaksesi kohteen.

\n' + + '\n' + + '

Välilehdittömissä valintaikkunoissa navigointi

\n' + + '\n' + + '

Kun välilehdetön valintaikkuna avautuu, kohdistus siirtyy sen ensimmäiseen interaktiiviseen komponenttiin.

\n' + + '\n' + + '

Voit siirtyä valintaikkunan interaktiivisten komponenttien välillä painamalla sarkainnäppäintä tai Shift+sarkainnäppäin.

\n' + + '\n' + + '

Välilehdellisissä valintaikkunoissa navigointi

\n' + + '\n' + + '

Kun välilehdellinen valintaikkuna avautuu, kohdistus siirtyy välilehtivalikon ensimmäiseen painikkeeseen.

\n' + + '\n' + + '

Voit siirtyä valintaikkunan välilehden interaktiivisen komponenttien välillä painamalla sarkainnäppäintä tai\n' + + ' Shift+sarkainnäppäin.

\n' + + '\n' + + '

Voit siirtyä valintaikkunan toiseen välilehteen siirtämällä kohdistuksen välilehtivalikkoon ja painamalla sopivaa nuolinäppäintä\n' + + ' siirtyäksesi käytettävissä olevien välilehtien välillä syklissä.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js new file mode 100644 index 000000000..3f611e873 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR', +'

Débuter la navigation au clavier

\n' + + '\n' + + '
\n' + + '
Cibler la barre du menu
\n' + + '
Windows ou Linux : Alt+F9
\n' + + '
macOS : ⌥F9
\n' + + "
Cibler la barre d'outils
\n" + + '
Windows ou Linux : Alt+F10
\n' + + '
macOS : ⌥F10
\n' + + '
Cibler le pied de page
\n' + + '
Windows ou Linux : Alt+F11
\n' + + '
macOS : ⌥F11
\n' + + '
Cibler la notification
\n' + + '
Windows ou Linux : Alt+F12
\n' + + '
macOS : ⌥F12
\n' + + "
Cibler une barre d'outils contextuelle
\n" + + '
Windows, Linux ou macOS : Ctrl+F9
\n' + + '
\n' + + '\n' + + "

La navigation débutera sur le premier élément de l'interface utilisateur, qui sera mis en surbrillance ou bien souligné dans le cas du premier élément du\n" + + " chemin d'éléments du pied de page.

\n" + + '\n' + + "

Naviguer entre les sections de l'interface utilisateur

\n" + + '\n' + + "

Pour passer d'une section de l'interface utilisateur à la suivante, appuyez sur Tabulation.

\n" + + '\n' + + "

Pour passer d'une section de l'interface utilisateur à la précédente, appuyez sur Maj+Tabulation.

\n" + + '\n' + + "

L'ordre de Tabulation de ces sections de l'interface utilisateur est le suivant :

\n" + + '\n' + + '
    \n' + + '
  1. Barre du menu
  2. \n' + + "
  3. Chaque groupe de barres d'outils
  4. \n" + + '
  5. Barre latérale
  6. \n' + + "
  7. Chemin d'éléments du pied de page
  8. \n" + + "
  9. Bouton d'activation du compteur de mots dans le pied de page
  10. \n" + + '
  11. Lien de marque dans le pied de page
  12. \n' + + "
  13. Poignée de redimensionnement de l'éditeur dans le pied de page
  14. \n" + + '
\n' + + '\n' + + "

Si une section de l'interface utilisateur n'est pas présente, elle sera ignorée.

\n" + + '\n' + + "

Si le pied de page comporte un ciblage par navigation au clavier et qu'il n'y a aucune barre latérale visible, appuyer sur Maj+Tabulation\n" + + " déplace le ciblage vers le premier groupe de barres d'outils et non le dernier.

\n" + + '\n' + + "

Naviguer au sein des sections de l'interface utilisateur

\n" + + '\n' + + "

Pour passer d'un élément de l'interface utilisateur au suivant, appuyez sur la Flèche appropriée.

\n" + + '\n' + + '

Les touches fléchées Gauche et Droite

\n' + + '\n' + + '
    \n' + + '
  • se déplacent entre les menus de la barre des menus.
  • \n' + + "
  • ouvrent un sous-menu au sein d'un menu.
  • \n" + + "
  • se déplacent entre les boutons d'un groupe de barres d'outils.
  • \n" + + "
  • se déplacent entre les éléments du chemin d'éléments du pied de page.
  • \n" + + '
\n' + + '\n' + + '

Les touches fléchées Bas et Haut

\n' + + '\n' + + '
    \n' + + "
  • se déplacent entre les éléments de menu au sein d'un menu.
  • \n" + + "
  • se déplacent entre les éléments au sein d'un menu contextuel de barre d'outils.
  • \n" + + '
\n' + + '\n' + + "

Les Flèches parcourent la section de l'interface utilisateur ciblée.

\n" + + '\n' + + '

Pour fermer un menu ouvert, un sous-menu ouvert ou un menu contextuel ouvert, appuyez sur Echap.

\n' + + '\n' + + "

Si l'actuel ciblage se trouve en « haut » d'une section spécifique de l'interface utilisateur, appuyer sur Echap permet également de quitter\n" + + ' entièrement la navigation au clavier.

\n' + + '\n' + + "

Exécuter un élément de menu ou un bouton de barre d'outils

\n" + + '\n' + + "

Lorsque l'élément de menu ou le bouton de barre d'outils désiré est mis en surbrillance, appuyez sur la touche Retour arrière, Entrée\n" + + " ou la Barre d'espace pour exécuter l'élément.

\n" + + '\n' + + '

Naviguer au sein de dialogues sans onglets

\n' + + '\n' + + "

Dans les dialogues sans onglets, le premier composant interactif est ciblé lorsque le dialogue s'ouvre.

\n" + + '\n' + + '

Naviguez entre les composants du dialogue interactif en appuyant sur Tabulation ou Maj+Tabulation.

\n' + + '\n' + + '

Naviguer au sein de dialogues avec onglets

\n' + + '\n' + + "

Dans les dialogues avec onglets, le premier bouton du menu de l'onglet est ciblé lorsque le dialogue s'ouvre.

\n" + + '\n' + + '

Naviguez entre les composants interactifs de cet onglet de dialogue en appuyant sur Tabulation ou\n' + + ' Maj+Tabulation.

\n' + + '\n' + + "

Passez à un autre onglet de dialogue en ciblant le menu de l'onglet et en appuyant sur la Flèche\n" + + ' appropriée pour parcourir les onglets disponibles.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js new file mode 100644 index 000000000..7d6513af8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL', +'

התחל ניווט במקלדת

\n' + + '\n' + + '
\n' + + '
התמקד בשורת התפריטים
\n' + + '
Windows או Linux:‏ Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
העבר מיקוד לסרגל הכלים
\n' + + '
Windows או Linux:‏ Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
העבר מיקוד לכותרת התחתונה
\n' + + '
Windows או Linux:‏ Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
העבר מיקוד להודעה
\n' + + '
Windows או Linux:‏ Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
העבר מיקוד לסרגל כלים הקשרי
\n' + + '
Windows‏, Linux או macOS:‏ Ctrl+F9
\n' + + '
\n' + + '\n' + + '

הניווט יתחיל ברכיב הראשון במשך, שיודגש או שיהיה מתחתיו קו תחתון במקרה של הפריט הראשון\n' + + ' הנתיב של רכיב הכותרת התחתונה.

\n' + + '\n' + + '

עבור בין מקטעים במסך

\n' + + '\n' + + '

כדי לעבור בין המקטעים במסך, הקש Tab.

\n' + + '\n' + + '

כדי לעבור למקטע הקודם במסך, הקש Shift+Tab.

\n' + + '\n' + + '

הסדר מבחינת מקש Tab של הרכיבים במסך:

\n' + + '\n' + + '
    \n' + + '
  1. שורת התפריטים
  2. \n' + + '
  3. כל קבוצה בסרגל הכלים
  4. \n' + + '
  5. הסרגל הצידי
  6. \n' + + '
  7. נתיב של רכיב בכותרת התחתונה
  8. \n' + + '
  9. לחצן לספירת מילים בכותרת התחתונה
  10. \n' + + '
  11. קישור של המותג בכותרת התחתונה
  12. \n' + + '
  13. ידית לשינוי גודל עבור העורך בכותרת התחתונה
  14. \n' + + '
\n' + + '\n' + + '

אם רכיב כלשהו במסך לא מופיע, המערכת תדלג עליו.

\n' + + '\n' + + '

אם בכותרת התחתונה יש מיקוד של ניווט במקלדת, ולא מופיע סרגל בצד, יש להקיש Shift+Tab\n' + + ' מעביר את המיקוד לקבוצה הראשונה בסרגל הכלים, לא האחרונה.

\n' + + '\n' + + '

עבור בתוך מקטעים במסך

\n' + + '\n' + + '

כדי לעבור מרכיב אחד לרכיב אחר במסך, הקש על מקש החץ המתאים.

\n' + + '\n' + + '

מקשי החיצים שמאלה וימינה

\n' + + '\n' + + '
    \n' + + '
  • עבור בין תפריטים בשורת התפריטים.
  • \n' + + '
  • פתח תפריט משני בתפריט.
  • \n' + + '
  • עבור בין לחצנים בקבוצה בסרגל הכלים.
  • \n' + + '
  • עבור בין פריטים ברכיב בכותרת התחתונה.
  • \n' + + '
\n' + + '\n' + + '

מקשי החיצים למטה ולמעלה

\n' + + '\n' + + '
    \n' + + '
  • עבור בין פריטים בתפריט.
  • \n' + + '
  • עבור בין פריטים בחלון הקובץ של סרגל הכלים.
  • \n' + + '
\n' + + '\n' + + '

מקשי החצים משתנים בתוך המקטע במסך שעליו נמצא המיקוד.

\n' + + '\n' + + '

כדי לסגור תפריט פתוח, תפריט משני פתוח או חלון קופץ, הקש על Esc.

\n' + + '\n' + + "

אם המיקוד הוא על החלק 'העליון' של מקטע מסוים במסך, הקשה על Esc מביאה גם ליציאה\n" + + ' מהניווט במקלדת לחלוטין.

\n' + + '\n' + + '

הפעל פריט בתפריט או לחצן בסרגל הכלים

\n' + + '\n' + + '

כאשר הפריט הרצוי בתפריט או הלחצן בסרגל הכלים מודגשים, הקש על Return, Enter,\n' + + ' או על מקש הרווח כדי להפעיל את הפריט.

\n' + + '\n' + + '

ניווט בחלונות דו-שיח בלי כרטיסיות

\n' + + '\n' + + '

בחלונות דו-שיח בלי כרטיסיות, הרכיב האינטראקטיבי הראשון מקבל את המיקוד כאשר החלון נפתח.

\n' + + '\n' + + '

עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או Shift+Tab.

\n' + + '\n' + + '

ניווט בחלונות דו-שיח עם כרטיסיות

\n' + + '\n' + + '

בחלונות דו-שיח עם כרטיסיות, הלחצן הראשון בתפריט מקבל את המיקוד כאשר החלון נפתח.

\n' + + '\n' + + '

עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או\n' + + ' Shift+Tab.

\n' + + '\n' + + '

עבור לכרטיסיה אחרת בחלון על ידי העברת המיקוד לתפריט הכרטיסיות והקשה על החץהמתאים\n' + + ' כדי לעבור בין הכרטיסיות הזמינות.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hi.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hi.js new file mode 100644 index 000000000..ef59a5cff --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi', +'

कीबोर्ड नेविगेशन शुरू करें

\n' + + '\n' + + '
\n' + + '
मेन्यू बार पर फ़ोकस करें
\n' + + '
Windows या Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
टूलबार पर फ़ोकस करें
\n' + + '
Windows या Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
फ़ुटर पर फ़ोकस करें
\n' + + '
Windows या Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
नोटिफ़िकेशन फ़ोकस
\n' + + '
Windows या Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
प्रासंगिक टूलबार पर फ़ोकस करें
\n' + + '
Windows, Linux या macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

नेविगेशन पहले UI आइटम पर शुरू होगा, जिसे हाइलाइट किया जाएगा या पहले आइटम के मामले में फ़ुटर तत्व पथ में\n' + + ' रेखांकित किया जाएगा।

\n' + + '\n' + + '

UI सेक्शन के बीच नेविगेट करें

\n' + + '\n' + + '

एक UI सेक्शन से दूसरे सेक्शन में जाने के लिए, Tab दबाएं।

\n' + + '\n' + + '

एक UI सेक्शन से पिछले सेक्शन में जाने के लिए, Shift+Tab दबाएं।

\n' + + '\n' + + '

इन UI सेक्शन का Tab क्रम नीचे दिया गया है:

\n' + + '\n' + + '
    \n' + + '
  1. मेन्यू बार
  2. \n' + + '
  3. प्रत्येक टूलबार समूह
  4. \n' + + '
  5. साइडबार
  6. \n' + + '
  7. फ़ुटर में तत्व पथ
  8. \n' + + '
  9. फ़ुटर में शब्द गणना टॉगल बटन
  10. \n' + + '
  11. फ़ुटर में ब्रांडिंग लिंक
  12. \n' + + '
  13. फ़ुटर में संपादक का आकार बदलने का हैंडल
  14. \n' + + '
\n' + + '\n' + + '

अगर कोई UI सेक्शन मौजूद नहीं है, तो उसे छोड़ दिया जाता है।

\n' + + '\n' + + '

अगर फ़ुटर में कीबोर्ड नेविगेशन फ़ोकस है, और कोई दिखा देने वाला साइडबार नहीं है, तो Shift+Tab दबाने से\n' + + ' फ़ोकस पहले टूलबार समूह पर चला जाता है, पिछले पर नहीं।

\n' + + '\n' + + '

UI सेक्शन के भीतर नेविगेट करें

\n' + + '\n' + + '

एक UI तत्व से दूसरे में जाने के लिए उपयुक्त ऐरो कुंजी दबाएं।

\n' + + '\n' + + '

बाएं और दाएं ऐरो कुंजियां

\n' + + '\n' + + '
    \n' + + '
  • मेन्यू बार में मेन्यू के बीच ले जाती हैं।
  • \n' + + '
  • मेन्यू में एक सब-मेन्यू खोलें।
  • \n' + + '
  • टूलबार समूह में बटनों के बीच ले जाएं।
  • \n' + + '
  • फ़ुटर के तत्व पथ में आइटम के बीच ले जाएं।
  • \n' + + '
\n' + + '\n' + + '

नीचे और ऊपर ऐरो कुंजियां

\n' + + '\n' + + '
    \n' + + '
  • मेन्यू में मेन्यू आइटम के बीच ले जाती हैं।
  • \n' + + '
  • टूलबार पॉप-अप मेन्यू में आइटम के बीच ले जाएं।
  • \n' + + '
\n' + + '\n' + + '

फ़ोकस वाले UI सेक्शन के भीतर ऐरो कुंजियां चलाती रहती हैं।

\n' + + '\n' + + '

कोई खुला मेन्यू, कोई खुला सब-मेन्यू या कोई खुला पॉप-अप मेन्यू बंद करने के लिए Esc कुंजी दबाएं।

\n' + + '\n' + + "

अगर मौजूदा फ़ोकस किसी विशेष UI सेक्शन के 'शीर्ष' पर है, तो Esc कुंजी दबाने से भी\n" + + ' कीबोर्ड नेविगेशन पूरी तरह से बाहर हो जाता है।

\n' + + '\n' + + '

मेन्यू आइटम या टूलबार बटन निष्पादित करें

\n' + + '\n' + + '

जब वांछित मेन्यू आइटम या टूलबार बटन हाइलाइट किया जाता है, तो आइटम को निष्पादित करने के लिए Return, Enter,\n' + + ' या Space bar दबाएं।

\n' + + '\n' + + '

गैर-टैब वाले डायलॉग पर नेविगेट करें

\n' + + '\n' + + '

गैर-टैब वाले डायलॉग में, डायलॉग खुलने पर पहला इंटरैक्टिव घटक फ़ोकस लेता है।

\n' + + '\n' + + '

Tab or Shift+Tab दबाकर इंटरैक्टिव डायलॉग घटकों के बीच नेविगेट करें।

\n' + + '\n' + + '

टैब किए गए डायलॉग पर नेविगेट करें

\n' + + '\n' + + '

टैब किए गए डायलॉग में, डायलॉग खुलने पर टैब मेन्यू में पहला बटन फ़ोकस लेता है।

\n' + + '\n' + + '

इस डायलॉग टैब के इंटरैक्टिव घटकों के बीच नेविगेट करने के लिए Tab या\n' + + ' Shift+Tab दबाएं।

\n' + + '\n' + + '

टैब मेन्यू को फ़ोकस देकर और फिर उपलब्ध टैब में के बीच जाने के लिए उपयुक्त ऐरो\n' + + ' कुंजी दबाकर दूसरे डायलॉग टैब पर स्विच करें।

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hr.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hr.js new file mode 100644 index 000000000..1bf35c50c --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hr.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr', +'

Početak navigacije na tipkovnici

\n' + + '\n' + + '
\n' + + '
Fokusiranje trake izbornika
\n' + + '
Windows ili Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokusiranje alatne trake
\n' + + '
Windows ili Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokusiranje podnožja
\n' + + '
Windows ili Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Fokusiranje obavijesti
\n' + + '
Windows ili Linux: Alt + F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokusiranje kontekstne alatne trake
\n' + + '
Windows, Linux ili macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigacija će započeti kod prve stavke na korisničkom sučelju, koja će biti istaknuta ili podcrtana ako se radi o prvoj stavci u\n' + + ' putu elementa u podnožju.

\n' + + '\n' + + '

Navigacija između dijelova korisničkog sučelja

\n' + + '\n' + + '

Za pomicanje s jednog dijela korisničkog sučelja na drugi pritisnite tabulator.

\n' + + '\n' + + '

Za pomicanje s jednog dijela korisničkog sučelja na prethodni pritisnite Shift + tabulator.

\n' + + '\n' + + '

Ovo je redoslijed pomicanja tabulatora po dijelovima korisničkog sučelja:

\n' + + '\n' + + '
    \n' + + '
  1. Traka izbornika
  2. \n' + + '
  3. Pojedinačne grupe na alatnoj traci
  4. \n' + + '
  5. Bočna traka
  6. \n' + + '
  7. Put elemenata u podnožju
  8. \n' + + '
  9. Gumb za pomicanje po broju riječi u podnožju
  10. \n' + + '
  11. Veza na brand u podnožju
  12. \n' + + '
  13. Značajka za promjenu veličine alata za uređivanje u podnožju
  14. \n' + + '
\n' + + '\n' + + '

Ako neki dio korisničkog sučelja nije naveden, on se preskače.

\n' + + '\n' + + '

Ako u podnožju postoji fokus za navigaciju na tipkovnici, a nema vidljive bočne trake, pritiskom na Shift + tabulator\n' + + ' fokus se prebacuje na prvu skupinu na alatnoj traci, ne na zadnju.

\n' + + '\n' + + '

Navigacija unutar dijelova korisničkog sučelja

\n' + + '\n' + + '

Za pomicanje s jednog elementa korisničkog sučelja na drugi pritisnite tipku s odgovarajućom strelicom.

\n' + + '\n' + + '

Tipke s lijevom i desnom strelicom

\n' + + '\n' + + '
    \n' + + '
  • služe za pomicanje između izbornika na alatnoj traci.
  • \n' + + '
  • otvaraju podizbornik unutar izbornika.
  • \n' + + '
  • služe za pomicanje između gumba unutar skupina na alatnoj traci.
  • \n' + + '
  • služe za pomicanje između stavki na elementu puta u podnožju.
  • \n' + + '
\n' + + '\n' + + '

Tipke s donjom i gornjom strelicom

\n' + + '\n' + + '
    \n' + + '
  • služe za pomicanje između stavki unutar izbornika.
  • \n' + + '
  • služe za pomicanje između stavki na alatnoj traci skočnog izbornika.
  • \n' + + '
\n' + + '\n' + + '

Tipkama strelica kružno se pomičete unutar dijela korisničkog sučelja koji je u fokusu.

\n' + + '\n' + + '

Za zatvaranje otvorenog izbornika, otvorenog podizbornika ili otvorenog skočnog izbornika pritisnite tipku Esc.

\n' + + '\n' + + '

Ako je fokus trenutačno postavljen na vrh pojedinačnog dijela korisničkog sučelja, pritiskom na tipku Esc također\n' + + ' u potpunosti zatvarate navigaciju na tipkovnici.

\n' + + '\n' + + '

Izvršavanje radnji putem stavki izbornika ili gumba na alatnoj traci

\n' + + '\n' + + '

Nakon što se istakne stavka izbornika ili gumb na alatnoj traci s radnjom koju želite izvršiti, pritisnite tipku Return, Enter\n' + + ' ili razmak da biste pokrenuli željenu radnju.

\n' + + '\n' + + '

Navigacija dijaloškim okvirima izvan kartica

\n' + + '\n' + + '

Prilikom otvaranja dijaloških okvira izvan kartica fokus se nalazi na prvoj interaktivnoj komponenti.

\n' + + '\n' + + '

Navigaciju između interaktivnih dijaloških komponenata vršite pritiskom na tabulator ili Shift + tabulator.

\n' + + '\n' + + '

Navigacija dijaloškim okvirima u karticama

\n' + + '\n' + + '

Prilikom otvaranja dijaloških okvira u karticama fokus se nalazi na prvom gumbu u izborniku unutar kartice.

\n' + + '\n' + + '

Navigaciju između interaktivnih komponenata dijaloškog okvira u kartici vršite pritiskom na tabulator ili\n' + + ' Shift + tabulator.

\n' + + '\n' + + '

Na karticu s drugim dijaloškim okvirom možete se prebaciti tako da stavite fokus na izbornik kartice pa pritisnete tipku s odgovarajućom strelicom\n' + + ' za kružno pomicanje između dostupnih kartica.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js new file mode 100644 index 000000000..5c984bb01 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU', +'

Billentyűzetes navigáció indítása

\n' + + '\n' + + '
\n' + + '
Fókusz a menüsávra
\n' + + '
Windows és Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fókusz az eszköztárra
\n' + + '
Windows és Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fókusz a láblécre
\n' + + '
Windows és Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Ráközelítés az értesítésre
\n' + + '
Windows vagy Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fókusz egy környezetfüggő eszköztárra
\n' + + '
Windows, Linux és macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

A navigáció az első felhasználói felületi elemnél kezdődik, amelyet a rendszer kiemel, illetve aláhúz, amennyiben az az első elem\n' + + ' a lábléc elemútvonalán.

\n' + + '\n' + + '

Navigálás a felhasználói felület szakaszai között

\n' + + '\n' + + '

A felhasználói felület következő szakaszára váltáshoz nyomja meg a Tab billentyűt.

\n' + + '\n' + + '

A felhasználói felület előző szakaszára váltáshoz nyomja meg a Shift+Tab billentyűt.

\n' + + '\n' + + '

A Tab billentyűvel a felhasználói felület szakaszai között a következő sorrendben vált:

\n' + + '\n' + + '
    \n' + + '
  1. Menüsáv
  2. \n' + + '
  3. Az egyes eszköztárcsoportok
  4. \n' + + '
  5. Oldalsáv
  6. \n' + + '
  7. Elemútvonal a láblécen
  8. \n' + + '
  9. Szószámátkapcsoló gomb a láblécen
  10. \n' + + '
  11. Márkalink a láblécen
  12. \n' + + '
  13. Szerkesztő átméretezési fogópontja a láblécen
  14. \n' + + '
\n' + + '\n' + + '

Ha a felhasználói felület valamelyik eleme nincs jelen, a rendszer kihagyja.

\n' + + '\n' + + '

Ha a billentyűzetes navigáció fókusza a láblécen van, és nincs látható oldalsáv, a Shift+Tab\n' + + ' billentyűkombináció lenyomásakor az első eszköztárcsoportra ugrik a fókusz, nem az utolsóra.

\n' + + '\n' + + '

Navigálás a felhasználói felület szakaszain belül

\n' + + '\n' + + '

A felhasználói felület következő elemére váltáshoz nyomja meg a megfelelő nyílbillentyűt.

\n' + + '\n' + + '

A bal és a jobb nyílgomb

\n' + + '\n' + + '
    \n' + + '
  • a menüsávban a menük között vált.
  • \n' + + '
  • a menükben megnyit egy almenüt.
  • \n' + + '
  • az eszköztárcsoportban a gombok között vált.
  • \n' + + '
  • a lábléc elemútvonalán az elemek között vált.
  • \n' + + '
\n' + + '\n' + + '

A le és a fel nyílgomb

\n' + + '\n' + + '
    \n' + + '
  • a menükben a menüpontok között vált.
  • \n' + + '
  • az eszköztár előugró menüjében az elemek között vált.
  • \n' + + '
\n' + + '\n' + + '

A nyílbillentyűk lenyomásával körkörösen lépkedhet a fókuszban lévő felhasználói felületi szakasz elemei között.

\n' + + '\n' + + '

A megnyitott menüket, almenüket és előugró menüket az Esc billentyűvel zárhatja be.

\n' + + '\n' + + '

Ha a fókusz az aktuális felületi elem „felső” részén van, az Esc billentyűvel az egész\n' + + ' billentyűzetes navigációból kilép.

\n' + + '\n' + + '

Menüpont vagy eszköztárgomb aktiválása

\n' + + '\n' + + '

Amikor a kívánt menüelem vagy eszköztárgomb van kijelölve, nyomja meg a Return, az Enter\n' + + ' vagy a Szóköz billentyűt az adott elem vagy gomb aktiválásához.

\n' + + '\n' + + '

Navigálás a lapokkal nem rendelkező párbeszédablakokban

\n' + + '\n' + + '

A lapokkal nem rendelkező párbeszédablakokban az első interaktív összetevő kapja a fókuszt, amikor a párbeszédpanel megnyílik.

\n' + + '\n' + + '

A párbeszédpanelek interaktív összetevői között a Tab vagy a Shift+Tab billentyűvel navigálhat.

\n' + + '\n' + + '

Navigálás a lapokkal rendelkező párbeszédablakokban

\n' + + '\n' + + '

A lapokkal rendelkező párbeszédablakokban a lapmenü első gombja kapja a fókuszt, amikor a párbeszédpanel megnyílik.

\n' + + '\n' + + '

A párbeszédpanel e lapjának interaktív összetevői között a Tab vagy\n' + + ' Shift+Tab billentyűvel navigálhat.

\n' + + '\n' + + '

A párbeszédablak másik lapjára úgy léphet, hogy a fókuszt a lapmenüre állítja, majd lenyomja a megfelelő nyílbillentyűt\n' + + ' a rendelkezésre álló lapok közötti lépkedéshez.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/id.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/id.js new file mode 100644 index 000000000..d607dd187 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/id.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.id', +'

Memulai navigasi keyboard

\n' + + '\n' + + '
\n' + + '
Fokus pada bilah Menu
\n' + + '
Windows atau Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokus pada Bilah Alat
\n' + + '
Windows atau Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokus pada footer
\n' + + '
Windows atau Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Fokuskan pemberitahuan
\n' + + '
Windows atau Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokus pada bilah alat kontekstual
\n' + + '
Windows, Linux, atau macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigasi akan dimulai dari item pertama UI, yang akan disorot atau digarisbawahi di\n' + + ' alur elemen Footer.

\n' + + '\n' + + '

Berpindah antar-bagian UI

\n' + + '\n' + + '

Untuk berpindah dari satu bagian UI ke bagian berikutnya, tekan Tab.

\n' + + '\n' + + '

Untuk berpindah dari satu bagian UI ke bagian sebelumnya, tekan Shift+Tab.

\n' + + '\n' + + '

Urutan Tab bagian-bagian UI ini adalah:

\n' + + '\n' + + '
    \n' + + '
  1. Bilah menu
  2. \n' + + '
  3. Tiap grup bilah alat
  4. \n' + + '
  5. Bilah sisi
  6. \n' + + '
  7. Alur elemen di footer
  8. \n' + + '
  9. Tombol aktifkan/nonaktifkan jumlah kata di footer
  10. \n' + + '
  11. Tautan merek di footer
  12. \n' + + '
  13. Pengatur pengubahan ukuran editor di footer
  14. \n' + + '
\n' + + '\n' + + '

Jika suatu bagian UI tidak ada, bagian tersebut dilewati.

\n' + + '\n' + + '

Jika fokus navigasi keyboard ada pada footer, tetapi tidak ada bilah sisi yang terlihat, menekan Shift+Tab\n' + + ' akan memindahkan fokus ke grup bilah alat pertama, bukan yang terakhir.

\n' + + '\n' + + '

Berpindah di dalam bagian-bagian UI

\n' + + '\n' + + '

Untuk berpindah dari satu elemen UI ke elemen berikutnya, tekan tombol Panah yang sesuai.

\n' + + '\n' + + '

Tombol panah Kiri dan Kanan untuk

\n' + + '\n' + + '
    \n' + + '
  • berpindah-pindah antar-menu di dalam bilah menu.
  • \n' + + '
  • membuka sub-menu di dalam menu.
  • \n' + + '
  • berpindah-pindah antar-tombol di dalam grup bilah alat.
  • \n' + + '
  • berpindah-pindah antar-item di dalam alur elemen footer.
  • \n' + + '
\n' + + '\n' + + '

Tombol panah Bawah dan Atas untuk

\n' + + '\n' + + '
    \n' + + '
  • berpindah-pindah antar-item menu di dalam menu.
  • \n' + + '
  • berpindah-pindah antar-item di dalam menu pop-up bilah alat.
  • \n' + + '
\n' + + '\n' + + '

Tombol Panah hanya bergerak di dalam bagian UI yang difokuskan.

\n' + + '\n' + + '

Untuk menutup menu, sub-menu, atau menu pop-up yang terbuka, tekan tombol Esc.

\n' + + '\n' + + '

Jika fokus sedang berada di ‘atas’ bagian UI tertentu, menekan tombol Esc juga dapat mengeluarkan fokus\n' + + ' dari seluruh navigasi keyboard.

\n' + + '\n' + + '

Menjalankan item menu atau tombol bilah alat

\n' + + '\n' + + '

Jika item menu atau tombol bilah alat yang diinginkan tersorot, tekan Return, Enter,\n' + + ' atau Spasi untuk menjalankan item.

\n' + + '\n' + + '

Berpindah dalam dialog tanpa tab

\n' + + '\n' + + '

Dalam dialog tanpa tab, fokus diarahkan pada komponen interaktif pertama saat dialog terbuka.

\n' + + '\n' + + '

Berpindah di antara komponen dalam dialog interaktif dengan menekan Tab atau Shift+Tab.

\n' + + '\n' + + '

Berpindah dalam dialog dengan tab

\n' + + '\n' + + '

Dalam dialog yang memiliki tab, fokus diarahkan pada tombol pertama di dalam menu saat dialog terbuka.

\n' + + '\n' + + '

Berpindah di antara komponen-komponen interaktif pada tab dialog ini dengan menekan Tab atau\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Beralih ke tab dialog lain dengan mengarahkan fokus pada menu tab lalu tekan tombol Panah\n' + + ' yang sesuai untuk berpindah ke berbagai tab yang tersedia.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/it.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/it.js new file mode 100644 index 000000000..3a791c959 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/it.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.it', +'

Iniziare la navigazione tramite tastiera

\n' + + '\n' + + '
\n' + + '
Impostare lo stato attivo per la barra dei menu
\n' + + '
Windows o Linux: ALT+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Impostare lo stato attivo per la barra degli strumenti
\n' + + '
Windows o Linux: ALT+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Impostare lo stato attivo per il piè di pagina
\n' + + '
Windows o Linux: ALT+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Metti a fuoco la notifica
\n' + + '
Windows o Linux: ALT+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Impostare lo stato attivo per la barra degli strumenti contestuale
\n' + + '
Windows, Linux o macOS: CTRL+F9
\n' + + '
\n' + + '\n' + + "

La navigazione inizierà dalla prima voce dell'interfaccia utente, che sarà evidenziata o sottolineata nel caso della prima voce\n" + + " nel percorso dell'elemento del piè di pagina.

\n" + + '\n' + + "

Navigare tra le sezioni dell'interfaccia utente

\n" + + '\n' + + "

Per passare da una sezione dell'interfaccia utente alla successiva, premere TAB.

\n" + + '\n' + + "

Per passare da una sezione dell'interfaccia utente alla precedente, premere MAIUSC+TAB.

\n" + + '\n' + + "

L'ordine di tabulazione di queste sezioni dell'interfaccia utente è:

\n" + + '\n' + + '
    \n' + + '
  1. Barra dei menu
  2. \n' + + '
  3. Ogni gruppo di barre degli strumenti
  4. \n' + + '
  5. Barra laterale
  6. \n' + + "
  7. Percorso dell'elemento nel piè di pagina
  8. \n" + + '
  9. Pulsante di attivazione/disattivazione del conteggio delle parole nel piè di pagina
  10. \n' + + '
  11. Collegamento al marchio nel piè di pagina
  12. \n' + + "
  13. Quadratino di ridimensionamento dell'editor nel piè di pagina
  14. \n" + + '
\n' + + '\n' + + "

Se una sezione dell'interfaccia utente non è presente, viene saltata.

\n" + + '\n' + + '

Se il piè di pagina ha lo stato attivo per la navigazione tramite tastiera e non è presente alcuna barra laterale visibile, premendo MAIUSC+TAB\n' + + " si sposta lo stato attivo sul primo gruppo di barre degli strumenti, non sull'ultimo.

\n" + + '\n' + + "

Navigare all'interno delle sezioni dell'interfaccia utente

\n" + + '\n' + + "

Per passare da un elemento dell'interfaccia utente al successivo, premere il tasto freccia appropriato.

\n" + + '\n' + + '

I tasti freccia Sinistra e Destra

\n' + + '\n' + + '
    \n' + + '
  • consentono di spostarsi tra i menu della barra dei menu.
  • \n' + + '
  • aprono un sottomenu in un menu.
  • \n' + + '
  • consentono di spostarsi tra i pulsanti di un gruppo di barre degli strumenti.
  • \n' + + "
  • consentono di spostarsi tra le voci nel percorso dell'elemento del piè di pagina.
  • \n" + + '
\n' + + '\n' + + '

I tasti freccia Giù e Su

\n' + + '\n' + + '
    \n' + + '
  • consentono di spostarsi tra le voci di un menu.
  • \n' + + '
  • consentono di spostarsi tra le voci di un menu a comparsa della barra degli strumenti.
  • \n' + + '
\n' + + '\n' + + "

I tasti freccia consentono di spostarsi all'interno della sezione dell'interfaccia utente con stato attivo.

\n" + + '\n' + + '

Per chiudere un menu aperto, un sottomenu aperto o un menu a comparsa aperto, premere il tasto ESC.

\n' + + '\n' + + "

Se lo stato attivo corrente si trova nella parte superiore di una particolare sezione dell'interfaccia utente, premendo il tasto ESC si esce\n" + + ' completamente dalla navigazione tramite tastiera.

\n' + + '\n' + + '

Eseguire una voce di menu o un pulsante della barra degli strumenti

\n' + + '\n' + + '

Quando la voce di menu o il pulsante della barra degli strumenti desiderati sono evidenziati, premere il tasto diritorno a capo, il tasto Invio\n' + + ' o la barra spaziatrice per eseguirli.

\n' + + '\n' + + '

Navigare nelle finestre di dialogo non a schede

\n' + + '\n' + + "

Nelle finestre di dialogo non a schede, all'apertura della finestra di dialogo diventa attivo il primo componente interattivo.

\n" + + '\n' + + '

Per spostarsi tra i componenti interattivi della finestra di dialogo, premere TAB o MAIUSC+TAB.

\n' + + '\n' + + '

Navigare nelle finestre di dialogo a schede

\n' + + '\n' + + "

Nelle finestre di dialogo a schede, all'apertura della finestra di dialogo diventa attivo il primo pulsante del menu della scheda.

\n" + + '\n' + + '

Per spostarsi tra i componenti interattivi di questa scheda della finestra di dialogo, premere TAB o\n' + + ' MAIUSC+TAB.

\n' + + '\n' + + "

Per passare a un'altra scheda della finestra di dialogo, attivare il menu della scheda e premere il tasto freccia\n" + + ' appropriato per scorrere le schede disponibili.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ja.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ja.js new file mode 100644 index 000000000..26872db10 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ja.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja', +'

キーボード ナビゲーションの開始

\n' + + '\n' + + '
\n' + + '
メニュー バーをフォーカス
\n' + + '
Windows または Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
ツール バーをフォーカス
\n' + + '
Windows または Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
フッターをフォーカス
\n' + + '
Windows または Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
通知にフォーカス
\n' + + '
Windows または Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
コンテキスト ツール バーをフォーカス
\n' + + '
Windows、Linux または macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

ナビゲーションは最初の UI 項目から開始され、強調表示されるか、フッターの要素パスにある最初の項目の場合は\n' + + ' 下線が引かれます。

\n' + + '\n' + + '

UI セクション間の移動

\n' + + '\n' + + '

次の UI セクションに移動するには、Tab を押します。

\n' + + '\n' + + '

前の UI セクションに移動するには、Shift+Tab を押します。

\n' + + '\n' + + '

これらの UI セクションの Tab の順序:

\n' + + '\n' + + '
    \n' + + '
  1. メニュー バー
  2. \n' + + '
  3. 各ツール バー グループ
  4. \n' + + '
  5. サイド バー
  6. \n' + + '
  7. フッターの要素パス
  8. \n' + + '
  9. フッターの単語数切り替えボタン
  10. \n' + + '
  11. フッターのブランド リンク
  12. \n' + + '
  13. フッターのエディター サイズ変更ハンドル
  14. \n' + + '
\n' + + '\n' + + '

UI セクションが存在しない場合は、スキップされます。

\n' + + '\n' + + '

フッターにキーボード ナビゲーション フォーカスがあり、表示可能なサイド バーがない場合、Shift+Tab を押すと、\n' + + ' フォーカスが最後ではなく最初のツール バー グループに移動します。

\n' + + '\n' + + '

UI セクション内の移動

\n' + + '\n' + + '

次の UI 要素に移動するには、適切な矢印キーを押します。

\n' + + '\n' + + '

左矢印右矢印のキー

\n' + + '\n' + + '
    \n' + + '
  • メニュー バーのメニュー間で移動します。
  • \n' + + '
  • メニュー内のサブメニューを開きます。
  • \n' + + '
  • ツール バー グループのボタン間で移動します。
  • \n' + + '
  • フッターの要素パスの項目間で移動します。
  • \n' + + '
\n' + + '\n' + + '

下矢印上矢印のキー

\n' + + '\n' + + '
    \n' + + '
  • メニュー内のメニュー項目間で移動します。
  • \n' + + '
  • ツール バー ポップアップ メニュー内のメニュー項目間で移動します。
  • \n' + + '
\n' + + '\n' + + '

矢印キーで、フォーカスされた UI セクション内で循環します。

\n' + + '\n' + + '

開いたメニュー、開いたサブメニュー、開いたポップアップ メニューを閉じるには、Esc キーを押します。

\n' + + '\n' + + '

現在のフォーカスが特定の UI セクションの「一番上」にある場合、Esc キーを押すと\n' + + ' キーボード ナビゲーションも完全に閉じられます。

\n' + + '\n' + + '

メニュー項目またはツール バー ボタンの実行

\n' + + '\n' + + '

目的のメニュー項目やツール バー ボタンが強調表示されている場合、リターンEnter、\n' + + ' またはスペース キーを押して項目を実行します。

\n' + + '\n' + + '

タブのないダイアログの移動

\n' + + '\n' + + '

タブのないダイアログでは、ダイアログが開くと最初の対話型コンポーネントがフォーカスされます。

\n' + + '\n' + + '

Tab または Shift+Tab を押して、対話型ダイアログ コンポーネント間で移動します。

\n' + + '\n' + + '

タブ付きダイアログの移動

\n' + + '\n' + + '

タブ付きダイアログでは、ダイアログが開くとタブ メニューの最初のボタンがフォーカスされます。

\n' + + '\n' + + '

Tab または\n' + + ' Shift+Tab を押して、このダイアログ タブの対話型コンポーネント間で移動します。

\n' + + '\n' + + '

タブ メニューをフォーカスしてから適切な矢印キーを押して表示可能なタブを循環して、\n' + + ' 別のダイアログに切り替えます。

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/kk.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/kk.js new file mode 100644 index 000000000..e31532f0e --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/kk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk', +'

Пернетақта навигациясын бастау

\n' + + '\n' + + '
\n' + + '
Мәзір жолағын фокустау
\n' + + '
Windows немесе Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Құралдар тақтасын фокустау
\n' + + '
Windows немесе Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Төменгі деректемені фокустау
\n' + + '
Windows немесе Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Хабарландыруды белгілеу
\n' + + '
Windows немесе Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Мәтінмәндік құралдар тақтасын фокустау
\n' + + '
Windows, Linux немесе macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Навигация бөлектелетін немесе Төменгі деректеме элементінің жолындағы бірінші элемент жағдайында асты сызылатын\n' + + ' бірінші ПИ элементінен басталады.

\n' + + '\n' + + '

ПИ бөлімдері арасында навигациялау

\n' + + '\n' + + '

Бір ПИ бөлімінен келесісіне өту үшін Tab пернесін басыңыз.

\n' + + '\n' + + '

Бір ПИ бөлімінен алдыңғысына өту үшін Shift+Tab пернесін басыңыз.

\n' + + '\n' + + '

Осы ПИ бөлімдерінің Tab реті:

\n' + + '\n' + + '
    \n' + + '
  1. Мәзір жолағы
  2. \n' + + '
  3. Әрбір құралдар тақтасы тобы
  4. \n' + + '
  5. Бүйірлік жолақ
  6. \n' + + '
  7. Төменгі деректемедегі элемент жолы
  8. \n' + + '
  9. Төменгі деректемедегі сөздер санын ауыстыру түймесі
  10. \n' + + '
  11. Төменгі деректемедегі брендингтік сілтеме
  12. \n' + + '
  13. Төменгі деректемедегі редактор өлшемін өзгерту тұтқасы
  14. \n' + + '
\n' + + '\n' + + '

ПИ бөлімі көрсетілмесе, ол өткізіп жіберіледі.

\n' + + '\n' + + '

Төменгі деректемеде пернетақта навигациясының фокусы болса және бүйірлік жолақ көрінбесе, Shift+Tab тіркесімін басу әрекеті\n' + + ' фокусты соңғысы емес, бірінші құралдар тақтасы тобына жылжытады.

\n' + + '\n' + + '

ПИ бөлімдерінде навигациялау

\n' + + '\n' + + '

Бір ПИ элементінен келесісіне өту үшін Arrow (Көрсеткі) пернесін басыңыз.

\n' + + '\n' + + '

Left (Сол жақ) және Right (Оң жақ) көрсеткі пернелері

\n' + + '\n' + + '
    \n' + + '
  • мәзір жолағындағы мәзірлер арасында жылжыту.
  • \n' + + '
  • мәзірде ішкі мәзірді ашу.
  • \n' + + '
  • құралдар тақтасы тобындағы түймелер арасында жылжыту.
  • \n' + + '
  • төменгі деректеме элементінің жолындағы элементтер арасында жылжыту.
  • \n' + + '
\n' + + '\n' + + '

Down (Төмен) және Up (Жоғары) көрсеткі пернелері

\n' + + '\n' + + '
    \n' + + '
  • мәзірдегі мәзір элементтері арасында жылжыту.
  • \n' + + '
  • құралдар тақтасының ашылмалы мәзіріндегі мәзір элементтері арасында жылжыту.
  • \n' + + '
\n' + + '\n' + + '

Фокусталған ПИ бөліміндегі Arrow (Көрсеткі) пернелерінің циклі.

\n' + + '\n' + + '

Ашық мәзірді жабу үшін ішкі мәзірді ашып немесе ашылмалы мәзірді ашып, Esc пернесін басыңыз.

\n' + + '\n' + + '

Ағымдағы фокус белгілі бір ПИ бөлімінің «үстінде» болса, Esc пернесін басу әрекеті пернетақта\n' + + ' навигациясын толығымен жабады.

\n' + + '\n' + + '

Мәзір элементін немесе құралдар тақтасы түймесін орындау

\n' + + '\n' + + '

Қажетті мәзір элементі немесе құралдар тақтасы түймесі бөлектелген кезде, элементті орындау үшін Return (Қайтару), Enter (Енгізу)\n' + + ' немесе Space bar (Бос орын) пернесін басыңыз.

\n' + + '\n' + + '

Белгіленбеген диалог терезелерін навигациялау

\n' + + '\n' + + '

Белгіленбеген диалог терезелерінде диалог терезесі ашылған кезде бірінші интерактивті құрамдас фокусталады.

\n' + + '\n' + + '

Tab немесе Shift+Tab пернесін басу арқылы интерактивті диалог терезесінің құрамдастары арасында навигациялаңыз.

\n' + + '\n' + + '

Белгіленген диалог терезелерін навигациялау

\n' + + '\n' + + '

Белгіленген диалог терезелерінде диалог терезесі ашылған кезде қойынды мәзіріндегі бірінші түйме фокусталады.

\n' + + '\n' + + '

Tab немесе\n' + + ' Shift+Tab пернесін басу арқылы осы диалог терезесі қойындысының интерактивті құрамдастары арасында навигациялаңыз.

\n' + + '\n' + + '

Қойынды мәзірінің фокусын беру арқылы басқа диалог терезесінің қойындысына ауысып, тиісті Arrow (Көрсеткі)\n' + + ' пернесін басу арқылы қолжетімді қойындылар арасында айналдыруға болады.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js new file mode 100644 index 000000000..e7c8e7fcc --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR', +'

키보드 탐색 시작

\n' + + '\n' + + '
\n' + + '
메뉴 모음 포커스 표시
\n' + + '
Windows 또는 Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
도구 모음 포커스 표시
\n' + + '
Windows 또는 Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
푸터 포커스 표시
\n' + + '
Windows 또는 Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
알림 포커스
\n' + + '
Windows 또는 Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
컨텍스트 도구 모음에 포커스 표시
\n' + + '
Windows, Linux 또는 macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

첫 번째 UI 항목에서 탐색이 시작되며, 이때 첫 번째 항목이 강조 표시되거나 푸터 요소 경로에 있는\n' + + ' 경우 밑줄 표시됩니다.

\n' + + '\n' + + '

UI 섹션 간 탐색

\n' + + '\n' + + '

한 UI 섹션에서 다음 UI 섹션으로 이동하려면 Tab(탭)을 누릅니다.

\n' + + '\n' + + '

한 UI 섹션에서 이전 UI 섹션으로 돌아가려면 Shift+Tab(시프트+탭)을 누릅니다.

\n' + + '\n' + + '

이 UI 섹션의 Tab(탭) 순서는 다음과 같습니다.

\n' + + '\n' + + '
    \n' + + '
  1. 메뉴 바
  2. \n' + + '
  3. 각 도구 모음 그룹
  4. \n' + + '
  5. 사이드바
  6. \n' + + '
  7. 푸터의 요소 경로
  8. \n' + + '
  9. 푸터의 단어 수 토글 버튼
  10. \n' + + '
  11. 푸터의 브랜딩 링크
  12. \n' + + '
  13. 푸터의 에디터 크기 변경 핸들
  14. \n' + + '
\n' + + '\n' + + '

UI 섹션이 없는 경우 건너뛰기합니다.

\n' + + '\n' + + '

푸터에 키보드 탐색 포커스가 있고 사이드바는 보이지 않는 경우 Shift+Tab(시프트+탭)을 누르면\n' + + ' 포커스 표시가 마지막이 아닌 첫 번째 도구 모음 그룹으로 이동합니다.

\n' + + '\n' + + '

UI 섹션 내 탐색

\n' + + '\n' + + '

한 UI 요소에서 다음 UI 요소로 이동하려면 적절한 화살표 키를 누릅니다.

\n' + + '\n' + + '

왼쪽오른쪽 화살표 키의 용도:

\n' + + '\n' + + '
    \n' + + '
  • 메뉴 모음에서 메뉴 항목 사이를 이동합니다.
  • \n' + + '
  • 메뉴에서 하위 메뉴를 엽니다.
  • \n' + + '
  • 도구 모음 그룹에서 버튼 사이를 이동합니다.
  • \n' + + '
  • 푸터의 요소 경로에서 항목 간에 이동합니다.
  • \n' + + '
\n' + + '\n' + + '

아래 화살표 키의 용도:

\n' + + '\n' + + '
    \n' + + '
  • 메뉴에서 메뉴 항목 사이를 이동합니다.
  • \n' + + '
  • 도구 모음 팝업 메뉴에서 메뉴 항목 사이를 이동합니다.
  • \n' + + '
\n' + + '\n' + + '

화살표 키는 포커스 표시 UI 섹션 내에서 순환됩니다.

\n' + + '\n' + + '

열려 있는 메뉴, 열려 있는 하위 메뉴 또는 열려 있는 팝업 메뉴를 닫으려면 Esc 키를 누릅니다.

\n' + + '\n' + + "

현재 포커스 표시가 특정 UI 섹션 '상단'에 있는 경우 이때도 Esc 키를 누르면\n" + + ' 키보드 탐색이 완전히 종료됩니다.

\n' + + '\n' + + '

메뉴 항목 또는 도구 모음 버튼 실행

\n' + + '\n' + + '

원하는 메뉴 항목 또는 도구 모음 버튼이 강조 표시되어 있을 때 Return(리턴), Enter(엔터),\n' + + ' 또는 Space bar(스페이스바)를 눌러 해당 항목을 실행합니다.

\n' + + '\n' + + '

탭이 없는 대화 탐색

\n' + + '\n' + + '

탭이 없는 대화의 경우, 첫 번째 대화형 요소가 포커스 표시된 상태로 대화가 열립니다.

\n' + + '\n' + + '

대화형 요소들 사이를 이동할 때는 Tab(탭) 또는 Shift+Tab(시프트+탭)을 누릅니다.

\n' + + '\n' + + '

탭이 있는 대화 탐색

\n' + + '\n' + + '

탭이 있는 대화의 경우, 탭 메뉴에서 첫 번째 버튼이 포커스 표시된 상태로 대화가 열립니다.

\n' + + '\n' + + '

이 대화 탭의 대화형 요소들 사이를 이동할 때는 Tab(탭) 또는\n' + + ' Shift+Tab(시프트+탭)을 누릅니다.

\n' + + '\n' + + '

다른 대화 탭으로 이동하려면 탭 메뉴를 포커스 표시한 다음 적절한 화살표\n' + + ' 키를 눌러 사용 가능한 탭들을 지나 원하는 탭으로 이동합니다.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ms.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ms.js new file mode 100644 index 000000000..2c047bb1a --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ms.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms', +'

Mulakan navigasi papan kekunci

\n' + + '\n' + + '
\n' + + '
Fokus bar Menu
\n' + + '
Windows atau Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokus Bar Alat
\n' + + '
Windows atau Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokus pengaki
\n' + + '
Windows atau Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Tumpu kepada pemberitahuan
\n' + + '
Windows atau Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokus bar alat kontekstual
\n' + + '
Windows, Linux atau macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigasi akan bermula pada item UI pertama, yang akan diserlahkan atau digaris bawah dalam saiz item pertama dalam\n' + + ' laluan elemen Pengaki.

\n' + + '\n' + + '

Navigasi antara bahagian UI

\n' + + '\n' + + '

Untuk bergerak dari satu bahagian UI ke yang seterusnya, tekan Tab.

\n' + + '\n' + + '

Untuk bergerak dari satu bahagian UI ke yang sebelumnya, tekan Shift+Tab.

\n' + + '\n' + + '

Tertib Tab bahagian UI ini ialah:

\n' + + '\n' + + '
    \n' + + '
  1. Bar menu
  2. \n' + + '
  3. Setiap kumpulan bar alat
  4. \n' + + '
  5. Bar sisi
  6. \n' + + '
  7. Laluan elemen dalam pengaki
  8. \n' + + '
  9. Butang togol kiraan perkataan dalam pengaki
  10. \n' + + '
  11. Pautan penjenamaan dalam pengaki
  12. \n' + + '
  13. Pemegang saiz semula editor dalam pengaki
  14. \n' + + '
\n' + + '\n' + + '

Jika bahagian UI tidak wujud, ia dilangkau.

\n' + + '\n' + + '

Jika pengaki mempunyai fokus navigasi papan kekunci dan tiada bar sisi kelihatan, menekan Shift+Tab\n' + + ' akan mengalihkan fokus ke kumpulan bar alat pertama, bukannya yang terakhir.

\n' + + '\n' + + '

Navigasi dalam bahagian UI

\n' + + '\n' + + '

Untuk bergerak dari satu elemen UI ke yang seterusnya, tekan kekunci Anak Panah yang bersesuaian.

\n' + + '\n' + + '

Kekunci anak panah Kiri dan Kanan

\n' + + '\n' + + '
    \n' + + '
  • bergerak antara menu dalam bar menu.
  • \n' + + '
  • membukan submenu dalam menu.
  • \n' + + '
  • bergerak antara butang dalam kumpulan bar alat.
  • \n' + + '
  • Laluan elemen dalam pengaki.
  • \n' + + '
\n' + + '\n' + + '

Kekunci anak panah Bawah dan Atas

\n' + + '\n' + + '
    \n' + + '
  • bergerak antara item menu dalam menu.
  • \n' + + '
  • bergerak antara item dalam menu timbul bar alat.
  • \n' + + '
\n' + + '\n' + + '

Kekunci Anak Panah berkitar dalam bahagian UI difokuskan.

\n' + + '\n' + + '

Untuk menutup menu buka, submenu terbuka atau menu timbul terbuka, tekan kekunci Esc.

\n' + + '\n' + + "

Jika fokus semasa berada di bahagian 'atas' bahagian UI tertentu, menekan kekunci Esc juga akan keluar daripada\n" + + ' navigasi papan kekunci sepenuhnya.

\n' + + '\n' + + '

Laksanakan item menu atau butang bar alat

\n' + + '\n' + + '

Apabila item menu atau butang bar alat yang diinginkan diserlahkan, tekan Return, Enter,\n' + + ' atau bar Space untuk melaksanakan item.

\n' + + '\n' + + '

Navigasi ke dialog tidak bertab

\n' + + '\n' + + '

Dalam dialog tidak bertab, komponen interaksi pertama difokuskan apabila dialog dibuka.

\n' + + '\n' + + '

Navigasi antara komponen dialog interaktif dengan menekan Tab atau Shift+Tab.

\n' + + '\n' + + '

Navigasi ke dialog bertab

\n' + + '\n' + + '

Dalam dialog bertab, butang pertama dalam menu tab difokuskan apabila dialog dibuka.

\n' + + '\n' + + '

Navigasi antara komponen interaktif tab dialog ini dengan menekan Tab atau\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Tukar kepada tab dialog lain dengan memfokuskan menu tab, kemudian menekan kekunci Anak Panah yang bersesuaian\n' + + ' untuk berkitar menerusi tab yang tersedia.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js new file mode 100644 index 000000000..071e3f55c --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO', +'

Starte tastaturnavigering

\n' + + '\n' + + '
\n' + + '
Utheve menylinjen
\n' + + '
Windows eller Linux: Alt + F9
\n' + + '
macOS: ⌥F9
\n' + + '
Utheve verktøylinjen
\n' + + '
Windows eller Linux: Alt + F10
\n' + + '
macOS: ⌥F10
\n' + + '
Utheve bunnteksten
\n' + + '
Windows eller Linux: Alt + F11
\n' + + '
macOS: ⌥F11
\n' + + '
Fokuser på varselet
\n' + + '
Windows eller Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Utheve en kontekstuell verktøylinje
\n' + + '
Windows, Linux eller macOS: Ctrl + F9
\n' + + '
\n' + + '\n' + + '

Navigeringen starter ved det første grensesnittelementet, som utheves, eller understrekes når det gjelder det første elementet i\n' + + ' elementstien i bunnteksten.

\n' + + '\n' + + '

Navigere mellom grensesnittdeler

\n' + + '\n' + + '

Du kan bevege deg fra én grensesnittdel til den neste ved å trykke på tabulatortasten.

\n' + + '\n' + + '

Du kan bevege deg fra én grensesnittdel til den forrige ved å trykke på Shift + tabulatortasten.

\n' + + '\n' + + '

Rekkefølgen til tabulatortasten gjennom grensesnittdelene er:

\n' + + '\n' + + '
    \n' + + '
  1. Menylinjen
  2. \n' + + '
  3. Hver gruppe på verktøylinjen
  4. \n' + + '
  5. Sidestolpen
  6. \n' + + '
  7. Elementstien i bunnteksten
  8. \n' + + '
  9. Veksleknappen for ordantall i bunnteksten
  10. \n' + + '
  11. Merkelenken i bunnteksten
  12. \n' + + '
  13. Skaleringshåndtaket for redigeringsprogrammet i bunnteksten
  14. \n' + + '
\n' + + '\n' + + '

Hvis en grensesnittdel ikke er til stede, blir den hoppet over.

\n' + + '\n' + + '

Hvis tastaturnavigeringen har uthevet bunnteksten og det ikke finnes en synlig sidestolpe, kan du trykke på Shift + tabulatortasten\n' + + ' for å flytte fokuset til den første gruppen på verktøylinjen i stedet for den siste.

\n' + + '\n' + + '

Navigere innenfor grensesnittdeler

\n' + + '\n' + + '

Du kan bevege deg fra ett grensesnittelement til det neste ved å trykke på den aktuelle piltasten.

\n' + + '\n' + + '

De venstre og høyre piltastene

\n' + + '\n' + + '
    \n' + + '
  • beveger deg mellom menyer på menylinjen.
  • \n' + + '
  • åpner en undermeny i en meny.
  • \n' + + '
  • beveger deg mellom knapper i en gruppe på verktøylinjen.
  • \n' + + '
  • beveger deg mellom elementer i elementstien i bunnteksten.
  • \n' + + '
\n' + + '\n' + + '

Ned- og opp-piltastene

\n' + + '\n' + + '
    \n' + + '
  • beveger deg mellom menyelementer i en meny.
  • \n' + + '
  • beveger deg mellom elementer i en hurtigmeny på verktøylinjen.
  • \n' + + '
\n' + + '\n' + + '

Med piltastene kan du bevege deg innenfor den uthevede grensesnittdelen.

\n' + + '\n' + + '

Du kan lukke en åpen meny, en åpen undermeny eller en åpen hurtigmeny ved å klikke på Esc-tasten.

\n' + + '\n' + + '

Hvis det øverste nivået i en grensesnittdel er uthevet, kan du ved å trykke på Esc også avslutte\n' + + ' tastaturnavigeringen helt.

\n' + + '\n' + + '

Utføre et menyelement eller en knapp på en verktøylinje

\n' + + '\n' + + '

Når det ønskede menyelementet eller verktøylinjeknappen er uthevet, trykker du på Retur, Enter,\n' + + ' eller mellomromstasten for å utføre elementet.

\n' + + '\n' + + '

Navigere i dialogbokser uten faner

\n' + + '\n' + + '

I dialogbokser uten faner blir den første interaktive komponenten uthevet når dialogboksen åpnes.

\n' + + '\n' + + '

Naviger mellom interaktive komponenter i dialogboksen ved å trykke på tabulatortasten eller Shift + tabulatortasten.

\n' + + '\n' + + '

Navigere i fanebaserte dialogbokser

\n' + + '\n' + + '

I fanebaserte dialogbokser blir den første knappen i fanemenyen uthevet når dialogboksen åpnes.

\n' + + '\n' + + '

Naviger mellom interaktive komponenter i fanen ved å trykke på tabulatortasten eller\n' + + ' Shift + tabulatortasten.

\n' + + '\n' + + '

Veksle til en annen fane i dialogboksen ved å utheve fanemenyen, og trykk deretter på den aktuelle piltasten\n' + + ' for å bevege deg mellom de tilgjengelige fanene.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nl.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nl.js new file mode 100644 index 000000000..05c07aee4 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nl.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl', +'

Toetsenbordnavigatie starten

\n' + + '\n' + + '
\n' + + '
Focus op de menubalk instellen
\n' + + '
Windows of Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Focus op de werkbalk instellen
\n' + + '
Windows of Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Focus op de voettekst instellen
\n' + + '
Windows of Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Focus op de melding instellen
\n' + + '
Windows of Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Focus op een contextuele werkbalk instellen
\n' + + '
Windows, Linux of macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

De navigatie start bij het eerste UI-item, dat wordt gemarkeerd of onderstreept als het eerste item zich in\n' + + ' in het elementenpad van de voettekst bevindt.

\n' + + '\n' + + '

Navigeren tussen UI-secties

\n' + + '\n' + + '

Druk op Tab om naar de volgende UI-sectie te gaan.

\n' + + '\n' + + '

Druk op Shift+Tab om naar de vorige UI-sectie te gaan.

\n' + + '\n' + + '

De Tab-volgorde van deze UI-secties is:

\n' + + '\n' + + '
    \n' + + '
  1. Menubalk
  2. \n' + + '
  3. Elke werkbalkgroep
  4. \n' + + '
  5. Zijbalk
  6. \n' + + '
  7. Elementenpad in de voettekst
  8. \n' + + '
  9. Wisselknop voor aantal woorden in de voettekst
  10. \n' + + '
  11. Merkkoppeling in de voettekst
  12. \n' + + '
  13. Greep voor het wijzigen van het formaat van de editor in de voettekst
  14. \n' + + '
\n' + + '\n' + + '

Als een UI-sectie niet aanwezig is, wordt deze overgeslagen.

\n' + + '\n' + + '

Als de focus van de toetsenbordnavigatie is ingesteld op de voettekst en er geen zichtbare zijbalk is, kun je op Shift+Tab drukken\n' + + ' om de focus naar de eerste werkbalkgroep in plaats van de laatste te verplaatsen.

\n' + + '\n' + + '

Navigeren binnen UI-secties

\n' + + '\n' + + '

Druk op de pijltjestoets om naar het betreffende UI-element te gaan.

\n' + + '\n' + + '

Met de pijltjestoetsen Links en Rechts

\n' + + '\n' + + '
    \n' + + "
  • wissel je tussen menu's in de menubalk.
  • \n" + + '
  • open je een submenu in een menu.
  • \n' + + '
  • wissel je tussen knoppen in een werkbalkgroep.
  • \n' + + '
  • wissel je tussen items in het elementenpad in de voettekst.
  • \n' + + '
\n' + + '\n' + + '

Met de pijltjestoetsen Omlaag en Omhoog

\n' + + '\n' + + '
    \n' + + '
  • wissel je tussen menu-items in een menu.
  • \n' + + '
  • wissel je tussen items in een werkbalkpop-upmenu.
  • \n' + + '
\n' + + '\n' + + '

Met de pijltjestoetsen wissel je binnen de UI-sectie waarop de focus is ingesteld.

\n' + + '\n' + + '

Druk op de toets Esc om een geopend menu, submenu of pop-upmenu te sluiten.

\n' + + '\n' + + "

Als de huidige focus is ingesteld 'bovenaan' een bepaalde UI-sectie, kun je op de toets Esc drukken\n" + + ' om de toetsenbordnavigatie af te sluiten.

\n' + + '\n' + + '

Een menu-item of werkbalkknop uitvoeren

\n' + + '\n' + + '

Als het gewenste menu-item of de gewenste werkbalkknop is gemarkeerd, kun je op Return, Enter\n' + + ' of de spatiebalk drukken om het item uit te voeren.

\n' + + '\n' + + '

Navigeren in dialoogvensters zonder tabblad

\n' + + '\n' + + '

Als een dialoogvenster zonder tabblad wordt geopend, wordt de focus ingesteld op het eerste interactieve onderdeel.

\n' + + '\n' + + '

Je kunt navigeren tussen interactieve onderdelen van een dialoogvenster door op Tab of Shift+Tab te drukken.

\n' + + '\n' + + '

Navigeren in dialoogvensters met tabblad

\n' + + '\n' + + '

Als een dialoogvenster met tabblad wordt geopend, wordt de focus ingesteld op de eerste knop in het tabbladmenu.

\n' + + '\n' + + '

Je kunt navigeren tussen interactieve onderdelen van dit tabblad van het dialoogvenster door op Tab of\n' + + ' Shift+Tab te drukken.

\n' + + '\n' + + '

Je kunt overschakelen naar een ander tabblad van het dialoogvenster door de focus in te stellen op het tabbladmenu en vervolgens op de juiste pijltjestoets\n' + + ' te drukken om tussen de beschikbare tabbladen te wisselen.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pl.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pl.js new file mode 100644 index 000000000..e89f808a8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pl.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl', +'

Początek nawigacji przy użyciu klawiatury

\n' + + '\n' + + '
\n' + + '
Ustaw fokus na pasek menu
\n' + + '
Windows lub Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Ustaw fokus na pasek narzędzi
\n' + + '
Windows lub Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Ustaw fokus na sekcję Footer
\n' + + '
Windows lub Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Skup się na powiadomieniu
\n' + + '
Windows lub Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Ustaw fokus na kontekstowy pasek narzędzi
\n' + + '
Windows, Linux lub macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Nawigacja zostanie rozpoczęta od pierwszego elementu interfejsu użytkownika, który jest podświetlony lub — w przypadku pierwszego elementu\n' + + ' w ścieżce elementów w sekcji Footer — podkreślony.

\n' + + '\n' + + '

Nawigacja pomiędzy sekcjami interfejsu użytkownika

\n' + + '\n' + + '

Aby przenieść się z danej sekcji interfejsu użytkownika do następnej, naciśnij Tab.

\n' + + '\n' + + '

Aby przenieść się z danej sekcji interfejsu użytkownika do poprzedniej, naciśnij Shift+Tab.

\n' + + '\n' + + '

Kolejność klawisza Tab w takich sekcjach interfejsu użytkownika jest następująca:

\n' + + '\n' + + '
    \n' + + '
  1. Pasek menu
  2. \n' + + '
  3. Każda grupa na pasku narzędzi
  4. \n' + + '
  5. Pasek boczny
  6. \n' + + '
  7. Ścieżka elementów w sekcji Footer
  8. \n' + + '
  9. Przycisk przełączania liczby słów w sekcji Footer
  10. \n' + + '
  11. Łącze brandujące w sekcji Footer
  12. \n' + + '
  13. Uchwyt zmiany rozmiaru edytora w sekcji Footer
  14. \n' + + '
\n' + + '\n' + + '

Jeżeli nie ma sekcji interfejsu użytkownika, jest to pomijane.

\n' + + '\n' + + '

Jeżeli na sekcji Footer jest ustawiony fokus nawigacji przy użyciu klawiatury i nie ma widocznego paska bocznego, naciśnięcie Shift+Tab\n' + + ' przenosi fokus na pierwszą grupę paska narzędzi, a nie na ostatnią.

\n' + + '\n' + + '

Nawigacja wewnątrz sekcji interfejsu użytkownika

\n' + + '\n' + + '

Aby przenieść się z danego elementu interfejsu użytkownika do następnego, naciśnij odpowiedni klawisz strzałki.

\n' + + '\n' + + '

Klawisze strzałek w prawo i w lewo służą do

\n' + + '\n' + + '
    \n' + + '
  • przenoszenia się pomiędzy menu na pasku menu,
  • \n' + + '
  • otwarcia podmenu w menu,
  • \n' + + '
  • przenoszenia się pomiędzy przyciskami w grupie paska narzędzi,
  • \n' + + '
  • przenoszenia się pomiędzy elementami w ścieżce elementów w sekcji Footer.
  • \n' + + '
\n' + + '\n' + + '

Klawisze strzałek w dół i w górę służą do

\n' + + '\n' + + '
    \n' + + '
  • przenoszenia się pomiędzy elementami menu w menu,
  • \n' + + '
  • przenoszenia się pomiędzy elementami w wyskakującym menu paska narzędzi.
  • \n' + + '
\n' + + '\n' + + '

Klawisze strzałek służą do przemieszczania się w sekcji interfejsu użytkownika z ustawionym fokusem.

\n' + + '\n' + + '

Aby zamknąć otwarte menu, otwarte podmenu lub otwarte menu wyskakujące, naciśnij klawisz Esc.

\n' + + '\n' + + '

Jeżeli fokus jest ustawiony na górze konkretnej sekcji interfejsu użytkownika, naciśnięcie klawisza Esc powoduje wyjście\n' + + ' z nawigacji przy użyciu klawiatury.

\n' + + '\n' + + '

Wykonanie elementu menu lub przycisku paska narzędzi

\n' + + '\n' + + '

Gdy podświetlony jest żądany element menu lub przycisk paska narzędzi, naciśnij klawisz Return, Enter\n' + + ' lub Spacja, aby go wykonać.

\n' + + '\n' + + '

Nawigacja po oknie dialogowym bez kart

\n' + + '\n' + + '

Gdy otwiera się okno dialogowe bez kart, fokus ustawiany jest na pierwszą interaktywną część okna.

\n' + + '\n' + + '

Pomiędzy interaktywnymi częściami okna dialogowego nawiguj, naciskając klawisze Tab lub Shift+Tab.

\n' + + '\n' + + '

Nawigacja po oknie dialogowym z kartami

\n' + + '\n' + + '

W przypadku okna dialogowego z kartami po otwarciu okna dialogowego fokus ustawiany jest na pierwszy przycisk w menu karty.

\n' + + '\n' + + '

Nawigację pomiędzy interaktywnymi częściami karty okna dialogowego prowadzi się poprzez naciskanie klawiszy Tab lub\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Przełączenie się na inną kartę okna dialogowego wykonuje się poprzez ustawienie fokusu na menu karty i naciśnięcie odpowiedniego klawisza strzałki\n' + + ' w celu przemieszczenia się pomiędzy dostępnymi kartami.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js new file mode 100644 index 000000000..2938fcfa5 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR', +'

Iniciar navegação pelo teclado

\n' + + '\n' + + '
\n' + + '
Foco na barra de menus
\n' + + '
Windows ou Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Foco na barra de ferramentas
\n' + + '
Windows ou Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Foco no rodapé
\n' + + '
Windows ou Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Foco na notificação
\n' + + '
Windows ou Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Foco na barra de ferramentas contextual
\n' + + '
Windows, Linux ou macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

A navegação inicia no primeiro item da IU, que será destacado ou sublinhado no caso do primeiro item no\n' + + ' caminho do elemento Rodapé.

\n' + + '\n' + + '

Navegar entre seções da IU

\n' + + '\n' + + '

Para ir de uma seção da IU para a seguinte, pressione Tab.

\n' + + '\n' + + '

Para ir de uma seção da IU para a anterior, pressione Shift+Tab.

\n' + + '\n' + + '

A ordem de Tab destas seções da IU é:

\n' + + '\n' + + '
    \n' + + '
  1. Barra de menus
  2. \n' + + '
  3. Cada grupo da barra de ferramentas
  4. \n' + + '
  5. Barra lateral
  6. \n' + + '
  7. Caminho do elemento no rodapé
  8. \n' + + '
  9. Botão de alternar contagem de palavras no rodapé
  10. \n' + + '
  11. Link da marca no rodapé
  12. \n' + + '
  13. Alça de redimensionamento do editor no rodapé
  14. \n' + + '
\n' + + '\n' + + '

Se não houver uma seção da IU, ela será pulada.

\n' + + '\n' + + '

Se o rodapé tiver o foco da navegação pelo teclado e não houver uma barra lateral visível, pressionar Shift+Tab\n' + + ' move o foco para o primeiro grupo da barra de ferramentas, não para o último.

\n' + + '\n' + + '

Navegar dentro das seções da IU

\n' + + '\n' + + '

Para ir de um elemento da IU para o seguinte, pressione a Seta correspondente.

\n' + + '\n' + + '

As teclas de seta Esquerda e Direita

\n' + + '\n' + + '
    \n' + + '
  • movem entre menus na barra de menus.
  • \n' + + '
  • abrem um submenu em um menu.
  • \n' + + '
  • movem entre botões em um grupo da barra de ferramentas.
  • \n' + + '
  • movem entre itens no caminho do elemento do rodapé.
  • \n' + + '
\n' + + '\n' + + '

As teclas de seta Abaixo e Acima

\n' + + '\n' + + '
    \n' + + '
  • movem entre itens de menu em um menu.
  • \n' + + '
  • movem entre itens em um menu suspenso da barra de ferramentas.
  • \n' + + '
\n' + + '\n' + + '

As teclas de Seta alternam dentre a seção da IU em foco.

\n' + + '\n' + + '

Para fechar um menu aberto, um submenu aberto ou um menu suspenso aberto, pressione Esc.

\n' + + '\n' + + '

Se o foco atual estiver no ‘alto’ de determinada seção da IU, pressionar Esc também sai\n' + + ' totalmente da navegação pelo teclado.

\n' + + '\n' + + '

Executar um item de menu ou botão da barra de ferramentas

\n' + + '\n' + + '

Com o item de menu ou botão da barra de ferramentas desejado destacado, pressione Return, Enter,\n' + + ' ou a Barra de espaço para executar o item.

\n' + + '\n' + + '

Navegar por caixas de diálogo sem guias

\n' + + '\n' + + '

Em caixas de diálogo sem guias, o primeiro componente interativo recebe o foco quando a caixa de diálogo abre.

\n' + + '\n' + + '

Navegue entre componentes interativos de caixa de diálogo pressionando Tab ou Shift+Tab.

\n' + + '\n' + + '

Navegar por caixas de diálogo com guias

\n' + + '\n' + + '

Em caixas de diálogo com guias, o primeiro botão no menu da guia recebe o foco quando a caixa de diálogo abre.

\n' + + '\n' + + '

Navegue entre componentes interativos dessa guia da caixa de diálogo pressionando Tab ou\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Alterne para outra guia da caixa de diálogo colocando o foco no menu da guia e pressionando a Seta\n' + + ' adequada para percorrer as guias disponíveis.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js new file mode 100644 index 000000000..03da3d614 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT', +'

Iniciar navegação com teclado

\n' + + '\n' + + '
\n' + + '
Foco na barra de menu
\n' + + '
Windows ou Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Foco na barra de ferramentas
\n' + + '
Windows ou Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Foco no rodapé
\n' + + '
Windows ou Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Focar a notificação
\n' + + '
Windows ou Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Foco numa barra de ferramentas contextual
\n' + + '
Windows, Linux ou macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

A navegação começará no primeiro item de IU, que estará realçado ou sublinhado, no caso do primeiro item no\n' + + ' caminho do elemento do rodapé.

\n' + + '\n' + + '

Navegar entre secções de IU

\n' + + '\n' + + '

Para se mover de uma secção de IU para a seguinte, prima Tab.

\n' + + '\n' + + '

Para se mover de uma secção de IU para a anterior, prima Shift+Tab.

\n' + + '\n' + + '

A ordem de tabulação destas secções de IU é:

\n' + + '\n' + + '
    \n' + + '
  1. Barra de menu
  2. \n' + + '
  3. Cada grupo da barra de ferramentas
  4. \n' + + '
  5. Barra lateral
  6. \n' + + '
  7. Caminho do elemento no rodapé
  8. \n' + + '
  9. Botão de alternar da contagem de palavras no rodapé
  10. \n' + + '
  11. Ligação da marca no rodapé
  12. \n' + + '
  13. Alça de redimensionamento do editor no rodapé
  14. \n' + + '
\n' + + '\n' + + '

Se uma secção de IU não estiver presente, é ignorada.

\n' + + '\n' + + '

Se o rodapé tiver foco de navegação com teclado e não existir uma barra lateral visível, premir Shift+Tab\n' + + ' move o foco para o primeiro grupo da barra de ferramentas e não para o último.

\n' + + '\n' + + '

Navegar nas secções de IU

\n' + + '\n' + + '

Para se mover de um elemento de IU para o seguinte, prima a tecla de seta adequada.

\n' + + '\n' + + '

As teclas de seta Para a esquerda e Para a direita

\n' + + '\n' + + '
    \n' + + '
  • movem-se entre menus na barra de menu.
  • \n' + + '
  • abrem um submenu num menu.
  • \n' + + '
  • movem-se entre botões num grupo da barra de ferramentas.
  • \n' + + '
  • movem-se entre itens no caminho do elemento do rodapé.
  • \n' + + '
\n' + + '\n' + + '

As teclas de seta Para cima e Para baixo

\n' + + '\n' + + '
    \n' + + '
  • movem-se entre itens de menu num menu.
  • \n' + + '
  • movem-se entre itens num menu de pop-up da barra de ferramentas.
  • \n' + + '
\n' + + '\n' + + '

As teclas de seta deslocam-se ciclicamente na secção de IU em foco.

\n' + + '\n' + + '

Para fechar um menu aberto, um submenu aberto ou um menu de pop-up aberto, prima a tecla Esc.

\n' + + '\n' + + '

Se o foco atual estiver no "topo" de determinada secção de IU, premir a tecla Esc também fecha\n' + + ' completamente a navegação com teclado.

\n' + + '\n' + + '

Executar um item de menu ou botão da barra de ferramentas

\n' + + '\n' + + '

Quando o item de menu ou o botão da barra de ferramentas pretendido estiver realçado, prima Retrocesso, Enter\n' + + ' ou a Barra de espaço para executar o item.

\n' + + '\n' + + '

Navegar em diálogos sem separadores

\n' + + '\n' + + '

Nos diálogos sem separadores, o primeiro componente interativo fica em foco quando o diálogo abre.

\n' + + '\n' + + '

Navegue entre componentes interativos do diálogo, premindo Tab ou Shift+Tab.

\n' + + '\n' + + '

Navegar em diálogos com separadores

\n' + + '\n' + + '

Nos diálogos com separadores, o primeiro botão no menu do separador fica em foco quando o diálogo abre.

\n' + + '\n' + + '

Navegue entre os componentes interativos deste separador do diálogo, premindo Tab ou\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Mude para outro separador do diálogo colocando o menu do separador em foco e, em seguida, premindo a tecla de seta\n' + + ' adequada para se deslocar ciclicamente pelos separadores disponíveis.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ro.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ro.js new file mode 100644 index 000000000..38d3441d8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ro.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro', +'

Începeți navigarea de la tastatură

\n' + + '\n' + + '
\n' + + '
Focalizare pe bara de meniu
\n' + + '
Windows sau Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Focalizare pe bara de instrumente
\n' + + '
Windows sau Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Focalizare pe subsol
\n' + + '
Windows sau Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Focalizare pe notificare
\n' + + '
Windows sau Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Focalizare pe o bară de instrumente contextuală
\n' + + '
Windows, Linux sau macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigarea va începe de la primul element al interfeței cu utilizatorul, care va fi evidențiat sau subliniat în cazul primului element din\n' + + ' calea elementului Subsol.

\n' + + '\n' + + '

Navigați între secțiunile interfeței cu utilizatorul

\n' + + '\n' + + '

Pentru a trece de la o secțiune a interfeței cu utilizatorul la alta, apăsați Tab.

\n' + + '\n' + + '

Pentru a trece de la o secțiune a interfeței cu utilizatorul la cea anterioară, apăsați Shift+Tab.

\n' + + '\n' + + '

Ordinea cu Tab a acestor secțiuni ale interfeței cu utilizatorul este următoarea:

\n' + + '\n' + + '
    \n' + + '
  1. Bara de meniu
  2. \n' + + '
  3. Fiecare grup de bare de instrumente
  4. \n' + + '
  5. Bara laterală
  6. \n' + + '
  7. Calea elementului în subsol
  8. \n' + + '
  9. Buton de comutare a numărului de cuvinte în subsol
  10. \n' + + '
  11. Link de branding în subsol
  12. \n' + + '
  13. Mâner de redimensionare a editorului în subsol
  14. \n' + + '
\n' + + '\n' + + '

În cazul în care o secțiune a interfeței cu utilizatorul nu este prezentă, aceasta este omisă.

\n' + + '\n' + + '

În cazul în care subsolul are focalizarea navigației asupra tastaturii și nu există o bară laterală vizibilă, apăsarea butonului Shift+Tab\n' + + ' mută focalizarea pe primul grup de bare de instrumente, nu pe ultimul.

\n' + + '\n' + + '

Navigați în secțiunile interfeței cu utilizatorul

\n' + + '\n' + + '

Pentru a trece de la un element de interfață cu utilizatorul la următorul, apăsați tasta cu săgeata corespunzătoare.

\n' + + '\n' + + '

Tastele cu săgeți către stânga și dreapta

\n' + + '\n' + + '
    \n' + + '
  • navighează între meniurile din bara de meniuri.
  • \n' + + '
  • deschid un sub-meniu dintr-un meniu.
  • \n' + + '
  • navighează între butoanele dintr-un grup de bare de instrumente.
  • \n' + + '
  • navighează între elementele din calea elementelor subsolului.
  • \n' + + '
\n' + + '\n' + + '

Tastele cu săgeți în sus și în jos

\n' + + '\n' + + '
    \n' + + '
  • navighează între elementele de meniu dintr-un meniu.
  • \n' + + '
  • navighează între elementele unui meniu pop-up din bara de instrumente.
  • \n' + + '
\n' + + '\n' + + '

Tastele cu săgeți navighează în cadrul secțiunii interfeței cu utilizatorul asupra căreia se focalizează.

\n' + + '\n' + + '

Pentru a închide un meniu deschis, un sub-meniu deschis sau un meniu pop-up deschis, apăsați tasta Esc.

\n' + + '\n' + + '

Dacă focalizarea curentă este asupra „părții superioare” a unei anumite secțiuni a interfeței cu utilizatorul, prin apăsarea tastei Esc se iese, de asemenea,\n' + + ' în întregime din navigarea de la tastatură.

\n' + + '\n' + + '

Executarea unui element de meniu sau a unui buton din bara de instrumente

\n' + + '\n' + + '

Atunci când elementul de meniu dorit sau butonul dorit din bara de instrumente este evidențiat, apăsați Return, Enter,\n' + + ' sau bara de spațiu pentru a executa elementul.

\n' + + '\n' + + '

Navigarea de dialoguri fără file

\n' + + '\n' + + '

În dialogurile fără file, prima componentă interactivă beneficiază de focalizare la deschiderea dialogului.

\n' + + '\n' + + '

Navigați între componentele dialogului interactiv apăsând Tab sau Shift+Tab.

\n' + + '\n' + + '

Navigarea de dialoguri cu file

\n' + + '\n' + + '

În dialogurile cu file, primul buton din meniul cu file beneficiază de focalizare la deschiderea dialogului.

\n' + + '\n' + + '

Navigați între componentele interactive ale acestei file de dialog apăsând Tab sau\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Treceți la o altă filă de dialog focalizând asupra meniului cu file și apoi apăsând săgeata corespunzătoare\n' + + ' pentru a parcurge filele disponibile.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ru.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ru.js new file mode 100644 index 000000000..d310f5441 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ru.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru', +'

Начните управление с помощью клавиатуры

\n' + + '\n' + + '
\n' + + '
Фокус на панели меню
\n' + + '
Windows или Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Фокус на панели инструментов
\n' + + '
Windows или Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Фокус на нижнем колонтитуле
\n' + + '
Windows или Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Фокус на уведомлении
\n' + + '
Windows или Linux: Alt+12
\n' + + '
macOS: ⌥F12
\n' + + '
Фокус на контекстной панели инструментов
\n' + + '
Windows, Linux или macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Первый доступный для управления элемент интерфейса будет выделен цветом или подчеркнут (если он находится\n' + + ' в пути элементов нижнего колонтитула).

\n' + + '\n' + + '

Переход между разделами пользовательского интерфейса

\n' + + '\n' + + '

Чтобы перейти из текущего раздела интерфейса в следующий, нажмите Tab.

\n' + + '\n' + + '

Чтобы перейти из текущего раздела интерфейса в предыдущий, нажмите Shift+Tab.

\n' + + '\n' + + '

Вкладки разделов интерфейса расположены в следующем порядке:

\n' + + '\n' + + '
    \n' + + '
  1. Панель меню
  2. \n' + + '
  3. Группы панели инструментов
  4. \n' + + '
  5. Боковая панель
  6. \n' + + '
  7. Путь элементов нижнего колонтитула
  8. \n' + + '
  9. Подсчет слов/символов в нижнем колонтитуле
  10. \n' + + '
  11. Брендовая ссылка в нижнем колонтитуле
  12. \n' + + '
  13. Угол для изменения размера окна редактора
  14. \n' + + '
\n' + + '\n' + + '

Если раздел интерфейса отсутствует, он пропускается.

\n' + + '\n' + + '

Если при управлении с клавиатуры фокус находится на нижнем колонтитуле, а видимая боковая панель отсутствует, то при нажатии сочетания клавиш Shift+Tab\n' + + ' фокус переносится на первую группу панели инструментов, а не на последнюю.

\n' + + '\n' + + '

Переход между элементами внутри разделов пользовательского интерфейса

\n' + + '\n' + + '

Чтобы перейти от текущего элемента интерфейса к следующему, нажмите соответствующую клавишу со стрелкой.

\n' + + '\n' + + '

Клавиши со стрелками влево и вправо позволяют

\n' + + '\n' + + '
    \n' + + '
  • перемещаться между разными меню в панели меню.
  • \n' + + '
  • открывать разделы меню.
  • \n' + + '
  • перемещаться между кнопками в группе панели инструментов.
  • \n' + + '
  • перемещаться между элементами в пути элементов нижнего колонтитула.
  • \n' + + '
\n' + + '\n' + + '

Клавиши со стрелками вниз и вверх позволяют

\n' + + '\n' + + '
    \n' + + '
  • перемещаться между элементами одного меню.
  • \n' + + '
  • перемещаться между элементами всплывающего меню в панели инструментов.
  • \n' + + '
\n' + + '\n' + + '

При использовании клавиш со стрелками вы будете циклически перемещаться по элементам в пределах выбранного раздела интерфейса.

\n' + + '\n' + + '

Чтобы закрыть открытое меню, его раздел или всплывающее меню, нажмите клавишу Esc.

\n' + + '\n' + + '

Если фокус находится наверху какого-либо раздела интерфейса, нажатие клавиши Esc также приведет\n' + + ' к выходу из режима управления с помощью клавиатуры.

\n' + + '\n' + + '

Использование элемента меню или кнопки на панели инструментов

\n' + + '\n' + + '

Когда элемент меню или кнопка панели инструментов будут выделены, нажмите Return, Enter\n' + + ' или Space, чтобы их активировать.

\n' + + '\n' + + '

Управление в диалоговом окне без вкладок

\n' + + '\n' + + '

При открытии диалогового окна без вкладок фокус переносится на первый интерактивный компонент.

\n' + + '\n' + + '

Для перехода между интерактивными компонентами диалогового окна нажимайте Tab или Shift+Tab.

\n' + + '\n' + + '

Управление в диалоговом окне с вкладками

\n' + + '\n' + + '

При открытии диалогового окна с вкладками фокус переносится на первую кнопку в меню вкладок.

\n' + + '\n' + + '

Для перехода между интерактивными компонентами этой вкладки диалогового окна нажимайте Tab или\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Для перехода на другую вкладку диалогового окна переместите фокус на меню вкладок, а затем используйте клавиши со стрелками\n' + + ' для циклического переключения между доступными вкладками.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sk.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sk.js new file mode 100644 index 000000000..60cc6288c --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk', +'

Začíname s navigáciou pomocou klávesnice

\n' + + '\n' + + '
\n' + + '
Prejsť na panel s ponukami
\n' + + '
Windows alebo Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Prejsť na panel nástrojov
\n' + + '
Windows alebo Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Prejsť na pätičku
\n' + + '
Windows alebo Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Zaostriť na oznámenie
\n' + + '
Windows alebo Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Prejsť na kontextový panel nástrojov
\n' + + '
Windows, Linux alebo macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigácia začne pri prvej položke používateľského rozhrania, ktorá bude zvýraznená alebo v prípade prvej položky\n' + + ' cesty k pätičke podčiarknutá.

\n' + + '\n' + + '

Navigácia medzi časťami používateľského rozhrania

\n' + + '\n' + + '

Ak sa chcete posunúť z jednej časti používateľského rozhrania do druhej, stlačte tlačidlo Tab.

\n' + + '\n' + + '

Ak sa chcete posunúť z jednej časti používateľského rozhrania do predchádzajúcej, stlačte tlačidlá Shift + Tab.

\n' + + '\n' + + '

Poradie prepínania medzi týmito časťami používateľského rozhrania pri stláčaní tlačidla Tab:

\n' + + '\n' + + '
    \n' + + '
  1. Panel s ponukou
  2. \n' + + '
  3. Každá skupina panela nástrojov
  4. \n' + + '
  5. Bočný panel
  6. \n' + + '
  7. Cesta k prvku v pätičke
  8. \n' + + '
  9. Prepínač počtu slov v pätičke
  10. \n' + + '
  11. Odkaz na informácie o značke v pätičke
  12. \n' + + '
  13. Úchyt na zmenu veľkosti editora v pätičke
  14. \n' + + '
\n' + + '\n' + + '

Ak nejaká časť používateľského rozhrania nie je prítomná, preskočí sa.

\n' + + '\n' + + '

Ak je pätička vybratá na navigáciu pomocou klávesnice a nie je viditeľný bočný panel, stlačením klávesov Shift+Tab\n' + + ' prejdete na prvú skupinu panela nástrojov, nie na poslednú.

\n' + + '\n' + + '

Navigácia v rámci častí používateľského rozhrania

\n' + + '\n' + + '

Ak sa chcete posunúť z jedného prvku používateľského rozhrania na ďalší, stlačte príslušný kláves so šípkou.

\n' + + '\n' + + '

Klávesy so šípkami doľava a doprava

\n' + + '\n' + + '
    \n' + + '
  • umožňujú presun medzi ponukami na paneli ponúk,
  • \n' + + '
  • otvárajú podponuku v rámci ponuky,
  • \n' + + '
  • umožňujú presun medzi tlačidlami v skupine panelov nástrojov,
  • \n' + + '
  • umožňujú presun medzi položkami cesty prvku v pätičke.
  • \n' + + '
\n' + + '\n' + + '

Klávesy so šípkami dole a hore

\n' + + '\n' + + '
    \n' + + '
  • umožňujú presun medzi položkami ponuky,
  • \n' + + '
  • umožňujú presun medzi položkami v kontextovej ponuke panela nástrojov.
  • \n' + + '
\n' + + '\n' + + '

Klávesy so šípkami vykonávajú prepínanie v rámci vybranej časti používateľského rozhrania.

\n' + + '\n' + + '

Ak chcete zatvoriť otvorenú ponuku, otvorenú podponuku alebo otvorenú kontextovú ponuku, stlačte kláves Esc.

\n' + + '\n' + + '

Ak je aktuálne vybratá horná časť konkrétneho používateľského rozhrania, stlačením klávesu Esc úplne ukončíte tiež\n' + + ' navigáciu pomocou klávesnice.

\n' + + '\n' + + '

Vykonanie príkazu položky ponuky alebo tlačidla panela nástrojov

\n' + + '\n' + + '

Keď je zvýraznená požadovaná položka ponuky alebo tlačidlo panela nástrojov, stlačením klávesov Return, Enter\n' + + ' alebo medzerníka vykonáte príslušný príkaz položky.

\n' + + '\n' + + '

Navigácia v dialógových oknách bez záložiek

\n' + + '\n' + + '

Pri otvorení dialógových okien bez záložiek prejdete na prvý interaktívny komponent.

\n' + + '\n' + + '

Medzi interaktívnymi dialógovými komponentmi môžete prechádzať stlačením klávesov Tab alebo Shift+Tab.

\n' + + '\n' + + '

Navigácia v dialógových oknách so záložkami

\n' + + '\n' + + '

Pri otvorení dialógových okien so záložkami prejdete na prvé tlačidlo v ponuke záložiek.

\n' + + '\n' + + '

Medzi interaktívnymi komponentmi tejto dialógovej záložky môžete prechádzať stlačením klávesov Tab alebo\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Ak chcete prepnúť na ďalšiu záložku dialógového okna, prejdite do ponuky záložiek a potom môžete stlačením príslušného klávesu so šípkou\n' + + ' prepínať medzi dostupnými záložkami.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js new file mode 100644 index 000000000..2b25f5a34 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI', +'

Začetek krmarjenja s tipkovnico

\n' + + '\n' + + '
\n' + + '
Fokus na menijsko vrstico
\n' + + '
Windows ali Linux: Alt + F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokus na orodno vrstico
\n' + + '
Windows ali Linux: Alt + F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokus na nogo
\n' + + '
Windows ali Linux: Alt + F11
\n' + + '
macOS: ⌥F11
\n' + + '
Označitev obvestila
\n' + + '
Windows ali Linux: Alt + F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokus na kontekstualno orodno vrstico
\n' + + '
Windows, Linux ali macOS: Ctrl + F9
\n' + + '
\n' + + '\n' + + '

Krmarjenje se bo začelo s prvim elementom uporabniškega vmesnika, ki bo izpostavljena ali podčrtan, če gre za prvi element na\n' + + ' poti do elementa noge.

\n' + + '\n' + + '

Krmarjenje med razdelki uporabniškega vmesnika

\n' + + '\n' + + '

Če se želite pomakniti z enega dela uporabniškega vmesnika na naslednjega, pritisnite tabulatorko.

\n' + + '\n' + + '

Če se želite pomakniti z enega dela uporabniškega vmesnika na prejšnjega, pritisnite shift + tabulatorko.

\n' + + '\n' + + '

Zaporedje teh razdelkov uporabniškega vmesnika, ko pritiskate tabulatorko, je:

\n' + + '\n' + + '
    \n' + + '
  1. Menijska vrstica
  2. \n' + + '
  3. Posamezne skupine orodne vrstice
  4. \n' + + '
  5. Stranska vrstica
  6. \n' + + '
  7. Pod do elementa v nogi
  8. \n' + + '
  9. Gumb za preklop štetja besed v nogi
  10. \n' + + '
  11. Povezava do blagovne znamke v nogi
  12. \n' + + '
  13. Ročaj za spreminjanje velikosti urejevalnika v nogi
  14. \n' + + '
\n' + + '\n' + + '

Če razdelek uporabniškega vmesnika ni prisoten, je preskočen.

\n' + + '\n' + + '

Če ima noga fokus za krmarjenje s tipkovnico in ni vidne stranske vrstice, s pritiskom na shift + tabulatorko\n' + + ' fokus premaknete na prvo skupino orodne vrstice, ne zadnjo.

\n' + + '\n' + + '

Krmarjenje v razdelkih uporabniškega vmesnika

\n' + + '\n' + + '

Če se želite premakniti z enega elementa uporabniškega vmesnika na naslednjega, pritisnite ustrezno puščično tipko.

\n' + + '\n' + + '

Leva in desna puščična tipka

\n' + + '\n' + + '
    \n' + + '
  • omogočata premikanje med meniji v menijski vrstici.
  • \n' + + '
  • odpreta podmeni v meniju.
  • \n' + + '
  • omogočata premikanje med gumbi v skupini orodne vrstice.
  • \n' + + '
  • omogočata premikanje med elementi na poti do elementov noge.
  • \n' + + '
\n' + + '\n' + + '

Spodnja in zgornja puščična tipka

\n' + + '\n' + + '
    \n' + + '
  • omogočata premikanje med elementi menija.
  • \n' + + '
  • omogočata premikanje med elementi v pojavnem meniju orodne vrstice.
  • \n' + + '
\n' + + '\n' + + '

Puščične tipke omogočajo kroženje znotraj razdelka uporabniškega vmesnika, na katerem je fokus.

\n' + + '\n' + + '

Če želite zapreti odprt meni, podmeni ali pojavni meni, pritisnite tipko Esc.

\n' + + '\n' + + '

Če je trenutni fokus na »vrhu« določenega razdelka uporabniškega vmesnika, s pritiskom tipke Esc zaprete\n' + + ' tudi celotno krmarjenje s tipkovnico.

\n' + + '\n' + + '

Izvajanje menijskega elementa ali gumba orodne vrstice

\n' + + '\n' + + '

Ko je označen želeni menijski element ali orodja vrstica, pritisnite vračalko, Enter\n' + + ' ali preslednico, da izvedete element.

\n' + + '\n' + + '

Krmarjenje po pogovornih oknih brez zavihkov

\n' + + '\n' + + '

Ko odprete pogovorno okno brez zavihkov, ima fokus prva interaktivna komponenta.

\n' + + '\n' + + '

Med interaktivnimi komponentami pogovornega okna se premikate s pritiskom tabulatorke ali kombinacije tipke shift + tabulatorke.

\n' + + '\n' + + '

Krmarjenje po pogovornih oknih z zavihki

\n' + + '\n' + + '

Ko odprete pogovorno okno z zavihki, ima fokus prvi gumb v meniju zavihka.

\n' + + '\n' + + '

Med interaktivnimi komponentami tega zavihka pogovornega okna se premikate s pritiskom tabulatorke ali\n' + + ' kombinacije tipke shift + tabulatorke.

\n' + + '\n' + + '

Na drug zavihek pogovornega okna preklopite tako, da fokus prestavite na meni zavihka in nato pritisnete ustrezno puščično\n' + + ' tipko, da se pomaknete med razpoložljivimi zavihki.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js new file mode 100644 index 000000000..c30f2f253 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE', +'

Påbörja tangentbordsnavigering

\n' + + '\n' + + '
\n' + + '
Fokusera på menyraden
\n' + + '
Windows eller Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Fokusera på verktygsraden
\n' + + '
Windows eller Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Fokusera på verktygsraden
\n' + + '
Windows eller Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Fokusera aviseringen
\n' + + '
Windows eller Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Fokusera på en snabbverktygsrad
\n' + + '
Windows, Linux eller macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Navigeringen börjar vid det första gränssnittsobjektet, vilket är markerat eller understruket om det gäller det första objektet i\n' + + ' sidfotens elementsökväg.

\n' + + '\n' + + '

Navigera mellan UI-avsnitt

\n' + + '\n' + + '

Flytta från ett UI-avsnitt till nästa genom att trycka på Tabb.

\n' + + '\n' + + '

Flytta från ett UI-avsnitt till det föregående genom att trycka på Skift+Tabb.

\n' + + '\n' + + '

Tabb-ordningen för dessa UI-avsnitt är:

\n' + + '\n' + + '
    \n' + + '
  1. Menyrad
  2. \n' + + '
  3. Varje verktygsradsgrupp
  4. \n' + + '
  5. Sidoruta
  6. \n' + + '
  7. Elementsökväg i sidfoten
  8. \n' + + '
  9. Växlingsknapp för ordantal i sidfoten
  10. \n' + + '
  11. Varumärkeslänk i sidfoten
  12. \n' + + '
  13. Storlekshandtag för redigeraren i sidfoten
  14. \n' + + '
\n' + + '\n' + + '

Om ett UI-avsnitt inte finns hoppas det över.

\n' + + '\n' + + '

Om sidfoten har fokus på tangentbordsnavigering, och det inte finns någon synlig sidoruta, flyttas fokus till den första verktygsradsgruppen\n' + + ' när du trycker på Skift+Tabb, inte till den sista.

\n' + + '\n' + + '

Navigera i UI-avsnitt

\n' + + '\n' + + '

Flytta från ett UI-element till nästa genom att trycka på motsvarande piltangent.

\n' + + '\n' + + '

Vänsterpil och högerpil

\n' + + '\n' + + '
    \n' + + '
  • flytta mellan menyer på menyraden.
  • \n' + + '
  • öppna en undermeny på en meny.
  • \n' + + '
  • flytta mellan knappar i en verktygsradgrupp.
  • \n' + + '
  • flytta mellan objekt i sidfotens elementsökväg.
  • \n' + + '
\n' + + '\n' + + '

Nedpil och uppil

\n' + + '\n' + + '
    \n' + + '
  • flytta mellan menyalternativ på en meny.
  • \n' + + '
  • flytta mellan alternativ på en popup-meny på verktygsraden.
  • \n' + + '
\n' + + '\n' + + '

Piltangenterna cirkulerar inom det fokuserade UI-avsnittet.

\n' + + '\n' + + '

Tryck på Esc-tangenten om du vill stänga en öppen meny, undermeny eller popup-meny.

\n' + + '\n' + + '

Om det aktuella fokuset är högst upp i ett UI-avsnitt avlutas även tangentbordsnavigeringen helt när\n' + + ' du trycker på Esc-tangenten.

\n' + + '\n' + + '

Köra ett menyalternativ eller en verktygfältsknapp

\n' + + '\n' + + '

När menyalternativet eller verktygsradsknappen är markerad trycker du på Retur, Enter\n' + + ' eller blanksteg för att köra alternativet.

\n' + + '\n' + + '

Navigera i dialogrutor utan flikar

\n' + + '\n' + + '

I dialogrutor utan flikar är den första interaktiva komponenten i fokus när dialogrutan öppnas.

\n' + + '\n' + + '

Navigera mellan interaktiva dialogkomponenter genom att trycka på Tabb eller Skift+Tabb.

\n' + + '\n' + + '

Navigera i dialogrutor med flikar

\n' + + '\n' + + '

I dialogrutor utan flikar är den första knappen på flikmenyn i fokus när dialogrutan öppnas.

\n' + + '\n' + + '

Navigera mellan interaktiva komponenter på dialogrutefliken genom att trycka på Tabb eller\n' + + ' Skift+Tabb.

\n' + + '\n' + + '

Växla till en annan dialogruta genom att fokusera på flikmenyn och sedan trycka på motsvarande piltangent\n' + + ' för att cirkulera mellan de tillgängliga flikarna.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js new file mode 100644 index 000000000..562fe7a79 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH', +'

เริ่มต้นการนำทางด้วยแป้นพิมพ์

\n' + + '\n' + + '
\n' + + '
โฟกัสที่แถบเมนู
\n' + + '
Windows หรือ Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
โฟกัสที่แถบเครื่องมือ
\n' + + '
Windows หรือ Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
โฟกัสที่ส่วนท้าย
\n' + + '
Windows หรือ Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
โฟกัสไปที่การแจ้งเตือน
\n' + + '
Windows หรือ Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
โฟกัสที่แถบเครื่องมือตามบริบท
\n' + + '
Windows, Linux หรือ macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

การนำทางจะเริ่มที่รายการ UI แรก ซึ่งจะมีการไฮไลต์หรือขีดเส้นใต้ไว้ในกรณีที่รายการแรกอยู่ใน\n' + + ' พาธองค์ประกอบส่วนท้าย

\n' + + '\n' + + '

การนำทางระหว่างส่วนต่างๆ ของ UI

\n' + + '\n' + + '

ในการย้ายจากส่วน UI หนึ่งไปยังส่วนถัดไป ให้กด Tab

\n' + + '\n' + + '

ในการย้ายจากส่วน UI หนึ่งไปยังส่วนก่อนหน้า ให้กด Shift+Tab

\n' + + '\n' + + '

ลำดับแท็บของส่วนต่างๆ ของ UI คือ:

\n' + + '\n' + + '
    \n' + + '
  1. แถบเมนู
  2. \n' + + '
  3. แต่ละกลุ่มแถบเครื่องมือ
  4. \n' + + '
  5. แถบข้าง
  6. \n' + + '
  7. พาธองค์ประกอบในส่วนท้าย
  8. \n' + + '
  9. ปุ่มสลับเปิด/ปิดจำนวนคำในส่วนท้าย
  10. \n' + + '
  11. ลิงก์ชื่อแบรนด์ในส่วนท้าย
  12. \n' + + '
  13. จุดจับปรับขนาดของตัวแก้ไขในส่วนท้าย
  14. \n' + + '
\n' + + '\n' + + '

หากส่วน UI ไม่ปรากฏ แสดงว่าถูกข้ามไป

\n' + + '\n' + + '

หากส่วนท้ายมีการโฟกัสการนำทางแป้นพิมพ์และไม่มีแถบข้างปรากฏ การกด Shift+Tab\n' + + ' จะย้ายการโฟกัสไปที่กลุ่มแถบเครื่องมือแรก ไม่ใช่สุดท้าย

\n' + + '\n' + + '

การนำทางภายในส่วนต่างๆ ของ UI

\n' + + '\n' + + '

ในการย้ายจากองค์ประกอบ UI หนึ่งไปยังองค์ประกอบส่วนถัดไป ให้กดปุ่มลูกศรที่เหมาะสม

\n' + + '\n' + + '

ปุ่มลูกศรซ้ายและขวา

\n' + + '\n' + + '
    \n' + + '
  • ย้ายไปมาระหว่างเมนูต่างๆ ในแถบเมนู
  • \n' + + '
  • เปิดเมนูย่อยในเมนู
  • \n' + + '
  • ย้ายไปมาระหว่างปุ่มต่างๆ ในกลุ่มแถบเครื่องมือ
  • \n' + + '
  • ย้ายไปมาระหว่างรายการต่างๆ ในพาธองค์ประกอบของส่วนท้าย
  • \n' + + '
\n' + + '\n' + + '

ปุ่มลูกศรลงและขึ้น

\n' + + '\n' + + '
    \n' + + '
  • ย้ายไปมาระหว่างรายการเมนูต่างๆ ในเมนู
  • \n' + + '
  • ย้ายไปมาระหว่างรายการต่างๆ ในเมนูป๊อบอัพแถบเครื่องมือ
  • \n' + + '
\n' + + '\n' + + '

ปุ่มลูกศรจะเลื่อนไปมาภายในส่วน UI ที่โฟกัส

\n' + + '\n' + + '

ในการปิดเมนูที่เปิดอยู่ เมนูย่อยที่เปิดอยู่ หรือเมนูป๊อบอัพที่เปิดอยู่ ให้กดปุ่ม Esc

\n' + + '\n' + + '

หากโฟกัสปัจจุบันอยู่ที่ ‘ด้านบนสุด’ ของส่วน UI เฉพาะ การกดปุ่ม Esc จะทำให้ออกจาก\n' + + ' การนำทางด้วยแป้นพิมพ์ทั้งหมดเช่นกัน

\n' + + '\n' + + '

การดำเนินการรายการเมนูหรือปุ่มในแถบเครื่องมือ

\n' + + '\n' + + '

เมื่อไฮไลต์รายการเมนูหรือปุ่มในแถบเครื่องมือที่ต้องการ ให้กด Return, Enter\n' + + ' หรือ Space bar เพื่อดำเนินการรายการดังกล่าว

\n' + + '\n' + + '

การนำทางสำหรับกล่องโต้ตอบที่ไม่อยู่ในแท็บ

\n' + + '\n' + + '

ในกล่องโต้ตอบที่ไม่อยู่ในแท็บ จะโฟกัสที่ส่วนประกอบเชิงโต้ตอบแรกเมื่อกล่องโต้ตอบเปิด

\n' + + '\n' + + '

นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของกล่องโต้ตอบ โดยการกด Tab หรือ Shift+Tab

\n' + + '\n' + + '

การนำทางสำหรับกล่องโต้ตอบที่อยู่ในแท็บ

\n' + + '\n' + + '

ในกล่องโต้ตอบที่อยู่ในแท็บ จะโฟกัสที่ปุ่มแรกในเมนูแท็บเมื่อกล่องโต้ตอบเปิด

\n' + + '\n' + + '

นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของแท็บกล่องโต้ตอบนี้โดยการกด Tab หรือ\n' + + ' Shift+Tab

\n' + + '\n' + + '

สลับไปยังแท็บกล่องโต้ตอบอื่นโดยการเลือกโฟกัสที่เมนูแท็บ แล้วกดปุ่มลูกศรที่เหมาะสม\n' + + ' เพื่อเลือกแท็บที่ใช้ได้

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/tr.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/tr.js new file mode 100644 index 000000000..37f39b0fc --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/tr.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr', +'

Klavyeyle gezintiyi başlatma

\n' + + '\n' + + '
\n' + + '
Menü çubuğuna odaklan
\n' + + '
Windows veya Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Araç çubuğuna odaklan
\n' + + '
Windows veya Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Alt bilgiye odaklan
\n' + + '
Windows veya Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Bildirime odakla
\n' + + '
Windows veya Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Bağlamsal araç çubuğuna odaklan
\n' + + '
Windows, Linux veya macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Gezinti ilk kullanıcı arabirimi öğesinden başlar, bu öğe vurgulanır ya da ilk öğe, Alt bilgi elemanı\n' + + ' yolundaysa altı çizilir.

\n' + + '\n' + + '

Kullanıcı arabirimi bölümleri arasında gezinme

\n' + + '\n' + + '

Sonraki kullanıcı arabirimi bölümüne gitmek için Sekme tuşuna basın.

\n' + + '\n' + + '

Önceki kullanıcı arabirimi bölümüne gitmek için Shift+Sekme tuşlarına basın.

\n' + + '\n' + + '

Bu kullanıcı arabirimi bölümlerinin Sekme sırası:

\n' + + '\n' + + '
    \n' + + '
  1. Menü çubuğu
  2. \n' + + '
  3. Her araç çubuğu grubu
  4. \n' + + '
  5. Kenar çubuğu
  6. \n' + + '
  7. Alt bilgide öğe yolu
  8. \n' + + '
  9. Alt bilgide sözcük sayısı geçiş düğmesi
  10. \n' + + '
  11. Alt bilgide marka bağlantısı
  12. \n' + + '
  13. Alt bilgide düzenleyiciyi yeniden boyutlandırma tutamacı
  14. \n' + + '
\n' + + '\n' + + '

Kullanıcı arabirimi bölümü yoksa atlanır.

\n' + + '\n' + + '

Alt bilgide klavyeyle gezinti odağı yoksa ve görünür bir kenar çubuğu mevcut değilse Shift+Sekme tuşlarına basıldığında\n' + + ' odak son araç çubuğu yerine ilk araç çubuğu grubuna taşınır.

\n' + + '\n' + + '

Kullanıcı arabirimi bölümleri içinde gezinme

\n' + + '\n' + + '

Sonraki kullanıcı arabirimi elemanına gitmek için uygun Ok tuşuna basın.

\n' + + '\n' + + '

Sol ve Sağ ok tuşları

\n' + + '\n' + + '
    \n' + + '
  • menü çubuğundaki menüler arasında hareket eder.
  • \n' + + '
  • menüde bir alt menü açar.
  • \n' + + '
  • araç çubuğu grubundaki düğmeler arasında hareket eder.
  • \n' + + '
  • alt bilginin öğe yolundaki öğeler arasında hareket eder.
  • \n' + + '
\n' + + '\n' + + '

Aşağı ve Yukarı ok tuşları

\n' + + '\n' + + '
    \n' + + '
  • menüdeki menü öğeleri arasında hareket eder.
  • \n' + + '
  • araç çubuğu açılır menüsündeki öğeler arasında hareket eder.
  • \n' + + '
\n' + + '\n' + + '

Ok tuşları, odaklanılan kullanıcı arabirimi bölümü içinde döngüsel olarak hareket eder.

\n' + + '\n' + + '

Açık bir menüyü, açık bir alt menüyü veya açık bir açılır menüyü kapatmak için Esc tuşuna basın.

\n' + + '\n' + + '

Geçerli odak belirli bir kullanıcı arabirimi bölümünün "üst" kısmındaysa Esc tuşuna basıldığında\n' + + ' klavyeyle gezintiden de tamamen çıkılır.

\n' + + '\n' + + '

Menü öğesini veya araç çubuğu düğmesini yürütme

\n' + + '\n' + + '

İstediğiniz menü öğesi veya araç çubuğu düğmesi vurgulandığında Return, Enter\n' + + ' veya Ara çubuğu tuşuna basın.

\n' + + '\n' + + '

Sekme bulunmayan iletişim kutularında gezinme

\n' + + '\n' + + '

Sekme bulunmayan iletişim kutularında, iletişim kutusu açıldığında ilk etkileşimli bileşene odaklanılır.

\n' + + '\n' + + '

Etkileşimli iletişim kutusu bileşenleri arasında gezinmek için Sekme veya Shift+ Sekme tuşlarına basın.

\n' + + '\n' + + '

Sekmeli iletişim kutularında gezinme

\n' + + '\n' + + '

Sekmeli iletişim kutularında, iletişim kutusu açıldığında sekme menüsündeki ilk düğmeye odaklanılır.

\n' + + '\n' + + '

Bu iletişim kutusu sekmesinin etkileşimli bileşenleri arasında gezinmek için Sekme veya\n' + + ' Shift+Sekme tuşlarına basın.

\n' + + '\n' + + '

Mevcut sekmeler arasında geçiş yapmak için sekme menüsüne odaklanıp uygun Ok tuşuna basarak\n' + + ' başka bir iletişim kutusu sekmesine geçiş yapın.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/uk.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/uk.js new file mode 100644 index 000000000..028d4a4c8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/uk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk', +'

Початок роботи з навігацією за допомогою клавіатури

\n' + + '\n' + + '
\n' + + '
Фокус на рядок меню
\n' + + '
Windows або Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Фокус на панелі інструментів
\n' + + '
Windows або Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Фокус на розділі "Нижній колонтитул"
\n' + + '
Windows або Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Фокус на сповіщення
\n' + + '
Windows або Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Фокус на контекстній панелі інструментів
\n' + + '
Windows, Linux або macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Навігація почнеться з першого елемента інтерфейсу користувача, який буде виділено або підкреслено в разі, якщо перший елемент знаходиться в\n' + + ' шляху до елемента "Нижній колонтитул".

\n' + + '\n' + + '

Навігація між розділами інтерфейсу користувача

\n' + + '\n' + + '

Щоб перейти з одного розділу інтерфейсу користувача до наступного розділу, натисніть клавішу Tab.

\n' + + '\n' + + '

Щоб перейти з одного розділу інтерфейсу користувача до попереднього розділу, натисніть сполучення клавіш Shift+Tab.

\n' + + '\n' + + '

Порядок Вкладок цих розділів інтерфейсу користувача такий:

\n' + + '\n' + + '
    \n' + + '
  1. Рядок меню
  2. \n' + + '
  3. Кожна група панелей інструментів
  4. \n' + + '
  5. Бічна панель
  6. \n' + + '
  7. Шлях до елементів у розділі "Нижній колонтитул"
  8. \n' + + '
  9. Кнопка перемикача "Кількість слів" у розділі "Нижній колонтитул"
  10. \n' + + '
  11. Посилання на брендинг у розділі "Нижній колонтитул"
  12. \n' + + '
  13. Маркер змінення розміру в розділі "Нижній колонтитул"
  14. \n' + + '
\n' + + '\n' + + '

Якщо розділ інтерфейсу користувача відсутній, він пропускається.

\n' + + '\n' + + '

Якщо фокус навігації клавіатури знаходиться на розділі "Нижній колонтитул", але користувач не бачить видиму бічну панель, натисніть Shift+Tab,\n' + + ' щоб перемістити фокус на першу групу панелі інструментів, а не на останню.

\n' + + '\n' + + '

Навігація в межах розділів інтерфейсу користувача

\n' + + '\n' + + '

Щоб перейти з одного елементу інтерфейсу користувача до наступного, натисніть відповідну клавішу зі стрілкою.

\n' + + '\n' + + '

Клавіші зі стрілками Ліворуч і Праворуч

\n' + + '\n' + + '
    \n' + + '
  • переміщують між меню в рядку меню.
  • \n' + + '
  • відкривають вкладене меню в меню.
  • \n' + + '
  • переміщують користувача між кнопками в групі панелі інструментів.
  • \n' + + '
  • переміщують між елементами в шляху до елементів у розділі "Нижній колонтитул".
  • \n' + + '
\n' + + '\n' + + '

Клавіші зі стрілками Вниз і Вгору

\n' + + '\n' + + '
    \n' + + '
  • переміщують між елементами меню в меню.
  • \n' + + '
  • переміщують між елементами в спливаючому меню панелі інструментів.
  • \n' + + '
\n' + + '\n' + + '

Клавіші зі стрілками переміщують фокус циклічно в межах розділу інтерфейсу користувача, на якому знаходиться фокус.

\n' + + '\n' + + '

Щоб закрити відкрите меню, відкрите вкладене меню або відкрите спливаюче меню, натисніть клавішу Esc.

\n' + + '\n' + + '

Якщо поточний фокус знаходиться на верхньому рівні певного розділу інтерфейсу користувача, натискання клавіші Esc також виконує вихід\n' + + ' з навігації за допомогою клавіатури повністю.

\n' + + '\n' + + '

Виконання елементу меню або кнопки панелі інструментів

\n' + + '\n' + + '

Коли потрібний елемент меню або кнопку панелі інструментів виділено, натисніть клавіші Return, Enter,\n' + + ' або Пробіл, щоб виконати цей елемент.

\n' + + '\n' + + '

Навігація по діалоговим вікнам без вкладок

\n' + + '\n' + + '

У діалогових вікнах без вкладок перший інтерактивний компонент приймає фокус, коли відкривається діалогове вікно.

\n' + + '\n' + + '

Переходьте між інтерактивними компонентами діалогового вікна, натискаючи клавіші Tab або Shift+Tab.

\n' + + '\n' + + '

Навігація по діалоговим вікнам з вкладками

\n' + + '\n' + + '

У діалогових вікнах із вкладками перша кнопка в меню вкладки приймає фокус, коли відкривається діалогове вікно.

\n' + + '\n' + + '

Переходьте між інтерактивними компонентами цієї вкладки діалогового вікна, натискаючи клавіші Tab або\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Щоб перейти на іншу вкладку діалогового вікна, перемістіть фокус на меню вкладки, а потім натисніть відповідну клавішу зі стрілкою,\n' + + ' щоб циклічно переходити по доступним вкладкам.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/vi.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/vi.js new file mode 100644 index 000000000..d8eda11bc --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/vi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi', +'

Bắt đầu điều hướng bàn phím

\n' + + '\n' + + '
\n' + + '
Tập trung vào thanh menu
\n' + + '
Windows hoặc Linux: Alt+F9
\n' + + '
macOS: ⌥F9
\n' + + '
Tập trung vào thanh công cụ
\n' + + '
Windows hoặc Linux: Alt+F10
\n' + + '
macOS: ⌥F10
\n' + + '
Tập trung vào chân trang
\n' + + '
Windows hoặc Linux: Alt+F11
\n' + + '
macOS: ⌥F11
\n' + + '
Tập trung vào thông báo
\n' + + '
Windows hoặc Linux: Alt+F12
\n' + + '
macOS: ⌥F12
\n' + + '
Tập trung vào thanh công cụ ngữ cảnh
\n' + + '
Windows, Linux hoặc macOS: Ctrl+F9
\n' + + '
\n' + + '\n' + + '

Điều hướng sẽ bắt đầu từ mục UI đầu tiên. Mục này sẽ được tô sáng hoặc có gạch dưới (nếu là mục đầu tiên trong\n' + + ' đường dẫn phần tử Chân trang).

\n' + + '\n' + + '

Di chuyển qua lại giữa các phần UI

\n' + + '\n' + + '

Để di chuyển từ một phần UI sang phần tiếp theo, ấn Tab.

\n' + + '\n' + + '

Để di chuyển từ một phần UI về phần trước đó, ấn Shift+Tab.

\n' + + '\n' + + '

Thứ tự Tab của các phần UI này như sau:

\n' + + '\n' + + '
    \n' + + '
  1. Thanh menu
  2. \n' + + '
  3. Từng nhóm thanh công cụ
  4. \n' + + '
  5. Thanh bên
  6. \n' + + '
  7. Đường dẫn phần tử trong chân trang
  8. \n' + + '
  9. Nút chuyển đổi đếm chữ ở chân trang
  10. \n' + + '
  11. Liên kết thương hiệu ở chân trang
  12. \n' + + '
  13. Núm điều tác chỉnh kích cỡ trình soạn thảo ở chân trang
  14. \n' + + '
\n' + + '\n' + + '

Nếu người dùng không thấy một phần UI, thì có nghĩa phần đó bị bỏ qua.

\n' + + '\n' + + '

Nếu ở chân trang có tính năng tập trung điều hướng bàn phím, mà không có thanh bên nào hiện hữu, thao tác ấn Shift+Tab\n' + + ' sẽ chuyển hướng tập trung vào nhóm thanh công cụ đầu tiên, không phải cuối cùng.

\n' + + '\n' + + '

Di chuyển qua lại trong các phần UI

\n' + + '\n' + + '

Để di chuyển từ một phần tử UI sang phần tiếp theo, ấn phím Mũi tên tương ứng cho phù hợp.

\n' + + '\n' + + '

Các phím mũi tên TráiPhải

\n' + + '\n' + + '
    \n' + + '
  • di chuyển giữa các menu trong thanh menu.
  • \n' + + '
  • mở menu phụ trong một menu.
  • \n' + + '
  • di chuyển giữa các nút trong nhóm thanh công cụ.
  • \n' + + '
  • di chuyển giữa các mục trong đường dẫn phần tử của chân trang.
  • \n' + + '
\n' + + '\n' + + '

Các phím mũi tên Hướng xuốngHướng lên

\n' + + '\n' + + '
    \n' + + '
  • di chuyển giữa các mục menu trong menu.
  • \n' + + '
  • di chuyển giữa các mục trong menu thanh công cụ dạng bật lên.
  • \n' + + '
\n' + + '\n' + + '

Các phím mũi tên xoay vòng trong một phần UI tập trung.

\n' + + '\n' + + '

Để đóng một menu mở, một menu phụ đang mở, hoặc một menu dạng bật lên đang mở, hãy ấn phím Esc.

\n' + + '\n' + + '

Nếu trọng tâm hiện tại là ở phần “đầu” của một phần UI cụ thể, thao tác ấn phím Esc cũng sẽ thoát\n' + + ' toàn bộ phần điều hướng bàn phím.

\n' + + '\n' + + '

Thực hiện chức năng của một mục menu hoặc nút thanh công cụ

\n' + + '\n' + + '

Khi mục menu hoặc nút thanh công cụ muốn dùng được tô sáng, hãy ấn Return, Enter,\n' + + ' hoặc Phím cách để thực hiện chức năng mục đó.

\n' + + '\n' + + '

Điều hướng giữa các hộp thoại không có nhiều tab

\n' + + '\n' + + '

Trong các hộp thoại không có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào thành phần tương tác đầu tiên.

\n' + + '\n' + + '

Di chuyển giữa các thành phần hộp thoại tương tác bằng cách ấn Tab hoặc Shift+Tab.

\n' + + '\n' + + '

Điều hướng giữa các hộp thoại có nhiều tab

\n' + + '\n' + + '

Trong các hộp thoại có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào nút đầu tiên trong menu tab.

\n' + + '\n' + + '

Di chuyển giữa các thành phần tương tác của tab hộp thoại này bằng cách ấn Tab hoặc\n' + + ' Shift+Tab.

\n' + + '\n' + + '

Chuyển sang một tab hộp thoại khác bằng cách chuyển trọng tâm vào menu tab, rồi ấn phím Mũi tên phù hợp\n' + + ' để xoay vòng các tab hiện có.

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js new file mode 100644 index 000000000..f7e73d1fb --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js @@ -0,0 +1,87 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN', +'

开始键盘导航

\n' + + '\n' + + '
\n' + + '
使菜单栏处于焦点
\n' + + '
Windows 或 Linux:Alt+F9
\n' + + '
macOS:⌥F9
\n' + + '
使工具栏处于焦点
\n' + + '
Windows 或 Linux:Alt+F10
\n' + + '
macOS:⌥F10
\n' + + '
使页脚处于焦点
\n' + + '
Windows 或 Linux:Alt+F11
\n' + + '
macOS:⌥F11
\n' + + '
使通知处于焦点
\n' + + '
Windows 或 Linux:Alt+F12
\n' + + '
macOS:⌥F12
\n' + + '
使上下文工具栏处于焦点
\n' + + '
Windows、Linux 或 macOS:Ctrl+F9
\n' + + '
\n' + + '\n' + + '

导航将在第一个 UI 项上开始,其中突出显示该项,或者对于页脚元素路径中的第一项,将为其添加下划线。

\n' + + '\n' + + '

在 UI 部分之间导航

\n' + + '\n' + + '

要从一个 UI 部分移至下一个,请按 Tab

\n' + + '\n' + + '

要从一个 UI 部分移至上一个,请按 Shift+Tab

\n' + + '\n' + + '

这些 UI 部分的 Tab 顺序为:

\n' + + '\n' + + '
    \n' + + '
  1. 菜单栏
  2. \n' + + '
  3. 每个工具栏组
  4. \n' + + '
  5. 边栏
  6. \n' + + '
  7. 页脚中的元素路径
  8. \n' + + '
  9. 页脚中的字数切换按钮
  10. \n' + + '
  11. 页脚中的品牌链接
  12. \n' + + '
  13. 页脚中的编辑器调整大小图柄
  14. \n' + + '
\n' + + '\n' + + '

如果不存在某个 UI 部分,则跳过它。

\n' + + '\n' + + '

如果键盘导航焦点在页脚,并且没有可见的边栏,则按 Shift+Tab 将焦点移至第一个工具栏组而非最后一个。

\n' + + '\n' + + '

在 UI 部分内导航

\n' + + '\n' + + '

要从一个 UI 元素移至下一个,请按相应的箭头键。

\n' + + '\n' + + '

箭头键

\n' + + '\n' + + '
    \n' + + '
  • 在菜单栏中的菜单之间移动。
  • \n' + + '
  • 打开菜单中的子菜单。
  • \n' + + '
  • 在工具栏组中的按钮之间移动。
  • \n' + + '
  • 在页脚的元素路径中的各项之间移动。
  • \n' + + '
\n' + + '\n' + + '

箭头键

\n' + + '\n' + + '
    \n' + + '
  • 在菜单中的菜单项之间移动。
  • \n' + + '
  • 在工具栏弹出菜单中的各项之间移动。
  • \n' + + '
\n' + + '\n' + + '

箭头键在具有焦点的 UI 部分内循环。

\n' + + '\n' + + '

要关闭打开的菜单、打开的子菜单或打开的弹出菜单,请按 Esc 键。

\n' + + '\n' + + '

如果当前的焦点在特定 UI 部分的“顶部”,则按 Esc 键还将完全退出键盘导航。

\n' + + '\n' + + '

执行菜单项或工具栏按钮

\n' + + '\n' + + '

当突出显示所需的菜单项或工具栏按钮时,按 ReturnEnter空格以执行该项。

\n' + + '\n' + + '

在非标签页式对话框中导航

\n' + + '\n' + + '

在非标签页式对话框中,当对话框打开时,第一个交互组件获得焦点。

\n' + + '\n' + + '

通过按 TabShift+Tab,在交互对话框组件之间导航。

\n' + + '\n' + + '

在标签页式对话框中导航

\n' + + '\n' + + '

在标签页式对话框中,当对话框打开时,标签页菜单中的第一个按钮获得焦点。

\n' + + '\n' + + '

通过按 TabShift+Tab,在此对话框的交互组件之间导航。

\n' + + '\n' + + '

通过将焦点移至另一对话框标签页的菜单,然后按相应的箭头键以在可用的标签页间循环,从而切换到该对话框标签页。

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js new file mode 100644 index 000000000..5912770f4 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW', +'

開始鍵盤瀏覽

\n' + + '\n' + + '
\n' + + '
跳至功能表列
\n' + + '
Windows 或 Linux:Alt+F9
\n' + + '
macOS:⌥F9
\n' + + '
跳至工具列
\n' + + '
Windows 或 Linux:Alt+F10
\n' + + '
macOS:⌥F10
\n' + + '
跳至頁尾
\n' + + '
Windows 或 Linux:Alt+F11
\n' + + '
macOS:⌥F11
\n' + + '
跳至通知
\n' + + '
Windows 或 Linux:Alt+F12
\n' + + '
macOS:⌥F12
\n' + + '
跳至關聯式工具列
\n' + + '
Windows、Linux 或 macOS:Ctrl+F9
\n' + + '
\n' + + '\n' + + '

瀏覽會從第一個 UI 項目開始,該項目會反白顯示,但如果是「頁尾」元素路徑的第一項,\n' + + ' 則加底線。

\n' + + '\n' + + '

在 UI 區段之間瀏覽

\n' + + '\n' + + '

從 UI 區段移至下一個,請按 Tab

\n' + + '\n' + + '

從 UI 區段移回上一個,請按 Shift+Tab

\n' + + '\n' + + '

這些 UI 區段的 Tab 順序如下:

\n' + + '\n' + + '
    \n' + + '
  1. 功能表列
  2. \n' + + '
  3. 各個工具列群組
  4. \n' + + '
  5. 側邊欄
  6. \n' + + '
  7. 頁尾中的元素路徑
  8. \n' + + '
  9. 頁尾中字數切換按鈕
  10. \n' + + '
  11. 頁尾中的品牌連結
  12. \n' + + '
  13. 頁尾中編輯器調整大小控點
  14. \n' + + '
\n' + + '\n' + + '

如果 UI 區段未顯示,表示已略過該區段。

\n' + + '\n' + + '

如果鍵盤瀏覽跳至頁尾,但沒有顯示側邊欄,則按下 Shift+Tab\n' + + ' 會跳至第一個工具列群組,而不是最後一個。

\n' + + '\n' + + '

在 UI 區段之內瀏覽

\n' + + '\n' + + '

在兩個 UI 元素之間移動,請按適當的方向鍵。

\n' + + '\n' + + '

向左向右方向鍵

\n' + + '\n' + + '
    \n' + + '
  • 在功能表列中的功能表之間移動。
  • \n' + + '
  • 開啟功能表中的子功能表。
  • \n' + + '
  • 在工具列群組中的按鈕之間移動。
  • \n' + + '
  • 在頁尾的元素路徑中項目之間移動。
  • \n' + + '
\n' + + '\n' + + '

向下向上方向鍵

\n' + + '\n' + + '
    \n' + + '
  • 在功能表中的功能表項目之間移動。
  • \n' + + '
  • 在工具列快顯功能表中的項目之間移動。
  • \n' + + '
\n' + + '\n' + + '

方向鍵會在所跳至 UI 區段之內循環。

\n' + + '\n' + + '

若要關閉已開啟的功能表、已開啟的子功能表,或已開啟的快顯功能表,請按 Esc 鍵。

\n' + + '\n' + + '

如果目前已跳至特定 UI 區段的「頂端」,則按 Esc 鍵也會結束\n' + + ' 整個鍵盤瀏覽。

\n' + + '\n' + + '

執行功能表列項目或工具列按鈕

\n' + + '\n' + + '

當想要的功能表項目或工具列按鈕已反白顯示時,按 ReturnEnter、\n' + + ' 或空白鍵即可執行該項目。

\n' + + '\n' + + '

瀏覽非索引標籤式對話方塊

\n' + + '\n' + + '

在非索引標籤式對話方塊中,開啟對話方塊時會跳至第一個互動元件。

\n' + + '\n' + + '

TabShift+Tab 即可在互動式對話方塊元件之間瀏覽。

\n' + + '\n' + + '

瀏覽索引標籤式對話方塊

\n' + + '\n' + + '

在索引標籤式對話方塊中,開啟對話方塊時會跳至索引標籤式功能表中的第一個按鈕。

\n' + + '\n' + + '

若要在此對話方塊的互動式元件之間瀏覽,請按 Tab 或\n' + + ' Shift+Tab

\n' + + '\n' + + '

先跳至索引標籤式功能表,然後按適當的方向鍵,即可切換至另一個對話方塊索引標籤,\n' + + ' 以循環瀏覽可用的索引標籤。

\n'); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/help/plugin.min.js b/apps/web-antd/public/tinymce/plugins/help/plugin.min.js new file mode 100644 index 000000000..acddac235 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/help/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const n=e=>{const n=(new Date).getTime(),a=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return t++,e+"_"+a+t+String(n)},a=e=>t=>t.options.get(e),r=a("help_tabs"),o=a("forced_plugins"),i=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=a=e,(r=String).prototype.isPrototypeOf(n)||(null===(o=a.constructor)||void 0===o?void 0:o.name)===r.name)?"string":t;var n,a,r,o})(e);const s=e=>undefined===e;const c=e=>"function"==typeof e,l=()=>false;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?m.none():m.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const u=Array.prototype.slice,p=Array.prototype.indexOf,y=(e,t)=>{const n=e.length,a=new Array(n);for(let r=0;r{const n=[];for(let a=0,r=e.length;a{const n=u.call(e,0);return n.sort(t),n},g=Object.keys,k=Object.hasOwnProperty,v=(e,t)=>k.call(e,t);var b=tinymce.util.Tools.resolve("tinymce.Resource"),f=tinymce.util.Tools.resolve("tinymce.util.I18n");const A=(e,t)=>b.load(`tinymce.html-i18n.help-keynav.${t}`,`${e}/js/i18n/keynav/${t}.js`),w=e=>A(e,f.getCode()).catch((()=>A(e,"en")));var C=tinymce.util.Tools.resolve("tinymce.Env");const S=e=>{const t=C.os.isMacOS()||C.os.isiOS(),n=t?{alt:"⌥",ctrl:"⌃",shift:"⇧",meta:"⌘",access:"⌃⌥"}:{meta:"Ctrl ",access:"Shift + Alt "},a=e.split("+"),r=y(a,(e=>{const t=e.toLowerCase().trim();return v(n,t)?n[t]:e}));return t?r.join("").replace(/\s/,""):r.join("+")},M=[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Heading 1"},{shortcuts:["Access + 2"],action:"Heading 2"},{shortcuts:["Access + 3"],action:"Heading 3"},{shortcuts:["Access + 4"],action:"Heading 4"},{shortcuts:["Access + 5"],action:"Heading 5"},{shortcuts:["Access + 6"],action:"Heading 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Alt + F12"],action:"Focus to notification"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}],_=()=>({name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:y(M,(e=>{const t=y(e.shortcuts,S).join(" or ");return[e.action,t]}))}]}),x=y([{key:"accordion",name:"Accordion"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"image",name:"Image"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"advlist",name:"List Styles"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"pagebreak",name:"Page Break"},{key:"preview",name:"Preview"},{key:"quickbars",name:"Quick Toolbars"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"table",name:"Table"},{key:"textcolor",name:"Text Color"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"a11ychecker",name:"Accessibility Checker",type:"premium"},{key:"typography",name:"Advanced Typography",type:"premium",slug:"advanced-typography"},{key:"ai",name:"AI Assistant",type:"premium"},{key:"casechange",name:"Case Change",type:"premium"},{key:"checklist",name:"Checklist",type:"premium"},{key:"advcode",name:"Enhanced Code Editor",type:"premium"},{key:"mediaembed",name:"Enhanced Media Embed",type:"premium",slug:"introduction-to-mediaembed"},{key:"advtable",name:"Enhanced Tables",type:"premium"},{key:"exportpdf",name:"Export to PDF",type:"premium"},{key:"exportword",name:"Export to Word",type:"premium"},{key:"footnotes",name:"Footnotes",type:"premium"},{key:"formatpainter",name:"Format Painter",type:"premium"},{key:"editimage",name:"Image Editing",type:"premium"},{key:"uploadcare",name:"Image Optimizer Powered by Uploadcare",type:"premium"},{key:"importword",name:"Import from Word",type:"premium"},{key:"inlinecss",name:"Inline CSS",type:"premium",slug:"inline-css"},{key:"linkchecker",name:"Link Checker",type:"premium"},{key:"math",name:"Math",type:"premium"},{key:"markdown",name:"Markdown",type:"premium"},{key:"mentions",name:"Mentions",type:"premium"},{key:"mergetags",name:"Merge Tags",type:"premium"},{key:"pageembed",name:"Page Embed",type:"premium"},{key:"permanentpen",name:"Permanent Pen",type:"premium"},{key:"powerpaste",name:"PowerPaste",type:"premium",slug:"introduction-to-powerpaste"},{key:"revisionhistory",name:"Revision History",type:"premium"},{key:"tinymcespellchecker",name:"Spell Checker",type:"premium",slug:"introduction-to-tiny-spellchecker"},{key:"autocorrect",name:"Spelling Autocorrect",type:"premium"},{key:"tableofcontents",name:"Table of Contents",type:"premium"},{key:"advtemplate",name:"Templates",type:"premium",slug:"advanced-templates"},{key:"tinycomments",name:"Tiny Comments",type:"premium",slug:"introduction-to-tiny-comments"},{key:"tinydrive",name:"Tiny Drive",type:"premium",slug:"tinydrive-introduction"}],(e=>({...e,type:e.type||"opensource",slug:e.slug||e.key}))),T=e=>{const t=e=>`
${e.name}`,n=(e,n)=>{return(a=x,r=e=>e.key===n,((e,t,n)=>{for(let a=0,r=e.length;a((e,n)=>{const a=e.plugins[n].getMetadata;if(c(a)){const e=a();return{name:e.name,html:t(e)}}return{name:n,html:n}})(e,n)),(e=>{const n="premium"===e.type?`${e.name}*`:e.name;return{name:n,html:t({name:n,url:`https://www.tiny.cloud/docs/tinymce/7/${e.slug}/`})}}));var a,r},a=e=>{const t=(e=>{const t=g(e.plugins),n=o(e),a=s(n)?["onboarding"]:n.concat(["onboarding"]);return h(t,(e=>!(((e,t)=>p.call(e,t))(a,e)>-1)))})(e),a=d(y(t,(t=>n(e,t))),((e,t)=>e.name.localeCompare(t.name))),r=y(a,(e=>"
  • "+e.html+"
  • ")),i=r.length,c=r.join("");return"

    "+f.translate(["Plugins installed ({0}):",i])+"

      "+c+"
    "},r={type:"htmlpanel",presets:"document",html:[(e=>null==e?"":"
    "+a(e)+"
    ")(e),(()=>{const e=h(x,(({type:e})=>"premium"===e)),t=d(y(e,(e=>e.name)),((e,t)=>e.localeCompare(t))),n=y(t,(e=>`
  • ${e}
  • `)).join("");return"

    "+f.translate("Premium plugins:")+"

    "})()].join("")};return{name:"plugins",title:"Plugins",items:[r]}};var O=tinymce.util.Tools.resolve("tinymce.EditorManager");const P=(e,t,a)=>()=>{(async(e,t,a)=>{const o=_(),s=await(async e=>({name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:await w(e)}]}))(a),c=T(e),l=(()=>{var e,t;const n='TinyMCE '+(e=O.majorVersion,t=O.minorVersion,(0===e.indexOf("@")?"X.X.X":e+"."+t)+"");return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+f.translate(["You are using {0}",n])+"

    ",presets:"document"}]}})(),u={[o.name]:o,[s.name]:s,[c.name]:c,[l.name]:l,...t.get()};return m.from(r(e)).fold((()=>(e=>{const t=g(e),n=t.indexOf("versions");return-1!==n&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t}})(u)),(e=>((e,t)=>{const a={},r=y(e,(e=>{var r;if(i(e))return v(t,e)&&(a[e]=t[e]),e;{const t=null!==(r=e.name)&&void 0!==r?r:n("tab-name");return a[t]=e,t}}));return{tabs:a,names:r}})(e,u)))})(e,t,a).then((({tabs:t,names:n})=>{const a={type:"tabpanel",tabs:(e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t{return v(n=t,a=e)?m.from(n[a]):m.none();var n,a})))};e.windowManager.open({title:"Help",size:"medium",body:a,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})}))};e.add("help",((e,t)=>{const a=(()=>{let e={};return{get:()=>e,set:t=>{e=t}}})(),r=(e=>({addTab:t=>{var a;const r=null!==(a=t.name)&&void 0!==a?a:n("tab-name"),o=e.get();o[r]=t,e.set(o)}}))(a);(e=>{(0,e.options.register)("help_tabs",{processor:"array"})})(e);const o=P(e,a,t);return((e,t)=>{e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:t,context:"any"}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:t,context:"any"})})(e,o),((e,t)=>{e.addCommand("mceHelp",t)})(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),((e,t)=>{e.on("init",(()=>{w(t)}))})(e,t),r}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/image/plugin.min.js b/apps/web-antd/public/tinymce/plugins/image/plugin.min.js new file mode 100644 index 000000000..948015897 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/image/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=Object.getPrototypeOf,a=(e,t,a)=>{var i;return!!a(e,t.prototype)||(null===(i=e.constructor)||void 0===i?void 0:i.name)===t.name},i=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&a(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":t})(t)===e,s=e=>t=>typeof t===e,r=i("string"),o=i("object"),n=e=>((e,i)=>o(e)&&a(e,i,((e,a)=>t(e)===a)))(e,Object),l=i("array"),c=e=>null===e;const m=s("boolean"),d=e=>!(e=>null==e)(e),g=s("function"),u=s("number"),p=()=>{};class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const b=Object.keys,v=Object.hasOwnProperty,y=(e,t)=>v.call(e,t),f=Array.prototype.push,w=e=>{const t=[];for(let a=0,i=e.length;a{((e,t,a)=>{if(!(r(a)||m(a)||u(a)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",a,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,a+"")})(e.dom,t,a)},D=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},_=D;var C=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),I=tinymce.util.Tools.resolve("tinymce.util.URI");const U=e=>e.length>0,S=e=>t=>t.options.get(e),x=S("image_dimensions"),N=S("image_advtab"),T=S("image_uploadtab"),E=S("image_prepend_url"),L=S("image_class_list"),O=S("image_description"),j=S("image_title"),M=S("image_caption"),R=S("image_list"),k=S("a11y_advanced_options"),z=S("automatic_uploads"),B=(e,t)=>Math.max(parseInt(e,10),parseInt(t,10)),P=e=>(e&&(e=e.replace(/px$/,"")),e),F=e=>(e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e),H=e=>"IMG"===e.nodeName&&(e.hasAttribute("data-mce-object")||e.hasAttribute("data-mce-placeholder")),G=(e,t)=>{const a=e.options.get;return I.isDomSafe(t,"img",{allow_html_data_urls:a("allow_html_data_urls"),allow_script_urls:a("allow_script_urls"),allow_svg_data_urls:a("allow_svg_data_urls")})},W=C.DOM,$=e=>e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?P(e.style.marginLeft):"",V=e=>e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?P(e.style.marginTop):"",K=e=>e.style.borderWidth?P(e.style.borderWidth):"",Z=(e,t)=>{var a;return e.hasAttribute(t)&&null!==(a=e.getAttribute(t))&&void 0!==a?a:""},q=e=>null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName,J=(e,t,a)=>{""===a||null===a?e.removeAttribute(t):e.setAttribute(t,a)},Q=(e,t)=>{const a=e.getAttribute("style"),i=t(null!==a?a:"");i.length>0?(e.setAttribute("style",i),e.setAttribute("data-mce-style",i)):e.removeAttribute("style")},X=(e,t)=>(e,a,i)=>{const s=e.style;s[a]?(s[a]=F(i),Q(e,t)):J(e,a,i)},Y=(e,t)=>e.style[t]?P(e.style[t]):Z(e,t),ee=(e,t)=>{const a=F(t);e.style.marginLeft=a,e.style.marginRight=a},te=(e,t)=>{const a=F(t);e.style.marginTop=a,e.style.marginBottom=a},ae=(e,t)=>{const a=F(t);e.style.borderWidth=a},ie=(e,t)=>{e.style.borderStyle=t},se=e=>{var t;return null!==(t=e.style.borderStyle)&&void 0!==t?t:""},re=e=>d(e)&&"FIGURE"===e.nodeName,oe=e=>0===W.getAttrib(e,"alt").length&&"presentation"===W.getAttrib(e,"role"),ne=e=>oe(e)?"":Z(e,"alt"),le=(e,t)=>{var a;const i=document.createElement("img");return J(i,"style",t.style),($(i)||""!==t.hspace)&&ee(i,t.hspace),(V(i)||""!==t.vspace)&&te(i,t.vspace),(K(i)||""!==t.border)&&ae(i,t.border),(se(i)||""!==t.borderStyle)&&ie(i,t.borderStyle),e(null!==(a=i.getAttribute("style"))&&void 0!==a?a:"")},ce=(e,t)=>({src:Z(t,"src"),alt:ne(t),title:Z(t,"title"),width:Y(t,"width"),height:Y(t,"height"),class:Z(t,"class"),style:e(Z(t,"style")),caption:q(t),hspace:$(t),vspace:V(t),border:K(t),borderStyle:se(t),isDecorative:oe(t)}),me=(e,t,a,i,s)=>{a[i]!==t[i]&&s(e,i,String(a[i]))},de=(e,t,a)=>{if(a){W.setAttrib(e,"role","presentation");const t=_(e);A(t,"alt","")}else{if(c(t)){_(e).dom.removeAttribute("alt")}else{const a=_(e);A(a,"alt",t)}"presentation"===W.getAttrib(e,"role")&&W.setAttrib(e,"role","")}},ge=(e,t)=>(a,i,s)=>{e(a,s),Q(a,t)},ue=(e,t,a)=>{const i=ce(e,a);me(a,i,t,"caption",((e,t,a)=>(e=>{q(e)?(e=>{const t=e.parentNode;d(t)&&(W.insertAfter(e,t),W.remove(t))})(e):(e=>{const t=W.create("figure",{class:"image"});W.insertAfter(t,e),t.appendChild(e),t.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),t.contentEditable="false"})(e)})(e))),me(a,i,t,"src",J),me(a,i,t,"title",J),me(a,i,t,"width",X(0,e)),me(a,i,t,"height",X(0,e)),me(a,i,t,"class",J),me(a,i,t,"style",ge(((e,t)=>J(e,"style",t)),e)),me(a,i,t,"hspace",ge(ee,e)),me(a,i,t,"vspace",ge(te,e)),me(a,i,t,"border",ge(ae,e)),me(a,i,t,"borderStyle",ge(ie,e)),((e,t,a)=>{a.alt===t.alt&&a.isDecorative===t.isDecorative||de(e,a.alt,a.isDecorative)})(a,i,t)},pe=(e,t)=>{const a=(e=>{if(e.margin){const t=String(e.margin).split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e})(e.dom.styles.parse(t)),i=e.dom.styles.parse(e.dom.styles.serialize(a));return e.dom.styles.serialize(i)},he=e=>{const t=e.selection.getNode(),a=e.dom.getParent(t,"figure.image");return a?e.dom.select("img",a)[0]:t&&("IMG"!==t.nodeName||H(t))?null:t},be=(e,t)=>{var a;const i=e.dom,s=(t=>{const a={};var i;return((e,t,a,i)=>{((e,t)=>{const a=b(e);for(let i=0,s=a.length;i{(t(e,s)?a:i)(e,s)}))})(t,((t,a)=>!e.schema.isValidChild(a,"figure")),(i=a,(e,t)=>{i[t]=e}),p),a})(e.schema.getTextBlockElements()),r=i.getParent(t.parentNode,(e=>{return t=s,a=e.nodeName,y(t,a)&&void 0!==t[a]&&null!==t[a];var t,a}),e.getBody());return r&&null!==(a=i.split(r,t))&&void 0!==a?a:t},ve=(e,t)=>{const a=((t,a)=>{const i=document.createElement("img");if(ue((t=>pe(e,t)),{...a,caption:!1},i),de(i,a.alt,a.isDecorative),a.caption){const e=W.create("figure",{class:"image"});return e.appendChild(i),e.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),e.contentEditable="false",e}return i})(0,t);e.dom.setAttrib(a,"data-mce-id","__mcenew"),e.focus(),e.selection.setContent(a.outerHTML);const i=e.dom.select('*[data-mce-id="__mcenew"]')[0];if(e.dom.setAttrib(i,"data-mce-id",null),re(i)){const t=be(e,i);e.selection.select(t)}else e.selection.select(i)},ye=(e,t)=>{const a=he(e);if(a){const i={...ce((t=>pe(e,t)),a),...t},s=((e,t)=>{const a=t.src;return{...t,src:G(e,a)?a:""}})(e,i);i.src?((e,t)=>{const a=he(e);if(a)if(ue((t=>pe(e,t)),t,a),((e,t)=>{e.dom.setAttrib(t,"src",t.getAttribute("src"))})(e,a),re(a.parentNode)){e.dom.setStyle(a,"float","");const t=a.parentNode;be(e,t),e.selection.select(a.parentNode)}else e.selection.select(a),((e,t,a)=>{const i=()=>{a.onload=a.onerror=null,e.selection&&(e.selection.select(a),e.nodeChanged())};a.onload=()=>{t.width||t.height||!x(e)||e.dom.setAttribs(a,{width:String(a.clientWidth),height:String(a.clientHeight)}),i()},a.onerror=i})(e,t,a)})(e,s):((e,t)=>{if(t){const a=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(a),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}})(e,a)}else t.src&&ve(e,{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1,...t})},fe=(we=(e,t)=>n(e)&&n(t)?fe(e,t):t,(...e)=>{if(0===e.length)throw new Error("Can't merge zero objects");const t={};for(let a=0;ar(e.value)?e.value:"",Ce=(e,t)=>{const a=[];return De.each(e,(e=>{const i=(e=>r(e.text)?e.text:r(e.title)?e.title:"")(e);if(void 0!==e.menu){const s=Ce(e.menu,t);a.push({text:i,items:s})}else{const s=t(e);a.push({text:i,value:s})}})),a},Ie=(e=_e)=>t=>t?h.from(t).map((t=>Ce(t,e))):h.none(),Ue=(e,t)=>(e=>{for(let i=0;iy(e,"items"))(a=e[i])?Ue(a.items,t):a.value===t?h.some(a):h.none();if(s.isSome())return s}var a;return h.none()})(e),Se=Ie,xe=(e,t)=>e.bind((e=>Ue(e,t))),Ne=e=>{const t=Se((t=>e.convertURL(t.value||t.url||"","src"))),a=new Promise((a=>{((e,t)=>{const a=R(e);r(a)?fetch(a).then((e=>{e.ok&&e.json().then(t)})):g(a)?a(t):t(a)})(e,(e=>{a(t(e).map((e=>w([[{text:"None",value:""}],e]))))}))})),i=(A=L(e),Ie(_e)(A)),s=N(e),o=T(e),n=(e=>U(e.options.get("images_upload_url")))(e),l=(e=>d(e.options.get("images_upload_handler")))(e),c=(e=>{const t=he(e);return t?ce((t=>pe(e,t)),t):{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1}})(e),m=O(e),u=j(e),p=x(e),b=M(e),v=k(e),y=z(e),f=h.some(E(e)).filter((e=>r(e)&&e.length>0));var A;return a.then((e=>({image:c,imageList:e,classList:i,hasAdvTab:s,hasUploadTab:o,hasUploadUrl:n,hasUploadHandler:l,hasDescription:m,hasImageTitle:u,hasDimensions:p,hasImageCaption:b,prependURL:f,hasAccessibilityOptions:v,automaticUploads:y})))},Te=e=>{const t=e.imageList.map((e=>({name:"images",type:"listbox",label:"Image list",items:e}))),a={name:"alt",type:"input",label:"Alternative description",enabled:!(e.hasAccessibilityOptions&&e.image.isDecorative)},i=e.classList.map((e=>({name:"classes",type:"listbox",label:"Class",items:e})));return w([[{name:"src",type:"urlinput",filetype:"image",label:"Source",picker_text:"Browse files"}],t.toArray(),e.hasAccessibilityOptions&&e.hasDescription?[{type:"label",label:"Accessibility",items:[{name:"isDecorative",type:"checkbox",label:"Image is decorative"}]}]:[],e.hasDescription?[a]:[],e.hasImageTitle?[{name:"title",type:"input",label:"Image title"}]:[],e.hasDimensions?[{name:"dimensions",type:"sizeinput"}]:[],[{...(s=e.classList.isSome()&&e.hasImageCaption,s?{type:"grid",columns:2}:{type:"panel"}),items:w([i.toArray(),e.hasImageCaption?[{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[]])}]]);var s},Ee=e=>({title:"General",name:"general",items:Te(e)}),Le=Te,Oe=e=>({src:{value:e.src,meta:{}},images:e.src,alt:e.alt,title:e.title,dimensions:{width:e.width,height:e.height},classes:e.class,caption:e.caption,style:e.style,vspace:e.vspace,border:e.border,hspace:e.hspace,borderstyle:e.borderStyle,fileinput:[],isDecorative:e.isDecorative}),je=(e,t)=>({src:e.src.value,alt:null!==e.alt&&0!==e.alt.length||!t?e.alt:null,title:e.title,width:e.dimensions.width,height:e.dimensions.height,class:e.classes,style:e.style,caption:e.caption,hspace:e.hspace,vspace:e.vspace,border:e.border,borderStyle:e.borderstyle,isDecorative:e.isDecorative}),Me=(e,t,a,i)=>{((e,t)=>{const a=t.getData();((e,t)=>/^(?:[a-zA-Z]+:)?\/\//.test(t)?h.none():e.prependURL.bind((e=>t.substring(0,e.length)!==e?h.some(e+t):h.none())))(e,a.src.value).each((e=>{t.setData({src:{value:e,meta:a.src.meta}})}))})(t,i),((e,t)=>{const a=t.getData(),i=a.src.meta;if(void 0!==i){const s=fe({},a);((e,t,a)=>{e.hasDescription&&r(a.alt)&&(t.alt=a.alt),e.hasAccessibilityOptions&&(t.isDecorative=a.isDecorative||t.isDecorative||!1),e.hasImageTitle&&r(a.title)&&(t.title=a.title),e.hasDimensions&&(r(a.width)&&(t.dimensions.width=a.width),r(a.height)&&(t.dimensions.height=a.height)),r(a.class)&&xe(e.classList,a.class).each((e=>{t.classes=e.value})),e.hasImageCaption&&m(a.caption)&&(t.caption=a.caption),e.hasAdvTab&&(r(a.style)&&(t.style=a.style),r(a.vspace)&&(t.vspace=a.vspace),r(a.border)&&(t.border=a.border),r(a.hspace)&&(t.hspace=a.hspace),r(a.borderstyle)&&(t.borderstyle=a.borderstyle))})(e,s,i),t.setData(s)}})(t,i),((e,t,a,i)=>{const s=i.getData(),r=s.src.value,o=s.src.meta||{};o.width||o.height||!t.hasDimensions||(U(r)?e.imageSize(r).then((e=>{a.open&&i.setData({dimensions:e})})).catch((e=>console.error(e))):i.setData({dimensions:{width:"",height:""}}))})(e,t,a,i),((e,t,a)=>{const i=a.getData(),s=xe(e.imageList,i.src.value);t.prevImage=s,a.setData({images:s.map((e=>e.value)).getOr("")})})(t,a,i)},Re=(e,t,a,i)=>{const s=i.getData();var r;i.block("Uploading image"),(r=s.fileinput,(e=>0{i.unblock()}),(s=>{const r=URL.createObjectURL(s),o=()=>{i.unblock(),URL.revokeObjectURL(r)},n=s=>{i.setData({src:{value:s,meta:{}}}),i.showTab("general"),Me(e,t,a,i),i.focus("src")};var l;(l=s,new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{var e;t(null===(e=a.error)||void 0===e?void 0:e.message)},a.readAsDataURL(l)}))).then((a=>{const l=e.createBlobCache(s,r,a);t.automaticUploads?e.uploadImage(l).then((e=>{n(e.url),o()})).catch((t=>{o(),e.alertErr(t,(()=>{i.focus("fileinput")}))})):(e.addToBlobCache(l),n(l.blobUri()),i.unblock())}))}))},ke=(e,t,a)=>(i,s)=>{"src"===s.name?Me(e,t,a,i):"images"===s.name?((e,t,a,i)=>{const s=i.getData(),r=xe(t.imageList,s.images);r.each((e=>{const t=""===s.alt||a.prevImage.map((e=>e.text===s.alt)).getOr(!1);t?""===e.value?i.setData({src:e,alt:a.prevAlt}):i.setData({src:e,alt:e.text}):i.setData({src:e})})),a.prevImage=r,Me(e,t,a,i)})(e,t,a,i):"alt"===s.name?a.prevAlt=i.getData().alt:"fileinput"===s.name?Re(e,t,a,i):"isDecorative"===s.name&&i.setEnabled("alt",!i.getData().isDecorative)},ze=e=>()=>{e.open=!1},Be=e=>e.hasAdvTab||e.hasUploadUrl||e.hasUploadHandler?{type:"tabpanel",tabs:w([[Ee(e)],e.hasAdvTab?[{title:"Advanced",name:"advanced",items:[{type:"grid",columns:2,items:[{type:"input",label:"Vertical space",name:"vspace",inputMode:"numeric"},{type:"input",label:"Horizontal space",name:"hspace",inputMode:"numeric"},{type:"input",label:"Border width",name:"border",inputMode:"numeric"},{type:"listbox",name:"borderstyle",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]}]:[],e.hasUploadTab&&(e.hasUploadUrl||e.hasUploadHandler)?[{title:"Upload",name:"upload",items:[{type:"dropzone",name:"fileinput"}]}]:[]])}:{type:"panel",items:Le(e)},Pe=(e,t,a)=>i=>{const s=fe(Oe(t.image),i.getData()),r={...s,style:le(a.normalizeCss,je(s,!1))};e.execCommand("mceUpdateImage",!1,je(r,t.hasAccessibilityOptions)),e.editorUpload.uploadImagesAuto(),i.close()},Fe=e=>t=>G(e,t)?(e=>new Promise((t=>{const a=document.createElement("img"),i=e=>{a.parentNode&&a.parentNode.removeChild(a),t(e)};a.addEventListener("load",(()=>{const e={width:B(a.width,a.clientWidth),height:B(a.height,a.clientHeight)};i(Promise.resolve(e))})),a.addEventListener("error",(()=>{i(Promise.reject(`Failed to get image dimensions for: ${e}`))}));const s=a.style;s.visibility="hidden",s.position="fixed",s.bottom=s.left="0px",s.width=s.height="auto",document.body.appendChild(a),a.src=e})))(e.documentBaseURI.toAbsolute(t)).then((e=>({width:String(e.width),height:String(e.height)}))):Promise.resolve({width:"",height:""}),He=e=>(t,a,i)=>{var s;return e.editorUpload.blobCache.create({blob:t,blobUri:a,name:null===(s=t.name)||void 0===s?void 0:s.replace(/\.[^\.]+$/,""),filename:t.name,base64:i.split(",")[1]})},Ge=e=>t=>{e.editorUpload.blobCache.add(t)},We=e=>(t,a)=>{e.windowManager.alert(t,a)},$e=e=>t=>pe(e,t),Ve=e=>t=>e.dom.parseStyle(t),Ke=e=>(t,a)=>e.dom.serializeStyle(t,a),Ze=e=>t=>Ae(e).upload([t],!1).then((e=>{var t;return 0===e.length?Promise.reject("Failed to upload image"):!1===e[0].status?Promise.reject(null===(t=e[0].error)||void 0===t?void 0:t.message):e[0]})),qe=e=>{const t={imageSize:Fe(e),addToBlobCache:Ge(e),createBlobCache:He(e),alertErr:We(e),normalizeCss:$e(e),parseStyle:Ve(e),serializeStyle:Ke(e),uploadImage:Ze(e)};return{open:()=>{Ne(e).then((a=>{const i=(e=>({prevImage:xe(e.imageList,e.image.src),prevAlt:e.image.alt,open:!0}))(a);return{title:"Insert/Edit Image",size:"normal",body:Be(a),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:Oe(a.image),onSubmit:Pe(e,a,t),onChange:ke(t,a,i),onClose:ze(i)}})).then(e.windowManager.open)}}},Je=e=>{const t=e.attr("class");return d(t)&&/\bimage\b/.test(t)},Qe=e=>t=>{let a=t.length;const i=t=>{t.attr("contenteditable",e?"true":null)};for(;a--;){const s=t[a];Je(s)&&(s.attr("contenteditable",e?"false":null),De.each(s.getAll("figcaption"),i))}},Xe=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("image",(e=>{(e=>{const t=e.options.register;t("image_dimensions",{processor:"boolean",default:!0}),t("image_advtab",{processor:"boolean",default:!1}),t("image_uploadtab",{processor:"boolean",default:!0}),t("image_prepend_url",{processor:"string",default:""}),t("image_class_list",{processor:"object[]"}),t("image_description",{processor:"boolean",default:!0}),t("image_title",{processor:"boolean",default:!1}),t("image_caption",{processor:"boolean",default:!1}),t("image_list",{processor:e=>{const t=!1===e||r(e)||((e,t)=>{if(l(e)){for(let a=0,i=e.length;a{e.on("PreInit",(()=>{e.parser.addNodeFilter("figure",Qe(!0)),e.serializer.addNodeFilter("figure",Qe(!1))}))})(e),(e=>{e.ui.registry.addToggleButton("image",{icon:"image",tooltip:"Insert/edit image",onAction:qe(e).open,onSetup:t=>{t.setActive(d(he(e)));const a=e.selection.selectorChangedWithUnbind("img:not([data-mce-object]):not([data-mce-placeholder]),figure.image",t.setActive).unbind,i=Xe(e)(t);return()=>{a(),i()}}}),e.ui.registry.addMenuItem("image",{icon:"image",text:"Image...",onAction:qe(e).open,onSetup:Xe(e)}),e.ui.registry.addContextMenu("image",{update:t=>e.selection.isEditable()&&(re(t)||"IMG"===t.nodeName&&!H(t))?["image"]:[]})})(e),(e=>{e.addCommand("mceImage",qe(e).open),e.addCommand("mceUpdateImage",((t,a)=>{e.undoManager.transact((()=>ye(e,a)))}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/importcss/plugin.min.js b/apps/web-antd/public/tinymce/plugins/importcss/plugin.min.js new file mode 100644 index 000000000..b1b1a5e54 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/importcss/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(s=r=e,(o=String).prototype.isPrototypeOf(s)||(null===(n=r.constructor)||void 0===n?void 0:n.name)===o.name)?"string":t;var s,r,o,n})(t)===e,s=t("string"),r=t("object"),o=t("array"),n=e=>"function"==typeof e;var c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Tools");const p=e=>t=>t.options.get(e),u=p("importcss_merge_classes"),m=p("importcss_exclusive"),f=p("importcss_selector_converter"),y=p("importcss_selector_filter"),d=p("importcss_groups"),h=p("importcss_append"),g=p("importcss_file_filter"),_=p("skin"),v=p("skin_url"),b=Array.prototype.push,x=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/,T=e=>s(e)?t=>-1!==t.indexOf(e):e instanceof RegExp?t=>e.test(t):e,S=(e,t)=>{let s={};const r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(!r)return;const o=r[1],n=r[2].substr(1).split(".").join(" "),c=a.makeMap("a,img");return r[1]?(s={title:t},e.schema.getTextBlockElements()[o]?s.block=o:e.schema.getBlockElements()[o]||c[o.toLowerCase()]?s.selector=o:s.inline=o):r[2]&&(s={inline:"span",title:t.substr(1),classes:n}),u(e)?s.classes=n:s.attributes={class:n},s},k=(e,t)=>null===t||m(e),M=e=>{e.on("init",(()=>{const t=(()=>{const e=[],t=[],s={};return{addItemToGroup:(e,r)=>{s[e]?s[e].push(r):(t.push(e),s[e]=[r])},addItem:t=>{e.push(t)},toFormats:()=>{return(r=t,n=e=>{const t=s[e];return 0===t.length?[]:[{title:e,items:t}]},(e=>{const t=[];for(let s=0,r=e.length;s{const s=e.length,r=new Array(s);for(let o=0;oa.map(e,(e=>a.extend({},e,{original:e,selectors:{},filter:T(e.filter)}))))(d(e)),u=(t,s)=>{if(((e,t,s,r)=>!(k(e,s)?t in r:t in s.selectors))(e,t,s,r)){((e,t,s,r)=>{k(e,s)?r[t]=!0:s.selectors[t]=!0})(e,t,s,r);const o=((e,t,s,r)=>{let o;const n=f(e);return o=r&&r.selector_converter?r.selector_converter:n||(()=>S(e,s)),o.call(t,s,r)})(e,e.plugins.importcss,t,s);if(o){const t=o.name||c.DOM.uniqueId();return e.formatter.register(t,o),{title:o.title,format:t}}}return null};a.each(((e,t,r)=>{const o=[],n={},c=(t,n)=>{let p,u=t.href;if(u=(e=>{const t=l.cacheSuffix;return s(e)&&(e=e.replace("?"+t,"").replace("&"+t,"")),e})(u),u&&(!r||r(u,n))&&!((e,t)=>{const s=_(e);if(s){const r=v(e),o=r?e.documentBaseURI.toAbsolute(r):i.baseURL+"/skins/ui/"+s,n=i.baseURL+"/skins/content/",c=e.editorManager.suffix;return t===o+"/content"+(e.inline?".inline":"")+`${c}.css`||-1!==t.indexOf(n)}return!1})(e,u)){a.each(t.imports,(e=>{c(e,!0)}));try{p=t.cssRules||t.rules}catch(e){}a.each(p,(e=>{e.styleSheet&&e.styleSheet?c(e.styleSheet,!0):e.selectorText&&a.each(e.selectorText.split(","),(e=>{o.push(a.trim(e))}))}))}};a.each(e.contentCSS,(e=>{n[e]=!0})),r||(r=(e,t)=>t||n[e]);try{a.each(t.styleSheets,(e=>{c(e)}))}catch(e){}return o})(e,e.getDoc(),T(g(e))),(e=>{if(!x.test(e)&&(!n||n(e))){const s=((e,t)=>a.grep(e,(e=>!e.filter||e.filter(t))))(p,e);if(s.length>0)a.each(s,(s=>{const r=u(e,s);r&&t.addItemToGroup(s.title,r)}));else{const s=u(e,null);s&&t.addItem(s)}}}));const m=t.toFormats();e.dispatch("addStyleModifications",{items:m,replace:!h(e)})}))};e.add("importcss",(e=>((e=>{const t=e.options.register,o=e=>s(e)||n(e)||r(e);t("importcss_merge_classes",{processor:"boolean",default:!0}),t("importcss_exclusive",{processor:"boolean",default:!0}),t("importcss_selector_converter",{processor:"function"}),t("importcss_selector_filter",{processor:o}),t("importcss_file_filter",{processor:o}),t("importcss_groups",{processor:"object[]"}),t("importcss_append",{processor:"boolean",default:!1})})(e),M(e),(e=>({convertSelectorToFormat:t=>S(e,t)}))(e))))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/insertdatetime/plugin.min.js b/apps/web-antd/public/tinymce/plugins/insertdatetime/plugin.min.js new file mode 100644 index 000000000..8a053822a --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/insertdatetime/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),a=t("insertdatetime_dateformat"),n=t("insertdatetime_timeformat"),r=t("insertdatetime_formats"),s=t("insertdatetime_element"),i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),c=(e,t)=>{if((e=""+e).length(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",c(a.getMonth()+1,2))).replace("%d",c(a.getDate(),2))).replace("%H",""+c(a.getHours(),2))).replace("%M",""+c(a.getMinutes(),2))).replace("%S",""+c(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(m[a.getMonth()]))).replace("%b",""+e.translate(l[a.getMonth()]))).replace("%A",""+e.translate(o[a.getDay()]))).replace("%a",""+e.translate(i[a.getDay()]))).replace("%%","%"),u=(e,t)=>{if(s(e)&&e.selection.isEditable()){const a=d(e,t);let n;n=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d");const r=e.dom.getParent(e.selection.getStart(),"time");r?((e,t,a,n)=>{const r=e.dom.create("time",{datetime:a},n);e.dom.replace(r,t),e.selection.select(r,!0),e.selection.collapse(!1)})(e,r,n,a):e.insertContent('")}else e.insertContent(d(e,t))};var p=tinymce.util.Tools.resolve("tinymce.util.Tools");const g=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("insertdatetime",(e=>{(e=>{const t=e.options.register;t("insertdatetime_dateformat",{processor:"string",default:e.translate("%Y-%m-%d")}),t("insertdatetime_timeformat",{processor:"string",default:e.translate("%H:%M:%S")}),t("insertdatetime_formats",{processor:"string[]",default:["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"]}),t("insertdatetime_element",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mceInsertDate",((t,n)=>{u(e,null!=n?n:a(e))})),e.addCommand("mceInsertTime",((t,a)=>{u(e,null!=a?a:n(e))}))})(e),(e=>{const t=r(e),a=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})((e=>{const t=r(e);return t.length>0?t[0]:n(e)})(e)),s=t=>e.execCommand("mceInsertDate",!1,t);e.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:e=>e===a.get(),fetch:a=>{a(p.map(t,(t=>({type:"choiceitem",text:d(e,t),value:t}))))},onAction:e=>{s(a.get())},onItemAction:(e,t)=>{a.set(t),s(t)},onSetup:g(e)});const i=e=>()=>{a.set(e),s(e)};e.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:()=>p.map(t,(t=>({type:"menuitem",text:d(e,t),onAction:i(t)}))),onSetup:g(e)})})(e)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/link/plugin.min.js b/apps/web-antd/public/tinymce/plugins/link/plugin.min.js new file mode 100644 index 000000000..d8c40c77d --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/link/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(l=o.constructor)||void 0===l?void 0:l.name)===r.name)?"string":t;var n,o,r,l})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),l=t("array"),s=e=>null===e;const i=n("boolean"),a=e=>!(e=>null==e)(e),c=n("function"),u=(e,t)=>{if(l(e)){for(let n=0,o=e.length;n{},d=(e,t)=>e===t;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return a(e)?m.some(e):m.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const h=Array.prototype.indexOf,p=Array.prototype.push,f=e=>{const t=[];for(let n=0,o=e.length;n{for(let n=0;ne.exists((e=>n(e,t))),b=e=>{const t=[],n=e=>{t.push(e)};for(let t=0;te?m.some(t):m.none(),y=e=>t=>t.options.get(e),_=y("link_assume_external_targets"),w=y("link_context_toolbar"),C=y("link_list"),O=y("link_default_target"),S=y("link_default_protocol"),A=y("link_target_list"),N=y("link_rel_list"),E=y("link_class_list"),R=y("link_title"),T=y("allow_unsafe_link_target"),L=y("link_quicklink"),P=y("link_attributes_postprocess"),M=Object.keys,D=Object.hasOwnProperty,B=(e,t)=>D.call(e,t);var I=tinymce.util.Tools.resolve("tinymce.util.URI"),K=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),j=tinymce.util.Tools.resolve("tinymce.util.Tools");const U=e=>a(e)&&"a"===e.nodeName.toLowerCase(),q=e=>U(e)&&!!$(e),F=(e,t)=>{if(e.collapsed)return[];{const n=e.cloneContents(),o=n.firstChild,r=new K(o,n),l=[];let s=o;do{t(s)&&l.push(s)}while(s=r.next());return l}},V=e=>/^\w+:/i.test(e),$=e=>{var t,n;return null!==(n=null!==(t=e.getAttribute("data-mce-href"))&&void 0!==t?t:e.getAttribute("href"))&&void 0!==n?n:""},z=(e,t)=>{const n=["noopener"],o=e?e.split(/\s+/):[],r=e=>e.filter((e=>-1===j.inArray(n,e))),l=t?(e=>(e=r(e)).length>0?e.concat(n):n)(o):r(o);return l.length>0?(e=>j.trim(e.sort().join(" ")))(l):""},G=(e,t)=>(t=t||W(e.selection.getRng())[0]||e.selection.getNode(),Z(t)?m.from(e.dom.select("a[href]",t)[0]):m.from(e.dom.getParent(t,"a[href]"))),H=(e,t)=>G(e,t).isSome(),J=(e,t)=>t.fold((()=>e.getContent({format:"text"})),(e=>e.innerText||e.textContent||"")).replace(/\uFEFF/g,""),W=e=>F(e,q),Q=e=>j.grep(e,q),X=e=>Q(e).length>0,Y=e=>{const t=e.schema.getTextInlineElements();if(G(e).exists((e=>e.hasAttribute("data-mce-block"))))return!1;const n=e.selection.getRng();return!!n.collapsed||0===F(n,(e=>1===e.nodeType&&!U(e)&&!B(t,e.nodeName.toLowerCase()))).length},Z=e=>a(e)&&"FIGURE"===e.nodeName&&/\bimage\b/i.test(e.className),ee=(e,t,n)=>{const o=e.selection.getNode(),r=G(e,o),l=((e,t)=>{const n={...t};if(0===N(e).length&&!T(e)){const e=z(n.rel,"_blank"===n.target);n.rel=e||null}return m.from(n.target).isNone()&&!1===A(e)&&(n.target=O(e)),n.href=((e,t)=>"http"!==t&&"https"!==t||V(e)?e:t+"://"+e)(n.href,_(e)),n})(e,(e=>{return t=["title","rel","class","target"],n=(t,n)=>(e[n].each((e=>{t[n]=e.length>0?e:null})),t),o={href:e.href},((e,t)=>{for(let n=0,o=e.length;n{o=n(o,e)})),o;var t,n,o})(n)),s=P(e);a(s)&&s(l),e.undoManager.transact((()=>{n.href===t.href&&t.attach(),r.fold((()=>{((e,t,n,o)=>{const r=e.dom;Z(t)?le(r,t,o):n.fold((()=>{e.execCommand("mceInsertLink",!1,o);const t=e.selection.getEnd(),n=r.createRng();n.setStartAfter(t),n.setEndAfter(t),e.selection.setRng(n)}),(t=>{e.insertContent(r.createHTML("a",o,r.encode(t)))}))})(e,o,n.text,l)}),(t=>{e.focus(),((e,t,n,o)=>{n.each((e=>{B(t,"innerText")?t.innerText=e:t.textContent=e})),e.dom.setAttribs(t,o);const r=e.dom.createRng();r.setStartAfter(t),r.setEndAfter(t),e.selection.setRng(r)})(e,t,n.text,l)}))}))},te=e=>{const{class:t,href:n,rel:o,target:r,text:l,title:i}=e;return(e=>{const t={};var n;return((e,t,n,o)=>{((e,t)=>{const n=M(e);for(let o=0,r=n.length;o{(t(e,r)?n:o)(e,r)}))})(e,((e,t)=>!1===s(e)),(n=t,(e,t)=>{n[t]=e}),g),t})({class:t.getOrNull(),href:n,rel:o.getOrNull(),target:r.getOrNull(),text:l.getOrNull(),title:i.getOrNull()})},ne=(e,t,n)=>{const o=((e,t)=>{const n=e.options.get,o={allow_html_data_urls:n("allow_html_data_urls"),allow_script_urls:n("allow_script_urls"),allow_svg_data_urls:n("allow_svg_data_urls")},r=t.href;return{...t,href:I.isDomSafe(r,"a",o)?r:""}})(e,n);e.hasPlugin("rtc",!0)?e.execCommand("createlink",!1,te(o)):ee(e,t,o)},oe=e=>{e.hasPlugin("rtc",!0)?e.execCommand("unlink"):(e=>{e.undoManager.transact((()=>{const t=e.selection.getNode();Z(t)?re(e,t):(e=>{const t=e.dom,n=e.selection,o=n.getBookmark(),r=n.getRng().cloneRange(),l=t.getParent(r.startContainer,"a[href]",e.getBody()),s=t.getParent(r.endContainer,"a[href]",e.getBody());l&&r.setStartBefore(l),s&&r.setEndAfter(s),n.setRng(r),e.execCommand("unlink"),n.moveToBookmark(o)})(e),e.focus()}))})(e)},re=(e,t)=>{var n;const o=e.dom.select("img",t)[0];if(o){const r=e.dom.getParents(o,"a[href]",t)[0];r&&(null===(n=r.parentNode)||void 0===n||n.insertBefore(o,r),e.dom.remove(r))}},le=(e,t,n)=>{var o;const r=e.select("img",t)[0];if(r){const t=e.create("a",n);null===(o=r.parentNode)||void 0===o||o.insertBefore(t,r),t.appendChild(r)}},se=e=>o(e.value)?e.value:"",ie=(e,t)=>{const n=[];return j.each(e,(e=>{const r=(e=>o(e.text)?e.text:o(e.title)?e.title:"")(e);if(void 0!==e.menu){const o=ie(e.menu,t);n.push({text:r,items:o})}else{const o=t(e);n.push({text:r,value:o})}})),n},ae=(e=se)=>t=>m.from(t).map((t=>ie(t,e))),ce=e=>ae(se)(e),ue=ae,ge=(e,t)=>n=>({name:e,type:"listbox",label:t,items:n}),de=se,me=(e,t)=>k(t,(t=>(e=>{return B(t=e,n="items")&&void 0!==t[n]&&null!==t[n];var t,n})(t)?me(e,t.items):x(t.value===e,t))),he=(e,t)=>{const n={text:e.text,title:e.title},o=(e,o)=>{const r=(l=t,s=o,"link"===s?l.link:"anchor"===s?l.anchor:m.none()).getOr([]);var l,s;return((e,t,n,o)=>{const r=o[t],l=e.length>0;return void 0!==r?me(r,n).map((t=>({url:{value:t.value,meta:{text:l?e:t.text,attach:g}},text:l?e:t.text}))):m.none()})(n.text,o,r,e)};return{onChange:(e,t)=>{const r=t.name;return"url"===r?(e=>{const t=(o=e.url,x(n.text.length<=0,m.from(null===(r=o.meta)||void 0===r?void 0:r.text).getOr(o.value)));var o,r;const l=(e=>{var t;return x(n.title.length<=0,m.from(null===(t=e.meta)||void 0===t?void 0:t.title).getOr(""))})(e.url);return t.isSome()||l.isSome()?m.some({...t.map((e=>({text:e}))).getOr({}),...l.map((e=>({title:e}))).getOr({})}):m.none()})(e()):((e,t)=>h.call(e,t))(["anchor","link"],r)>-1?o(e(),r):"text"===r||"title"===r?(n[r]=e()[r],m.none()):m.none()}}};var pe=tinymce.util.Tools.resolve("tinymce.util.Delay");const fe=e=>{const t=e.href;return t.indexOf("@")>0&&-1===t.indexOf("/")&&-1===t.indexOf("mailto:")?m.some({message:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",preprocess:e=>({...e,href:"mailto:"+t})}):m.none()},ke=(e,t)=>n=>{const o=n.href;return 1===e&&!V(o)||0===e&&/^\s*www(\.|\d\.)/i.test(o)?m.some({message:`The URL you entered seems to be an external link. Do you want to add the required ${t}:// prefix?`,preprocess:e=>({...e,href:t+"://"+o})}):m.none()},ve=e=>{const t=e.dom.select("a:not([href])"),n=f(((e,t)=>{const n=e.length,o=new Array(n);for(let r=0;r{const t=e.name||e.id;return t?[{text:t,value:"#"+t}]:[]})));return n.length>0?m.some([{text:"None",value:""}].concat(n)):m.none()},be=e=>{const t=E(e);return t.length>0?ce(t):m.none()},xe=e=>{try{return m.some(JSON.parse(e))}catch(e){return m.none()}},ye=(e,t)=>{const n=N(e);if(n.length>0){const o=v(t,"_blank"),r=e=>z(de(e),o);return(!1===T(e)?ue(r):ce)(n)}return m.none()},_e=[{text:"Current window",value:""},{text:"New window",value:"_blank"}],we=e=>{const t=A(e);return l(t)?ce(t).orThunk((()=>m.some(_e))):!1===t?m.none():m.some(_e)},Ce=(e,t,n)=>{const o=e.getAttrib(t,n);return null!==o&&o.length>0?m.some(o):m.none()},Oe=(e,t)=>(e=>{const t=t=>e.convertURL(t.value||t.url||"","href"),n=C(e);return new Promise((e=>{o(n)?fetch(n).then((e=>e.ok?e.text().then(xe):Promise.reject())).then(e,(()=>e(m.none()))):c(n)?n((t=>e(m.some(t)))):e(m.from(n))})).then((e=>e.bind(ue(t)).map((e=>e.length>0?[{text:"None",value:""}].concat(e):e))))})(e).then((n=>{const o=((e,t)=>{const n=e.dom,o=Y(e)?m.some(J(e.selection,t)):m.none(),r=t.bind((e=>m.from(n.getAttrib(e,"href")))),l=t.bind((e=>m.from(n.getAttrib(e,"target")))),s=t.bind((e=>Ce(n,e,"rel"))),i=t.bind((e=>Ce(n,e,"class")));return{url:r,text:o,title:t.bind((e=>Ce(n,e,"title"))),target:l,rel:s,linkClass:i}})(e,t);return{anchor:o,catalogs:{targets:we(e),rels:ye(e,o.target),classes:be(e),anchor:ve(e),link:n},optNode:t,flags:{titleEnabled:R(e)}}})),Se=e=>{const t=(e=>{const t=G(e);return Oe(e,t)})(e);t.then((t=>{const n=((e,t)=>n=>{const o=n.getData();if(!o.url.value)return oe(e),void n.close();const r=e=>m.from(o[e]).filter((n=>!v(t.anchor[e],n))),l={href:o.url.value,text:r("text"),target:r("target"),rel:r("rel"),class:r("linkClass"),title:r("title")},s={href:o.url.value,attach:void 0!==o.url.meta&&o.url.meta.attach?o.url.meta.attach:g};((e,t)=>k([fe,ke(_(e),S(e))],(e=>e(t))).fold((()=>Promise.resolve(t)),(n=>new Promise((o=>{((e,t,n)=>{const o=e.selection.getRng();pe.setEditorTimeout(e,(()=>{e.windowManager.confirm(t,(t=>{e.selection.setRng(o),n(t)}))}))})(e,n.message,(e=>{o(e?n.preprocess(t):t)}))})))))(e,l).then((t=>{ne(e,s,t)})),n.close()})(e,t);return((e,t,n)=>{const o=e.anchor.text.map((()=>({name:"text",type:"input",label:"Text to display"}))).toArray(),r=e.flags.titleEnabled?[{name:"title",type:"input",label:"Title"}]:[],l=((e,t)=>{const n=e.anchor,o=n.url.getOr("");return{url:{value:o,meta:{original:{value:o}}},text:n.text.getOr(""),title:n.title.getOr(""),anchor:o,link:o,rel:n.rel.getOr(""),target:n.target.or(t).getOr(""),linkClass:n.linkClass.getOr("")}})(e,m.from(O(n))),s=e.catalogs,i=he(l,s);return{title:"Insert/Edit Link",size:"normal",body:{type:"panel",items:f([[{name:"url",type:"urlinput",filetype:"file",label:"URL",picker_text:"Browse links"}],o,r,b([s.anchor.map(ge("anchor","Anchors")),s.rels.map(ge("rel","Rel")),s.targets.map(ge("target","Open link in...")),s.link.map(ge("link","Link list")),s.classes.map(ge("linkClass","Class"))])])},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:l,onChange:(e,{name:t})=>{i.onChange(e.getData,{name:t}).each((t=>{e.setData(t)}))},onSubmit:t}})(t,n,e)})).then((t=>{e.windowManager.open(t)}))};var Ae=tinymce.util.Tools.resolve("tinymce.util.VK");const Ne=(e,t)=>{if(t){const o=$(t);if(/^#/.test(o)){const t=e.dom.select(`${o},[name="${n=o,((e,t)=>((e,t)=>""===t||e.length>=t.length&&e.substr(0,0+t.length)===t)(e,t))(n,"#")?(e=>e.substring(1))(n):n}"]`);t.length&&e.selection.scrollIntoView(t[0],!0)}else(e=>{const t=document.createElement("a");t.target="_blank",t.href=e,t.rel="noreferrer noopener";const n=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window});document.dispatchEvent(n),((e,t)=>{document.body.appendChild(e),e.dispatchEvent(t),document.body.removeChild(e)})(t,n)})(t.href)}var n},Ee=(e,t)=>{const n=Q(e.dom.getParents(t));return x(1===n.length,n[0])},Re=e=>e.selection.isCollapsed()||(e=>{const t=e.selection.getRng(),n=t.startContainer;return q(n)&&t.startContainer===t.endContainer&&1===e.dom.select("img",n).length})(e)?Ee(e,e.selection.getStart()):(e=>{const t=W(e.selection.getRng());return x(t.length>0,t[0]).or(Ee(e,e.selection.getNode()))})(e),Te=e=>()=>{e.execCommand("mceLink",!1,{dialog:!0})},Le=(e,t)=>(e.on("NodeChange",t),()=>e.off("NodeChange",t)),Pe=e=>t=>{const n=()=>{t.setActive(!e.mode.isReadOnly()&&H(e,e.selection.getNode())),t.setEnabled(e.selection.isEditable())};return n(),Le(e,n)},Me=e=>t=>{const n=()=>{t.setEnabled(e.selection.isEditable())};return n(),Le(e,n)},De=e=>t=>{const n=e.dom.getParents(e.selection.getStart()),o=n=>{t.setEnabled((t=>{return X(t)||(n=e.selection.getRng(),W(n).length>0);var n})(n)&&e.selection.isEditable())};return o(n),Le(e,(e=>o(e.parents)))},Be=e=>{const t=(e=>{const t=(()=>{const e=(e=>{const t=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})(m.none()),n=()=>t.get().each(e);return{clear:()=>{n(),t.set(m.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{n(),t.set(m.some(e))}}})(g);return{...e,on:t=>e.get().each(t)}})(),n=()=>t.get().or(Re(e));return e.on("contextmenu",(n=>{Ee(e,n.target).each(t.set)})),e.on("SelectionChange",(()=>{t.isSet()||Re(e).each(t.set)})),e.on("click",(n=>{t.clear();const o=Q(e.dom.getParents(n.target));1===o.length&&Ae.metaKeyPressed(n)&&(n.preventDefault(),Ne(e,o[0]))})),e.on("keydown",(o=>{t.clear(),!o.isDefaultPrevented()&&13===o.keyCode&&(e=>!0===e.altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey)(o)&&n().each((t=>{o.preventDefault(),Ne(e,t)}))})),{gotoSelectedLink:()=>n().each((t=>Ne(e,t)))}})(e);((e,t)=>{e.ui.registry.addToggleButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Meta+K",onAction:Te(e),onSetup:Pe(e)}),e.ui.registry.addButton("openlink",{icon:"new-tab",tooltip:"Open link",onAction:t.gotoSelectedLink,onSetup:De(e)}),e.ui.registry.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onAction:()=>oe(e),onSetup:De(e)})})(e,t),((e,t)=>{e.ui.registry.addMenuItem("openlink",{text:"Open link",icon:"new-tab",onAction:t.gotoSelectedLink,onSetup:De(e)}),e.ui.registry.addMenuItem("link",{icon:"link",text:"Link...",shortcut:"Meta+K",onAction:Te(e),onSetup:Me(e)}),e.ui.registry.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onAction:()=>oe(e),onSetup:De(e)})})(e,t),(e=>{e.ui.registry.addContextMenu("link",{update:t=>e.dom.isEditable(t)?X(e.dom.getParents(t,"a"))?"link unlink openlink":"link":""})})(e),((e,t)=>{const n=t=>{const n=e.selection.getNode();return t.setEnabled(H(e,n)&&e.selection.isEditable()),g};e.ui.registry.addContextForm("quicklink",{launch:{type:"contextformtogglebutton",icon:"link",tooltip:"Link",onSetup:Pe(e)},label:"Link",predicate:t=>w(e)&&H(e,t),initValue:()=>G(e).fold((()=>""),$),commands:[{type:"contextformtogglebutton",icon:"link",tooltip:"Link",primary:!0,onSetup:t=>{const n=e.selection.getNode();return t.setActive(H(e,n)),Pe(e)(t)},onAction:t=>{const n=t.getValue(),o=(t=>{const n=G(e),o=Y(e);if(n.isNone()&&o){const o=J(e.selection,n);return x(0===o.length,t)}return m.none()})(n);ne(e,{href:n,attach:g},{href:n,text:o,title:m.none(),rel:m.none(),target:m.from(O(e)),class:m.none()}),(e=>{e.selection.collapse(!1)})(e),t.hide()}},{type:"contextformbutton",icon:"unlink",tooltip:"Remove link",onSetup:n,onAction:t=>{oe(e),t.hide()}},{type:"contextformbutton",icon:"new-tab",tooltip:"Open link",onSetup:n,onAction:e=>{t.gotoSelectedLink(),e.hide()}}]})})(e,t)};e.add("link",(e=>{(e=>{const t=e.options.register;t("link_assume_external_targets",{processor:e=>{const t=o(e)||i(e);return t?!0===e?{value:1,valid:t}:"http"===e||"https"===e?{value:e,valid:t}:{value:0,valid:t}:{valid:!1,message:"Must be a string or a boolean."}},default:!1}),t("link_context_toolbar",{processor:"boolean",default:!1}),t("link_list",{processor:e=>o(e)||c(e)||u(e,r)}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"}),t("link_target_list",{processor:e=>i(e)||u(e,r),default:!0}),t("link_rel_list",{processor:"object[]",default:[]}),t("link_class_list",{processor:"object[]",default:[]}),t("link_title",{processor:"boolean",default:!0}),t("allow_unsafe_link_target",{processor:"boolean",default:!1}),t("link_quicklink",{processor:"boolean",default:!1}),t("link_attributes_postprocess",{processor:"function"})})(e),(e=>{e.addCommand("mceLink",((t,n)=>{!0!==(null==n?void 0:n.dialog)&&L(e)?e.dispatch("contexttoolbar-show",{toolbarKey:"quicklink"}):Se(e)}))})(e),Be(e),(e=>{e.addShortcut("Meta+K","",(()=>{e.execCommand("mceLink")}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/lists/plugin.min.js b/apps/web-antd/public/tinymce/plugins/lists/plugin.min.js new file mode 100644 index 000000000..ba49b0bd8 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/lists/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var n,o,r,s})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),s=t("array"),i=n("boolean"),l=e=>!(e=>null==e)(e),a=n("function"),d=n("number"),c=()=>{},m=e=>()=>e,u=(e,t)=>e===t,p=e=>t=>!e(t),g=m(!1);class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return l(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const f=Array.prototype.slice,y=Array.prototype.indexOf,v=Array.prototype.push,C=(e,t)=>{return n=e,o=t,y.call(n,o)>-1;var n,o},b=(e,t)=>{for(let n=0,o=e.length;n{const n=e.length,o=new Array(n);for(let r=0;r{for(let n=0,o=e.length;n{const n=[];for(let o=0,r=e.length;o(S(e,((e,o)=>{n=t(n,e,o)})),n),A=(e,t,n)=>{for(let o=0,r=e.length;oA(e,t,g),x=(e,t)=>(e=>{const t=[];for(let n=0,o=e.length;n{const t=f.call(e,0);return t.reverse(),t},E=(e,t)=>t>=0&&tE(e,0),D=e=>E(e,e.length-1),B=(e,t)=>{const n=[],o=a(t)?e=>b(n,(n=>t(n,e))):e=>C(n,e);for(let t=0,r=e.length;te.exists((e=>n(e,t))),P=(e,t,n)=>e.isSome()&&t.isSome()?h.some(n(e.getOrDie(),t.getOrDie())):h.none(),I=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},R=(e,t)=>{const n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return I(n.childNodes[0])},U=(e,t)=>{const n=(t||document).createElement(e);return I(n)},$=I,_=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},H=(e,t)=>e.dom===t.dom,F=_,V="undefined"!=typeof window?window:Function("return this;")(),j=(e,t)=>((e,t)=>{let n=null!=t?t:V;for(let t=0;t{const t=j("ownerDocument.defaultView",e);return r(e)&&((e=>((e,t)=>{const n=((e,t)=>j(e,t))(e,t);if(null==n)throw new Error(e+" not available on this browser");return n})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(K(e).constructor.name))},Q=e=>e.dom.nodeName.toLowerCase(),W=e=>e.dom.nodeType,q=e=>t=>W(t)===e,Z=e=>G(e)&&z(e.dom),G=q(1),J=q(3),X=q(11),Y=e=>t=>G(t)&&Q(t)===e,ee=e=>h.from(e.dom.parentNode).map($),te=e=>N(e.dom.childNodes,$),ne=(e,t)=>{const n=e.dom.childNodes;return h.from(n[t]).map($)},oe=e=>ne(e,0),re=e=>ne(e,e.dom.childNodes.length-1),se=e=>$(e.dom.host),ie=e=>{const t=J(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return(e=>{const t=(e=>$(e.dom.getRootNode()))(e);return X(n=t)&&l(n.dom.host)?h.some(t):h.none();var n})($(t)).fold((()=>n.body.contains(t)),(o=ie,r=se,e=>o(r(e))));var o,r};var le=(e,t,n,o,r)=>e(n,o)?h.some(n):a(r)&&r(n)?h.none():t(n,o,r);const ae=(e,t,n)=>{let o=e.dom;const r=a(n)?n:g;for(;o.parentNode;){o=o.parentNode;const e=$(o);if(t(e))return h.some(e);if(r(e))break}return h.none()},de=(e,t,n)=>le(((e,t)=>t(e)),ae,e,t,n),ce=(e,t,n)=>ae(e,(e=>_(e,t)),n),me=(e,t)=>{ee(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},ue=(e,t)=>{e.dom.appendChild(t.dom)},pe=(e,t)=>{S(t,(t=>{ue(e,t)}))},ge=e=>{e.dom.textContent="",S(te(e),(e=>{he(e)}))},he=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)};var fe=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),ye=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),ve=tinymce.util.Tools.resolve("tinymce.util.VK");const Ce=e=>N(e,$),be=Object.keys,Ne=(e,t)=>{const n=be(e);for(let o=0,r=n.length;o{const n=e.dom;Ne(t,((e,t)=>{((e,t,n)=>{if(!(o(n)||i(n)||d(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(n,t,e)}))},Le=e=>O(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),Oe=e=>(e=>$(e.dom.cloneNode(!0)))(e),Ae=(e,t)=>{const n=((e,t)=>{const n=U(t),o=Le(e);return Se(n,o),n})(e,t);var o,r;r=n,(e=>h.from(e.dom.nextSibling).map($))(o=e).fold((()=>{ee(o).each((e=>{ue(e,r)}))}),(e=>{me(e,r)}));const s=te(e);return pe(n,s),he(e),n};var Te=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),xe=tinymce.util.Tools.resolve("tinymce.util.Tools");const ke=e=>t=>l(t)&&t.nodeName.toLowerCase()===e,Ee=e=>t=>l(t)&&e.test(t.nodeName),we=e=>l(e)&&3===e.nodeType,De=e=>l(e)&&1===e.nodeType,Be=Ee(/^(OL|UL|DL)$/),Me=Ee(/^(OL|UL)$/),Pe=ke("ol"),Ie=Ee(/^(LI|DT|DD)$/),Re=Ee(/^(DT|DD)$/),Ue=Ee(/^(TH|TD)$/),$e=ke("br"),_e=(e,t)=>l(t)&&t.nodeName in e.schema.getTextBlockElements(),He=(e,t)=>l(e)&&e.nodeName in t,Fe=(e,t)=>l(t)&&t.nodeName in e.schema.getVoidElements(),Ve=(e,t,n)=>{const o=e.isEmpty(t);return!(n&&e.select("span[data-mce-type=bookmark]",t).length>0)&&o},je=(e,t)=>e.isChildOf(t,e.getRoot()),Ke=e=>t=>t.options.get(e),ze=Ke("lists_indent_on_tab"),Qe=Ke("forced_root_block"),We=Ke("forced_root_block_attrs"),qe=(e,t,n={})=>{const o=e.dom,r=e.schema.getBlockElements(),s=o.createFragment(),i=Qe(e),l=We(e);let a,d,c=!1;for(d=o.create(i,{...l,...n.style?{style:n.style}:{}}),He(t.firstChild,r)||s.appendChild(d);a=t.firstChild;){const e=a.nodeName;c||"SPAN"===e&&"bookmark"===a.getAttribute("data-mce-type")||(c=!0),He(a,r)?(s.appendChild(a),d=null):(d||(d=o.create(i,l),s.appendChild(d)),d.appendChild(a))}return!c&&d&&d.appendChild(o.create("br",{"data-mce-bogus":"1"})),s},Ze=Te.DOM,Ge=Y("dd"),Je=Y("dt"),Xe=(e,t)=>{var n;Ge(t)?Ae(t,"dt"):Je(t)&&(n=t,h.from(n.dom.parentElement).map($)).each((n=>((e,t,n)=>{const o=Ze.select('span[data-mce-type="bookmark"]',t),r=qe(e,n),s=Ze.createRng();s.setStartAfter(n),s.setEndAfter(t);const i=s.extractContents();for(let t=i.firstChild;t;t=t.firstChild)if("LI"===t.nodeName&&e.dom.isEmpty(t)){Ze.remove(t);break}e.dom.isEmpty(i)||Ze.insertAfter(i,t),Ze.insertAfter(r,t);const l=n.parentElement;l&&Ve(e.dom,l)&&(e=>{const t=e.parentNode;t&&xe.each(o,(e=>{t.insertBefore(e,n.parentNode)})),Ze.remove(e)})(l),Ze.remove(n),Ve(e.dom,t)&&Ze.remove(t)})(e,n.dom,t.dom)))},Ye=e=>{Je(e)&&Ae(e,"dd")},et=(e,t)=>{if(we(e))return{container:e,offset:t};const n=fe.getNode(e,t);return we(n)?{container:n,offset:t>=e.childNodes.length?n.data.length:0}:n.previousSibling&&we(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&we(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:e,offset:t}},tt=e=>{const t=e.cloneRange(),n=et(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);const o=et(e.endContainer,e.endOffset);return t.setEnd(o.container,o.offset),t},nt=["OL","UL","DL"],ot=nt.join(","),rt=(e,t)=>{const n=t||e.selection.getStart(!0);return e.dom.getParent(n,ot,lt(e,n))},st=e=>{const t=e.selection.getSelectedBlocks();return L(((e,t)=>{const n=xe.map(t,(t=>e.dom.getParent(t,"li,dd,dt",lt(e,t))||t));return B(n)})(e,t),Ie)},it=(e,t)=>{const n=e.dom.getParents(t,"TD,TH");return n.length>0?n[0]:e.getBody()},lt=(e,t)=>{const n=e.dom.getParents(t,e.dom.isBlock),o=T(n,(t=>{return(t=>t.nodeName.toLowerCase()!==Qe(e))(t)&&(n=e.schema,!Be(o=t)&&!Ie(o)&&b(nt,(e=>n.isValidChild(o.nodeName,e))));var n,o}));return o.getOr(e.getBody())},at=(e,t)=>{const n=e.dom.getParents(t,"ol,ul",lt(e,t));return D(n)},dt=(e,t)=>{const n=N(t,(t=>at(e,t).getOr(t)));return B(n)},ct=e=>/\btox\-/.test(e.className),mt=(e,t)=>A(e,Be,Ue).exists((e=>e.nodeName===t&&!ct(e))),ut=(e,t)=>null!==t&&!e.dom.isEditable(t),pt=(e,t)=>{const n=e.dom.getParent(t,"ol,ul,dl");return ut(e,n)||!e.selection.isEditable()},gt=(e,t)=>{const n=e.selection.getNode();return t({parents:e.dom.getParents(n),element:n}),e.on("NodeChange",t),()=>e.off("NodeChange",t)},ht=(e,t)=>{const n=(t||document).createDocumentFragment();return S(e,(e=>{n.appendChild(e.dom)})),$(n)},ft=(e,t,n)=>e.dispatch("ListMutation",{action:t,element:n}),yt=(vt=/^\s+|\s+$/g,e=>e.replace(vt,""));var vt;const Ct=(e,t,n)=>{((e,t,n)=>{if(!o(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);(e=>void 0!==e.style&&a(e.style.getPropertyValue))(e)&&e.style.setProperty(t,n)})(e.dom,t,n)},bt=e=>F(e,"OL,UL"),Nt=e=>oe(e).exists(bt),St=e=>"listAttributes"in e,Lt=e=>"isComment"in e,Ot=e=>e.depth>0,At=e=>e.isSelected,Tt=e=>{const t=te(e),n=re(e).exists(bt)?t.slice(0,-1):t;return N(n,Oe)},xt=(e,t)=>{ue(e.item,t.list)},kt=(e,t)=>{const n={list:U(t,e),item:U("li",e)};return ue(n.list,n.item),n},Et=(e,t,n)=>{const o=t.slice(0,n.depth);return D(o).each((t=>{if(St(n)){const o=((e,t,n)=>{const o=U("li",e);return Se(o,t),pe(o,n),o})(e,n.itemAttributes,n.content);((e,t)=>{ue(e.list,t),e.item=t})(t,o),((e,t)=>{Q(e.list)!==t.listType&&(e.list=Ae(e.list,t.listType)),Se(e.list,t.listAttributes)})(t,n)}else if((e=>"isFragment"in e)(n))pe(t.item,n.content);else{const e=R(`\x3c!--${n.content}--\x3e`);ue(t.list,e)}})),o},wt=(e,t)=>{let n=h.none();const o=O(t,((t,o,r)=>Lt(o)?0===r?(n=h.some(o),t):Et(e,t,o):o.depth>t.length?((e,t,n)=>{const o=((e,t,n)=>{const o=[];for(let r=0;r{for(let t=1;t{for(let t=0;t{St(t)&&(Se(e.list,t.listAttributes),Se(e.item,t.itemAttributes)),pe(e.item,t.content)}))})(o,n),r=o,P(D(t),w(r),xt),t.concat(o)})(e,t,o):Et(e,t,o)),[]);return n.each((e=>{const t=R(`\x3c!--${e.content}--\x3e`);w(o).each((e=>{((e,t)=>{oe(e).fold((()=>{ue(e,t)}),(n=>{e.dom.insertBefore(t.dom,n.dom)}))})(e.list,t)}))})),w(o).map((e=>e.list))},Dt=e=>(S(e,((t,n)=>{((e,t)=>{const n=e[t].depth,o=e=>e.depth===n&&!e.dirty,r=e=>e.depthA(e.slice(t+1),o,r)))})(e,n).fold((()=>{t.dirty&&St(t)&&(e=>{e.listAttributes=((e,t)=>{const n={};var o;return((e,t,n,o)=>{Ne(e,((e,r)=>{(t(e,r)?n:o)(e,r)}))})(e,t,(o=n,(e,t)=>{o[t]=e}),c),n})(e.listAttributes,((e,t)=>"start"!==t))})(t)}),(e=>{return o=e,void(St(n=t)&&St(o)&&(n.listType=o.listType,n.listAttributes={...o.listAttributes}));var n,o}))})),e),Bt=(e,t,n,o)=>{var r,s;if(8===W(s=o)||"#comment"===Q(s))return[{depth:e+1,content:null!==(r=o.dom.nodeValue)&&void 0!==r?r:"",dirty:!1,isSelected:!1,isComment:!0}];t.each((e=>{H(e.start,o)&&n.set(!0)}));const i=((e,t,n)=>ee(e).filter(G).map((o=>({depth:t,dirty:!1,isSelected:n,content:Tt(e),itemAttributes:Le(e),listAttributes:Le(o),listType:Q(o),isInPreviousLi:!1}))))(o,e,n.get());t.each((e=>{H(e.end,o)&&n.set(!1)}));const l=re(o).filter(bt).map((o=>Pt(e,t,n,o))).getOr([]);return i.toArray().concat(l)},Mt=(e,t,n,o)=>oe(o).filter(bt).fold((()=>Bt(e,t,n,o)),(r=>{const s=O(te(o),((o,s,i)=>{if(0===i)return o;if(F(s,"LI"))return o.concat(Bt(e,t,n,s));{const t={isFragment:!0,depth:e,content:[s],isSelected:!1,dirty:!1,parentListType:Q(r)};return o.concat(t)}}),[]);return Pt(e,t,n,r).concat(s)})),Pt=(e,t,n,o)=>x(te(o),(o=>(bt(o)?Pt:Mt)(e+1,t,n,o))),It=(e,t,n)=>{const o=((e,t)=>{const n=(()=>{let e=!1;return{get:()=>e,set:t=>{e=t}}})();return N(e,(e=>({sourceList:e,entries:Pt(0,t,n,e)})))})(t,(e=>{const t=N(st(e),$);return P(T(t,p(Nt)),T(k(t),p(Nt)),((e,t)=>({start:e,end:t})))})(e));S(o,(t=>{((e,t)=>{S(L(e,At),(e=>((e,t)=>{switch(e){case"Indent":t.depth++;break;case"Outdent":t.depth--;break;case"Flatten":t.depth=0}t.dirty=!0})(t,e)))})(t.entries,n);const o=((e,t)=>x(((e,t)=>{if(0===e.length)return[];{let n=t(e[0]);const o=[];let r=[];for(let s=0,i=e.length;sw(t).exists(Ot)?((e,t)=>{const n=Dt(t);return wt(e.contentDocument,n).toArray()})(e,t):((e,t)=>{const n=Dt(t);return N(n,(t=>{const n=Lt(t)?ht([R(`\x3c!--${t.content}--\x3e`)]):ht(t.content),o=St(t)?t.itemAttributes:{};return $(qe(e,n.dom,o))}))})(e,t))))(e,t.entries);var r;S(o,(t=>{ft(e,"Indent"===n?"IndentList":"OutdentList",t.dom)})),r=t.sourceList,S(o,(e=>{me(r,e)})),he(t.sourceList)}))},Rt=(e,t)=>{const n=Ce((e=>{const t=(e=>{const t=at(e,e.selection.getStart()),n=L(e.selection.getSelectedBlocks(),Me);return t.toArray().concat(n)})(e),n=(e=>{const t=e.selection.getStart();return e.dom.getParents(t,"ol,ul",lt(e,t))})(e);return T(n,(e=>{return t=$(e),ee(t).exists((e=>Ie(e.dom)&&oe(e).exists((e=>!Be(e.dom)))&&re(e).exists((e=>!Be(e.dom)))));var t})).fold((()=>dt(e,t)),(e=>[e]))})(e)),o=Ce((e=>L(st(e),Re))(e));let r=!1;if(n.length||o.length){const s=e.selection.getBookmark();It(e,n,t),((e,t,n)=>{S(n,"Indent"===t?Ye:t=>Xe(e,t))})(e,t,o),e.selection.moveToBookmark(s),e.selection.setRng(tt(e.selection.getRng())),e.nodeChanged(),r=!0}return r},Ut=(e,t)=>!(e=>{const t=rt(e);return ut(e,t)||!e.selection.isEditable()})(e)&&Rt(e,t),$t=e=>Ut(e,"Indent"),_t=e=>Ut(e,"Outdent"),Ht=e=>Ut(e,"Flatten"),Ft=e=>"\ufeff"===e;var Vt=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager");const jt=Te.DOM,Kt=e=>{const t={},n=n=>{let o=e[n?"startContainer":"endContainer"],r=e[n?"startOffset":"endOffset"];if(De(o)){const e=jt.create("span",{"data-mce-type":"bookmark"});o.hasChildNodes()?(r=Math.min(r,o.childNodes.length-1),n?o.insertBefore(e,o.childNodes[r]):jt.insertAfter(e,o.childNodes[r])):o.appendChild(e),o=e,r=0}t[n?"startContainer":"endContainer"]=o,t[n?"startOffset":"endOffset"]=r};return n(!0),e.collapsed||n(),t},zt=e=>{const t=t=>{let n=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"];if(n){if(De(n)&&n.parentNode){const e=n;o=(e=>{var t;let n=null===(t=e.parentNode)||void 0===t?void 0:t.firstChild,o=0;for(;n;){if(n===e)return o;De(n)&&"bookmark"===n.getAttribute("data-mce-type")||o++,n=n.nextSibling}return-1})(n),n=n.parentNode,jt.remove(e),!n.hasChildNodes()&&jt.isBlock(n)&&n.appendChild(jt.create("br"))}e[t?"startContainer":"endContainer"]=n,e[t?"startOffset":"endOffset"]=o}};t(!0),t();const n=jt.createRng();return n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),tt(n)},Qt=e=>{switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}},Wt=(e,t)=>{xe.each(t,((t,n)=>{e.setAttribute(n,t)}))},qt=(e,t,n)=>{((e,t,n)=>{const o=n["list-style-type"]?n["list-style-type"]:null;e.setStyle(t,"list-style-type",o)})(e,t,n),((e,t,n)=>{Wt(t,n["list-attributes"]),xe.each(e.select("li",t),(e=>{Wt(e,n["list-item-attributes"])}))})(e,t,n)},Zt=(e,t)=>l(t)&&!He(t,e.schema.getBlockElements()),Gt=(e,t,n,o)=>{let r=t[n?"startContainer":"endContainer"];const s=t[n?"startOffset":"endOffset"];De(r)&&(r=r.childNodes[Math.min(s,r.childNodes.length-1)]||r),!n&&$e(r.nextSibling)&&(r=r.nextSibling);const i=(t,n)=>{var r;const s=new ye(t,(t=>{for(;!e.dom.isBlock(t)&&t.parentNode&&o!==t;)t=t.parentNode;return t})(t)),i=n?"next":"prev";let l;for(;l=s[i]();)if(!Fe(e,l)&&!Ft(l.textContent)&&0!==(null===(r=l.textContent)||void 0===r?void 0:r.length))return h.some(l);return h.none()};if(n&&we(r))if(Ft(r.textContent))r=i(r,!1).getOr(r);else for(null!==r.parentNode&&Zt(e,r.parentNode)&&(r=r.parentNode);null!==r.previousSibling&&(Zt(e,r.previousSibling)||we(r.previousSibling));)r=r.previousSibling;if(!n&&we(r))if(Ft(r.textContent))r=i(r,!0).getOr(r);else for(null!==r.parentNode&&Zt(e,r.parentNode)&&(r=r.parentNode);null!==r.nextSibling&&(Zt(e,r.nextSibling)||we(r.nextSibling));)r=r.nextSibling;for(;r.parentNode!==o;){const t=r.parentNode;if(_e(e,r))return r;if(/^(TD|TH)$/.test(t.nodeName))return r;r=t}return r},Jt=(e,t,n)=>{const o=e.selection.getRng();let r="LI";const s=lt(e,((e,t)=>{const n=e.selection.getStart(!0),o=Gt(e,t,!0,e.getBody());return r=$(o),s=$(t.commonAncestorContainer),i=r,l=function(e,...t){return(...n)=>{const o=t.concat(n);return e.apply(null,o)}}(H,s),ae(i,l,void 0).isSome()?t.commonAncestorContainer:n;var r,s,i,l})(e,o)),i=e.dom;if("false"===i.getContentEditable(e.selection.getNode()))return;"DL"===(t=t.toUpperCase())&&(r="DT");const l=Kt(o),a=L(((e,t,n)=>{const o=[],r=e.dom,s=Gt(e,t,!0,n),i=Gt(e,t,!1,n);let l;const a=[];for(let e=s;e&&(a.push(e),e!==i);e=e.nextSibling);return xe.each(a,(t=>{var s;if(_e(e,t))return o.push(t),void(l=null);if(r.isBlock(t)||$e(t))return $e(t)&&r.remove(t),void(l=null);const i=t.nextSibling;Vt.isBookmarkNode(t)&&(Be(i)||_e(e,i)||!i&&t.parentNode===n)?l=null:(l||(l=r.create("p"),null===(s=t.parentNode)||void 0===s||s.insertBefore(l,t),o.push(l)),l.appendChild(t))})),o})(e,o,s),e.dom.isEditable);xe.each(a,(o=>{let s;const l=o.previousSibling,a=o.parentNode;Ie(a)||(l&&Be(l)&&l.nodeName===t&&((e,t,n)=>{const o=e.getStyle(t,"list-style-type");let r=n?n["list-style-type"]:"";return r=null===r?"":r,o===r})(i,l,n)?(s=l,o=i.rename(o,r),l.appendChild(o)):(s=i.create(t),a.insertBefore(s,o),s.appendChild(o),o=i.rename(o,r)),((e,t)=>{xe.each(["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],(n=>e.setStyle(t,n,"")))})(i,o),qt(i,s,n),Yt(e.dom,s))})),e.selection.setRng(zt(l))},Xt=(e,t,n)=>{return((e,t)=>Be(e)&&e.nodeName===(null==t?void 0:t.nodeName))(t,n)&&((e,t,n)=>e.getStyle(t,"list-style-type",!0)===e.getStyle(n,"list-style-type",!0))(e,t,n)&&(o=n,t.className===o.className);var o},Yt=(e,t)=>{let n,o=t.nextSibling;if(Xt(e,t,o)){const r=o;for(;n=r.firstChild;)t.appendChild(n);e.remove(r)}if(o=t.previousSibling,Xt(e,t,o)){const r=o;for(;n=r.lastChild;)t.insertBefore(n,t.firstChild);e.remove(r)}},en=(e,t,n,o)=>{if(t.nodeName!==n){const r=e.dom.rename(t,n);qt(e.dom,r,o),ft(e,Qt(n),r)}else qt(e.dom,t,o),ft(e,Qt(n),t)},tn=(e,t,n,o)=>{if(t.classList.forEach(((e,n,o)=>{e.startsWith("tox-")&&(o.remove(e),0===o.length&&t.removeAttribute("class"))})),t.nodeName!==n){const r=e.dom.rename(t,n);qt(e.dom,r,o),ft(e,Qt(n),r)}else qt(e.dom,t,o),ft(e,Qt(n),t)},nn=e=>"list-style-type"in e,on=(e,t,n)=>{const o=rt(e);if(pt(e,o))return;const s=(e=>{const t=rt(e),n=e.selection.getSelectedBlocks();return((e,t)=>l(e)&&1===t.length&&t[0]===e)(t,n)?(e=>L(e.querySelectorAll(ot),Be))(t):L(n,(e=>Be(e)&&t!==e))})(e),i=r(n)?n:{};s.length>0?((e,t,n,o,r)=>{const s=Be(t);if(!s||t.nodeName!==o||nn(r)||ct(t)){Jt(e,o,r);const i=Kt(e.selection.getRng()),l=s?[t,...n]:n,a=s&&ct(t)?tn:en;xe.each(l,(t=>{a(e,t,o,r)})),e.selection.setRng(zt(i))}else Ht(e)})(e,o,s,t,i):((e,t,n,o)=>{if(t!==e.getBody())if(t)if(t.nodeName!==n||nn(o)||ct(t)){const r=Kt(e.selection.getRng());ct(t)&&t.classList.forEach(((e,n,o)=>{e.startsWith("tox-")&&(o.remove(e),0===o.length&&t.removeAttribute("class"))})),qt(e.dom,t,o);const s=e.dom.rename(t,n);Yt(e.dom,s),e.selection.setRng(zt(r)),Jt(e,n,o),ft(e,Qt(n),s)}else Ht(e);else Jt(e,n,o),ft(e,Qt(n),t)})(e,o,t,i)},rn=Te.DOM,sn=(e,t)=>{const n=xe.grep(e.select("ol,ul",t));xe.each(n,(t=>{((e,t)=>{const n=t.parentElement;if(n&&"LI"===n.nodeName&&n.firstChild===t){const o=n.previousSibling;o&&"LI"===o.nodeName?(o.appendChild(t),Ve(e,n)&&rn.remove(n)):rn.setStyle(n,"listStyleType","none")}if(Be(n)){const e=n.previousSibling;e&&"LI"===e.nodeName&&e.appendChild(t)}})(e,t)}))},ln=(e,t,n,o)=>{let r=t.startContainer;const s=t.startOffset;if(we(r)&&(n?s0))return r;const i=e.schema.getNonEmptyElements();De(r)&&(r=fe.getNode(r,s));const l=new ye(r,o);n&&((e,t)=>!!$e(t)&&e.isBlock(t.nextSibling)&&!$e(t.previousSibling))(e.dom,r)&&l.next();const a=n?l.next.bind(l):l.prev2.bind(l);for(;r=a();){if("LI"===r.nodeName&&!r.hasChildNodes())return r;if(i[r.nodeName])return r;if(we(r)&&r.data.length>0)return r}return null},an=(e,t)=>{const n=t.childNodes;return 1===n.length&&!Be(n[0])&&e.isBlock(n[0])},dn=e=>h.from(e).map($).filter(Z).exists((e=>((e,t=!1)=>{return ie(e)?e.dom.isContentEditable:(n=e,le(((e,t)=>_(e,t)),ce,n,"[contenteditable]",void 0)).fold(m(t),(e=>"true"===(e=>e.dom.contentEditable)(e)));var n})(e)&&!C(["details"],Q(e)))),cn=(e,t,n)=>{let o;const r=an(e,n)?n.firstChild:n;if(((e,t)=>{an(e,t)&&dn(t.firstChild)&&e.remove(t.firstChild,!0)})(e,t),!Ve(e,t,!0))for(;o=t.firstChild;)r.appendChild(o)},mn=(e,t,n)=>{let o;const r=t.parentNode;if(!je(e,t)||!je(e,n))return;Be(n.lastChild)&&(o=n.lastChild),r===n.lastChild&&$e(r.previousSibling)&&e.remove(r.previousSibling);const s=n.lastChild;s&&$e(s)&&t.hasChildNodes()&&e.remove(s),Ve(e,n,!0)&&ge($(n)),cn(e,t,n),o&&n.appendChild(o);const i=((e,t)=>{const n=e.dom,o=t.dom;return n!==o&&n.contains(o)})($(n),$(t))?e.getParents(t,Be,n):[];e.remove(t),S(i,(t=>{Ve(e,t)&&t!==e.getRoot()&&e.remove(t)}))},un=(e,t)=>{const n=e.dom,o=e.selection,r=o.getStart(),s=it(e,r),i=n.getParent(o.getStart(),"LI",s);if(i){const r=i.parentElement;if(r===e.getBody()&&Ve(n,r))return!0;const l=tt(o.getRng()),a=n.getParent(ln(e,l,t,s),"LI",s),d=a&&(t?n.isChildOf(i,a):n.isChildOf(a,i));if(a&&a!==i&&!d)return e.undoManager.transact((()=>{var n,o;t?((e,t,n,o)=>{const r=e.dom;if(r.isEmpty(o))((e,t,n)=>{ge($(n)),mn(e.dom,t,n),e.selection.setCursorLocation(n,0)})(e,n,o);else{const s=Kt(t);mn(r,n,o),e.selection.setRng(zt(s))}})(e,l,a,i):(null===(o=(n=i).parentNode)||void 0===o?void 0:o.firstChild)===n?_t(e):((e,t,n,o)=>{const r=Kt(t);mn(e.dom,n,o);const s=zt(r);e.selection.setRng(s)})(e,l,i,a)})),!0;if(d&&!t&&a!==i){const t=l.commonAncestorContainer.parentElement;return!(!t||n.isChildOf(a,t)||(e.undoManager.transact((()=>{const o=Kt(l);cn(n,t,a),t.remove();const r=zt(o);e.selection.setRng(r)})),0))}if(!a&&!t&&0===l.startOffset&&0===l.endOffset)return e.undoManager.transact((()=>{Ht(e)})),!0}return!1},pn=e=>{const t=e.selection.getStart(),n=it(e,t);return e.dom.getParent(t,"LI,DT,DD",n)||st(e).length>0},gn=(e,t)=>{const n=e.selection;return!pt(e,n.getNode())&&(n.isCollapsed()?((e,t)=>un(e,t)||((e,t)=>{const n=e.dom,o=e.selection.getStart(),r=it(e,o),s=n.getParent(o,n.isBlock,r);if(s&&n.isEmpty(s,void 0,{checkRootAsContent:!0})){const o=tt(e.selection.getRng()),i=ln(e,o,t,r),l=n.getParent(i,"LI",r);if(i&&l){const a=e=>C(["td","th","caption"],Q(e)),d=e=>e.dom===r;return!!((e,t,n=u)=>P(e,t,n).getOr(e.isNone()&&t.isNone()))(de($(l),a,d),de($(o.startContainer),a,d),H)&&(e.undoManager.transact((()=>{const o=l.parentNode;((e,t,n)=>{const o=e.getParent(t.parentNode,e.isBlock,n);e.remove(t),o&&e.isEmpty(o)&&e.remove(o)})(n,s,r),Yt(n,o),e.selection.select(i,!0),e.selection.collapse(t)})),!0)}}return!1})(e,t))(e,t):(e=>!!pn(e)&&(e.undoManager.transact((()=>{let t=!0;const n=()=>t=!1;e.on("input",n),e.execCommand("Delete"),e.off("input",n),t&&e.dispatch("input"),sn(e.dom,e.getBody())})),!0))(e))},hn=e=>{const t=k(yt(e).split("")),n=N(t,((e,t)=>{const n=e.toUpperCase().charCodeAt(0)-"A".charCodeAt(0)+1;return Math.pow(26,t)*n}));return O(n,((e,t)=>e+t),0)},fn=e=>{if(--e<0)return"";{const t=e%26,n=Math.floor(e/26);return fn(n)+String.fromCharCode("A".charCodeAt(0)+t)}},yn=e=>{const t=parseInt(e.start,10);return M(e.listStyleType,"upper-alpha")?fn(t):M(e.listStyleType,"lower-alpha")?fn(t).toLowerCase():e.start},vn=(e,t)=>()=>{const n=rt(e);return l(n)&&n.nodeName===t},Cn=e=>{e.addCommand("mceListProps",(()=>{(e=>{const t=rt(e);Pe(t)&&!pt(e,t)&&e.windowManager.open({title:"List Properties",body:{type:"panel",items:[{type:"input",name:"start",label:"Start list at number",inputMode:"numeric"}]},initialData:{start:yn({start:e.dom.getAttrib(t,"start","1"),listStyleType:h.from(e.dom.getStyle(t,"list-style-type"))})},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:t=>{(e=>{switch((e=>/^[0-9]+$/.test(e)?2:/^[A-Z]+$/.test(e)?0:/^[a-z]+$/.test(e)?1:e.length>0?4:3)(e)){case 2:return h.some({listStyleType:h.none(),start:e});case 0:return h.some({listStyleType:h.some("upper-alpha"),start:hn(e).toString()});case 1:return h.some({listStyleType:h.some("lower-alpha"),start:hn(e).toString()});case 3:return h.some({listStyleType:h.none(),start:""});case 4:return h.none()}})(t.getData().start).each((t=>{e.execCommand("mceListUpdate",!1,{attrs:{start:"1"===t.start?"":t.start},styles:{"list-style-type":t.listStyleType.getOr("")}})})),t.close()}})})(e)}))};var bn=tinymce.util.Tools.resolve("tinymce.html.Node");const Nn=e=>3===e.type,Sn=e=>0===e.length,Ln=e=>{const t=(t,n)=>{const o=bn.create("li");S(t,(e=>o.append(e))),n?e.insert(o,n,!0):e.append(o)},n=O(e.children(),((e,n)=>Nn(n)?[...e,n]:Sn(e)||Nn(n)?e:(t(e,n),[])),[]);Sn(n)||t(n)},On=(e,t)=>n=>(n.setEnabled(e.selection.isEditable()),gt(e,(o=>{n.setActive(mt(o.parents,t)),n.setEnabled(!pt(e,o.element)&&e.selection.isEditable())}))),An=(e,t)=>n=>gt(e,(o=>n.setEnabled(mt(o.parents,t)&&!pt(e,o.element))));e.add("lists",(e=>((e=>{(0,e.options.register)("lists_indent_on_tab",{processor:"boolean",default:!0})})(e),(e=>{e.on("PreInit",(()=>{const{parser:t}=e;t.addNodeFilter("ul,ol",(e=>S(e,Ln)))}))})(e),e.hasPlugin("rtc",!0)?Cn(e):((e=>{ze(e)&&(e=>{e.on("keydown",(t=>{t.keyCode!==ve.TAB||ve.metaKeyPressed(t)||e.undoManager.transact((()=>{(t.shiftKey?_t(e):$t(e))&&t.preventDefault()}))}))})(e),(e=>{e.on("ExecCommand",(t=>{const n=t.command.toLowerCase();"delete"!==n&&"forwarddelete"!==n||!pn(e)||sn(e.dom,e.getBody())})),e.on("keydown",(t=>{t.keyCode===ve.BACKSPACE?gn(e,!1)&&t.preventDefault():t.keyCode===ve.DELETE&&gn(e,!0)&&t.preventDefault()}))})(e)})(e),(e=>{e.on("BeforeExecCommand",(t=>{const n=t.command.toLowerCase();"indent"===n?$t(e):"outdent"===n&&_t(e)})),e.addCommand("InsertUnorderedList",((t,n)=>{on(e,"UL",n)})),e.addCommand("InsertOrderedList",((t,n)=>{on(e,"OL",n)})),e.addCommand("InsertDefinitionList",((t,n)=>{on(e,"DL",n)})),e.addCommand("RemoveList",(()=>{Ht(e)})),Cn(e),e.addCommand("mceListUpdate",((t,n)=>{r(n)&&((e,t)=>{const n=rt(e);null===n||pt(e,n)||e.undoManager.transact((()=>{r(t.styles)&&e.dom.setStyles(n,t.styles),r(t.attrs)&&Ne(t.attrs,((t,o)=>e.dom.setAttrib(n,o,t)))}))})(e,n)})),e.addQueryStateHandler("InsertUnorderedList",vn(e,"UL")),e.addQueryStateHandler("InsertOrderedList",vn(e,"OL")),e.addQueryStateHandler("InsertDefinitionList",vn(e,"DL"))})(e)),(e=>{const t=t=>()=>e.execCommand(t);e.hasPlugin("advlist")||(e.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:t("InsertOrderedList"),onSetup:On(e,"OL")}),e.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:t("InsertUnorderedList"),onSetup:On(e,"UL")}))})(e),(e=>{const t={text:"List properties...",icon:"ordered-list",onAction:()=>e.execCommand("mceListProps"),onSetup:An(e,"OL")};e.ui.registry.addMenuItem("listprops",t),e.ui.registry.addContextMenu("lists",{update:t=>{const n=rt(e,t);return Pe(n)?["listprops"]:[]}})})(e),(e=>({backspaceDelete:t=>{gn(e,t)}}))(e))))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/media/plugin.min.js b/apps/web-antd/public/tinymce/plugins/media/plugin.min.js new file mode 100644 index 000000000..5a3107660 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/media/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=o=e,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":t;var r,o,a,s})(t)===e,r=t("string"),o=t("object"),a=t("array"),s=e=>!(e=>null==e)(e);class i{constructor(e,t){this.tag=e,this.value=t}static some(e){return new i(!0,e)}static none(){return i.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?i.some(e(this.value)):i.none()}bind(e){return this.tag?e(this.value):i.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:i.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?i.some(e):i.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}i.singletonNone=new i(!1);const n=Array.prototype.push,l=(e,t)=>{for(let r=0,o=e.length;r{const t=[];for(let r=0,o=e.length;rh(e,t)?i.from(e[t]):i.none(),h=(e,t)=>u.call(e,t),p=e=>t=>t.options.get(e),g=p("audio_template_callback"),b=p("video_template_callback"),w=p("iframe_template_callback"),v=p("media_live_embeds"),f=p("media_filter_html"),y=p("media_url_resolver"),x=p("media_alt_source"),_=p("media_poster"),k=p("media_dimensions");var j=tinymce.util.Tools.resolve("tinymce.util.Tools"),O=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),A=tinymce.util.Tools.resolve("tinymce.html.DomParser");const S=O.DOM,$=e=>e.replace(/px$/,""),C=e=>{const t=e.attr("style"),r=t?S.parseStyle(t):{};return{type:"ephox-embed-iri",source:e.attr("data-ephox-embed-iri"),altsource:"",poster:"",width:d(r,"max-width").map($).getOr(""),height:d(r,"max-height").map($).getOr("")}},T=(e,t)=>{let r={};for(let o=A({validate:!1,forced_root_block:!1},t).parse(e);o;o=o.walk())if(1===o.type){const e=o.name;if(o.attr("data-ephox-embed-iri")){r=C(o);break}r.source||"param"!==e||(r.source=o.attr("movie")),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(r.type||(r.type=e),r=j.extend(o.attributes.map,r)),"source"===e&&(r.source?r.altsource||(r.altsource=o.attr("src")):r.source=o.attr("src")),"img"!==e||r.poster||(r.poster=o.attr("src"))}return r.source=r.source||r.src||"",r.altsource=r.altsource||"",r.poster=r.poster||"",r},z=e=>{var t;const r=null!==(t=e.toLowerCase().split(".").pop())&&void 0!==t?t:"";return d({mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"},r).getOr("")};var D=tinymce.util.Tools.resolve("tinymce.html.Node"),F=tinymce.util.Tools.resolve("tinymce.html.Serializer");const M=(e,t={})=>A({forced_root_block:!1,validate:!1,allow_conditional_comments:!0,...t},e),N=O.DOM,P=e=>/^[0-9.]+$/.test(e)?e+"px":e,R=(e,t)=>{const r=t.attr("style"),o=r?N.parseStyle(r):{};s(e.width)&&(o["max-width"]=P(e.width)),s(e.height)&&(o["max-height"]=P(e.height)),t.attr("style",N.serializeStyle(o))},E=["source","altsource"],U=(e,t,r,o)=>{let a=0,s=0;const i=M(o);i.addNodeFilter("source",(e=>a=e.length));const n=i.parse(e);for(let e=n;e;e=e.walk())if(1===e.type){const o=e.name;if(e.attr("data-ephox-embed-iri")){R(t,e);break}switch(o){case"video":case"object":case"embed":case"img":case"iframe":void 0!==t.height&&void 0!==t.width&&(e.attr("width",t.width),e.attr("height",t.height))}if(r)switch(o){case"video":e.attr("poster",t.poster),e.attr("src",null);for(let r=a;r<2;r++)if(t[E[r]]){const o=new D("source",1);o.attr("src",t[E[r]]),o.attr("type",t[E[r]+"mime"]||null),e.append(o)}break;case"iframe":e.attr("src",t.source);break;case"object":const r=e.getAll("img").length>0;if(t.poster&&!r){e.attr("src",t.poster);const r=new D("img",1);r.attr("src",t.poster),r.attr("width",t.width),r.attr("height",t.height),e.append(r)}break;case"source":if(s<2&&(e.attr("src",t[E[s]]),e.attr("type",t[E[s]+"mime"]||null),!t[E[s]])){e.remove();continue}s++;break;case"img":t.poster||e.remove()}}return F({},o).serialize(n)},L=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?h=$3&title=0&byline=0",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?title=0&byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=(e,t)=>{const r=(e=>{const t=e.match(/^(https?:\/\/|www\.)(.+)$/i);return t&&t.length>1?"www."===t[1]?"https://":t[1]:"https://"})(t),o=e.regex.exec(t);let a=r+e.url;if(s(o))for(let e=0;eo[e]?o[e]:""));return a.replace(/\?$/,"")},B=e=>{const t=L.filter((t=>t.regex.test(e)));return t.length>0?j.extend({},t[0],{url:I(t[0],e)}):null},G=(e,t)=>{var r;const o=j.extend({},t);if(!o.source&&(j.extend(o,T(null!==(r=o.embed)&&void 0!==r?r:"",e.schema)),!o.source))return"";o.altsource||(o.altsource=""),o.poster||(o.poster=""),o.source=e.convertURL(o.source,"source"),o.altsource=e.convertURL(o.altsource,"source"),o.sourcemime=z(o.source),o.altsourcemime=z(o.altsource),o.poster=e.convertURL(o.poster,"poster");const a=B(o.source);if(a&&(o.source=a.url,o.type=a.type,o.allowfullscreen=a.allowFullscreen,o.width=o.width||String(a.w),o.height=o.height||String(a.h)),o.embed)return U(o.embed,o,!0,e.schema);{const t=g(e),r=b(e),a=w(e);return o.width=o.width||"300",o.height=o.height||"150",j.each(o,((t,r)=>{o[r]=e.dom.encode(""+t)})),"iframe"===o.type?((e,t)=>{if(t)return t(e);{const t=e.allowfullscreen?' allowFullscreen="1"':"";return'"}})(o,a):"application/x-shockwave-flash"===o.sourcemime?(e=>{let t='';return e.poster&&(t+=''),t+="",t})(o):-1!==o.sourcemime.indexOf("audio")?((e,t)=>t?t(e):'")(o,t):((e,t)=>t?t(e):'")(o,r)}},W=e=>e.hasAttribute("data-mce-object")||e.hasAttribute("data-ephox-embed-iri"),q={},H=e=>t=>G(e,t),J=(e,t)=>{const r=y(e);return r?((e,t,r)=>new Promise(((o,a)=>{const s=r=>(r.html&&(q[e.source]=r),o({url:e.source,html:r.html?r.html:t(e)}));q[e.source]?s(q[e.source]):r({url:e.source}).then(s).catch(a)})))(t,H(e),r):((e,t)=>Promise.resolve({html:t(e),url:e.source}))(t,H(e))},K=(e,t)=>{const r={};return d(e,"dimensions").each((e=>{l(["width","height"],(o=>{d(t,o).orThunk((()=>d(e,o))).each((e=>r[o]=e))}))})),r},Q=(e,t)=>{const r=t&&"dimensions"!==t?((e,t)=>d(t,e).bind((e=>d(e,"meta"))))(t,e).getOr({}):{},a=((e,t,r)=>a=>{const s=()=>d(e,a),n=()=>d(t,a),l=e=>d(e,"value").bind((e=>e.length>0?i.some(e):i.none()));return{[a]:(a===r?s().bind((e=>o(e)?l(e).orThunk(n):n().orThunk((()=>i.from(e))))):n().orThunk((()=>s().bind((e=>o(e)?l(e):i.from(e)))))).getOr("")}})(e,r,t);return{...a("source"),...a("altsource"),...a("poster"),...a("embed"),...K(e,r)}},V=e=>{const t={...e,source:{value:d(e,"source").getOr("")},altsource:{value:d(e,"altsource").getOr("")},poster:{value:d(e,"poster").getOr("")}};return l(["width","height"],(r=>{d(e,r).each((e=>{const o=t.dimensions||{};o[r]=e,t.dimensions=o}))})),t},X=e=>t=>{const r=t&&t.msg?"Media embed handler error: "+t.msg:"Media embed handler threw unknown error.";e.notificationManager.open({type:"error",text:r})},Y=(e,t)=>o=>{if(r(o.url)&&o.url.trim().length>0){const r=o.html,a={...T(r,t.schema),source:o.url,embed:r};e.setData(V(a))}},Z=(e,t)=>{const r=e.dom.select("*[data-mce-object]");e.insertContent(t),((e,t)=>{const r=e.dom.select("*[data-mce-object]");for(let e=0;e=0;o--)t[e]===r[o]&&r.splice(o,1);e.selection.select(r[0])})(e,r),e.nodeChanged()},ee=(e,t)=>s(t)&&"ephox-embed-iri"===t&&s(B(e)),te=(e,t)=>((e,t)=>e.width!==t.width||e.height!==t.height)(e,t)&&ee(t.source,e.type),re=e=>{const t=(e=>{const t=e.selection.getNode(),r=W(t)?e.serializer.serialize(t,{selection:!0}):"",o=T(r,e.schema),a=(()=>{if(ee(o.source,o.type)){const r=e.dom.getRect(t);return{width:r.w.toString().replace(/px$/,""),height:r.h.toString().replace(/px$/,"")}}return{}})();return{embed:r,...o,...a}})(e),r=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})(t),o=V(t),a=k(e)?[{type:"sizeinput",name:"dimensions",label:"Constrain proportions",constrain:!0}]:[],s={title:"General",name:"general",items:c([[{name:"source",type:"urlinput",filetype:"media",label:"Source",picker_text:"Browse files"}],a])},i=[];x(e)&&i.push({name:"altsource",type:"urlinput",filetype:"media",label:"Alternative source URL"}),_(e)&&i.push({name:"poster",type:"urlinput",filetype:"image",label:"Media poster (Image URL)"});const n={title:"Advanced",name:"advanced",items:i},l=[s,{title:"Embed",items:[{type:"textarea",name:"embed",label:"Paste your embed code below:"}]}];i.length>0&&l.push(n);const m={type:"tabpanel",tabs:l},u=e.windowManager.open({title:"Insert/Edit Media",size:"normal",body:m,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:t=>{const o=Q(t.getData());((e,t,r)=>{var o,a;t.embed=te(e,t)&&k(r)?G(r,{...t,embed:""}):U(null!==(o=t.embed)&&void 0!==o?o:"",t,!1,r.schema),t.embed&&(e.source===t.source||(a=t.source,h(q,a)))?Z(r,t.embed):J(r,t).then((e=>{Z(r,e.html)})).catch(X(r))})(r.get(),o,e),t.close()},onChange:(t,o)=>{switch(o.name){case"source":((t,r)=>{const o=Q(r.getData(),"source");t.source!==o.source&&(Y(u,e)({url:o.source,html:""}),J(e,o).then(Y(u,e)).catch(X(e)))})(r.get(),t);break;case"embed":(t=>{var r;const o=Q(t.getData()),a=T(null!==(r=o.embed)&&void 0!==r?r:"",e.schema);t.setData(V(a))})(t);break;case"dimensions":case"altsource":case"poster":((t,r,o)=>{const a=Q(t.getData(),r),s=te(o,a)&&k(e)?{...a,embed:""}:a,i=G(e,s);t.setData(V({...s,embed:i}))})(t,o.name,r.get())}r.set(Q(t.getData()))},initialData:o})};var oe=tinymce.util.Tools.resolve("tinymce.Env");const ae=e=>{const t=e.name;return"iframe"===t||"video"===t||"audio"===t},se=(e,t,r,o=null)=>{const a=e.attr(r);return s(a)?a:h(t,r)?null:o},ie=(e,t,r)=>{const o="img"===t.name||"video"===e.name,a=o?"300":null,s="audio"===e.name?"30":"150",i=o?s:null;t.attr({width:se(e,r,"width",a),height:se(e,r,"height",i)})},ne=(e,t)=>{const r=t.name,o=new D("img",1);return ce(e,t,o),ie(t,o,{}),o.attr({style:t.attr("style"),src:oe.transparentSrc,"data-mce-object":r,class:"mce-object mce-object-"+r}),o},le=(e,t)=>{var r;const o=t.name,a=new D("span",1);a.attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,class:"mce-preview-object mce-object-"+o}),ce(e,t,a);const i=e.dom.parseStyle(null!==(r=t.attr("style"))&&void 0!==r?r:""),n=new D(o,1);if(ie(t,n,i),n.attr({src:t.attr("src"),style:t.attr("style"),class:t.attr("class")}),"iframe"===o)n.attr({allowfullscreen:t.attr("allowfullscreen"),frameborder:"0",sandbox:t.attr("sandbox"),referrerpolicy:t.attr("referrerpolicy")});else{l(["controls","crossorigin","currentTime","loop","muted","poster","preload"],(e=>{n.attr(e,t.attr(e))}));const r=a.attr("data-mce-html");s(r)&&((e,t,r,o)=>{const a=M(e.schema).parse(o,{context:t});for(;a.firstChild;)r.append(a.firstChild)})(e,o,n,unescape(r))}const c=new D("span",1);return c.attr("class","mce-shim"),a.append(n),a.append(c),a},ce=(e,t,r)=>{var o;const a=null!==(o=t.attributes)&&void 0!==o?o:[];let s=a.length;for(;s--;){const t=a[s].name;let o=a[s].value;"width"===t||"height"===t||"style"===t||(n="data-mce-",(i=t).length>=9&&i.substr(0,9)===n)||("data"!==t&&"src"!==t||(o=e.convertURL(o,t)),r.attr("data-mce-p-"+t,o))}var i,n;const c=F({inner:!0},e.schema),m=new D("div",1);l(t.children(),(e=>m.append(e)));const u=c.serialize(m);u&&(r.attr("data-mce-html",escape(u)),r.empty())},me=e=>{const t=e.attr("class");return r(t)&&/\btiny-pageembed\b/.test(t)},ue=e=>{let t=e;for(;t=t.parent;)if(t.attr("data-ephox-embed-iri")||me(t))return!0;return!1},de=(e,t,r)=>{const o=(0,e.options.get)("xss_sanitization"),a=f(e);return M(e.schema,{sanitize:o,validate:a}).parse(r,{context:t})},he=e=>t=>{const r=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",r),r(),()=>{e.off("NodeChange",r)}};e.add("media",(e=>((e=>{const t=e.options.register;t("audio_template_callback",{processor:"function"}),t("video_template_callback",{processor:"function"}),t("iframe_template_callback",{processor:"function"}),t("media_live_embeds",{processor:"boolean",default:!0}),t("media_filter_html",{processor:"boolean",default:!0}),t("media_url_resolver",{processor:"function"}),t("media_alt_source",{processor:"boolean",default:!0}),t("media_poster",{processor:"boolean",default:!0}),t("media_dimensions",{processor:"boolean",default:!0})})(e),(e=>{e.addCommand("mceMedia",(()=>{re(e)}))})(e),(e=>{const t=()=>e.execCommand("mceMedia");e.ui.registry.addToggleButton("media",{tooltip:"Insert/edit media",icon:"embed",onAction:t,onSetup:t=>{const r=e.selection;t.setActive(W(r.getNode()));const o=r.selectorChangedWithUnbind("img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]",t.setActive).unbind,a=he(e)(t);return()=>{o(),a()}}}),e.ui.registry.addMenuItem("media",{icon:"embed",text:"Media...",onAction:t,onSetup:he(e)})})(e),(e=>{e.on("ResolveName",(e=>{let t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}))})(e),(e=>{e.on("PreInit",(()=>{const{schema:t,serializer:r,parser:o}=e,a=t.getBoolAttrs();l("webkitallowfullscreen mozallowfullscreen".split(" "),(e=>{a[e]={}})),((e,t)=>{const r=m(e);for(let o=0,a=r.length;o{const o=t.getElementRule(r);o&&l(e,(e=>{o.attributes[e]={},o.attributesOrder.push(e)}))})),o.addNodeFilter("iframe,video,audio,object,embed",(e=>t=>{let r,o=t.length;for(;o--;)r=t[o],r.parent&&(r.parent.attr("data-mce-object")||(ae(r)&&v(e)?ue(r)||r.replace(le(e,r)):ue(r)||r.replace(ne(e,r))))})(e)),r.addAttributeFilter("data-mce-object",((t,r)=>{var o;let a=t.length;for(;a--;){const s=t[a];if(!s.parent)continue;const i=s.attr(r),n=new D(i,1);if("audio"!==i){const e=s.attr("class");e&&-1!==e.indexOf("mce-preview-object")&&s.firstChild?n.attr({width:s.firstChild.attr("width"),height:s.firstChild.attr("height")}):n.attr({width:s.attr("width"),height:s.attr("height")})}n.attr({style:s.attr("style")});const c=null!==(o=s.attributes)&&void 0!==o?o:[];let m=c.length;for(;m--;){const e=c[m].name;0===e.indexOf("data-mce-p-")&&n.attr(e.substr(11),c[m].value)}const u=s.attr("data-mce-html");if(u){const t=de(e,i,unescape(u));l(t.children(),(e=>n.append(e)))}s.replace(n)}}))})),e.on("SetContent",(()=>{const t=e.dom;l(t.select("span.mce-preview-object"),(e=>{0===t.select("span.mce-shim",e).length&&t.add(e,"span",{class:"mce-shim"})}))}))})(e),(e=>{e.on("mousedown",(t=>{const r=e.dom.getParent(t.target,".mce-preview-object");r&&"2"===e.dom.getAttrib(r,"data-mce-selected")&&t.stopImmediatePropagation()})),e.on("click keyup touchend",(()=>{const t=e.selection.getNode();t&&e.dom.hasClass(t,"mce-preview-object")&&e.dom.getAttrib(t,"data-mce-selected")&&t.setAttribute("data-mce-selected","2")})),e.on("ObjectResized",(t=>{const r=t.target;if(r.getAttribute("data-mce-object")){let o=r.getAttribute("data-mce-html");o&&(o=unescape(o),r.setAttribute("data-mce-html",escape(U(o,{width:String(t.width),height:String(t.height)},!1,e.schema))))}}))})(e),(e=>({showDialog:()=>{re(e)}}))(e))))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/nonbreaking/plugin.min.js b/apps/web-antd/public/tinymce/plugins/nonbreaking/plugin.min.js new file mode 100644 index 000000000..048e6d758 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/nonbreaking/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=n=>e=>typeof e===n,o=e("boolean"),a=e("number"),t=n=>e=>e.options.get(n),i=t("nonbreaking_force_tab"),s=t("nonbreaking_wrap"),r=(n,e)=>{let o="";for(let a=0;a{const o=s(n)||n.plugins.visualchars?`${r(" ",e)}`:r(" ",e);n.undoManager.transact((()=>n.insertContent(o)))};var l=tinymce.util.Tools.resolve("tinymce.util.VK");const u=n=>e=>{const o=()=>{e.setEnabled(n.selection.isEditable())};return n.on("NodeChange",o),o(),()=>{n.off("NodeChange",o)}};n.add("nonbreaking",(n=>{(n=>{const e=n.options.register;e("nonbreaking_force_tab",{processor:n=>o(n)?{value:n?3:0,valid:!0}:a(n)?{value:n,valid:!0}:{valid:!1,message:"Must be a boolean or number."},default:!1}),e("nonbreaking_wrap",{processor:"boolean",default:!0})})(n),(n=>{n.addCommand("mceNonBreaking",(()=>{c(n,1)}))})(n),(n=>{const e=()=>n.execCommand("mceNonBreaking");n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:e,onSetup:u(n)}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:e,onSetup:u(n)})})(n),(n=>{const e=i(n);e>0&&n.on("keydown",(o=>{if(o.keyCode===l.TAB&&!o.isDefaultPrevented()){if(o.shiftKey)return;o.preventDefault(),o.stopImmediatePropagation(),c(n,e)}}))})(n)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/pagebreak/plugin.min.js b/apps/web-antd/public/tinymce/plugins/pagebreak/plugin.min.js new file mode 100644 index 000000000..b49834234 --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/pagebreak/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env");const t=e=>a=>a.options.get(e),n=t("pagebreak_separator"),o=t("pagebreak_split_block"),r="mce-pagebreak",s=e=>{const t=``;return e?`

    ${t}

    `:t},c=e=>a=>{const t=()=>{a.setEnabled(e.selection.isEditable())};return e.on("NodeChange",t),t(),()=>{e.off("NodeChange",t)}};e.add("pagebreak",(e=>{(e=>{const a=e.options.register;a("pagebreak_separator",{processor:"string",default:"\x3c!-- pagebreak --\x3e"}),a("pagebreak_split_block",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mcePageBreak",(()=>{e.insertContent(s(o(e)))}))})(e),(e=>{const a=()=>e.execCommand("mcePageBreak");e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:a,onSetup:c(e)}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:a,onSetup:c(e)})})(e),(e=>{const a=n(e),t=()=>o(e),c=new RegExp(a.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,(e=>"\\"+e)),"gi");e.on("BeforeSetContent",(e=>{e.content=e.content.replace(c,s(t()))})),e.on("PreInit",(()=>{e.serializer.addNodeFilter("img",(n=>{let o,s,c=n.length;for(;c--;)if(o=n[c],s=o.attr("class"),s&&-1!==s.indexOf(r)){const n=o.parent;if(n&&e.schema.getBlockElements()[n.name]&&t()){n.type=3,n.value=a,n.raw=!0,o.remove();continue}o.type=3,o.value=a,o.raw=!0}}))}))})(e),(e=>{e.on("ResolveName",(a=>{"IMG"===a.target.nodeName&&e.dom.hasClass(a.target,r)&&(a.name="pagebreak")}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-antd/public/tinymce/plugins/preview/plugin.min.js b/apps/web-antd/public/tinymce/plugins/preview/plugin.min.js new file mode 100644 index 000000000..41e98916e --- /dev/null +++ b/apps/web-antd/public/tinymce/plugins/preview/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>undefined===e;class r{constructor(e,t){this.tag=e,this.value=t}static some(e){return new r(!0,e)}static none(){return r.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?r.some(e(this.value)):r.none()}bind(e){return this.tag?e(this.value):r.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:r.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?r.none():r.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}r.singletonNone=new r(!1);const n=e=>()=>e,s=n(!1),i=(e,t)=>((e,t,n)=>{for(let s=0,i=e.length;sa(0,0),a=(e,t)=>({major:e,minor:t}),c={nu:a,detect:(e,t)=>{const r=String(t).toLowerCase();return 0===e.length?o():((e,t)=>{const r=((e,t)=>{for(let r=0;rNumber(t.replace(r,"$"+e));return a(n(1),n(2))})(e,r)},unknown:o},u=(e,t)=>{const r=String(t).toLowerCase();return i(e,(e=>e.search(r)))},d=(e,r,n=0,s)=>{const i=e.indexOf(r,n);return-1!==i&&(!!t(s)||i+r.length<=s)},l=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,h=e=>t=>d(t,e),m=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>d(e,"edge/")&&d(e,"chrome")&&d(e,"safari")&&d(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,l],search:e=>d(e,"chrome")&&!d(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>d(e,"msie")||d(e,"trident")},{name:"Opera",versionRegexes:[l,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:h("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:h("firefox")},{name:"Safari",versionRegexes:[l,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(d(e,"safari")||d(e,"mobile/"))&&d(e,"applewebkit")}],v=[{name:"Windows",search:h("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>d(e,"iphone")||d(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:h("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:h("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:h("linux"),versionRegexes:[]},{name:"Solaris",search:h("sunos"),versionRegexes:[]},{name:"FreeBSD",search:h("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:h("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],g={browsers:n(m),oses:n(v)},p="Edge",w="Chromium",f="Opera",x="Firefox",S="Safari",y=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isEdge:n(p),isChromium:n(w),isIE:n("IE"),isOpera:n(f),isFirefox:n(x),isSafari:n(S)}},b=()=>y({current:void 0,version:c.unknown()}),O=y,R=(n(p),n(w),n("IE"),n(f),n(x),n(S),"Windows"),C="Android",A="Linux",k="macOS",D="Solaris",E="FreeBSD",I="ChromeOS",P=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isWindows:n(R),isiOS:n("iOS"),isAndroid:n(C),isMacOS:n(k),isLinux:n(A),isSolaris:n(D),isFreeBSD:n(E),isChromeOS:n(I)}},T=()=>P({current:void 0,version:c.unknown()}),_=P,B=(n(R),n("iOS"),n(C),n(A),n(k),n(D),n(E),n(I),(e,t,s)=>{const o=g.browsers(),a=g.oses(),d=t.bind((e=>((e,t)=>((e,t)=>{for(let r=0;r{const r=t.brand.toLowerCase();return i(e,(e=>{var t;return r===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:c.nu(parseInt(t.version,10),0)})))})))(o,e))).orThunk((()=>((e,t)=>u(e,t).map((e=>{const r=c.detect(e.versionRegexes,t);return{current:e.name,version:r}})))(o,e))).fold(b,O),l=((e,t)=>u(e,t).map((e=>{const r=c.detect(e.versionRegexes,t);return{current:e.name,version:r}})))(a,e).fold(T,_),h=((e,t,r,s)=>{const i=e.isiOS()&&!0===/ipad/i.test(r),o=e.isiOS()&&!i,a=e.isiOS()||e.isAndroid(),c=a||s("(pointer:coarse)"),u=i||!o&&a&&s("(min-device-width:768px)"),d=o||a&&!u,l=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(r),h=!d&&!u&&!l;return{isiPad:n(i),isiPhone:n(o),isTablet:n(u),isPhone:n(d),isTouch:n(c),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:n(l),isDesktop:n(h)}})(l,d,e,s);return{browser:d,os:l,deviceType:h}}),L=e=>window.matchMedia(e).matches;let N=(e=>{let t,r=!1;return(...n)=>(r||(r=!0,t=e.apply(null,n)),t)})((()=>B(window.navigator.userAgent,r.from(window.navigator.userAgentData),L)));const F=()=>N();var M=tinymce.util.Tools.resolve("tinymce.util.Tools");const $=e=>t=>t.options.get(e),W=$("content_style"),U=$("content_css_cors"),K=$("body_class"),j=$("body_id"),V=e=>{const t=(e=>{var t;let r="";const n=e.dom.encode,s=null!==(t=W(e))&&void 0!==t?t:"";r+=``;const i=U(e)?' crossorigin="anonymous"':"";M.each(e.contentCSS,(t=>{r+='"})),s&&(r+='");const o=j(e),a=K(e),c=e.getBody().dir,u=c?' dir="'+n(c)+'"':"";return""+r+'"+e.getContent()+(()=>{const e=F().os.isMacOS()||F().os.isiOS();return` + + diff --git a/apps/web-antd/src/components/cron-tab/index.ts b/apps/web-antd/src/components/cron-tab/index.ts new file mode 100644 index 000000000..8f4baae59 --- /dev/null +++ b/apps/web-antd/src/components/cron-tab/index.ts @@ -0,0 +1 @@ +export { default as CronTab } from './cron-tab.vue'; diff --git a/apps/web-antd/src/components/cropper/cropper.vue b/apps/web-antd/src/components/cropper/cropper.vue new file mode 100644 index 000000000..cc8836c9f --- /dev/null +++ b/apps/web-antd/src/components/cropper/cropper.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/apps/web-antd/src/components/cropper/index.ts b/apps/web-antd/src/components/cropper/index.ts new file mode 100644 index 000000000..43fd89ff3 --- /dev/null +++ b/apps/web-antd/src/components/cropper/index.ts @@ -0,0 +1,3 @@ +export { default as CropperAvatar } from './cropper-avatar.vue'; +export { default as CropperImage } from './cropper.vue'; +export type { CropperType } from './typing'; diff --git a/apps/web-antd/src/components/cropper/typing.ts b/apps/web-antd/src/components/cropper/typing.ts new file mode 100644 index 000000000..f471274b4 --- /dev/null +++ b/apps/web-antd/src/components/cropper/typing.ts @@ -0,0 +1,68 @@ +import type { ButtonProps } from 'ant-design-vue'; +import type Cropper from 'cropperjs'; + +import type { CSSProperties } from 'vue'; + +export interface apiFunParams { + file: Blob; + filename: string; + name: string; +} + +export interface CropendResult { + imgBase64: string; + imgInfo: Cropper.Data; +} + +export interface CropperProps { + src?: string; + alt?: string; + circled?: boolean; + realTimePreview?: boolean; + height?: number | string; + crossorigin?: '' | 'anonymous' | 'use-credentials' | undefined; + imageStyle?: CSSProperties; + options?: Cropper.Options; +} + +export interface CropperAvatarProps { + width?: number | string; + value?: string; + showBtn?: boolean; + btnProps?: ButtonProps; + btnText?: string; + uploadApi?: (params: apiFunParams) => Promise; + size?: number; +} + +export interface CropperModalProps { + circled?: boolean; + uploadApi?: (params: apiFunParams) => Promise; + src?: string; + size?: number; +} + +export const defaultOptions: Cropper.Options = { + aspectRatio: 1, + zoomable: true, + zoomOnTouch: true, + zoomOnWheel: true, + cropBoxMovable: true, + cropBoxResizable: true, + toggleDragModeOnDblclick: true, + autoCrop: true, + background: true, + highlight: true, + center: true, + responsive: true, + restore: true, + checkCrossOrigin: true, + checkOrientation: true, + scalable: true, + modal: true, + guides: true, + movable: true, + rotatable: true, +}; + +export type { Cropper as CropperType }; diff --git a/apps/web-antd/src/components/description/index.ts b/apps/web-antd/src/components/description/index.ts new file mode 100644 index 000000000..a707c4865 --- /dev/null +++ b/apps/web-antd/src/components/description/index.ts @@ -0,0 +1,3 @@ +export { default as Description } from './description.vue'; +export * from './typing'; +export { useDescription } from './use-description'; diff --git a/apps/web-antd/src/components/dict-tag/index.ts b/apps/web-antd/src/components/dict-tag/index.ts new file mode 100644 index 000000000..881265a39 --- /dev/null +++ b/apps/web-antd/src/components/dict-tag/index.ts @@ -0,0 +1 @@ +export { default as DictTag } from './dict-tag.vue'; diff --git a/apps/web-antd/src/components/form-create/rules/data.ts b/apps/web-antd/src/components/form-create/rules/data.ts new file mode 100644 index 000000000..3d34bf7af --- /dev/null +++ b/apps/web-antd/src/components/form-create/rules/data.ts @@ -0,0 +1,182 @@ +/* eslint-disable no-template-curly-in-string */ +const selectRule = [ + { + type: 'select', + field: 'selectType', + title: '选择器类型', + value: 'select', + options: [ + { label: '下拉框', value: 'select' }, + { label: '单选框', value: 'radio' }, + { label: '多选框', value: 'checkbox' }, + ], + // 参考 https://www.form-create.com/v3/guide/control 组件联动,单选框和多选框不需要多选属性 + control: [ + { + value: 'select', + condition: '==', + method: 'hidden', + rule: [ + 'multiple', + 'clearable', + 'collapseTags', + 'multipleLimit', + 'allowCreate', + 'filterable', + 'noMatchText', + 'remote', + 'remoteMethod', + 'reserveKeyword', + 'defaultFirstOption', + 'automaticDropdown', + ], + }, + ], + }, + { + type: 'switch', + field: 'filterable', + title: '是否可搜索', + }, + { type: 'switch', field: 'multiple', title: '是否多选' }, + { + type: 'switch', + field: 'disabled', + title: '是否禁用', + }, + { type: 'switch', field: 'clearable', title: '是否可以清空选项' }, + { + type: 'switch', + field: 'collapseTags', + title: '多选时是否将选中值按文字的形式展示', + }, + { + type: 'inputNumber', + field: 'multipleLimit', + title: '多选时用户最多可以选择的项目数,为 0 则不限制', + props: { min: 0 }, + }, + { + type: 'input', + field: 'autocomplete', + title: 'autocomplete 属性', + }, + { type: 'input', field: 'placeholder', title: '占位符' }, + { type: 'switch', field: 'allowCreate', title: '是否允许用户创建新条目' }, + { + type: 'input', + field: 'noMatchText', + title: '搜索条件无匹配时显示的文字', + }, + { type: 'input', field: 'noDataText', title: '选项为空时显示的文字' }, + { + type: 'switch', + field: 'reserveKeyword', + title: '多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词', + }, + { + type: 'switch', + field: 'defaultFirstOption', + title: '在输入框按下回车,选择第一个匹配项', + }, + { + type: 'switch', + field: 'popperAppendToBody', + title: '是否将弹出框插入至 body 元素', + value: true, + }, + { + type: 'switch', + field: 'automaticDropdown', + title: '对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单', + }, +]; + +const apiSelectRule = [ + { + type: 'input', + field: 'url', + title: 'url 地址', + props: { + placeholder: '/system/user/simple-list', + }, + }, + { + type: 'select', + field: 'method', + title: '请求类型', + value: 'GET', + options: [ + { label: 'GET', value: 'GET' }, + { label: 'POST', value: 'POST' }, + ], + control: [ + { + value: 'GET', + condition: '!=', + method: 'hidden', + rule: [ + { + type: 'input', + field: 'data', + title: '请求参数 JSON 格式', + props: { + autoSize: true, + type: 'textarea', + placeholder: '{"type": 1}', + }, + }, + ], + }, + ], + }, + { + type: 'input', + field: 'labelField', + title: 'label 属性', + info: '可以使用 el 表达式:${属性},来实现复杂数据组合。如:${nickname}-${id}', + props: { + placeholder: 'nickname', + }, + }, + { + type: 'input', + field: 'valueField', + title: 'value 属性', + info: '可以使用 el 表达式:${属性},来实现复杂数据组合。如:${nickname}-${id}', + props: { + placeholder: 'id', + }, + }, + { + type: 'input', + field: 'parseFunc', + title: '选项解析函数', + info: `data 为接口返回值,需要写一个匿名函数解析返回值为选择器 options 列表 + (data: any)=>{ label: string; value: any }[]`, + props: { + autoSize: true, + rows: { minRows: 2, maxRows: 6 }, + type: 'textarea', + placeholder: ` + function (data) { + console.log(data) + return data.list.map(item=> ({label: item.nickname,value: item.id})) + }`, + }, + }, + { + type: 'switch', + field: 'remote', + info: '是否可搜索', + title: '其中的选项是否从服务器远程加载', + }, + { + type: 'input', + field: 'remoteField', + title: '请求参数', + info: '远程请求时请求携带的参数名称,如:name', + }, +]; + +export { apiSelectRule, selectRule }; diff --git a/apps/web-antd/src/components/form-create/rules/index.ts b/apps/web-antd/src/components/form-create/rules/index.ts new file mode 100644 index 000000000..db306da35 --- /dev/null +++ b/apps/web-antd/src/components/form-create/rules/index.ts @@ -0,0 +1,6 @@ +export { useDictSelectRule } from './use-dict-select'; +export { useEditorRule } from './use-editor-rule'; +export { useSelectRule } from './use-select-rule'; +export { useUploadFileRule } from './use-upload-file-rule'; +export { useUploadImageRule } from './use-upload-image-rule'; +export { useUploadImagesRule } from './use-upload-images-rule'; diff --git a/apps/web-antd/src/components/markdown-view/index.ts b/apps/web-antd/src/components/markdown-view/index.ts new file mode 100644 index 000000000..742bce8f5 --- /dev/null +++ b/apps/web-antd/src/components/markdown-view/index.ts @@ -0,0 +1,3 @@ +export { default as MarkdownView } from './markdown-view.vue'; + +export * from './typing'; diff --git a/apps/web-antd/src/components/markdown-view/markdown-view.vue b/apps/web-antd/src/components/markdown-view/markdown-view.vue new file mode 100644 index 000000000..373957a69 --- /dev/null +++ b/apps/web-antd/src/components/markdown-view/markdown-view.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/apps/web-antd/src/components/markdown-view/typing.ts b/apps/web-antd/src/components/markdown-view/typing.ts new file mode 100644 index 000000000..350bbcf3a --- /dev/null +++ b/apps/web-antd/src/components/markdown-view/typing.ts @@ -0,0 +1,3 @@ +export type MarkdownViewProps = { + content: string; +}; diff --git a/apps/web-antd/src/components/operate-log/typing.ts b/apps/web-antd/src/components/operate-log/typing.ts new file mode 100644 index 000000000..773237b96 --- /dev/null +++ b/apps/web-antd/src/components/operate-log/typing.ts @@ -0,0 +1,5 @@ +import type { SystemOperateLogApi } from '#/api/system/operate-log'; + +export interface OperateLogProps { + logList: SystemOperateLogApi.OperateLog[]; // 操作日志列表 +} diff --git a/apps/web-antd/src/components/select-modal/dept-select-modal.vue b/apps/web-antd/src/components/select-modal/dept-select-modal.vue new file mode 100644 index 000000000..09cea78ef --- /dev/null +++ b/apps/web-antd/src/components/select-modal/dept-select-modal.vue @@ -0,0 +1,143 @@ +// TODO @芋艿:是否有更好的组织形式?! + + diff --git a/apps/web-antd/src/components/select-modal/index.ts b/apps/web-antd/src/components/select-modal/index.ts new file mode 100644 index 000000000..2b6e91893 --- /dev/null +++ b/apps/web-antd/src/components/select-modal/index.ts @@ -0,0 +1,2 @@ +export { default as DeptSelectModal } from './dept-select-modal.vue'; +export { default as UserSelectModal } from './user-select-modal.vue'; diff --git a/apps/web-antd/src/components/table-action/index.ts b/apps/web-antd/src/components/table-action/index.ts new file mode 100644 index 000000000..672c0a533 --- /dev/null +++ b/apps/web-antd/src/components/table-action/index.ts @@ -0,0 +1,4 @@ +export * from './icons'; + +export { default as TableAction } from './table-action.vue'; +export * from './typing'; diff --git a/apps/web-antd/src/components/table-action/typing.ts b/apps/web-antd/src/components/table-action/typing.ts new file mode 100644 index 000000000..1e44fb293 --- /dev/null +++ b/apps/web-antd/src/components/table-action/typing.ts @@ -0,0 +1,31 @@ +import type { + ButtonProps, + ButtonType, +} from 'ant-design-vue/es/button/buttonTypes'; +import type { TooltipProps } from 'ant-design-vue/es/tooltip/Tooltip'; + +export interface PopConfirm { + title: string; + okText?: string; + cancelText?: string; + confirm: () => void; + cancel?: () => void; + icon?: string; + disabled?: boolean; +} + +export interface ActionItem extends ButtonProps { + onClick?: () => void; + type?: ButtonType; + label?: string; + color?: 'error' | 'success' | 'warning'; + icon?: string; + popConfirm?: PopConfirm; + disabled?: boolean; + divider?: boolean; + // 权限编码控制是否显示 + auth?: string[]; + // 业务控制是否显示 + ifShow?: ((action: ActionItem) => boolean) | boolean; + tooltip?: string | TooltipProps; +} diff --git a/apps/web-antd/src/components/tinymce/helper.ts b/apps/web-antd/src/components/tinymce/helper.ts new file mode 100644 index 000000000..1f98dda46 --- /dev/null +++ b/apps/web-antd/src/components/tinymce/helper.ts @@ -0,0 +1,85 @@ +const validEvents = new Set([ + 'onActivate', + 'onAddUndo', + 'onBeforeAddUndo', + 'onBeforeExecCommand', + 'onBeforeGetContent', + 'onBeforePaste', + 'onBeforeRenderUI', + 'onBeforeSetContent', + 'onBlur', + 'onChange', + 'onClearUndos', + 'onClick', + 'onContextMenu', + 'onCopy', + 'onCut', + 'onDblclick', + 'onDeactivate', + 'onDirty', + 'onDrag', + 'onDragDrop', + 'onDragEnd', + 'onDragGesture', + 'onDragOver', + 'onDrop', + 'onExecCommand', + 'onFocus', + 'onFocusIn', + 'onFocusOut', + 'onGetContent', + 'onHide', + 'onInit', + 'onKeyDown', + 'onKeyPress', + 'onKeyUp', + 'onLoadContent', + 'onMouseDown', + 'onMouseEnter', + 'onMouseLeave', + 'onMouseMove', + 'onMouseOut', + 'onMouseOver', + 'onMouseUp', + 'onNodeChange', + 'onObjectResized', + 'onObjectResizeStart', + 'onObjectSelected', + 'onPaste', + 'onPostProcess', + 'onPostRender', + 'onPreProcess', + 'onProgressState', + 'onRedo', + 'onRemove', + 'onReset', + 'onSaveContent', + 'onSelectionChange', + 'onSetAttrib', + 'onSetContent', + 'onShow', + 'onSubmit', + 'onUndo', + 'onVisualAid', +]); + +const isValidKey = (key: string) => validEvents.has(key); + +export const bindHandlers = ( + initEvent: Event, + listeners: any, + editor: any, +): void => { + Object.keys(listeners) + .filter((element) => isValidKey(element)) + .forEach((key: string) => { + const handler = listeners[key]; + if (typeof handler === 'function') { + if (key === 'onInit') { + handler(initEvent, editor); + } else { + editor.on(key.slice(2), (e: any) => handler(e, editor)); + } + } + }); +}; diff --git a/apps/web-antd/src/components/tinymce/index.ts b/apps/web-antd/src/components/tinymce/index.ts new file mode 100644 index 000000000..c277d781d --- /dev/null +++ b/apps/web-antd/src/components/tinymce/index.ts @@ -0,0 +1 @@ +export { default as Tinymce } from './editor.vue'; diff --git a/apps/web-antd/src/components/tinymce/tinymce.ts b/apps/web-antd/src/components/tinymce/tinymce.ts new file mode 100644 index 000000000..45a867b61 --- /dev/null +++ b/apps/web-antd/src/components/tinymce/tinymce.ts @@ -0,0 +1,17 @@ +// Any plugins you want to setting has to be imported +// Detail plugins list see https://www.tiny.cloud/docs/plugins/ +// Custom builds see https://www.tiny.cloud/download/custom-builds/ +// colorpicker/contextmenu/textcolor plugin is now built in to the core editor, please remove it from your editor configuration + +export const plugins = + 'preview importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help emoticons accordion'; + +// 和 vben2.0 不同,从 https://www.tiny.cloud/ 拷贝 Vue 部分,然后去掉 importword exportword exportpdf | math 部分,并额外增加最后一行(来自 vben2.0 差异的部分) +export const toolbar = + 'undo redo | accordion accordionremove | \\\n' + + ' blocks fontfamily fontsize | bold italic underline strikethrough | \\\n' + + ' align numlist bullist | link image | table media | \\\n' + + ' lineheight outdent indent | forecolor backcolor removeformat | \\\n' + + ' charmap emoticons | code fullscreen preview | save print | \\\n' + + ' pagebreak anchor codesample | ltr rtl | \\\n' + + ' hr searchreplace alignleft aligncenter alignright blockquote subscript superscript'; diff --git a/apps/web-antd/src/components/upload/index.ts b/apps/web-antd/src/components/upload/index.ts new file mode 100644 index 000000000..14e57fede --- /dev/null +++ b/apps/web-antd/src/components/upload/index.ts @@ -0,0 +1,3 @@ +export { default as FileUpload } from './file-upload.vue'; +export { default as ImageUpload } from './image-upload.vue'; +export { default as InputUpload } from './input-upload.vue'; diff --git a/apps/web-antd/src/layouts/index.ts b/apps/web-antd/src/layouts/index.ts new file mode 100644 index 000000000..a43207805 --- /dev/null +++ b/apps/web-antd/src/layouts/index.ts @@ -0,0 +1,6 @@ +const BasicLayout = () => import('./basic.vue'); +const AuthPageLayout = () => import('./auth.vue'); + +const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); + +export { AuthPageLayout, BasicLayout, IFrameView }; diff --git a/apps/web-antd/src/locales/README.md b/apps/web-antd/src/locales/README.md new file mode 100644 index 000000000..7b451032e --- /dev/null +++ b/apps/web-antd/src/locales/README.md @@ -0,0 +1,3 @@ +# locale + +每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。 diff --git a/apps/web-antd/src/locales/index.ts b/apps/web-antd/src/locales/index.ts new file mode 100644 index 000000000..7f32bd18e --- /dev/null +++ b/apps/web-antd/src/locales/index.ts @@ -0,0 +1,102 @@ +import type { Locale } from 'ant-design-vue/es/locale'; + +import type { App } from 'vue'; + +import type { LocaleSetupOptions, SupportedLanguagesType } from '@vben/locales'; + +import { ref } from 'vue'; + +import { + $t, + setupI18n as coreSetup, + loadLocalesMapFromDir, +} from '@vben/locales'; +import { preferences } from '@vben/preferences'; + +import antdEnLocale from 'ant-design-vue/es/locale/en_US'; +import antdDefaultLocale from 'ant-design-vue/es/locale/zh_CN'; +import dayjs from 'dayjs'; + +const antdLocale = ref(antdDefaultLocale); + +const modules = import.meta.glob('./langs/**/*.json'); + +const localesMap = loadLocalesMapFromDir( + /\.\/langs\/([^/]+)\/(.*)\.json$/, + modules, +); +/** + * 加载应用特有的语言包 + * 这里也可以改造为从服务端获取翻译数据 + * @param lang + */ +async function loadMessages(lang: SupportedLanguagesType) { + const [appLocaleMessages] = await Promise.all([ + localesMap[lang]?.(), + loadThirdPartyMessage(lang), + ]); + return appLocaleMessages?.default; +} + +/** + * 加载第三方组件库的语言包 + * @param lang + */ +async function loadThirdPartyMessage(lang: SupportedLanguagesType) { + await Promise.all([loadAntdLocale(lang), loadDayjsLocale(lang)]); +} + +/** + * 加载dayjs的语言包 + * @param lang + */ +async function loadDayjsLocale(lang: SupportedLanguagesType) { + let locale; + switch (lang) { + case 'en-US': { + locale = await import('dayjs/locale/en'); + break; + } + case 'zh-CN': { + locale = await import('dayjs/locale/zh-cn'); + break; + } + // 默认使用英语 + default: { + locale = await import('dayjs/locale/en'); + } + } + if (locale) { + dayjs.locale(locale); + } else { + console.error(`Failed to load dayjs locale for ${lang}`); + } +} + +/** + * 加载antd的语言包 + * @param lang + */ +async function loadAntdLocale(lang: SupportedLanguagesType) { + switch (lang) { + case 'en-US': { + antdLocale.value = antdEnLocale; + break; + } + case 'zh-CN': { + antdLocale.value = antdDefaultLocale; + break; + } + } +} + +async function setupI18n(app: App, options: LocaleSetupOptions = {}) { + await coreSetup(app, { + defaultLocale: preferences.app.locale, + loadMessages, + missingWarn: !import.meta.env.PROD, + ...options, + }); +} + +export { $t, antdLocale, setupI18n }; diff --git a/apps/web-antd/src/locales/langs/en-US/utils.json b/apps/web-antd/src/locales/langs/en-US/utils.json new file mode 100644 index 000000000..b9206eff9 --- /dev/null +++ b/apps/web-antd/src/locales/langs/en-US/utils.json @@ -0,0 +1,14 @@ +{ + "rangePicker": { + "today": "Today", + "last7Days": "Last 7 Days", + "last30Days": "Last 30 Days", + "yesterday": "Yesterday", + "thisWeek": "This Week", + "thisMonth": "This Month", + "lastWeek": "Last Week", + "lastMonth": "Last Month", + "beginTime": "Begin Time", + "endTime": "End Time" + } +} diff --git a/apps/web-antd/src/locales/langs/zh-CN/utils.json b/apps/web-antd/src/locales/langs/zh-CN/utils.json new file mode 100644 index 000000000..d26f1f2cf --- /dev/null +++ b/apps/web-antd/src/locales/langs/zh-CN/utils.json @@ -0,0 +1,14 @@ +{ + "rangePicker": { + "today": "今天", + "last7Days": "最近 7 天", + "last30Days": "最近 30 天", + "yesterday": "昨天", + "thisWeek": "本周", + "thisMonth": "本月", + "lastWeek": "上周", + "lastMonth": "上月", + "beginTime": "开始时间", + "endTime": "结束时间" + } +} diff --git a/apps/web-antd/src/main.ts b/apps/web-antd/src/main.ts new file mode 100644 index 000000000..5d728a02a --- /dev/null +++ b/apps/web-antd/src/main.ts @@ -0,0 +1,31 @@ +import { initPreferences } from '@vben/preferences'; +import { unmountGlobalLoading } from '@vben/utils'; + +import { overridesPreferences } from './preferences'; + +/** + * 应用初始化完成之后再进行页面加载渲染 + */ +async function initApplication() { + // name用于指定项目唯一标识 + // 用于区分不同项目的偏好设置以及存储数据的key前缀以及其他一些需要隔离的数据 + const env = import.meta.env.PROD ? 'prod' : 'dev'; + const appVersion = import.meta.env.VITE_APP_VERSION; + const namespace = `${import.meta.env.VITE_APP_NAMESPACE}-${appVersion}-${env}`; + + // app偏好设置初始化 + await initPreferences({ + namespace, + overrides: overridesPreferences, + }); + + // 启动应用并挂载 + // vue应用主要逻辑及视图 + const { bootstrap } = await import('./bootstrap'); + await bootstrap(namespace); + + // 移除并销毁loading + unmountGlobalLoading(); +} + +initApplication(); diff --git a/apps/web-antd/src/preferences.ts b/apps/web-antd/src/preferences.ts new file mode 100644 index 000000000..73eb135cb --- /dev/null +++ b/apps/web-antd/src/preferences.ts @@ -0,0 +1,25 @@ +import { defineOverridesPreferences } from '@vben/preferences'; + +/** + * @description 项目配置文件 + * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置 + * !!! 更改配置后请清空缓存,否则可能不生效 + */ +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + /** 后端路由模式 */ + accessMode: 'backend', + name: import.meta.env.VITE_APP_TITLE, + enableRefreshToken: true, + }, + footer: { + /** 默认关闭 footer 页脚,因为有一定遮挡 */ + enable: false, + fixed: false, + }, + copyright: { + companyName: import.meta.env.VITE_APP_TITLE, + companySiteLink: 'https://gitee.com/yudaocode/yudao-ui-admin-vben', + }, +}); diff --git a/apps/web-antd/src/router/access.ts b/apps/web-antd/src/router/access.ts new file mode 100644 index 000000000..c4b161a5d --- /dev/null +++ b/apps/web-antd/src/router/access.ts @@ -0,0 +1,41 @@ +import type { + AppRouteRecordRaw, + ComponentRecordType, + GenerateMenuAndRoutesOptions, +} from '@vben/types'; + +import { generateAccessible } from '@vben/access'; +import { preferences } from '@vben/preferences'; +import { useAccessStore } from '@vben/stores'; +import { convertServerMenuToRouteRecordStringComponent } from '@vben/utils'; + +import { BasicLayout, IFrameView } from '#/layouts'; + +const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue'); + +async function generateAccess(options: GenerateMenuAndRoutesOptions) { + const pageMap: ComponentRecordType = import.meta.glob('../views/**/*.vue'); + const accessStore = useAccessStore(); + + const layoutMap: ComponentRecordType = { + BasicLayout, + IFrameView, + }; + + return await generateAccessible(preferences.app.accessMode, { + ...options, + fetchMenuListAsync: async () => { + // 由于 yudao 通过 accessStore 读取,所以不在进行 message.loading 提示 + // 补充说明:accessStore.accessMenus 一开始是 AppRouteRecordRaw 类型(后端加载),后面被赋值成 MenuRecordRaw 类型(前端转换) + const accessMenus = accessStore.accessMenus as AppRouteRecordRaw[]; + return convertServerMenuToRouteRecordStringComponent(accessMenus); + }, + // 可以指定没有权限跳转403页面 + forbiddenComponent, + // 如果 route.meta.menuVisibleWithForbidden = true + layoutMap, + pageMap, + }); +} + +export { generateAccess }; diff --git a/apps/web-antd/src/router/index.ts b/apps/web-antd/src/router/index.ts new file mode 100644 index 000000000..5acec55ea --- /dev/null +++ b/apps/web-antd/src/router/index.ts @@ -0,0 +1,40 @@ +import { + createRouter, + createWebHashHistory, + createWebHistory, +} from 'vue-router'; + +import { resetStaticRoutes } from '@vben/utils'; + +import { createRouterGuard } from './guard'; +import { routes } from './routes'; +import { setupBaiduTongJi } from './tongji'; + +/** + * @zh_CN 创建vue-router实例 + */ +const router = createRouter({ + history: + import.meta.env.VITE_ROUTER_HISTORY === 'hash' + ? createWebHashHistory(import.meta.env.VITE_BASE) + : createWebHistory(import.meta.env.VITE_BASE), + // 应该添加到路由的初始路由列表。 + routes, + scrollBehavior: (to, _from, savedPosition) => { + if (savedPosition) { + return savedPosition; + } + return to.hash ? { behavior: 'smooth', el: to.hash } : { left: 0, top: 0 }; + }, + // 是否应该禁止尾部斜杠。 + // strict: true, +}); + +const resetRoutes = () => resetStaticRoutes(router, routes); + +// 创建路由守卫 +createRouterGuard(router); +// 设置百度统计 +setupBaiduTongJi(router); + +export { resetRoutes, router }; diff --git a/apps/web-antd/src/router/routes/core.ts b/apps/web-antd/src/router/routes/core.ts new file mode 100644 index 000000000..22fd0017c --- /dev/null +++ b/apps/web-antd/src/router/routes/core.ts @@ -0,0 +1,114 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { LOGIN_PATH } from '@vben/constants'; +import { preferences } from '@vben/preferences'; + +import { $t } from '#/locales'; + +const BasicLayout = () => import('#/layouts/basic.vue'); +const AuthPageLayout = () => import('#/layouts/auth.vue'); +/** 全局404页面 */ +const fallbackNotFoundRoute: RouteRecordRaw = { + component: () => import('#/views/_core/fallback/not-found.vue'), + meta: { + hideInBreadcrumb: true, + hideInMenu: true, + hideInTab: true, + title: '404', + }, + name: 'FallbackNotFound', + path: '/:path(.*)*', +}; + +/** 基本路由,这些路由是必须存在的 */ +const coreRoutes: RouteRecordRaw[] = [ + /** + * 根路由 + * 使用基础布局,作为所有页面的父级容器,子级就不必配置BasicLayout。 + * 此路由必须存在,且不应修改 + */ + { + component: BasicLayout, + meta: { + hideInBreadcrumb: true, + title: 'Root', + }, + name: 'Root', + path: '/', + redirect: preferences.app.defaultHomePath, + children: [], + }, + { + component: AuthPageLayout, + meta: { + hideInTab: true, + title: 'Authentication', + }, + name: 'Authentication', + path: '/auth', + redirect: LOGIN_PATH, + children: [ + { + name: 'Login', + path: 'login', + component: () => import('#/views/_core/authentication/login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + { + name: 'CodeLogin', + path: 'code-login', + component: () => import('#/views/_core/authentication/code-login.vue'), + meta: { + title: $t('page.auth.codeLogin'), + }, + }, + { + name: 'QrCodeLogin', + path: 'qrcode-login', + component: () => + import('#/views/_core/authentication/qrcode-login.vue'), + meta: { + title: $t('page.auth.qrcodeLogin'), + }, + }, + { + name: 'ForgetPassword', + path: 'forget-password', + component: () => + import('#/views/_core/authentication/forget-password.vue'), + meta: { + title: $t('page.auth.forgetPassword'), + }, + }, + { + name: 'Register', + path: 'register', + component: () => import('#/views/_core/authentication/register.vue'), + meta: { + title: $t('page.auth.register'), + }, + }, + { + name: 'SocialLogin', + path: 'social-login', + component: () => + import('#/views/_core/authentication/social-login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + { + name: 'SSOLogin', + path: 'sso-login', + component: () => import('#/views/_core/authentication/sso-login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + ], + }, +]; + +export { coreRoutes, fallbackNotFoundRoute }; diff --git a/apps/web-antd/src/router/routes/index.ts b/apps/web-antd/src/router/routes/index.ts new file mode 100644 index 000000000..738f9d3d9 --- /dev/null +++ b/apps/web-antd/src/router/routes/index.ts @@ -0,0 +1,47 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { mergeRouteModules, traverseTreeValues } from '@vben/utils'; + +import { coreRoutes, fallbackNotFoundRoute } from './core'; + +const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', { + eager: true, +}); + +// 有需要可以自行打开注释,并创建文件夹 +// const externalRouteFiles = import.meta.glob('./external/**/*.ts', { eager: true }); +// const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true }); + +/** 动态路由 */ +const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles); + +/** 外部路由列表,访问这些页面可以不需要Layout,可能用于内嵌在别的系统(不会显示在菜单中) */ +// const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles); +// const staticRoutes: RouteRecordRaw[] = mergeRouteModules(staticRouteFiles); +const staticRoutes: RouteRecordRaw[] = []; +const externalRoutes: RouteRecordRaw[] = []; + +/** 路由列表,由基本路由、外部路由和404兜底路由组成 + * 无需走权限验证(会一直显示在菜单中) */ +const routes: RouteRecordRaw[] = [ + ...coreRoutes, + ...externalRoutes, + fallbackNotFoundRoute, +]; + +/** 基本路由列表,这些路由不需要进入权限拦截 */ +const coreRouteNames = traverseTreeValues(coreRoutes, (route) => route.name); + +/** 有权限校验的路由列表,包含动态路由和静态路由 */ +const accessRoutes = [...dynamicRoutes, ...staticRoutes]; + +// add by 芋艿:from https://github.com/vbenjs/vue-vben-admin/blob/main/playground/src/router/routes/index.ts#L38-L45 +const componentKeys: string[] = Object.keys( + import.meta.glob('../../views/**/*.vue'), +) + .filter((item) => !item.includes('/modules/')) + .map((v) => { + const path = v.replace('../../views/', '/'); + return path.endsWith('.vue') ? path.slice(0, -4) : path; + }); +export { accessRoutes, componentKeys, coreRouteNames, routes }; diff --git a/apps/web-antd/src/router/routes/modules/dashboard.ts b/apps/web-antd/src/router/routes/modules/dashboard.ts new file mode 100644 index 000000000..2cccc8115 --- /dev/null +++ b/apps/web-antd/src/router/routes/modules/dashboard.ts @@ -0,0 +1,48 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { $t } from '#/locales'; + +const routes: RouteRecordRaw[] = [ + { + meta: { + icon: 'lucide:layout-dashboard', + order: -1, + title: $t('page.dashboard.title'), + }, + name: 'Dashboard', + path: '/dashboard', + children: [ + { + name: 'Workspace', + path: '/workspace', + component: () => import('#/views/dashboard/workspace/index.vue'), + meta: { + icon: 'carbon:workspace', + title: $t('page.dashboard.workspace'), + }, + }, + { + name: 'Analytics', + path: '/analytics', + component: () => import('#/views/dashboard/analytics/index.vue'), + meta: { + affixTab: true, + icon: 'lucide:area-chart', + title: $t('page.dashboard.analytics'), + }, + }, + ], + }, + { + name: 'Profile', + path: '/profile', + component: () => import('#/views/_core/profile/index.vue'), + meta: { + icon: 'ant-design:profile-outlined', + title: $t('ui.widgets.profile'), + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-antd/src/router/routes/modules/pay.ts b/apps/web-antd/src/router/routes/modules/pay.ts new file mode 100644 index 000000000..f7711fcdf --- /dev/null +++ b/apps/web-antd/src/router/routes/modules/pay.ts @@ -0,0 +1,16 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/pay/cashier', + component: () => import('#/views/pay/cashier/index.vue'), + name: 'PayCashier', + meta: { + title: '收银台', + icon: 'lucide:badge-japanese-yen', + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-antd/src/router/routes/modules/system.ts b/apps/web-antd/src/router/routes/modules/system.ts new file mode 100644 index 000000000..47e6b1682 --- /dev/null +++ b/apps/web-antd/src/router/routes/modules/system.ts @@ -0,0 +1,16 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/system/notify-message', + component: () => import('#/views/system/notify/my/index.vue'), + name: 'MyNotifyMessage', + meta: { + title: '我的站内信', + icon: 'ant-design:message-filled', + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-antd/src/router/tongji.ts b/apps/web-antd/src/router/tongji.ts new file mode 100644 index 000000000..0aa3715a4 --- /dev/null +++ b/apps/web-antd/src/router/tongji.ts @@ -0,0 +1,30 @@ +import type { Router } from 'vue-router'; + +declare global { + interface Window { + _hmt: any[]; + } +} + +const HM_ID = import.meta.env.VITE_APP_BAIDU_CODE; + +/** + * 设置百度统计 + * @param router + */ +function setupBaiduTongJi(router: Router) { + // 如果没有配置百度统计的 ID,则不进行设置 + if (!HM_ID) { + return; + } + + // _hmt:用于 router push + window._hmt = window._hmt || []; + + router.afterEach((to) => { + // 添加到 _hmt 中 + window._hmt.push(['_trackPageview', to.fullPath]); + }); +} + +export { setupBaiduTongJi }; diff --git a/apps/web-antd/src/store/auth.ts b/apps/web-antd/src/store/auth.ts new file mode 100644 index 000000000..dcef71175 --- /dev/null +++ b/apps/web-antd/src/store/auth.ts @@ -0,0 +1,157 @@ +import type { AuthPermissionInfo, Recordable, UserInfo } from '@vben/types'; + +import type { AuthApi } from '#/api'; + +import { ref } from 'vue'; +import { useRouter } from 'vue-router'; + +import { LOGIN_PATH } from '@vben/constants'; +import { preferences } from '@vben/preferences'; +import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores'; + +import { notification } from 'ant-design-vue'; +import { defineStore } from 'pinia'; + +import { + getAuthPermissionInfoApi, + loginApi, + logoutApi, + register, + smsLogin, + socialLogin, +} from '#/api'; +import { $t } from '#/locales'; + +export const useAuthStore = defineStore('auth', () => { + const accessStore = useAccessStore(); + const userStore = useUserStore(); + const router = useRouter(); + + const loginLoading = ref(false); + + /** + * 异步处理登录操作 + * Asynchronously handle the login process + * @param type 登录类型 + * @param params 登录表单数据 + * @param onSuccess 登录成功后的回调函数 + */ + async function authLogin( + type: 'mobile' | 'register' | 'social' | 'username', + params: Recordable, + onSuccess?: () => Promise | void, + ) { + // 异步处理用户登录操作并获取 accessToken + let userInfo: null | UserInfo = null; + try { + let loginResult: AuthApi.LoginResult; + loginLoading.value = true; + switch (type) { + case 'mobile': { + loginResult = await smsLogin(params as AuthApi.SmsLoginParams); + break; + } + case 'register': { + loginResult = await register(params as AuthApi.RegisterParams); + break; + } + case 'social': { + loginResult = await socialLogin(params as AuthApi.SocialLoginParams); + break; + } + default: { + loginResult = await loginApi(params); + } + } + const { accessToken, refreshToken } = loginResult; + + // 如果成功获取到 accessToken + if (accessToken) { + accessStore.setAccessToken(accessToken); + accessStore.setRefreshToken(refreshToken); + + // 获取用户信息并存储到 userStore、accessStore 中 + // TODO @芋艿:清理掉 accessCodes 相关的逻辑 + // const [fetchUserInfoResult, accessCodes] = await Promise.all([ + // fetchUserInfo(), + // // getAccessCodesApi(), + // ]); + const fetchUserInfoResult = await fetchUserInfo(); + + userInfo = fetchUserInfoResult.user; + + if (accessStore.loginExpired) { + accessStore.setLoginExpired(false); + } else { + onSuccess + ? await onSuccess?.() + : await router.push( + userInfo.homePath || preferences.app.defaultHomePath, + ); + } + + if (userInfo?.nickname) { + notification.success({ + description: `${$t('authentication.loginSuccessDesc')}:${userInfo?.nickname}`, + duration: 3, + message: $t('authentication.loginSuccess'), + }); + } + } + } finally { + loginLoading.value = false; + } + + return { + userInfo, + }; + } + + async function logout(redirect: boolean = true) { + try { + const accessToken = accessStore.accessToken as string; + if (accessToken) { + await logoutApi(accessToken); + } + } catch { + // 不做任何处理 + } + resetAllStores(); + accessStore.setLoginExpired(false); + + // 回登录页带上当前路由地址 + await router.replace({ + path: LOGIN_PATH, + query: redirect + ? { + redirect: encodeURIComponent(router.currentRoute.value.fullPath), + } + : {}, + }); + } + + async function fetchUserInfo() { + // 加载 + let authPermissionInfo: AuthPermissionInfo | null = null; + authPermissionInfo = await getAuthPermissionInfoApi(); + // userStore + userStore.setUserInfo(authPermissionInfo.user); + userStore.setUserRoles(authPermissionInfo.roles); + // accessStore + accessStore.setAccessMenus(authPermissionInfo.menus); + accessStore.setAccessCodes(authPermissionInfo.permissions); + return authPermissionInfo; + } + + function $reset() { + loginLoading.value = false; + } + + return { + $reset, + authLogin, + fetchUserInfo, + loginLoading, + logout, + }; +}); diff --git a/apps/web-antd/src/views/_core/README.md b/apps/web-antd/src/views/_core/README.md new file mode 100644 index 000000000..8248afe6c --- /dev/null +++ b/apps/web-antd/src/views/_core/README.md @@ -0,0 +1,3 @@ +# \_core + +此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。 diff --git a/apps/web-antd/src/views/_core/about/index.vue b/apps/web-antd/src/views/_core/about/index.vue new file mode 100644 index 000000000..0ee524335 --- /dev/null +++ b/apps/web-antd/src/views/_core/about/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-antd/src/views/_core/authentication/code-login.vue b/apps/web-antd/src/views/_core/authentication/code-login.vue new file mode 100644 index 000000000..1862abf8c --- /dev/null +++ b/apps/web-antd/src/views/_core/authentication/code-login.vue @@ -0,0 +1,173 @@ + + + diff --git a/apps/web-antd/src/views/_core/authentication/login.vue b/apps/web-antd/src/views/_core/authentication/login.vue new file mode 100644 index 000000000..aa1db4c53 --- /dev/null +++ b/apps/web-antd/src/views/_core/authentication/login.vue @@ -0,0 +1,192 @@ + + + diff --git a/apps/web-antd/src/views/_core/authentication/qrcode-login.vue b/apps/web-antd/src/views/_core/authentication/qrcode-login.vue new file mode 100644 index 000000000..23f5f2dad --- /dev/null +++ b/apps/web-antd/src/views/_core/authentication/qrcode-login.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/web-antd/src/views/_core/authentication/register.vue b/apps/web-antd/src/views/_core/authentication/register.vue new file mode 100644 index 000000000..734f4c27d --- /dev/null +++ b/apps/web-antd/src/views/_core/authentication/register.vue @@ -0,0 +1,221 @@ + + + diff --git a/apps/web-antd/src/views/_core/authentication/social-login.vue b/apps/web-antd/src/views/_core/authentication/social-login.vue new file mode 100644 index 000000000..1052a9a18 --- /dev/null +++ b/apps/web-antd/src/views/_core/authentication/social-login.vue @@ -0,0 +1,210 @@ + + + diff --git a/apps/web-antd/src/views/_core/fallback/coming-soon.vue b/apps/web-antd/src/views/_core/fallback/coming-soon.vue new file mode 100644 index 000000000..f394930f2 --- /dev/null +++ b/apps/web-antd/src/views/_core/fallback/coming-soon.vue @@ -0,0 +1,7 @@ + + + diff --git a/apps/web-antd/src/views/_core/fallback/forbidden.vue b/apps/web-antd/src/views/_core/fallback/forbidden.vue new file mode 100644 index 000000000..8ea65fedb --- /dev/null +++ b/apps/web-antd/src/views/_core/fallback/forbidden.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-antd/src/views/_core/fallback/internal-error.vue b/apps/web-antd/src/views/_core/fallback/internal-error.vue new file mode 100644 index 000000000..819a47d5e --- /dev/null +++ b/apps/web-antd/src/views/_core/fallback/internal-error.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-antd/src/views/_core/fallback/not-found.vue b/apps/web-antd/src/views/_core/fallback/not-found.vue new file mode 100644 index 000000000..4d178e9cb --- /dev/null +++ b/apps/web-antd/src/views/_core/fallback/not-found.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-antd/src/views/_core/fallback/offline.vue b/apps/web-antd/src/views/_core/fallback/offline.vue new file mode 100644 index 000000000..5de4a88de --- /dev/null +++ b/apps/web-antd/src/views/_core/fallback/offline.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-antd/src/views/_core/profile/modules/reset-pwd.vue b/apps/web-antd/src/views/_core/profile/modules/reset-pwd.vue new file mode 100644 index 000000000..e7a0103fb --- /dev/null +++ b/apps/web-antd/src/views/_core/profile/modules/reset-pwd.vue @@ -0,0 +1,94 @@ + + + diff --git a/apps/web-antd/src/views/ai/music/index/index.vue b/apps/web-antd/src/views/ai/music/index/index.vue new file mode 100644 index 000000000..af00e1819 --- /dev/null +++ b/apps/web-antd/src/views/ai/music/index/index.vue @@ -0,0 +1,29 @@ + + + diff --git a/apps/web-antd/src/views/ai/music/index/list/songCard/index.vue b/apps/web-antd/src/views/ai/music/index/list/songCard/index.vue new file mode 100644 index 000000000..723b33793 --- /dev/null +++ b/apps/web-antd/src/views/ai/music/index/list/songCard/index.vue @@ -0,0 +1,50 @@ + + + diff --git a/apps/web-antd/src/views/ai/music/index/list/songInfo/index.vue b/apps/web-antd/src/views/ai/music/index/list/songInfo/index.vue new file mode 100644 index 000000000..cc68583df --- /dev/null +++ b/apps/web-antd/src/views/ai/music/index/list/songInfo/index.vue @@ -0,0 +1,25 @@ + + + diff --git a/apps/web-antd/src/views/ai/music/index/mode/desc.vue b/apps/web-antd/src/views/ai/music/index/mode/desc.vue new file mode 100644 index 000000000..c57beb407 --- /dev/null +++ b/apps/web-antd/src/views/ai/music/index/mode/desc.vue @@ -0,0 +1,70 @@ + + + diff --git a/apps/web-antd/src/views/ai/music/index/mode/lyric.vue b/apps/web-antd/src/views/ai/music/index/mode/lyric.vue new file mode 100644 index 000000000..e8d5e38ad --- /dev/null +++ b/apps/web-antd/src/views/ai/music/index/mode/lyric.vue @@ -0,0 +1,103 @@ + + + diff --git a/apps/web-antd/src/views/ai/music/index/title/index.vue b/apps/web-antd/src/views/ai/music/index/title/index.vue new file mode 100644 index 000000000..04dc58bcc --- /dev/null +++ b/apps/web-antd/src/views/ai/music/index/title/index.vue @@ -0,0 +1,27 @@ + + + diff --git a/apps/web-antd/src/views/crm/statistics/funnel/chartOptions.ts b/apps/web-antd/src/views/crm/statistics/funnel/chartOptions.ts new file mode 100644 index 000000000..e86953f4c --- /dev/null +++ b/apps/web-antd/src/views/crm/statistics/funnel/chartOptions.ts @@ -0,0 +1,271 @@ +import { erpCalculatePercentage } from '@vben/utils'; + +export function getChartOptions( + activeTabName: any, + active: boolean, + res: any, +): any { + switch (activeTabName) { + case 'businessInversionRateSummary': { + return { + color: ['#6ca2ff', '#6ac9d7', '#ff7474'], + tooltip: { + trigger: 'axis', + axisPointer: { + // 坐标轴指示器,坐标轴触发有效 + type: 'shadow', // 默认为直线,可选为:'line' | 'shadow' + }, + }, + legend: { + data: ['赢单转化率', '商机总数', '赢单商机数'], + bottom: '0px', + itemWidth: 14, + }, + grid: { + top: '40px', + left: '40px', + right: '40px', + bottom: '40px', + containLabel: true, + borderColor: '#fff', + }, + xAxis: [ + { + type: 'category', + data: res.map((s: any) => s.time), + axisTick: { + alignWithLabel: true, + lineStyle: { width: 0 }, + }, + axisLabel: { + color: '#BDBDBD', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { color: '#BDBDBD' }, + }, + splitLine: { + show: false, + }, + }, + ], + yAxis: [ + { + type: 'value', + name: '赢单转化率', + axisTick: { + alignWithLabel: true, + lineStyle: { width: 0 }, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}%', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { color: '#BDBDBD' }, + }, + splitLine: { + show: false, + }, + }, + { + type: 'value', + name: '商机数', + axisTick: { + alignWithLabel: true, + lineStyle: { width: 0 }, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}个', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { color: '#BDBDBD' }, + }, + splitLine: { + show: false, + }, + }, + ], + series: [ + { + name: '赢单转化率', + type: 'line', + yAxisIndex: 0, + data: res.map((s: any) => + erpCalculatePercentage(s.businessWinCount, s.businessCount), + ), + }, + { + name: '商机总数', + type: 'bar', + yAxisIndex: 1, + barWidth: 15, + data: res.map((s: any) => s.businessCount), + }, + { + name: '赢单商机数', + type: 'bar', + yAxisIndex: 1, + barWidth: 15, + data: res.map((s: any) => s.businessWinCount), + }, + ], + }; + } + case 'businessSummary': { + return { + grid: { + left: 30, + right: 30, // 让 X 轴右侧显示完整 + bottom: 20, + containLabel: true, + }, + legend: {}, + series: [ + { + name: '新增商机数量', + type: 'bar', + yAxisIndex: 0, + data: res.map((s: any) => s.businessCreateCount), + }, + { + name: '新增商机金额', + type: 'bar', + yAxisIndex: 1, + data: res.map((s: any) => s.totalPrice), + }, + ], + toolbox: { + feature: { + dataZoom: { + xAxisIndex: false, // 数据区域缩放:Y 轴不缩放 + }, + brush: { + type: ['lineX', 'clear'], // 区域缩放按钮、还原按钮 + }, + saveAsImage: { show: true, name: '新增商机分析' }, // 保存为图片 + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow', + }, + }, + yAxis: [ + { + type: 'value', + name: '新增商机数量', + min: 0, + minInterval: 1, // 显示整数刻度 + }, + { + type: 'value', + name: '新增商机金额', + min: 0, + minInterval: 1, // 显示整数刻度 + splitLine: { + lineStyle: { + type: 'dotted', // 右侧网格线虚化, 减少混乱 + opacity: 0.7, + }, + }, + }, + ], + xAxis: { + type: 'category', + name: '日期', + data: res.map((s: any) => s.time), + }, + }; + } + case 'funnel': { + // tips:写死 value 值是为了保持漏斗顺序不变 + const list: { name: string; value: number }[] = []; + if (active) { + list.push( + { value: 60, name: `客户-${res.customerCount || 0}个` }, + { value: 40, name: `商机-${res.businessCount || 0}个` }, + { value: 20, name: `赢单-${res.businessWinCount || 0}个` }, + ); + } else { + list.push( + { + value: res.customerCount || 0, + name: `客户-${res.customerCount || 0}个`, + }, + { + value: res.businessCount || 0, + name: `商机-${res.businessCount || 0}个`, + }, + { + value: res.businessWinCount || 0, + name: `赢单-${res.businessWinCount || 0}个`, + }, + ); + } + return { + title: { + text: '销售漏斗', + }, + tooltip: { + trigger: 'item', + formatter: '{a}
    {b}', + }, + toolbox: { + feature: { + dataView: { readOnly: false }, + restore: {}, + saveAsImage: {}, + }, + }, + legend: { + data: ['客户', '商机', '赢单'], + }, + series: [ + { + name: '销售漏斗', + type: 'funnel', + left: '10%', + top: 60, + bottom: 60, + width: '80%', + min: 0, + max: 100, + minSize: '0%', + maxSize: '100%', + sort: 'descending', + gap: 2, + label: { + show: true, + position: 'inside', + }, + labelLine: { + length: 10, + lineStyle: { + width: 1, + type: 'solid', + }, + }, + itemStyle: { + borderColor: '#fff', + borderWidth: 1, + }, + emphasis: { + label: { + fontSize: 20, + }, + }, + data: list, + }, + ], + }; + } + default: { + return {}; + } + } +} diff --git a/apps/web-antd/src/views/crm/statistics/performance/chartOptions.ts b/apps/web-antd/src/views/crm/statistics/performance/chartOptions.ts new file mode 100644 index 000000000..329b4d7ff --- /dev/null +++ b/apps/web-antd/src/views/crm/statistics/performance/chartOptions.ts @@ -0,0 +1,394 @@ +export function getChartOptions(activeTabName: any, res: any): any { + switch (activeTabName) { + case 'ContractCountPerformance': { + return { + grid: { + left: 20, + right: 20, + bottom: 20, + containLabel: true, + }, + legend: {}, + series: [ + { + name: '当月合同数量(个)', + type: 'line', + data: res.map((s: any) => s.currentMonthCount), + }, + { + name: '上月合同数量(个)', + type: 'line', + data: res.map((s: any) => s.lastMonthCount), + }, + { + name: '去年同月合同数量(个)', + type: 'line', + data: res.map((s: any) => s.lastYearCount), + }, + { + name: '环比增长率(%)', + type: 'line', + yAxisIndex: 1, + data: res.map((s: any) => + s.lastMonthCount === 0 + ? 'NULL' + : ( + ((s.currentMonthCount - s.lastMonthCount) / + s.lastMonthCount) * + 100 + ).toFixed(2), + ), + }, + { + name: '同比增长率(%)', + type: 'line', + yAxisIndex: 1, + data: res.map((s: any) => + s.lastYearCount === 0 + ? 'NULL' + : ( + ((s.currentMonthCount - s.lastYearCount) / + s.lastYearCount) * + 100 + ).toFixed(2), + ), + }, + ], + toolbox: { + feature: { + dataZoom: { + xAxisIndex: false, // 数据区域缩放:Y 轴不缩放 + }, + brush: { + type: ['lineX', 'clear'], // 区域缩放按钮、还原按钮 + }, + saveAsImage: { show: true, name: '客户总量分析' }, // 保存为图片 + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow', + }, + }, + yAxis: [ + { + type: 'value', + name: '数量(个)', + axisTick: { + show: false, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { + color: '#BDBDBD', + }, + }, + splitLine: { + show: true, + lineStyle: { + color: '#e6e6e6', + }, + }, + }, + { + type: 'value', + name: '', + axisTick: { + alignWithLabel: true, + lineStyle: { + width: 0, + }, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}%', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { + color: '#BDBDBD', + }, + }, + splitLine: { + show: true, + lineStyle: { + color: '#e6e6e6', + }, + }, + }, + ], + xAxis: { + type: 'category', + name: '日期', + data: res.map((s: any) => s.time), + }, + }; + } + case 'ContractPricePerformance': { + return { + grid: { + left: 20, + right: 20, + bottom: 20, + containLabel: true, + }, + legend: {}, + series: [ + { + name: '当月合同金额(元)', + type: 'line', + data: res.map((s: any) => s.currentMonthCount), + }, + { + name: '上月合同金额(元)', + type: 'line', + data: res.map((s: any) => s.lastMonthCount), + }, + { + name: '去年同月合同金额(元)', + type: 'line', + data: res.map((s: any) => s.lastYearCount), + }, + { + name: '环比增长率(%)', + type: 'line', + yAxisIndex: 1, + data: res.map((s: any) => + s.lastMonthCount === 0 + ? 'NULL' + : ( + ((s.currentMonthCount - s.lastMonthCount) / + s.lastMonthCount) * + 100 + ).toFixed(2), + ), + }, + { + name: '同比增长率(%)', + type: 'line', + yAxisIndex: 1, + data: res.map((s: any) => + s.lastYearCount === 0 + ? 'NULL' + : ( + ((s.currentMonthCount - s.lastYearCount) / + s.lastYearCount) * + 100 + ).toFixed(2), + ), + }, + ], + toolbox: { + feature: { + dataZoom: { + xAxisIndex: false, // 数据区域缩放:Y 轴不缩放 + }, + brush: { + type: ['lineX', 'clear'], // 区域缩放按钮、还原按钮 + }, + saveAsImage: { show: true, name: '客户总量分析' }, // 保存为图片 + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow', + }, + }, + yAxis: [ + { + type: 'value', + name: '金额(元)', + axisTick: { + show: false, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { + color: '#BDBDBD', + }, + }, + splitLine: { + show: true, + lineStyle: { + color: '#e6e6e6', + }, + }, + }, + { + type: 'value', + name: '', + axisTick: { + alignWithLabel: true, + lineStyle: { + width: 0, + }, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}%', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { + color: '#BDBDBD', + }, + }, + splitLine: { + show: true, + lineStyle: { + color: '#e6e6e6', + }, + }, + }, + ], + xAxis: { + type: 'category', + name: '日期', + data: res.map((s: any) => s.time), + }, + }; + } + case 'ReceivablePricePerformance': { + return { + grid: { + left: 20, + right: 20, + bottom: 20, + containLabel: true, + }, + legend: {}, + series: [ + { + name: '当月回款金额(元)', + type: 'line', + data: res.map((s: any) => s.currentMonthCount), + }, + { + name: '上月回款金额(元)', + type: 'line', + data: res.map((s: any) => s.lastMonthCount), + }, + { + name: '去年同月回款金额(元)', + type: 'line', + data: res.map((s: any) => s.lastYearCount), + }, + { + name: '环比增长率(%)', + type: 'line', + yAxisIndex: 1, + data: res.map((s: any) => + s.lastMonthCount === 0 + ? 'NULL' + : ( + ((s.currentMonthCount - s.lastMonthCount) / + s.lastMonthCount) * + 100 + ).toFixed(2), + ), + }, + { + name: '同比增长率(%)', + type: 'line', + yAxisIndex: 1, + data: res.map((s: any) => + s.lastYearCount === 0 + ? 'NULL' + : ( + ((s.currentMonthCount - s.lastYearCount) / + s.lastYearCount) * + 100 + ).toFixed(2), + ), + }, + ], + toolbox: { + feature: { + dataZoom: { + xAxisIndex: false, // 数据区域缩放:Y 轴不缩放 + }, + brush: { + type: ['lineX', 'clear'], // 区域缩放按钮、还原按钮 + }, + saveAsImage: { show: true, name: '客户总量分析' }, // 保存为图片 + }, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'shadow', + }, + }, + yAxis: [ + { + type: 'value', + name: '金额(元)', + axisTick: { + show: false, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { + color: '#BDBDBD', + }, + }, + splitLine: { + show: true, + lineStyle: { + color: '#e6e6e6', + }, + }, + }, + { + type: 'value', + name: '', + axisTick: { + alignWithLabel: true, + lineStyle: { + width: 0, + }, + }, + axisLabel: { + color: '#BDBDBD', + formatter: '{value}%', + }, + /** 坐标轴轴线相关设置 */ + axisLine: { + lineStyle: { + color: '#BDBDBD', + }, + }, + splitLine: { + show: true, + lineStyle: { + color: '#e6e6e6', + }, + }, + }, + ], + xAxis: { + type: 'category', + name: '日期', + data: res.map((s: any) => s.time), + }, + }; + } + default: { + return {}; + } + } +} diff --git a/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue b/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue new file mode 100644 index 000000000..f1f0b232a --- /dev/null +++ b/apps/web-antd/src/views/dashboard/analytics/analytics-trends.vue @@ -0,0 +1,98 @@ + + + diff --git a/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue new file mode 100644 index 000000000..190fb41f4 --- /dev/null +++ b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-data.vue @@ -0,0 +1,82 @@ + + + diff --git a/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue new file mode 100644 index 000000000..0915c7af7 --- /dev/null +++ b/apps/web-antd/src/views/dashboard/analytics/analytics-visits-source.vue @@ -0,0 +1,65 @@ + + + diff --git a/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue b/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue new file mode 100644 index 000000000..7e0f10133 --- /dev/null +++ b/apps/web-antd/src/views/dashboard/analytics/analytics-visits.vue @@ -0,0 +1,55 @@ + + + diff --git a/apps/web-antd/src/views/dashboard/analytics/index.vue b/apps/web-antd/src/views/dashboard/analytics/index.vue new file mode 100644 index 000000000..5e3d6d285 --- /dev/null +++ b/apps/web-antd/src/views/dashboard/analytics/index.vue @@ -0,0 +1,90 @@ + + + diff --git a/apps/web-antd/src/views/infra/codegen/modules/basic-info.vue b/apps/web-antd/src/views/infra/codegen/modules/basic-info.vue new file mode 100644 index 000000000..00c49911b --- /dev/null +++ b/apps/web-antd/src/views/infra/codegen/modules/basic-info.vue @@ -0,0 +1,45 @@ + + diff --git a/apps/web-antd/src/views/infra/demo/demo02/data.ts b/apps/web-antd/src/views/infra/demo/demo02/data.ts new file mode 100644 index 000000000..74430fb28 --- /dev/null +++ b/apps/web-antd/src/views/infra/demo/demo02/data.ts @@ -0,0 +1,120 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { Demo02CategoryApi } from '#/api/infra/demo/demo02'; + +import { handleTree } from '@vben/utils'; + +import { getDemo02CategoryList } from '#/api/infra/demo/demo02'; +import { getRangePickerDefaultProps } from '#/utils'; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'id', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'parentId', + label: '上级示例分类', + component: 'ApiTreeSelect', + componentProps: { + allowClear: true, + api: async () => { + const data = await getDemo02CategoryList({}); + data.unshift({ + id: 0, + name: '顶级示例分类', + }); + return handleTree(data); + }, + labelField: 'name', + valueField: 'id', + childrenField: 'children', + placeholder: '请选择上级示例分类', + treeDefaultExpandAll: true, + }, + rules: 'selectRequired', + }, + { + fieldName: 'name', + label: '名字', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入名字', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'name', + label: '名字', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入名字', + }, + }, + { + fieldName: 'parentId', + label: '父级编号', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入父级编号', + }, + }, + { + fieldName: 'createTime', + label: '创建时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + allowClear: true, + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'id', + title: '编号', + minWidth: 120, + }, + { + field: 'name', + title: '名字', + minWidth: 120, + treeNode: true, + }, + { + field: 'parentId', + title: '父级编号', + minWidth: 120, + }, + { + field: 'createTime', + title: '创建时间', + minWidth: 120, + formatter: 'formatDateTime', + }, + { + title: '操作', + width: 220, + fixed: 'right', + slots: { default: 'actions' }, + }, + ]; +} diff --git a/apps/web-antd/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue b/apps/web-antd/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue new file mode 100644 index 000000000..3e2854608 --- /dev/null +++ b/apps/web-antd/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue @@ -0,0 +1,51 @@ + + + diff --git a/apps/web-antd/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue b/apps/web-antd/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue new file mode 100644 index 000000000..5d5f396bf --- /dev/null +++ b/apps/web-antd/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue @@ -0,0 +1,51 @@ + + + diff --git a/apps/web-antd/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue b/apps/web-antd/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue new file mode 100644 index 000000000..1c6cf36f3 --- /dev/null +++ b/apps/web-antd/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue @@ -0,0 +1,67 @@ + + + diff --git a/apps/web-antd/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue b/apps/web-antd/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue new file mode 100644 index 000000000..1c6cf36f3 --- /dev/null +++ b/apps/web-antd/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue @@ -0,0 +1,67 @@ + + + diff --git a/apps/web-antd/src/views/infra/job/modules/form.vue b/apps/web-antd/src/views/infra/job/modules/form.vue new file mode 100644 index 000000000..a66c66841 --- /dev/null +++ b/apps/web-antd/src/views/infra/job/modules/form.vue @@ -0,0 +1,82 @@ + + + diff --git a/apps/web-antd/src/views/infra/redis/modules/commands.vue b/apps/web-antd/src/views/infra/redis/modules/commands.vue new file mode 100644 index 000000000..25c263e68 --- /dev/null +++ b/apps/web-antd/src/views/infra/redis/modules/commands.vue @@ -0,0 +1,101 @@ + + + diff --git a/apps/web-antd/src/views/infra/redis/modules/memory.vue b/apps/web-antd/src/views/infra/redis/modules/memory.vue new file mode 100644 index 000000000..5220c4631 --- /dev/null +++ b/apps/web-antd/src/views/infra/redis/modules/memory.vue @@ -0,0 +1,135 @@ + + + diff --git a/apps/web-antd/src/views/mall/promotion/bargain/record/index.vue b/apps/web-antd/src/views/mall/promotion/bargain/record/index.vue new file mode 100644 index 000000000..134c2145f --- /dev/null +++ b/apps/web-antd/src/views/mall/promotion/bargain/record/index.vue @@ -0,0 +1,83 @@ + + + diff --git a/apps/web-antd/src/views/mall/promotion/bargain/record/modules/list.vue b/apps/web-antd/src/views/mall/promotion/bargain/record/modules/list.vue new file mode 100644 index 000000000..49223d5d6 --- /dev/null +++ b/apps/web-antd/src/views/mall/promotion/bargain/record/modules/list.vue @@ -0,0 +1,67 @@ + + + diff --git a/apps/web-antd/src/views/mall/promotion/combination/record/index.vue b/apps/web-antd/src/views/mall/promotion/combination/record/index.vue new file mode 100644 index 000000000..6057f019b --- /dev/null +++ b/apps/web-antd/src/views/mall/promotion/combination/record/index.vue @@ -0,0 +1,81 @@ + + + diff --git a/apps/web-antd/src/views/mall/promotion/combination/record/modules/list.vue b/apps/web-antd/src/views/mall/promotion/combination/record/modules/list.vue new file mode 100644 index 000000000..459cd34d3 --- /dev/null +++ b/apps/web-antd/src/views/mall/promotion/combination/record/modules/list.vue @@ -0,0 +1,63 @@ + + + diff --git a/apps/web-antd/src/views/system/area/modules/form.vue b/apps/web-antd/src/views/system/area/modules/form.vue new file mode 100644 index 000000000..920f0c596 --- /dev/null +++ b/apps/web-antd/src/views/system/area/modules/form.vue @@ -0,0 +1,50 @@ + + + diff --git a/apps/web-antd/src/views/system/dict/index.vue b/apps/web-antd/src/views/system/dict/index.vue new file mode 100644 index 000000000..8d824256d --- /dev/null +++ b/apps/web-antd/src/views/system/dict/index.vue @@ -0,0 +1,33 @@ + + + diff --git a/apps/web-antd/src/views/system/mail/account/modules/form.vue b/apps/web-antd/src/views/system/mail/account/modules/form.vue new file mode 100644 index 000000000..b230aaa59 --- /dev/null +++ b/apps/web-antd/src/views/system/mail/account/modules/form.vue @@ -0,0 +1,89 @@ + + + diff --git a/apps/web-antd/src/views/system/mail/template/modules/form.vue b/apps/web-antd/src/views/system/mail/template/modules/form.vue new file mode 100644 index 000000000..a5eefe79b --- /dev/null +++ b/apps/web-antd/src/views/system/mail/template/modules/form.vue @@ -0,0 +1,89 @@ + + + diff --git a/apps/web-antd/src/views/system/user/modules/import-form.vue b/apps/web-antd/src/views/system/user/modules/import-form.vue new file mode 100644 index 000000000..f3fad2d02 --- /dev/null +++ b/apps/web-antd/src/views/system/user/modules/import-form.vue @@ -0,0 +1,82 @@ + + + diff --git a/apps/web-antd/src/views/system/user/modules/reset-password-form.vue b/apps/web-antd/src/views/system/user/modules/reset-password-form.vue new file mode 100644 index 000000000..0642f493c --- /dev/null +++ b/apps/web-antd/src/views/system/user/modules/reset-password-form.vue @@ -0,0 +1,66 @@ + + + diff --git a/apps/web-antd/tailwind.config.mjs b/apps/web-antd/tailwind.config.mjs new file mode 100644 index 000000000..f17f556fa --- /dev/null +++ b/apps/web-antd/tailwind.config.mjs @@ -0,0 +1 @@ +export { default } from '@vben/tailwind-config'; diff --git a/apps/web-antd/tsconfig.node.json b/apps/web-antd/tsconfig.node.json new file mode 100644 index 000000000..c2f0d86cc --- /dev/null +++ b/apps/web-antd/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/node.json", + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "noEmit": false + }, + "include": ["vite.config.mts"] +} diff --git a/apps/web-antd/vite.config.mts b/apps/web-antd/vite.config.mts new file mode 100644 index 000000000..71ae65bb5 --- /dev/null +++ b/apps/web-antd/vite.config.mts @@ -0,0 +1,20 @@ +import { defineConfig } from '@vben/vite-config'; + +export default defineConfig(async () => { + return { + application: {}, + vite: { + server: { + proxy: { + '/admin-api': { + changeOrigin: true, + rewrite: (path) => path.replace(/^\/admin-api/, ''), + // mock代理目标地址 + target: 'http://localhost:48080/admin-api', + ws: true, + }, + }, + }, + }, + }; +}); diff --git a/apps/web-ele/.env.analyze b/apps/web-ele/.env.analyze new file mode 100644 index 000000000..ffafa8dd5 --- /dev/null +++ b/apps/web-ele/.env.analyze @@ -0,0 +1,7 @@ +# public path +VITE_BASE=/ + +# Basic interface address SPA +VITE_GLOB_API_URL=/api + +VITE_VISUALIZER=true diff --git a/apps/web-ele/index.html b/apps/web-ele/index.html new file mode 100644 index 000000000..34c6f145c --- /dev/null +++ b/apps/web-ele/index.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + <%= VITE_APP_TITLE %> + + + + +
    + + + diff --git a/apps/web-ele/postcss.config.mjs b/apps/web-ele/postcss.config.mjs new file mode 100644 index 000000000..3d8070455 --- /dev/null +++ b/apps/web-ele/postcss.config.mjs @@ -0,0 +1 @@ +export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-ele/public/favicon.ico b/apps/web-ele/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fcf9818e2cf855039b272bdbfbb202d3ff3fa159 GIT binary patch literal 5430 zcmbtY33L=y7JY$12T+8gBk14=GU5gfn~Es=nm`C4AtVq2WF`B)l8}u>kcfdG`xZh7 z1QH@k!WNbQA}Y8rB4pn?Rn^_qRo&T0_nY^tI}C`PBiiTO^QwMT{dfQSKkwZa04wMM zy?X=M0kG_E0D}QwzyR}o4vl|CV{g(JUD6xoaWVij{_9_Z+hnMBoj6eCWqqZ|bDG3? zP1V)7jjOBM^TxNWH(wK5z8fU#uMgCSB?DD--$H2RPrcYwmDwZk?iT=9oB(QH+axi3 z9?DS*P#;M)Y%a>#V-YKdAXdDsz*NrcJ2dtV8t=Z2nsdGH*5&qiyUE>Vm@dqrLZt6> z(Th+Yvk>*s^HEHlg>AP+S>_mmri!6xDj#NlJ7oxWQ{b1Xzn%o3F2 zJy4EYjGB~r*z(;Z#Hz7qs`{9|A<#8ejX|uNj3&YMhCXf82Xb<7t(@Sce5a-F#rS2Y zPw=KW-BEkM4vp1Q(NsN!FqN*!*3f;EooLj|vHO`eL|&WtiJTISa&ibti29;|D&^HFD6dLJF=aUl zQK_g7S%X4w3TiekkUA=zPMK5-kDF8rPMA1{9Ua2-!AA8AkaE6;=1?EdZ_7=RH)f)o zz6YhW?I?uqK+bnR@_w194oGPgLT0)mW_M}f{ky5|&9E|QX9CL8LEd)~4EqY9IqS?o z{kEgO$QcJ|@3tc!kcFIoHX)1V*p0kb)a5#dX?;}TF3?iv0EkJTD|G@qe-~Pce+GHo zUNGz}jFvZLqdGDZxqw5+`{xi25@;Up%^i&{5ngJKR4B7`edHK7AGr+82hKvv;WMv@ zYYyG!LyjO9l#6`eVdBv_&jI9pw_i|sXY^1l+y2P+cXkv&)3*J<2c8E_(&=zM;!EU0 z@{kKYf_xCoLGuVSpE^80voR>Un<^;hk?+}!ZdX2t>o0=%S;@=7@}lqg@B-vQ^J$Kw z$kRMRNM0isbo4zwI1l*X$GyH9LO9vCUO3gaUR~I)UQ^VszB=pq zJ72ARzCd00QaRnLwP*Ti2{J*f&gxTfBdPm^TdR65(H6Yc<=&PT;fM6WaKmm2a4u7z zY0)I8b)GPl_qG;vVa_N8*`pjZ+l*jlZISnwfl zwR4>1*Y=-YMWLuCHstj@R+ZJSN6o<(K)=KqG#)n4uxOg27&xazjC4dT`IKUoTJp9N z>Z6DU%ij@>sEM{gL&=Bc{L6Cp!%%!u97-9Vcg-A>{BGewG17na4{SQ#y`>@VSqJV! zcc^fj1ovi-e@^h8bzUMLBKgvWJD@glA>~?k%K0vo`<)5%mHaPJ4dFIT#QUX`ua$K_ zv`!@kR1+xvrt;y$@z-$}g2rF|jbd>xY&y~NLfzpPo|paXq0w!|VqJ(syG(v`(M}c) z^C(YyQq5S5hFBLgC>)$ACQisl+Msy;Bg*%~&Gm=YYGUiHG=tS7V<~&aI8v>n*qgzw zhhqDW|3clxUTvDQeS)f;roW`|oBNea>y*ilMC(*IP%N}m_vCnQ;y|^Jp0PN{>^bdE zL)sKg8Kh+_=+ri~?4IeHdE|Qz-@)6CF{)<) zjs-BRjtBk54es*F==&1+kV)$>F7gULf-mibH*%4rpOQ!mtq3B}^A+qlAw8#G}T>Y-?wcHN#jlo%oSHYH%Rm4ro+cZ_?b3=+aWV5Y&5fK;E$%$f_)8BCDP)cJNdD z5dR5M*#fwd?XFZ~Zg(zdGj@V{^PXPPhOKAhPts6cvkv9eYc2Rhv0`cpHiRc5w`?T^8l1Q&Crn*oxsRVg_ar{VE#)>+#dL67hLvPFyvkW!mt=0{?cCmWIH@mr+o(*k>E2{86CkHbRwjbs_ z;eGcaw{!*8Il9N8dkTDGI}Ok+=`mlwH&Byx8Vtv-fuZ&9*o3w*^g`-N}!37fsOYgx4us+7ZgITsO%AU}9@c0~6uE~i8yCA6W+4Kb70q*X~ z1AYEAXs;5x${9Jk)G_2cgnE{cP7c&Z5fA?1UP|ew%;$pjW$KWFCzc8j?yl(;c%DQUTT-YW=pQN6P`YqPGu^v$A11)>exgV^rWIbW%QR)c`>QsTb zBe+27tpc;3*gyL~x0Us6C9H27sZKoG$VZs_K92Q$ojlmNVC%O)pq^6AVikBK30GD_ zMZkWz8Mfn3`Trp!2gH5Xq1C9d64zZy7vc&@^BhNW56d_Z=v?p=3wAyk1d0(Kly|Gn zJG*~_Zw}N39{f|jJ3rFxybe;vRgkt^8=^@)U&}|GR5-Byw=)jB5)0x%RtPO',"accordion-toggle":'',accordion:'',"action-next":'',"action-prev":'',addtag:'',"ai-prompt":'',ai:'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"arrow-left":'',"arrow-right":'',bold:'',bookmark:'',"border-style":'',"border-width":'',brightness:'',browse:'',cancel:'',"cell-background-color":'',"cell-border-color":'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',"cut-column":'',"cut-row":'',cut:'',"document-properties":'',drag:'',"duplicate-column":'',"duplicate-row":'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',export:'',fill:'',"flip-horizontally":'',"flip-vertically":'',footnote:'',"format-code":'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',"image-options":'',image:'',indent:'',info:'',"insert-character":'',"insert-time":'',invert:'',italic:'',language:'',"line-height":'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"math-equation":'',mentions:'',minus:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"export-pdf":'',"export-word":'',"import-word":'',"page-break":'',paragraph:'',"paste-column-after":'',"paste-column-before":'',"paste-row-after":'',"paste-row-before":'',"paste-text":'',paste:'',"permanent-pen":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"revision-history":'',"rotate-left":'',"rotate-right":'',rtl:'',save:'',search:'',"select-all":'',selected:'',send:'',settings:'',sharpen:'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',superscript:'',"table-caption":'',"table-cell-classes":'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-classes":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-numbering-rtl":'',"table-row-numbering":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',"template-add":'',template:'',"temporary-placeholder":'',"text-color":'',"text-size-decrease":'',"text-size-increase":'',toc:'',translate:'',typography:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',upload:'',"add-file":'',adjustments:'',"alt-text":'',"auto-image-enhancement":'',blur:'',box:'',camera:'',caption:'',dropbox:'',evernote:'',exposure:'',fb:'',flickr:'',folder:'',"google-drive":'',"google-photos":'',grayscale:'',huddle:'',"image-decorative":'',"image-enhancements":'',instagram:'',onedrive:'',"photo-filter":'',"revert-changes":'',saturation:'',"transform-image":'',vibrance:'',vk:'',warmth:'',user:'',"vertical-align":'',visualblocks:'',visualchars:'',warning:'',"zoom-in":'',"zoom-out":''}}); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/langs/README.md b/apps/web-ele/public/tinymce/langs/README.md new file mode 100644 index 000000000..cd93d8c85 --- /dev/null +++ b/apps/web-ele/public/tinymce/langs/README.md @@ -0,0 +1,3 @@ +This is where language files should be placed. + +Please DO NOT translate these directly, use this service instead: https://crowdin.com/project/tinymce diff --git a/apps/web-ele/public/tinymce/langs/zh_CN.js b/apps/web-ele/public/tinymce/langs/zh_CN.js new file mode 100644 index 000000000..58ed18871 --- /dev/null +++ b/apps/web-ele/public/tinymce/langs/zh_CN.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_CN",{"#":"#","Accessibility":"\u8f85\u52a9\u529f\u80fd","Accordion":"\u6298\u53e0\u9762\u677f","Accordion body...":"\u6298\u53e0\u9762\u677f\u6b63\u6587...","Accordion summary...":"\u6298\u53e0\u9762\u677f\u6458\u8981...","Action":"\u52a8\u4f5c","Activity":"\u6d3b\u52a8","Address":"\u5730\u5740","Advanced":"\u9ad8\u7ea7","Align":"\u5bf9\u9f50","Align center":"\u5c45\u4e2d\u5bf9\u9f50","Align left":"\u5de6\u5bf9\u9f50","Align right":"\u53f3\u5bf9\u9f50","Alignment":"\u5bf9\u9f50","Alignment {0}":"\u5bf9\u9f50{0}","All":"\u5168\u90e8","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Alternative source":"\u955c\u50cf","Alternative source URL":"\u66ff\u4ee3\u6765\u6e90\u7f51\u5740","Anchor":"\u951a\u70b9","Anchor...":"\u951a\u70b9...","Anchors":"\u951a\u70b9","Animals and Nature":"\u52a8\u7269\u548c\u81ea\u7136","Arrows":"\u7bad\u5934","B":"B","Background color":"\u80cc\u666f\u989c\u8272","Background color {0}":"\u80cc\u666f\u989c\u8272 {0}","Black":"\u9ed1\u8272","Block":"\u5757","Block {0}":"\u6587\u672c\u5757{0}","Blockquote":"Blockquote","Blocks":"\u6837\u5f0f","Blue":"\u84dd\u8272","Blue component":"\u767d\u8272\u90e8\u5206","Body":"\u8868\u4f53","Bold":"\u7c97\u4f53","Border":"\u6846\u7ebf","Border color":"\u6846\u7ebf\u989c\u8272","Border style":"\u8fb9\u6846\u6837\u5f0f","Border width":"\u8fb9\u6846\u5bbd\u5ea6","Bottom":"\u4e0b\u65b9\u5bf9\u9f50","Browse files":"\u6d4f\u89c8\u6587\u4ef6","Browse for an image":"\u6d4f\u89c8\u56fe\u7247","Browse links":"\u6d4f\u89c8\u94fe\u63a5","Bullet list":"\u65e0\u5e8f\u5217\u8868","Cancel":"\u53d6\u6d88","Caption":"\u6807\u9898","Cell":"\u5355\u5143\u683c","Cell padding":"\u5355\u5143\u683c\u5185\u8fb9\u8ddd","Cell properties":"\u5355\u5143\u683c\u5c5e\u6027","Cell spacing":"\u5355\u5143\u683c\u5916\u95f4\u8ddd","Cell styles":"\u5355\u5143\u683c\u6837\u5f0f","Cell type":"\u50a8\u5b58\u683c\u522b","Center":"\u5c45\u4e2d","Characters":"\u5b57\u7b26","Characters (no spaces)":"\u5b57\u7b26(\u65e0\u7a7a\u683c)","Circle":"\u7a7a\u5fc3\u5706","Class":"\u7c7b\u578b","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Close":"\u5173\u95ed","Code":"\u4ee3\u7801","Code sample...":"\u793a\u4f8b\u4ee3\u7801...","Code view":"\u4ee3\u7801\u89c6\u56fe","Color Picker":"\u9009\u8272\u5668","Color swatch":"\u989c\u8272\u6837\u672c","Cols":"\u5217","Column":"\u5217","Column clipboard actions":"\u5217\u526a\u8d34\u677f\u64cd\u4f5c","Column group":"\u5217\u7ec4","Column header":"\u5217\u6807\u9898","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","Copy":"\u590d\u5236","Copy column":"\u590d\u5236\u5217","Copy row":"\u590d\u5236\u884c","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9\u3002","Could not load emojis":"\u65e0\u6cd5\u52a0\u8f7dEmojis","Count":"\u8ba1\u6570","Currency":"\u8d27\u5e01","Current window":"\u5f53\u524d\u7a97\u53e3","Custom color":"\u81ea\u5b9a\u4e49\u989c\u8272","Custom...":"\u81ea\u5b9a\u4e49......","Cut":"\u526a\u5207","Cut column":"\u526a\u5207\u5217","Cut row":"\u526a\u5207\u884c","Dark Blue":"\u6df1\u84dd\u8272","Dark Gray":"\u6df1\u7070\u8272","Dark Green":"\u6df1\u7eff\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Red":"\u6df1\u7ea2\u8272","Dark Turquoise":"\u6df1\u84dd\u7eff\u8272","Dark Yellow":"\u6697\u9ec4\u8272","Dashed":"\u865a\u7ebf","Date/time":"\u65e5\u671f/\u65f6\u95f4","Decrease indent":"\u51cf\u5c11\u7f29\u8fdb","Default":"\u9884\u8bbe","Delete accordion":"\u5220\u9664\u6298\u53e0\u9762\u677f","Delete column":"\u5220\u9664\u5217","Delete row":"\u5220\u9664\u884c","Delete table":"\u5220\u9664\u8868\u683c","Dimensions":"\u5c3a\u5bf8","Disc":"\u5b9e\u5fc3\u5706","Div":"Div","Document":"\u6587\u6863","Dotted":"\u865a\u7ebf","Double":"\u53cc\u7cbe\u5ea6","Drop an image here":"\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64","Dropped file type is not supported":"\u6b64\u6587\u4ef6\u7c7b\u578b\u4e0d\u652f\u6301\u62d6\u653e","Edit":"\u7f16\u8f91","Embed":"\u5185\u5d4c","Emojis":"Emojis","Emojis...":"Emojis...","Error":"\u9519\u8bef","Error: Form submit field collision.":"\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002","Error: No form element found.":"\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002","Extended Latin":"\u62c9\u4e01\u8bed\u6269\u5145","Failed to initialize plugin: {0}":"\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}","Failed to load plugin url: {0}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}","Failed to load plugin: {0} from url {1}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}","Failed to upload image: {0}":"\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}","File":"\u6587\u4ef6","Find":"\u5bfb\u627e","Find (if searchreplace plugin activated)":"\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Find and Replace":"\u67e5\u627e\u548c\u66ff\u6362","Find and replace...":"\u67e5\u627e\u5e76\u66ff\u6362...","Find in selection":"\u5728\u9009\u533a\u4e2d\u67e5\u627e","Find whole words only":"\u5168\u5b57\u5339\u914d","Flags":"\u65d7\u5e1c","Focus to contextual toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355","Focus to element path":"\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84","Focus to menubar":"\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f","Focus to toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f","Font":"\u5b57\u4f53","Font size {0}":"\u5b57\u4f53\u5927\u5c0f{0}","Font sizes":"\u5b57\u4f53\u5927\u5c0f","Font {0}":"\u5b57\u4f53{0}","Fonts":"\u5b57\u4f53","Food and Drink":"\u98df\u7269\u548c\u996e\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {0}":"\u683c\u5f0f{0}","Formats":"\u683c\u5f0f","Fullscreen":"\u5168\u5c4f","G":"G","General":"\u4e00\u822c","Gray":"\u7070\u8272","Green":"\u7eff\u8272","Green component":"\u7eff\u8272\u90e8\u5206","Groove":"\u51f9\u69fd","Handy Shortcuts":"\u5feb\u6377\u952e","Header":"\u8868\u5934","Header cell":"\u8868\u5934\u5355\u5143\u683c","Heading 1":"\u4e00\u7ea7\u6807\u9898","Heading 2":"\u4e8c\u7ea7\u6807\u9898","Heading 3":"\u4e09\u7ea7\u6807\u9898","Heading 4":"\u56db\u7ea7\u6807\u9898","Heading 5":"\u4e94\u7ea7\u6807\u9898","Heading 6":"\u516d\u7ea7\u6807\u9898","Headings":"\u6807\u9898","Height":"\u9ad8\u5ea6","Help":"\u5e2e\u52a9","Hex color code":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801","Hidden":"\u9690\u85cf","Horizontal align":"\u6c34\u5e73\u5bf9\u9f50","Horizontal line":"\u6c34\u5e73\u5206\u5272\u7ebf","Horizontal space":"\u6c34\u5e73\u95f4\u8ddd","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u5e94\u8be5\u4ee5\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002","Image is decorative":"\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684","Image list":"\u56fe\u7247\u6e05\u5355","Image title":"\u56fe\u7247\u6807\u9898","Image...":"\u56fe\u7247...","ImageProxy HTTP error: Could not find Image Proxy":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u65e0\u6cd5\u627e\u5230\u56fe\u7247\u4ee3\u7406","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u56fe\u7247\u4ee3\u7406\u5730\u5740\u9519\u8bef","ImageProxy HTTP error: Rejected request":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u8bf7\u6c42\u88ab\u62d2\u7edd","ImageProxy HTTP error: Unknown ImageProxy error":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u672a\u77e5\u7684\u56fe\u7247\u4ee3\u7406\u9519\u8bef","Increase indent":"\u589e\u52a0\u7f29\u8fdb","Inline":"\u6587\u672c","Insert":"\u63d2\u5165","Insert Template":"\u63d2\u5165\u6a21\u677f","Insert accordion":"\u63d2\u5165\u6298\u53e0\u9762\u677f","Insert column after":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","Insert column before":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u65f6\u95f4","Insert image":"\u63d2\u5165\u56fe\u7247","Insert link (if link plugin activated)":"\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert table":"\u63d2\u5165\u8868\u683c","Insert template...":"\u63d2\u5165\u6a21\u677f...","Insert video":"\u63d2\u5165\u89c6\u9891","Insert/Edit code sample":"\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b","Insert/edit image":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","Insert/edit link":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","Insert/edit media":"\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53","Insert/edit video":"\u63d2\u5165/\u7f16\u8f91\u89c6\u9891","Inset":"\u5d4c\u5165","Invalid hex color code: {0}":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801\u65e0\u6548\uff1a {0}","Invalid input":"\u65e0\u6548\u8f93\u5165","Italic":"\u659c\u4f53","Justify":"\u4e24\u7aef\u5bf9\u9f50","Keyboard Navigation":"\u952e\u76d8\u6307\u5f15","Language":"\u8bed\u8a00","Learn more...":"\u4e86\u89e3\u66f4\u591a...","Left":"\u5de6","Left to right":"\u7531\u5de6\u5230\u53f3","Light Blue":"\u6d45\u84dd\u8272","Light Gray":"\u6d45\u7070\u8272","Light Green":"\u6d45\u7eff\u8272","Light Purple":"\u6d45\u7d2b\u8272","Light Red":"\u6d45\u7ea2\u8272","Light Yellow":"\u6d45\u9ec4\u8272","Line height":"Line height","Link list":"\u94fe\u63a5\u6e05\u5355","Link...":"\u94fe\u63a5...","List Properties":"\u5217\u8868\u5c5e\u6027","List properties...":"\u6807\u9898\u5b57\u4f53\u5c5e\u6027","Loading emojis...":"\u6b63\u5728\u52a0\u8f7dEmojis...","Loading...":"\u52a0\u8f7d\u4e2d...","Lower Alpha":"\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","Lower Roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","Match case":"\u5927\u5c0f\u5199\u5339\u914d","Mathematical":"\u6570\u5b66","Media poster (Image URL)":"\u5c01\u9762(\u56fe\u7247\u5730\u5740)","Media...":"\u591a\u5a92\u4f53...","Medium Blue":"\u4e2d\u84dd\u8272","Medium Gray":"\u4e2d\u7070\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Merge cells":"\u5408\u5e76\u5355\u5143\u683c","Middle":"\u5c45\u4e2d\u5bf9\u9f50","Midnight Blue":"\u6df1\u84dd\u8272","More...":"\u66f4\u591a...","Name":"\u540d\u79f0","Navy Blue":"\u6d77\u519b\u84dd","New document":"\u65b0\u5efa\u6587\u6863","New window":"\u65b0\u7a97\u53e3","Next":"\u4e0b\u4e00\u4e2a","No":"\u5426","No alignment":"\u672a\u5bf9\u9f50","No color":"\u65e0","Nonbreaking space":"\u4e0d\u95f4\u65ad\u7a7a\u683c","None":"\u65e0","Numbered list":"\u6709\u5e8f\u5217\u8868","OR":"\u6216","Objects":"\u7269\u4ef6","Ok":"\u786e\u5b9a","Open help dialog":"\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846","Open link":"\u6253\u5f00\u94fe\u63a5","Open link in...":"\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...","Open popup menu for split buttons":"\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae","Orange":"\u6a59\u8272","Outset":"\u5916\u7f6e","Page break":"\u5206\u9875\u7b26","Paragraph":"\u6bb5\u843d","Paste":"\u7c98\u8d34","Paste as text":"\u7c98\u8d34\u4e3a\u6587\u672c","Paste column after":"\u7c98\u8d34\u540e\u9762\u7684\u5217","Paste column before":"\u7c98\u8d34\u6b64\u5217\u524d","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","Paste or type a link":"\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5","Paste row after":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","Paste row before":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","Paste your embed code below:":"\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:","People":"\u4eba\u7c7b","Plugins":"\u63d2\u4ef6","Plugins installed ({0}):":"\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):","Powered by {0}":"\u7531{0}\u9a71\u52a8","Pre":"\u524d\u8a00","Preferences":"\u9996\u9009\u9879","Preformatted":"\u9884\u5148\u683c\u5f0f\u5316\u7684","Premium plugins:":"\u4f18\u79c0\u63d2\u4ef6\uff1a","Press the Up and Down arrow keys to resize the editor.":"\u6309\u4e0a\u4e0b\u7bad\u5934\u952e\u4ee5\u8c03\u6574\u7f16\u8f91\u5668\u5927\u5c0f\u3002","Press the arrow keys to resize the editor.":"\u6309\u7bad\u5934\u952e\u4ee5\u8c03\u6574\u7f16\u8f91\u5668\u5927\u5c0f\u3002","Press {0} for help":"\u6309 {0} \u83b7\u5f97\u5e2e\u52a9","Preview":"\u9884\u89c8","Previous":"\u4e0a\u4e00\u4e2a","Print":"\u6253\u5370","Print...":"\u6253\u5370...","Purple":"\u7d2b\u8272","Quotations":"\u5f15\u7528","R":"R","Range 0 to 255":"\u8303\u56f40\u81f3255","Red":"\u7ea2\u8272","Red component":"\u7ea2\u8272\u90e8\u5206","Redo":"\u91cd\u505a","Remove":"\u79fb\u9664","Remove color":"\u79fb\u9664\u989c\u8272","Remove link":"\u79fb\u9664\u94fe\u63a5","Replace":"\u66ff\u6362","Replace all":"\u66ff\u6362\u5168\u90e8","Replace with":"\u66ff\u6362\u4e3a","Resize":"\u8c03\u6574\u5927\u5c0f","Restore last draft":"\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f","Reveal or hide additional toolbar items":"\u663e\u793a\u6216\u9690\u85cf\u5176\u4ed6\u5de5\u5177\u680f\u9879","Rich Text Area":"\u5bcc\u6587\u672c\u533a\u57df","Rich Text Area. Press ALT-0 for help.":"\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7f16\u8f91\u533a\u3002\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9","Ridge":"\u6d77\u810a\u5ea7","Right":"\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Row":"\u884c","Row clipboard actions":"\u884c\u526a\u8d34\u677f\u64cd\u4f5c","Row group":"\u884c\u7ec4","Row header":"\u884c\u5934","Row properties":"\u884c\u5c5e\u6027","Row type":"\u884c\u7c7b\u578b","Rows":"\u884c\u6570","Save":"\u4fdd\u5b58","Save (if save plugin activated)":"\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Scope":"\u8303\u56f4","Search":"\u641c\u7d22","Select all":"\u5168\u9009","Select...":"\u9009\u62e9...","Selection":"\u9009\u62e9","Shortcut":"\u5feb\u6377\u65b9\u5f0f","Show blocks":"\u663e\u793a\u533a\u5757\u8fb9\u6846","Show caption":"\u663e\u793a\u6807\u9898","Show invisible characters":"\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26","Size":"\u5b57\u53f7","Solid":"\u5b9e\u7ebf","Source":"\u5730\u5740","Source code":"\u6e90\u4ee3\u7801","Special Character":"\u7279\u6b8a\u5b57\u7b26","Special character...":"\u7279\u6b8a\u5b57\u7b26...","Split cell":"\u62c6\u5206\u5355\u5143\u683c","Square":"\u5b9e\u5fc3\u65b9\u5757","Start list at number":"\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868","Strikethrough":"\u5220\u9664\u7ebf","Style":"\u6837\u5f0f","Subscript":"\u4e0b\u6807","Superscript":"\u4e0a\u6807","Switch to or from fullscreen mode":"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f","Symbols":"\u7b26\u53f7","System Font":"\u7cfb\u7edf\u5b57\u4f53","Table":"\u8868\u683c","Table caption":"\u8868\u683c\u6807\u9898","Table properties":"\u8868\u683c\u5c5e\u6027","Table styles":"\u8868\u683c\u6837\u5f0f","Template":"\u6a21\u677f","Templates":"\u6a21\u677f","Text":"\u6587\u5b57","Text color":"\u5b57\u4f53\u989c\u8272","Text color {0}":"\u5b57\u4f53\u989c\u8272 {0}","Text to display":"\u8981\u663e\u793a\u7684\u6587\u672c","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto: \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:// \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f","Title":"\u6807\u9898","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846","Toggle accordion":"\u5207\u6362\u6298\u53e0\u9762\u677f","Tools":"\u5de5\u5177","Top":"\u4e0a\u65b9\u5bf9\u9f50","Travel and Places":"\u65c5\u6e38\u548c\u5730\u70b9","Turquoise":"\u9752\u7eff\u8272","Underline":"\u4e0b\u5212\u7ebf","Undo":"\u64a4\u9500","Upload":"\u4e0a\u4f20","Uploading image":"\u4e0a\u4f20\u56fe\u7247","Upper Alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57","Url":"\u5730\u5740","User Defined":"\u81ea\u5b9a\u4e49","Valid":"\u6709\u6548","Version":"\u7248\u672c","Vertical align":"\u5782\u76f4\u5bf9\u9f50","Vertical space":"\u5782\u76f4\u95f4\u8ddd","View":"\u67e5\u770b","Visual aids":"\u7f51\u683c\u7ebf","Warn":"\u8b66\u544a","White":"\u767d\u8272","Width":"\u5bbd\u5ea6","Word count":"\u5b57\u6570","Words":"\u5355\u8bcd","Words: {0}":"\u5b57\u6570\uff1a{0}","Yellow":"\u9ec4\u8272","Yes":"\u662f","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u6377\u952e\u3002","alignment":"\u5bf9\u9f50","austral sign":"\u6fb3\u5143\u7b26\u53f7","cedi sign":"\u585e\u5730\u7b26\u53f7","colon sign":"\u5192\u53f7","cruzeiro sign":"\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7","currency sign":"\u8d27\u5e01\u7b26\u53f7","dollar sign":"\u7f8e\u5143\u7b26\u53f7","dong sign":"\u8d8a\u5357\u76fe\u7b26\u53f7","drachma sign":"\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7","euro-currency sign":"\u6b27\u5143\u7b26\u53f7","example":"\u793a\u4f8b","formatting":"\u683c\u5f0f\u5316","french franc sign":"\u6cd5\u90ce\u7b26\u53f7","german penny symbol":"\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u53f7","history":"\u5386\u53f2","hryvnia sign":"\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7","indentation":"\u7f29\u8fdb","indian rupee sign":"\u5370\u5ea6\u5362\u6bd4","kip sign":"\u8001\u631d\u57fa\u666e\u7b26\u53f7","lira sign":"\u91cc\u62c9\u7b26\u53f7","livre tournois sign":"\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7","manat sign":"\u9a6c\u7eb3\u7279\u7b26\u53f7","mill sign":"\u5bc6\u5c14\u7b26\u53f7","naira sign":"\u5948\u62c9\u7b26\u53f7","new sheqel sign":"\u65b0\u8c22\u514b\u5c14\u7b26\u53f7","nordic mark sign":"\u5317\u6b27\u9a6c\u514b","peseta sign":"\u6bd4\u585e\u5854\u7b26\u53f7","peso sign":"\u6bd4\u7d22\u7b26\u53f7","ruble sign":"\u5362\u5e03\u7b26\u53f7","rupee sign":"\u5362\u6bd4\u7b26\u53f7","spesmilo sign":"spesmilo\u7b26\u53f7","styles":"\u6837\u5f0f","tenge sign":"\u575a\u6208\u7b26\u53f7","tugrik sign":"\u56fe\u683c\u91cc\u514b\u7b26\u53f7","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","won sign":"\u97e9\u5143\u7b26\u53f7","yen character":"\u65e5\u5143\u5b57\u6837","yen/yuan character variant one":"\u5143\u5b57\u6837\uff08\u5927\u5199\uff09","yuan character":"\u4eba\u6c11\u5e01\u5143\u5b57\u6837","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09","{0} characters":"{0} \u4e2a\u5b57\u7b26","{0} columns, {1} rows":"{0} \u5217\uff0c{1} \u884c","{0} words":"{0} \u5b57"}); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/license.md b/apps/web-ele/public/tinymce/license.md new file mode 100644 index 000000000..70454a638 --- /dev/null +++ b/apps/web-ele/public/tinymce/license.md @@ -0,0 +1,6 @@ +# Software License Agreement + +**TinyMCE** – [](https://github.com/tinymce/tinymce) +Copyright (c) 2024, Ephox Corporation DBA Tiny Technologies, Inc. + +Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html). diff --git a/apps/web-ele/public/tinymce/models/dom/model.min.js b/apps/web-ele/public/tinymce/models/dom/model.min.js new file mode 100644 index 000000000..bce8e62e3 --- /dev/null +++ b/apps/web-ele/public/tinymce/models/dom/model.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.ModelManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(t)===e,o=e=>t=>typeof t===e,n=e=>t=>e===t,r=t("string"),s=t("object"),l=t("array"),a=n(null),c=o("boolean"),i=n(void 0),m=e=>!(e=>null==e)(e),d=o("function"),u=o("number"),f=()=>{},g=e=>()=>e,h=e=>e,p=(e,t)=>e===t;function b(e,...t){return(...o)=>{const n=t.concat(o);return e.apply(null,n)}}const w=e=>t=>!e(t),v=e=>e(),y=g(!1),x=g(!0);class C{constructor(e,t){this.tag=e,this.value=t}static some(e){return new C(!0,e)}static none(){return C.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?C.some(e(this.value)):C.none()}bind(e){return this.tag?e(this.value):C.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:C.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return m(e)?C.some(e):C.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}C.singletonNone=new C(!1);const S=Array.prototype.slice,T=Array.prototype.indexOf,R=Array.prototype.push,D=(e,t)=>{return o=e,n=t,T.call(o,n)>-1;var o,n},O=(e,t)=>{for(let o=0,n=e.length;o{const o=[];for(let n=0;n{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;o{const o=[],n=[];for(let r=0,s=e.length;r{const o=[];for(let n=0,r=e.length;n(((e,t)=>{for(let o=e.length-1;o>=0;o--)t(e[o],o)})(e,((e,n)=>{o=t(o,e,n)})),o),A=(e,t,o)=>(N(e,((e,n)=>{o=t(o,e,n)})),o),L=(e,t)=>((e,t,o)=>{for(let n=0,r=e.length;n{for(let o=0,n=e.length;o{const t=[];for(let o=0,n=e.length;oM(E(e,t)),P=(e,t)=>{for(let o=0,n=e.length;o{const o={};for(let n=0,r=e.length;nt>=0&&tF(e,0),$=e=>F(e,e.length-1),V=(e,t)=>{for(let o=0;o{const o=q(e);for(let n=0,r=o.length;nY(e,((e,o)=>({k:o,v:t(e,o)}))),Y=(e,t)=>{const o={};return G(e,((e,n)=>{const r=t(e,n);o[r.k]=r.v})),o},J=(e,t)=>{const o=[];return G(e,((e,n)=>{o.push(t(e,n))})),o},Q=e=>J(e,h),X=(e,t)=>U.call(e,t),Z="undefined"!=typeof window?window:Function("return this;")(),ee=(e,t)=>((e,t)=>{let o=null!=t?t:Z;for(let t=0;t{const t=ee("ownerDocument.defaultView",e);return s(e)&&((e=>((e,t)=>{const o=((e,t)=>ee(e,t))(e,t);if(null==o)throw new Error(e+" not available on this browser");return o})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(te(e).constructor.name))},ne=e=>e.dom.nodeName.toLowerCase(),re=e=>e.dom.nodeType,se=e=>t=>re(t)===e,le=e=>8===re(e)||"#comment"===ne(e),ae=e=>ce(e)&&oe(e.dom),ce=se(1),ie=se(3),me=se(9),de=se(11),ue=e=>t=>ce(t)&&ne(t)===e,fe=(e,t,o)=>{if(!(r(o)||c(o)||u(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},ge=(e,t,o)=>{fe(e.dom,t,o)},he=(e,t)=>{const o=e.dom;G(t,((e,t)=>{fe(o,t,e)}))},pe=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},be=(e,t)=>C.from(pe(e,t)),we=(e,t)=>{e.dom.removeAttribute(t)},ve=e=>A(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),ye=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},xe={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return ye(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return ye(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return ye(o)},fromDom:ye,fromPoint:(e,t,o)=>C.from(e.dom.elementFromPoint(t,o)).map(ye)},Ce=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},Se=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,Te=(e,t)=>{const o=void 0===t?document:t.dom;return Se(o)?C.none():C.from(o.querySelector(e)).map(xe.fromDom)},Re=(e,t)=>e.dom===t.dom,De=(e,t)=>{const o=e.dom,n=t.dom;return o!==n&&o.contains(n)},Oe=Ce,ke=e=>xe.fromDom(e.dom.ownerDocument),Ee=e=>me(e)?e:ke(e),Ne=e=>C.from(e.dom.parentNode).map(xe.fromDom),_e=e=>C.from(e.dom.parentElement).map(xe.fromDom),Be=(e,t)=>{const o=d(t)?t:y;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=xe.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r},ze=e=>C.from(e.dom.previousSibling).map(xe.fromDom),Ae=e=>C.from(e.dom.nextSibling).map(xe.fromDom),Le=e=>E(e.dom.childNodes,xe.fromDom),We=(e,t)=>{const o=e.dom.childNodes;return C.from(o[t]).map(xe.fromDom)},Me=(e,t)=>{Ne(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},je=(e,t)=>{Ae(e).fold((()=>{Ne(e).each((e=>{Ie(e,t)}))}),(e=>{Me(e,t)}))},Pe=(e,t)=>{const o=(e=>We(e,0))(e);o.fold((()=>{Ie(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},Ie=(e,t)=>{e.dom.appendChild(t.dom)},Fe=(e,t)=>{Me(e,t),Ie(t,e)},He=(e,t)=>{N(t,((o,n)=>{const r=0===n?e:t[n-1];je(r,o)}))},$e=(e,t)=>{N(t,(t=>{Ie(e,t)}))},Ve=e=>{e.dom.textContent="",N(Le(e),(e=>{qe(e)}))},qe=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Ue=e=>{const t=Le(e);t.length>0&&He(e,t),qe(e)},Ge=(e,t)=>xe.fromDom(e.dom.cloneNode(t)),Ke=e=>Ge(e,!1),Ye=e=>Ge(e,!0),Je=(e,t)=>{const o=xe.fromTag(t),n=ve(e);return he(o,n),o},Qe=["tfoot","thead","tbody","colgroup"],Xe=(e,t,o)=>({element:e,rowspan:t,colspan:o}),Ze=(e,t,o)=>({element:e,cells:t,section:o}),et=(e,t,o)=>({element:e,isNew:t,isLocked:o}),tt=(e,t,o,n)=>({element:e,cells:t,section:o,isNew:n}),ot=e=>de(e)&&m(e.dom.host),nt=e=>xe.fromDom(e.dom.getRootNode()),rt=e=>xe.fromDom(e.dom.host),st=e=>{const t=ie(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=nt(e);return ot(t)?C.some(t):C.none()})(xe.fromDom(t)).fold((()=>o.body.contains(t)),(n=st,r=rt,e=>n(r(e))));var n,r},lt=()=>at(xe.fromDom(document)),at=e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return xe.fromDom(t)},ct=(e,t)=>{let o=[];return N(Le(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(ct(e,t))})),o},it=(e,t,o)=>((e,o,n)=>B(Be(e,n),(e=>Ce(e,t))))(e,0,o),mt=(e,t)=>(e=>B(Le(e),(e=>Ce(e,t))))(e),dt=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return Se(o)?[]:E(o.querySelectorAll(e),xe.fromDom)})(t,e);var ut=(e,t,o,n,r)=>e(o,n)?C.some(o):d(r)&&r(o)?C.none():t(o,n,r);const ft=(e,t,o)=>{let n=e.dom;const r=d(o)?o:y;for(;n.parentNode;){n=n.parentNode;const e=xe.fromDom(n);if(t(e))return C.some(e);if(r(e))break}return C.none()},gt=(e,t,o)=>ut(((e,t)=>t(e)),ft,e,t,o),ht=(e,t,o)=>ft(e,(e=>Ce(e,t)),o),pt=(e,t)=>(e=>L(e.dom.childNodes,(e=>{return o=xe.fromDom(e),Ce(o,t);var o})).map(xe.fromDom))(e),bt=(e,t)=>Te(t,e),wt=(e,t,o)=>ut(((e,t)=>Ce(e,t)),ht,e,t,o),vt=(e,t,o=p)=>e.exists((e=>o(e,t))),yt=e=>{const t=[],o=e=>{t.push(e)};for(let t=0;te?C.some(t):C.none(),Ct=(e,t,o)=>""===t||e.length>=t.length&&e.substr(o,o+t.length)===t,St=(e,t,o=0,n)=>{const r=e.indexOf(t,o);return-1!==r&&(!!i(n)||r+t.length<=n)},Tt=(e,t)=>Ct(e,t,0),Rt=(e,t)=>Ct(e,t,e.length-t.length),Dt=(e=>t=>t.replace(e,""))(/^\s+|\s+$/g),Ot=e=>e.length>0,kt=e=>void 0!==e.style&&d(e.style.getPropertyValue),Et=(e,t,o)=>{if(!r(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);kt(e)&&e.style.setProperty(t,o)},Nt=(e,t,o)=>{const n=e.dom;Et(n,t,o)},_t=(e,t)=>{const o=e.dom;G(t,((e,t)=>{Et(o,t,e)}))},Bt=(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||st(e)?n:zt(o,t)},zt=(e,t)=>kt(e)?e.style.getPropertyValue(t):"",At=(e,t)=>{const o=e.dom,n=zt(o,t);return C.from(n).filter((e=>e.length>0))},Lt=(e,t)=>{((e,t)=>{kt(e)&&e.style.removeProperty(t)})(e.dom,t),vt(be(e,"style").map(Dt),"")&&we(e,"style")},Wt=(e,t,o=0)=>be(e,t).map((e=>parseInt(e,10))).getOr(o),Mt=(e,t)=>Wt(e,t,1),jt=e=>ue("col")(e)?Wt(e,"span",1)>1:Mt(e,"colspan")>1,Pt=(e,t)=>parseInt(Bt(e,t),10),It=g(10),Ft=g(10),Ht=(e,t)=>$t(e,t,x),$t=(e,t,o)=>j(Le(e),(e=>Ce(e,t)?o(e)?[e]:[]:$t(e,t,o))),Vt=(e,t)=>((e,t,o=y)=>o(t)?C.none():D(e,ne(t))?C.some(t):ht(t,e.join(","),(e=>Ce(e,"table")||o(e))))(["td","th"],e,t),qt=e=>Ht(e,"th,td"),Ut=e=>Ce(e,"colgroup")?mt(e,"col"):j(Yt(e),(e=>mt(e,"col"))),Gt=(e,t)=>wt(e,"table",t),Kt=e=>Ht(e,"tr"),Yt=e=>Gt(e).fold(g([]),(e=>mt(e,"colgroup"))),Jt=(e,t)=>E(e,(e=>{if("colgroup"===ne(e)){const t=E(Ut(e),(e=>{const t=Wt(e,"span",1);return Xe(e,1,t)}));return Ze(e,t,"colgroup")}{const o=E(qt(e),(e=>{const t=Wt(e,"rowspan",1),o=Wt(e,"colspan",1);return Xe(e,t,o)}));return Ze(e,o,t(e))}})),Qt=e=>Ne(e).map((e=>{const t=ne(e);return(e=>D(Qe,e))(t)?t:"tbody"})).getOr("tbody"),Xt=e=>{const t=Kt(e),o=[...Yt(e),...t];return Jt(o,Qt)},Zt=e=>{let t,o=!1;return(...n)=>(o||(o=!0,t=e.apply(null,n)),t)},eo=()=>to(0,0),to=(e,t)=>({major:e,minor:t}),oo={nu:to,detect:(e,t)=>{const o=String(t).toLowerCase();return 0===e.length?eo():((e,t)=>{const o=((e,t)=>{for(let o=0;oNumber(t.replace(o,"$"+e));return to(n(1),n(2))})(e,o)},unknown:eo},no=(e,t)=>{const o=String(t).toLowerCase();return L(e,(e=>e.search(o)))},ro=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,so=e=>t=>St(t,e),lo=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>St(e,"edge/")&&St(e,"chrome")&&St(e,"safari")&&St(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ro],search:e=>St(e,"chrome")&&!St(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>St(e,"msie")||St(e,"trident")},{name:"Opera",versionRegexes:[ro,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:so("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:so("firefox")},{name:"Safari",versionRegexes:[ro,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(St(e,"safari")||St(e,"mobile/"))&&St(e,"applewebkit")}],ao=[{name:"Windows",search:so("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>St(e,"iphone")||St(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:so("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:so("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:so("linux"),versionRegexes:[]},{name:"Solaris",search:so("sunos"),versionRegexes:[]},{name:"FreeBSD",search:so("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:so("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],co={browsers:g(lo),oses:g(ao)},io="Edge",mo="Chromium",uo="Opera",fo="Firefox",go="Safari",ho=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isEdge:n(io),isChromium:n(mo),isIE:n("IE"),isOpera:n(uo),isFirefox:n(fo),isSafari:n(go)}},po=()=>ho({current:void 0,version:oo.unknown()}),bo=ho,wo=(g(io),g(mo),g("IE"),g(uo),g(fo),g(go),"Windows"),vo="Android",yo="Linux",xo="macOS",Co="Solaris",So="FreeBSD",To="ChromeOS",Ro=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isWindows:n(wo),isiOS:n("iOS"),isAndroid:n(vo),isMacOS:n(xo),isLinux:n(yo),isSolaris:n(Co),isFreeBSD:n(So),isChromeOS:n(To)}},Do=()=>Ro({current:void 0,version:oo.unknown()}),Oo=Ro,ko=(g(wo),g("iOS"),g(vo),g(yo),g(xo),g(Co),g(So),g(To),e=>window.matchMedia(e).matches);let Eo=Zt((()=>((e,t,o)=>{const n=co.browsers(),r=co.oses(),s=t.bind((e=>((e,t)=>V(t.brands,(t=>{const o=t.brand.toLowerCase();return L(e,(e=>{var t;return o===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:oo.nu(parseInt(t.version,10),0)})))})))(n,e))).orThunk((()=>((e,t)=>no(e,t).map((e=>{const o=oo.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(n,e))).fold(po,bo),l=((e,t)=>no(e,t).map((e=>{const o=oo.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(r,e).fold(Do,Oo),a=((e,t,o,n)=>{const r=e.isiOS()&&!0===/ipad/i.test(o),s=e.isiOS()&&!r,l=e.isiOS()||e.isAndroid(),a=l||n("(pointer:coarse)"),c=r||!s&&l&&n("(min-device-width:768px)"),i=s||l&&!c,m=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(o),d=!i&&!c&&!m;return{isiPad:g(r),isiPhone:g(s),isTablet:g(c),isPhone:g(i),isTouch:g(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:g(m),isDesktop:g(d)}})(l,s,e,o);return{browser:s,os:l,deviceType:a}})(window.navigator.userAgent,C.from(window.navigator.userAgentData),ko)));const No=()=>Eo(),_o=(e,t)=>{const o=o=>{const n=t(o);if(n<=0||null===n){const t=Bt(o,e);return parseFloat(t)||0}return n},n=(e,t)=>A(t,((t,o)=>{const n=Bt(e,o),r=void 0===n?0:parseInt(n,10);return isNaN(r)?t:t+r}),0);return{set:(t,o)=>{if(!u(o)&&!o.match(/^[0-9]+$/))throw new Error(e+".set accepts only positive integer values. Value was "+o);const n=t.dom;kt(n)&&(n.style[e]=o+"px")},get:o,getOuter:o,aggregate:n,max:(e,t,o)=>{const r=n(e,o);return t>r?t-r:0}}},Bo=(e,t,o)=>((e,t)=>(e=>{const t=parseFloat(e);return isNaN(t)?C.none():C.some(t)})(e).getOr(t))(Bt(e,t),o),zo=_o("width",(e=>e.dom.offsetWidth)),Ao=e=>zo.get(e),Lo=e=>zo.getOuter(e),Wo=e=>((e,t)=>{const o=e.dom,n=o.getBoundingClientRect().width||o.offsetWidth;return"border-box"===t?n:((e,t,o,n)=>t-Bo(e,`padding-${o}`,0)-Bo(e,`padding-${n}`,0)-Bo(e,`border-${o}-width`,0)-Bo(e,`border-${n}-width`,0))(e,n,"left","right")})(e,"content-box"),Mo=(e,t,o)=>{const n=e.cells,r=n.slice(0,t),s=n.slice(t),l=r.concat(o).concat(s);return Io(e,l)},jo=(e,t,o)=>Mo(e,t,[o]),Po=(e,t,o)=>{e.cells[t]=o},Io=(e,t)=>tt(e.element,t,e.section,e.isNew),Fo=(e,t)=>e.cells[t],Ho=(e,t)=>Fo(e,t).element,$o=e=>e.cells.length,Vo=e=>{const t=_(e,(e=>"colgroup"===e.section));return{rows:t.fail,cols:t.pass}},qo=(e,t,o)=>{const n=E(e.cells,o);return tt(t(e.element),n,e.section,!0)},Uo="data-snooker-locked-cols",Go=e=>be(e,Uo).bind((e=>C.from(e.match(/\d+/g)))).map((e=>I(e,x))),Ko=e=>{const t=A(Vo(e).rows,((e,t)=>(N(t.cells,((t,o)=>{t.isLocked&&(e[o]=!0)})),e)),{}),o=J(t,((e,t)=>parseInt(t,10)));return(e=>{const t=S.call(e,0);return t.sort(void 0),t})(o)},Yo=(e,t)=>e+","+t,Jo=(e,t)=>{const o=j(e.all,(e=>e.cells));return B(o,t)},Qo=e=>{const t={},o=[],n=H(e).map((e=>e.element)).bind(Gt).bind(Go).getOr({});let r=0,s=0,l=0;const{pass:a,fail:c}=_(e,(e=>"colgroup"===e.section));N(c,(e=>{const a=[];N(e.cells,(e=>{let o=0;for(;void 0!==t[Yo(l,o)];)o++;const r=((e,t)=>X(e,t)&&void 0!==e[t]&&null!==e[t])(n,o.toString()),c=((e,t,o,n,r,s)=>({element:e,rowspan:t,colspan:o,row:n,column:r,isLocked:s}))(e.element,e.rowspan,e.colspan,l,o,r);for(let n=0;n{const t=(e=>{const t={};let o=0;return N(e.cells,(e=>{const n=e.colspan;k(n,(r=>{const s=o+r;t[s]=((e,t,o)=>({element:e,colspan:t,column:o}))(e.element,n,s)})),o+=n})),t})(e),o=((e,t)=>({element:e,columns:t}))(e.element,Q(t));return{colgroups:[o],columns:t}})).getOrThunk((()=>({colgroups:[],columns:{}}))),d=((e,t)=>({rows:e,columns:t}))(r,s);return{grid:d,access:t,all:o,columns:i,colgroups:m}},Xo=e=>{const t=Xt(e);return Qo(t)},Zo=Qo,en=(e,t,o)=>C.from(e.access[Yo(t,o)]),tn=(e,t,o)=>{const n=Jo(e,(e=>o(t,e.element)));return n.length>0?C.some(n[0]):C.none()},on=Jo,nn=e=>j(e.all,(e=>e.cells)),rn=e=>Q(e.columns),sn=e=>q(e.columns).length>0,ln=(e,t)=>C.from(e.columns[t]),an=(e,t=x)=>{const o=e.grid,n=k(o.columns,h),r=k(o.rows,h);return E(n,(o=>cn((()=>j(r,(t=>en(e,t,o).filter((e=>e.column===o)).toArray()))),(e=>1===e.colspan&&t(e.element)),(()=>en(e,0,o)))))},cn=(e,t,o)=>{const n=e();return L(n,t).orThunk((()=>C.from(n[0]).orThunk(o))).map((e=>e.element))},mn=e=>{const t=e.grid,o=k(t.rows,h),n=k(t.columns,h);return E(o,(t=>cn((()=>j(n,(o=>en(e,t,o).filter((e=>e.row===t)).fold(g([]),(e=>[e]))))),(e=>1===e.rowspan),(()=>en(e,t,0)))))},dn=(e,t)=>o=>"rtl"===un(o)?t:e,un=e=>"rtl"===Bt(e,"direction")?"rtl":"ltr",fn=_o("height",(e=>{const t=e.dom;return st(e)?t.getBoundingClientRect().height:t.offsetHeight})),gn=e=>fn.get(e),hn=e=>fn.getOuter(e),pn=(e,t)=>({left:e,top:t,translate:(o,n)=>pn(e+o,t+n)}),bn=pn,wn=(e,t)=>void 0!==e?e:void 0!==t?t:0,vn=e=>{const t=e.dom.ownerDocument,o=t.body,n=t.defaultView,r=t.documentElement;if(o===e.dom)return bn(o.offsetLeft,o.offsetTop);const s=wn(null==n?void 0:n.pageYOffset,r.scrollTop),l=wn(null==n?void 0:n.pageXOffset,r.scrollLeft),a=wn(r.clientTop,o.clientTop),c=wn(r.clientLeft,o.clientLeft);return yn(e).translate(l-c,s-a)},yn=e=>{const t=e.dom,o=t.ownerDocument.body;return o===t?bn(o.offsetLeft,o.offsetTop):st(e)?(e=>{const t=e.getBoundingClientRect();return bn(t.left,t.top)})(t):bn(0,0)},xn=(e,t)=>({row:e,y:t}),Cn=(e,t)=>({col:e,x:t}),Sn=e=>vn(e).left+Lo(e),Tn=e=>vn(e).left,Rn=(e,t)=>Cn(e,Tn(t)),Dn=(e,t)=>Cn(e,Sn(t)),On=e=>vn(e).top,kn=(e,t)=>xn(e,On(t)),En=(e,t)=>xn(e,On(t)+hn(t)),Nn=(e,t,o)=>{if(0===o.length)return[];const n=E(o.slice(1),((t,o)=>t.map((t=>e(o,t))))),r=o[o.length-1].map((e=>t(o.length-1,e)));return n.concat([r])},_n={delta:h,positions:e=>Nn(kn,En,e),edge:On},Bn=dn({delta:h,edge:Tn,positions:e=>Nn(Rn,Dn,e)},{delta:e=>-e,edge:Sn,positions:e=>Nn(Dn,Rn,e)}),zn={delta:(e,t)=>Bn(t).delta(e,t),positions:(e,t)=>Bn(t).positions(e,t),edge:e=>Bn(e).edge(e)},An={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},Ln=(()=>{const e="[0-9]+",t="[eE][+-]?"+e,o=e=>`(?:${e})?`,n=["Infinity",e+"\\."+o(e)+o(t),"\\."+e+o(t),e+o(t)].join("|");return new RegExp(`^([+-]?(?:${n}))(.*)$`)})(),Wn=/(\d+(\.\d+)?)%/,Mn=/(\d+(\.\d+)?)px|em/,jn=ue("col"),Pn=ue("tr"),In=(e,t,o)=>{const n=_e(e).getOrThunk((()=>at(ke(e))));return t(e)/o(n)*100},Fn=(e,t)=>{Nt(e,"width",t+"px")},Hn=(e,t)=>{Nt(e,"width",t+"%")},$n=(e,t)=>{Nt(e,"height",t+"px")},Vn=e=>{const t=(e=>{return Bo(t=e,"height",t.dom.offsetHeight)+"px";var t})(e);return t?((e,t,o,n)=>{const r=parseFloat(e);return Rt(e,"%")&&"table"!==ne(t)?((e,t,o,n)=>{const r=Gt(e).map((e=>{const n=o(e);return Math.floor(t/100*n)})).getOr(t);return n(e,r),r})(t,r,o,n):r})(t,e,gn,$n):gn(e)},qn=(e,t)=>At(e,t).orThunk((()=>be(e,t).map((e=>e+"px")))),Un=e=>qn(e,"width"),Gn=e=>In(e,Ao,Wo),Kn=e=>{return jn(e)?Ao(e):Bo(t=e,"width",t.dom.offsetWidth);var t},Yn=e=>Pn(e)?gn(e):((e,t,o)=>o(e)/Mt(e,"rowspan"))(e,0,Vn),Jn=(e,t,o)=>{Nt(e,"width",t+o)},Qn=e=>In(e,Ao,Wo)+"%",Xn=g(Wn),Zn=ue("col"),er=e=>Un(e).getOrThunk((()=>Kn(e)+"px")),tr=e=>{return(t=e,qn(t,"height")).getOrThunk((()=>Yn(e)+"px"));var t},or=(e,t,o,n,r,s)=>e.filter(n).fold((()=>s(((e,t)=>{if(t<0||t>=e.length-1)return C.none();const o=e[t].fold((()=>{const o=(e=>{const t=S.call(e,0);return t.reverse(),t})(e.slice(0,t));return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:0}))),n=e[t+1].fold((()=>{const o=e.slice(t+1);return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:1})));return o.bind((e=>n.map((t=>{const o=t.delta+e.delta;return Math.abs(t.value-e.value)/o}))))})(o,t))),(e=>r(e))),nr=(e,t,o,n)=>{const r=an(e),s=sn(e)?(e=>E(rn(e),(e=>C.from(e.element))))(e):r,l=[C.some(zn.edge(t))].concat(E(zn.positions(r,t),(e=>e.map((e=>e.x))))),a=w(jt);return E(s,((e,t)=>or(e,t,l,a,(e=>{if((e=>{const t=No().browser,o=t.isChromium()||t.isFirefox();return!Zn(e)||o})(e))return o(e);{const e=null!=(s=r[t])?h(s):C.none();return or(e,t,l,a,(e=>n(C.some(Ao(e)))),n)}var s}),n)))},rr=e=>e.map((e=>e+"px")).getOr(""),sr=(e,t,o)=>nr(e,t,Kn,(e=>e.getOrThunk(o.minCellWidth))),lr=(e,t,o,n)=>{const r=mn(e),s=E(e.all,(e=>C.some(e.element))),l=[C.some(_n.edge(t))].concat(E(_n.positions(r,t),(e=>e.map((e=>e.y)))));return E(s,((e,t)=>or(e,t,l,x,o,n)))},ar=(e,t)=>()=>st(e)?t(e):parseFloat(At(e,"width").getOr("0")),cr=e=>{const t=ar(e,(e=>parseFloat(Qn(e)))),o=ar(e,Ao);return{width:t,pixelWidth:o,getWidths:(t,o)=>((e,t,o)=>nr(e,t,Gn,(e=>e.fold((()=>o.minCellWidth()),(e=>e/o.pixelWidth()*100)))))(t,e,o),getCellDelta:e=>e/o()*100,singleColumnWidth:(e,t)=>[100-e],minCellWidth:()=>It()/o()*100,setElementWidth:Hn,adjustTableWidth:o=>{const n=t();Hn(e,n+o/100*n)},isRelative:!0,label:"percent"}},ir=e=>{const t=ar(e,Ao);return{width:t,pixelWidth:t,getWidths:(t,o)=>sr(t,e,o),getCellDelta:h,singleColumnWidth:(e,t)=>[Math.max(It(),e+t)-e],minCellWidth:It,setElementWidth:Fn,adjustTableWidth:o=>{const n=t()+o;Fn(e,n)},isRelative:!1,label:"pixel"}},mr=e=>Un(e).fold((()=>(e=>{const t=ar(e,Ao),o=g(0);return{width:t,pixelWidth:t,getWidths:(t,o)=>sr(t,e,o),getCellDelta:o,singleColumnWidth:g([0]),minCellWidth:o,setElementWidth:f,adjustTableWidth:f,isRelative:!0,label:"none"}})(e)),(t=>((e,t)=>null!==Xn().exec(t)?cr(e):ir(e))(e,t))),dr=ir,ur=cr,fr=(e,t,o)=>{const n=e[o].element,r=xe.fromTag("td");Ie(r,xe.fromTag("br")),(t?Ie:Pe)(n,r)},gr=(e=>{const t=t=>e(t)?C.from(t.dom.nodeValue):C.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(ie),hr=e=>gr.get(e),pr=e=>gr.getOption(e),br=(e,t)=>gr.set(e,t),wr=e=>"img"===ne(e)?1:pr(e).fold((()=>Le(e).length),(e=>e.length)),vr=["img","br"],yr=e=>pr(e).filter((e=>0!==e.trim().length||e.indexOf("\xa0")>-1)).isSome()||D(vr,ne(e))||(e=>ae(e)&&"false"===pe(e,"contenteditable"))(e),xr=e=>((e,t)=>{const o=e=>{for(let n=0;nSr(e,yr),Sr=(e,t)=>{const o=e=>{const n=Le(e);for(let e=n.length-1;e>=0;e--){const r=n[e];if(t(r))return C.some(r);const s=o(r);if(s.isSome())return s}return C.none()};return o(e)},Tr={scope:["row","col"]},Rr=e=>()=>{const t=xe.fromTag("td",e.dom);return Ie(t,xe.fromTag("br",e.dom)),t},Dr=e=>()=>xe.fromTag("col",e.dom),Or=e=>()=>xe.fromTag("colgroup",e.dom),kr=e=>()=>xe.fromTag("tr",e.dom),Er=(e,t,o)=>{const n=((e,t)=>{const o=Je(e,t),n=Le(Ye(e));return $e(o,n),o})(e,t);return G(o,((e,t)=>{null===e?we(n,t):ge(n,t,e)})),n},Nr=e=>e,_r=(e,t,o)=>{const n=(e,t)=>{((e,t)=>{const o=e.dom,n=t.dom;kt(o)&&kt(n)&&(n.style.cssText=o.style.cssText)})(e.element,t),Lt(t,"height"),1!==e.colspan&&Lt(t,"width")};return{col:o=>{const r=xe.fromTag(ne(o.element),t.dom);return n(o,r),e(o.element,r),r},colgroup:Or(t),row:kr(t),cell:r=>{const s=xe.fromTag(ne(r.element),t.dom),l=o.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),a=l.length>0?((e,t,o)=>xr(e).map((n=>{const r=o.join(","),s=it(n,r,(t=>Re(t,e)));return z(s,((e,t)=>{const o=Ke(t);return Ie(e,o),o}),t)})).getOr(t))(r.element,s,l):s;return Ie(a,xe.fromTag("br")),n(r,s),((e,t)=>{G(Tr,((o,n)=>be(e,n).filter((e=>D(o,e))).each((e=>ge(t,n,e)))))})(r.element,s),e(r.element,s),s},replace:Er,colGap:Dr(t),gap:Rr(t)}},Br=e=>({col:Dr(e),colgroup:Or(e),row:kr(e),cell:Rr(e),replace:Nr,colGap:Dr(e),gap:Rr(e)}),zr=e=>t=>t.options.get(e),Ar="100%",Lr=e=>{var t;const o=e.dom,n=null!==(t=o.getParent(e.selection.getStart(),o.isBlock))&&void 0!==t?t:e.getBody();return Wo(xe.fromDom(n))+"px"},Wr=e=>C.from(e.options.get("table_clone_elements")),Mr=zr("table_header_type"),jr=zr("table_column_resizing"),Pr=e=>"preservetable"===jr(e),Ir=e=>"resizetable"===jr(e),Fr=zr("table_sizing_mode"),Hr=e=>"relative"===Fr(e),$r=e=>"fixed"===Fr(e),Vr=e=>"responsive"===Fr(e),qr=zr("table_resize_bars"),Ur=zr("table_style_by_css"),Gr=zr("table_merge_content_on_paste"),Kr=e=>{const t=e.options,o=t.get("table_default_attributes");return t.isSet("table_default_attributes")?o:((e,t)=>Vr(e)||Ur(e)?t:$r(e)?{...t,width:Lr(e)}:{...t,width:Ar})(e,o)},Yr=zr("table_use_colgroups"),Jr=zr("fixed_toolbar_container"),Qr=zr("fixed_toolbar_container_target"),Xr=zr("ui_mode"),Zr=e=>wt(e,"[contenteditable]"),es=(e,t=!1)=>st(e)?e.dom.isContentEditable:Zr(e).fold(g(t),(e=>"true"===ts(e))),ts=e=>e.dom.contentEditable,os=e=>xe.fromDom(e.getBody()),ns=e=>t=>Re(t,os(e)),rs=e=>{we(e,"data-mce-style");const t=e=>we(e,"data-mce-style");N(qt(e),t),N(Ut(e),t),N(Kt(e),t)},ss=e=>xe.fromDom(e.selection.getStart()),ls=e=>e.getBoundingClientRect().width,as=e=>e.getBoundingClientRect().height,cs=e=>(t,o)=>{const n=t.dom.getStyle(o,e)||t.dom.getAttrib(o,e);return C.from(n).filter(Ot)},is=cs("width"),ms=cs("height"),ds=e=>gt(e,ue("table")).exists(es),us=(e,t)=>{const o=t.column,n=t.column+t.colspan-1,r=t.row,s=t.row+t.rowspan-1;return o<=e.finishCol&&n>=e.startCol&&r<=e.finishRow&&s>=e.startRow},fs=(e,t)=>t.column>=e.startCol&&t.column+t.colspan-1<=e.finishCol&&t.row>=e.startRow&&t.row+t.rowspan-1<=e.finishRow,gs=(e,t,o)=>{const n=tn(e,t,Re),r=tn(e,o,Re);return n.bind((e=>r.map((t=>{return o=e,n=t,{startRow:Math.min(o.row,n.row),startCol:Math.min(o.column,n.column),finishRow:Math.max(o.row+o.rowspan-1,n.row+n.rowspan-1),finishCol:Math.max(o.column+o.colspan-1,n.column+n.colspan-1)};var o,n}))))},hs=(e,t,o)=>gs(e,t,o).map((t=>{const o=on(e,b(us,t));return E(o,(e=>e.element))})),ps=(e,t)=>tn(e,t,((e,t)=>De(t,e))).map((e=>e.element)),bs=(e,t,o)=>{const n=vs(e);return hs(n,t,o)},ws=(e,t,o,n,r)=>{const s=vs(e),l=Re(e,o)?C.some(t):ps(s,t),a=Re(e,r)?C.some(n):ps(s,n);return l.bind((e=>a.bind((t=>hs(s,e,t)))))},vs=Xo;var ys=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],xs=()=>({up:g({selector:ht,closest:wt,predicate:ft,all:Be}),down:g({selector:dt,predicate:ct}),styles:g({get:Bt,getRaw:At,set:Nt,remove:Lt}),attrs:g({get:pe,set:ge,remove:we,copyTo:(e,t)=>{const o=ve(e);he(t,o)}}),insert:g({before:Me,after:je,afterAll:He,append:Ie,appendAll:$e,prepend:Pe,wrap:Fe}),remove:g({unwrap:Ue,remove:qe}),create:g({nu:xe.fromTag,clone:e=>xe.fromDom(e.dom.cloneNode(!1)),text:xe.fromText}),query:g({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:ze,nextSibling:Ae}),property:g({children:Le,name:ne,parent:Ne,document:e=>Ee(e).dom,isText:ie,isComment:le,isElement:ce,isSpecial:e=>{const t=ne(e);return D(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>ce(e)?be(e,"lang"):C.none(),getText:hr,setText:br,isBoundary:e=>!!ce(e)&&("body"===ne(e)||D(ys,ne(e))),isEmptyTag:e=>!!ce(e)&&D(["br","img","hr","input"],ne(e)),isNonEditable:e=>ce(e)&&"false"===pe(e,"contenteditable")}),eq:Re,is:Oe});const Cs=(e,t,o,n)=>{const r=t(e,o);return z(n,((o,n)=>{const r=t(e,n);return Ss(e,o,r)}),r)},Ss=(e,t,o)=>t.bind((t=>o.filter(b(e.eq,t)))),Ts=xs(),Rs=(e,t)=>((e,t,o)=>o.length>0?((e,t,o,n)=>n(e,t,o[0],o.slice(1)))(e,t,o,Cs):C.none())(Ts,((t,o)=>e(o)),t),Ds=e=>ht(e,"table"),Os=(e,t,o)=>{const n=e=>t=>void 0!==o&&o(t)||Re(t,e);return Re(e,t)?C.some({boxes:C.some([e]),start:e,finish:t}):Ds(e).bind((r=>Ds(t).bind((s=>{if(Re(r,s))return C.some({boxes:bs(r,e,t),start:e,finish:t});if(De(r,s)){const o=it(t,"td,th",n(r)),l=o.length>0?o[o.length-1]:t;return C.some({boxes:ws(r,e,r,t,s),start:e,finish:l})}if(De(s,r)){const o=it(e,"td,th",n(s)),l=o.length>0?o[o.length-1]:e;return C.some({boxes:ws(s,e,r,t,s),start:e,finish:l})}return((e,t)=>((e,t,o,n=y)=>{const r=[t].concat(e.up().all(t)),s=[o].concat(e.up().all(o)),l=e=>W(e,n).fold((()=>e),(t=>e.slice(0,t+1))),a=l(r),c=l(s),i=L(a,(t=>O(c,((e,t)=>b(e.eq,t))(e,t))));return{firstpath:a,secondpath:c,shared:i}})(Ts,e,t,void 0))(e,t).shared.bind((l=>wt(l,"table",o).bind((o=>{const l=it(t,"td,th",n(o)),a=l.length>0?l[l.length-1]:t,c=it(e,"td,th",n(o)),i=c.length>0?c[c.length-1]:e;return C.some({boxes:ws(o,e,r,t,s),start:i,finish:a})}))))}))))},ks=(e,t)=>{const o=dt(e,t);return o.length>0?C.some(o):C.none()},Es=(e,t,o)=>bt(e,t).bind((t=>bt(e,o).bind((e=>Rs(Ds,[t,e]).map((o=>({first:t,last:e,table:o}))))))),Ns=(e,t,o,n,r)=>((e,t)=>L(e,(e=>Ce(e,t))))(e,r).bind((e=>((e,t,o)=>Gt(e).bind((n=>((e,t,o,n)=>tn(e,t,Re).bind((t=>{const r=o>0?t.row+t.rowspan-1:t.row,s=n>0?t.column+t.colspan-1:t.column;return en(e,r+o,s+n).map((e=>e.element))})))(vs(n),e,t,o))))(e,t,o).bind((e=>((e,t)=>ht(e,"table").bind((o=>bt(o,t).bind((t=>Os(t,e).bind((e=>e.boxes.map((t=>({boxes:t,start:e.start,finish:e.finish}))))))))))(e,n))))),_s=(e,t)=>ks(e,t),Bs=(e,t,o)=>Es(e,t,o).bind((t=>{const o=t=>Re(e,t),n="thead,tfoot,tbody,table",r=ht(t.first,n,o),s=ht(t.last,n,o);return r.bind((e=>s.bind((o=>Re(e,o)?((e,t,o)=>((e,t,o)=>gs(e,t,o).bind((t=>((e,t)=>{let o=!0;const n=b(fs,t);for(let r=t.startRow;r<=t.finishRow;r++)for(let s=t.startCol;s<=t.finishCol;s++)o=o&&en(e,r,s).exists(n);return o?C.some(t):C.none()})(e,t))))(vs(e),t,o))(t.table,t.first,t.last):C.none()))))})),zs=h,As=e=>{const t=(e,t)=>be(e,t).exists((e=>parseInt(e,10)>1));return e.length>0&&P(e,(e=>t(e,"rowspan")||t(e,"colspan")))?C.some(e):C.none()},Ls=(e,t,o)=>t.length<=1?C.none():Bs(e,o.firstSelectedSelector,o.lastSelectedSelector).map((e=>({bounds:e,cells:t}))),Ws="data-mce-selected",Ms="data-mce-first-selected",js="data-mce-last-selected",Ps="["+Ws+"]",Is={selected:Ws,selectedSelector:"td["+Ws+"],th["+Ws+"]",firstSelected:Ms,firstSelectedSelector:"td["+Ms+"],th["+Ms+"]",lastSelected:js,lastSelectedSelector:"td["+js+"],th["+js+"]"},Fs=(e,t,o)=>({element:o,mergable:Ls(t,e,Is),unmergable:As(e),selection:zs(e)}),Hs=e=>(t,o)=>{const n=ne(t),r="col"===n||"colgroup"===n?Gt(s=t).bind((e=>_s(e,Is.firstSelectedSelector))).fold(g(s),(e=>e[0])):t;var s;return wt(r,e,o)},$s=Hs("th,td,caption"),Vs=Hs("th,td"),qs=e=>{return t=e.model.table.getSelectedCells(),E(t,xe.fromDom);var t},Us=(e,t)=>{e.on("BeforeGetContent",(t=>{const o=o=>{t.preventDefault(),(e=>Gt(e[0]).map((e=>{const t=((e,t)=>{const o=e=>Ce(e.element,t),n=Ye(e),r=Xt(n),s=mr(e),l=Zo(r),a=((e,t)=>{const o=e.grid.columns;let n=e.grid.rows,r=o,s=0,l=0;const a=[],c=[];return G(e.access,(e=>{if(a.push(e),t(e)){c.push(e);const t=e.row,o=t+e.rowspan-1,a=e.column,i=a+e.colspan-1;ts&&(s=o),al&&(l=i)}})),((e,t,o,n,r,s)=>({minRow:e,minCol:t,maxRow:o,maxCol:n,allCells:r,selectedCells:s}))(n,r,s,l,a,c)})(l,o),c="th:not("+t+"),td:not("+t+")",i=$t(n,"th,td",(e=>Ce(e,c)));N(i,qe),((e,t,o,n)=>{const r=B(e,(e=>"colgroup"!==e.section)),s=t.grid.columns,l=t.grid.rows;for(let e=0;eo.maxRow||ao.maxCol||(en(t,e,a).filter(n).isNone()?fr(r,l,e):l=!0)}})(r,l,a,o);const m=((e,t,o,n)=>{if(0===n.minCol&&t.grid.columns===n.maxCol+1)return 0;const r=sr(t,e,o),s=A(r,((e,t)=>e+t),0),l=A(r.slice(n.minCol,n.maxCol+1),((e,t)=>e+t),0),a=l/s*o.pixelWidth()-o.pixelWidth();return o.getCellDelta(a)})(e,Xo(e),s,a);return((e,t,o,n)=>{G(o.columns,(e=>{(e.columnt.maxCol)&&qe(e.element)}));const r=B(Ht(e,"tr"),(e=>0===e.dom.childElementCount));N(r,qe),t.minCol!==t.maxCol&&t.minRow!==t.maxRow||N(Ht(e,"th,td"),(e=>{we(e,"rowspan"),we(e,"colspan")})),we(e,Uo),we(e,"data-snooker-col-series"),mr(e).adjustTableWidth(n)})(n,a,l,m),n})(e,Ps);return rs(t),[t]})))(o).each((o=>{const n="text"===t.format?((e,t)=>{const o=e.getDoc(),n=nt(xe.fromDom(e.getBody())),r=xe.fromTag("div",o);ge(r,"data-mce-bogus","all"),_t(r,{position:"fixed",left:"-9999999px",top:"0",overflow:"hidden",opacity:"0"});const s=(e=>ot(e)?e:xe.fromDom(Ee(e).dom.body))(n);$e(r,t),Ie(s,r);const l=r.dom.innerText;return qe(r),l})(e,o):((e,t)=>E(t,(t=>e.selection.serializer.serialize(t.dom,{}))).join(""))(e,o);t.content=n}))};if(!0===t.selection){const t=(e=>B(qs(e),(e=>Ce(e,Is.selectedSelector))))(e);t.length>=1&&o(t)}})),e.on("BeforeSetContent",(o=>{if(!0===o.selection&&!0===o.paste){const n=qs(e);H(n).each((n=>{Gt(n).each((r=>{const s=B((e=>{const t=document.createElement("div");return t.innerHTML=e,Le(xe.fromDom(t))})(o.content),(e=>"meta"!==ne(e))),l=ue("table");if(Gr(e)&&1===s.length&&l(s[0])){o.preventDefault();const l=xe.fromDom(e.getDoc()),a=Br(l),c=((e,t,o)=>({element:e,clipboard:t,generators:o}))(n,s[0],a);t.pasteCells(r,c).each((()=>{e.focus()}))}}))}))}}))},Gs=(e,t)=>({element:e,offset:t}),Ks=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>Ks(e,t,o).orThunk((()=>C.some(t))))):C.none(),Ys=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,Js=(e,t)=>{const o=Ks(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return Gs(o,Ys(e,o));const n=e.property().children(o);return n.length>0?Js(e,n[n.length-1]):Gs(o,Ys(e,o))},Qs=Js,Xs=xs(),Zs=(e,t)=>{if(!jt(e)){const o=(e=>Un(e).bind((e=>{return t=e,o=["fixed","relative","empty"],C.from(Ln.exec(t)).bind((e=>{const t=Number(e[1]),n=e[2];return((e,t)=>O(t,(t=>O(An[t],(t=>e===t)))))(n,o)?C.some({value:t,unit:n}):C.none()}));var t,o})))(e);o.each((o=>{const n=o.value/2;Jn(e,n,o.unit),Jn(t,n,o.unit)}))}},el=e=>E(e,g(0)),tl=(e,t,o,n,r)=>r(e.slice(0,t)).concat(n).concat(r(e.slice(o))),ol=e=>(t,o,n,r)=>{if(e(n)){const e=Math.max(r,t[o]-Math.abs(n)),s=Math.abs(e-t[o]);return n>=0?s:-s}return n},nl=ol((e=>e<0)),rl=ol(x),sl=()=>{const e=(e,t,o,n)=>{const r=(100+o)/100,s=Math.max(n,(e[t]+o)/r);return E(e,((e,o)=>(o===t?s:e/r)-e))},t=(t,o,n,r,s,l)=>l?e(t,o,r,s):((e,t,o,n,r)=>{const s=nl(e,t,n,r);return tl(e,t,o+1,[s,0],el)})(t,o,n,r,s);return{resizeTable:(e,t)=>e(t),clampTableDelta:nl,calcLeftEdgeDeltas:t,calcMiddleDeltas:(e,o,n,r,s,l,a)=>t(e,n,r,s,l,a),calcRightEdgeDeltas:(t,o,n,r,s,l)=>{if(l)return e(t,n,r,s);{const e=nl(t,n,r,s);return el(t.slice(0,n)).concat([e])}},calcRedestributedWidths:(e,t,o,n)=>{if(n){const n=(t+o)/t,r=E(e,(e=>e/n));return{delta:100*n-100,newSizes:r}}return{delta:o,newSizes:e}}}},ll=()=>{const e=(e,t,o,n,r)=>{const s=rl(e,n>=0?o:t,n,r);return tl(e,t,o+1,[s,-s],el)};return{resizeTable:(e,t,o)=>{o&&e(t)},clampTableDelta:(e,t,o,n,r)=>{if(r){if(o>=0)return o;{const t=A(e,((e,t)=>e+t-n),0);return Math.max(-t,o)}}return nl(e,t,o,n)},calcLeftEdgeDeltas:e,calcMiddleDeltas:(t,o,n,r,s,l)=>e(t,n,r,s,l),calcRightEdgeDeltas:(e,t,o,n,r,s)=>{if(s)return el(e);{const t=n/e.length;return E(e,g(t))}},calcRedestributedWidths:(e,t,o,n)=>({delta:0,newSizes:e})}},al=e=>Xo(e).grid,cl=ue("th"),il=e=>P(e,(e=>cl(e.element))),ml=(e,t)=>e&&t?"sectionCells":e?"section":"cells",dl=e=>{const t="thead"===e.section,o=vt(ul(e.cells),"th");return"tfoot"===e.section?{type:"footer"}:t||o?{type:"header",subType:ml(t,o)}:{type:"body"}},ul=e=>{const t=B(e,(e=>cl(e.element)));return 0===t.length?C.some("td"):t.length===e.length?C.some("th"):C.none()},fl=(e,t,o)=>et(o(e.element,t),!0,e.isLocked),gl=(e,t)=>e.section!==t?tt(e.element,e.cells,t,e.isNew):e,hl=()=>({transformRow:gl,transformCell:(e,t,o)=>{const n=o(e.element,t),r="td"!==ne(n)?(e=>{const t=Je(e,"td");je(e,t);const o=Le(e);return $e(t,o),qe(e),t})(n):n;return et(r,e.isNew,e.isLocked)}}),pl=()=>({transformRow:gl,transformCell:fl}),bl=()=>({transformRow:(e,t)=>gl(e,"thead"===t?"tbody":t),transformCell:fl}),wl=hl,vl=pl,yl=bl,xl=()=>({transformRow:h,transformCell:fl}),Cl=(e,t,o,n)=>{o===n?we(e,t):ge(e,t,o)},Sl=(e,t,o)=>{$(mt(e,t)).fold((()=>Pe(e,o)),(e=>je(e,o)))},Tl=(e,t)=>{const o=[],n=[],r=e=>E(e,(e=>{e.isNew&&o.push(e.element);const t=e.element;return Ve(t),N(e.cells,(e=>{e.isNew&&n.push(e.element),Cl(e.element,"colspan",e.colspan,1),Cl(e.element,"rowspan",e.rowspan,1),Ie(t,e.element)})),t})),s=e=>j(e,(e=>E(e.cells,(e=>(Cl(e.element,"span",e.colspan,1),e.element))))),l=(t,o)=>{const n=((e,t)=>{const o=pt(e,t).getOrThunk((()=>{const o=xe.fromTag(t,ke(e).dom);return"thead"===t?Sl(e,"caption,colgroup",o):"colgroup"===t?Sl(e,"caption",o):Ie(e,o),o}));return Ve(o),o})(e,o),l=("colgroup"===o?s:r)(t);$e(n,l)},a=(t,o)=>{t.length>0?l(t,o):(t=>{pt(e,t).each(qe)})(o)},c=[],i=[],m=[],d=[];return N(t,(e=>{switch(e.section){case"thead":c.push(e);break;case"tbody":i.push(e);break;case"tfoot":m.push(e);break;case"colgroup":d.push(e)}})),a(d,"colgroup"),a(c,"thead"),a(i,"tbody"),a(m,"tfoot"),{newRows:o,newCells:n}},Rl=(e,t)=>{if(0===e.length)return 0;const o=e[0];return W(e,(e=>!t(o.element,e.element))).getOr(e.length)},Dl=(e,t)=>{const o=E(e,(e=>E(e.cells,y)));return E(e,((n,r)=>{const s=j(n.cells,((n,s)=>{if(!1===o[r][s]){const m=((e,t,o,n)=>{const r=((e,t)=>e[t])(e,t),s="colgroup"===r.section,l=Rl(r.cells.slice(o),n),a=s?1:Rl(((e,t)=>E(e,(e=>Fo(e,t))))(e.slice(t),o),n);return{colspan:l,rowspan:a}})(e,r,s,t);return((e,t,n,r)=>{for(let s=e;s({element:e,cells:t,section:o,isNew:n}))(n.element,s,n.section,n.isNew)}))},Ol=(e,t,o)=>{const n=[];N(e.colgroups,(r=>{const s=[];for(let n=0;net(e.element,o,!1))).getOrThunk((()=>et(t.colGap(),!0,!1)));s.push(r)}n.push(tt(r.element,s,"colgroup",o))}));for(let r=0;ret(e.element,o,e.isLocked))).getOrThunk((()=>et(t.gap(),!0,!1)));s.push(l)}const l=e.all[r],a=tt(l.element,s,l.section,o);n.push(a)}return n},kl=e=>Dl(e,Re),El=(e,t)=>V(e.all,(e=>L(e.cells,(e=>Re(t,e.element))))),Nl=(e,t,o)=>{const n=E(t.selection,(t=>Vt(t).bind((t=>El(e,t))).filter(o))),r=yt(n);return xt(r.length>0,r)},_l=(e,t,o,n,r)=>(s,l,a,c)=>{const i=Xo(s),m=C.from(null==c?void 0:c.section).getOrThunk(xl);return t(i,l).map((t=>{const o=((e,t)=>Ol(e,t,!1))(i,a),n=e(o,t,Re,r(a),m),s=Ko(n.grid);return{info:t,grid:kl(n.grid),cursor:n.cursor,lockedColumns:s}})).bind((e=>{const t=Tl(s,e.grid),r=C.from(null==c?void 0:c.sizing).getOrThunk((()=>mr(s))),l=C.from(null==c?void 0:c.resize).getOrThunk(ll);return o(s,e.grid,e.info,{sizing:r,resize:l,section:m}),n(s),we(s,Uo),e.lockedColumns.length>0&&ge(s,Uo,e.lockedColumns.join(",")),C.some({cursor:e.cursor,newRows:t.newRows,newCells:t.newCells})}))},Bl=(e,t)=>Nl(e,t,x).map((e=>({cells:e,generators:t.generators,clipboard:t.clipboard}))),zl=(e,t)=>Nl(e,t,x),Al=(e,t)=>Nl(e,t,(e=>!e.isLocked)),Ll=(e,t)=>P(t,(t=>((e,t)=>El(e,t).exists((e=>!e.isLocked)))(e,t))),Wl=(e,t,o,n)=>{const r=Vo(e).rows;let s=!0;for(let e=0;e{const t=t=>t(e),o=g(e),n=()=>r,r={tag:!0,inner:e,fold:(t,o)=>o(e),isValue:x,isError:y,map:t=>Pl.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:o,or:n,getOrThunk:o,orThunk:n,getOrDie:o,each:t=>{t(e)},toOptional:()=>C.some(e)};return r},jl=e=>{const t=()=>o,o={tag:!1,inner:e,fold:(t,o)=>t(e),isValue:y,isError:x,map:t,mapError:t=>Pl.error(t(e)),bind:t,exists:y,forall:x,getOr:h,or:h,getOrThunk:v,orThunk:v,getOrDie:(n=String(e),()=>{throw new Error(n)}),each:f,toOptional:C.none};var n;return o},Pl={value:Ml,error:jl,fromOption:(e,t)=>e.fold((()=>jl(t)),Ml)},Il=(e,t)=>({rowDelta:0,colDelta:$o(e[0])-$o(t[0])}),Fl=(e,t)=>({rowDelta:e.length-t.length,colDelta:0}),Hl=(e,t,o,n)=>{const r="colgroup"===t.section?o.col:o.cell;return k(e,(e=>et(r(),!0,n(e))))},$l=(e,t,o,n)=>{const r=e[e.length-1];return e.concat(k(t,(()=>{const e="colgroup"===r.section?o.colgroup:o.row,t=qo(r,e,h),s=Hl(t.cells.length,t,o,(e=>X(n,e.toString())));return Io(t,s)})))},Vl=(e,t,o,n)=>E(e,(e=>{const r=Hl(t,e,o,y);return Mo(e,n,r)})),ql=(e,t,o)=>{const n=t.colDelta<0?Vl:h,r=t.rowDelta<0?$l:h,s=Ko(e),l=$o(e[0]),a=O(s,(e=>e===l-1)),c=n(e,Math.abs(t.colDelta),o,a?l-1:l),i=Ko(c);return r(c,Math.abs(t.rowDelta),o,I(i,x))},Ul=(e,t,o,n)=>{const r=b(n,Fo(e[t],o).element),s=e[t];return e.length>1&&$o(s)>1&&(o>0&&r(Ho(s,o-1))||o0&&r(Ho(e[t-1],o))||tB(o,(o=>o>=e.column&&o<=$o(t[0])+e.column)),Kl=(e,t,o,n,r)=>{((e,t,o,n)=>{t>0&&t{const r=e.cells[t-1];let s=0;const l=n();for(;e.cells.length>t+s&&o(r.element,e.cells[t+s].element);)Po(e,t+s,et(l,!0,e.cells[t+s].isLocked)),s++}))})(t,e,r,n.cell);const s=Fl(o,t),l=ql(o,s,n),a=Fl(t,l),c=ql(t,a,n);return E(c,((t,o)=>Mo(t,e,l[o].cells)))},Yl=(e,t,o,n,r)=>{((e,t,o,n)=>{const r=Vo(e).rows;if(t>0&&tA(e,((e,o)=>O(e,(e=>t(e.element,o.element)))?e:e.concat([o])),[]))(r[t-1].cells,o);N(e,(e=>{let s=C.none();for(let l=t;l{Po(a,t,et(e,!0,c.isLocked))})))}}))}})(t,e,r,n.cell);const s=Ko(t),l=Il(t,o),a={...l,colDelta:l.colDelta-s.length},c=ql(t,a,n),{cols:i,rows:m}=Vo(c),d=Ko(c),u=Il(o,t),f={...u,colDelta:u.colDelta+d.length},g=(p=n,b=d,E(o,(e=>A(b,((t,o)=>{const n=Hl(1,e,p,x)[0];return jo(t,o,n)}),e)))),h=ql(g,f,n);var p,b;return[...i,...m.slice(0,e),...h,...m.slice(e,m.length)]},Jl=(e,t,o,n,r)=>{const{rows:s,cols:l}=Vo(e),a=s.slice(0,t),c=s.slice(t);return[...l,...a,((e,t,o,n)=>qo(e,(e=>n(e,o)),t))(s[o],((e,o)=>t>0&&tE(e,(e=>{const s=t>0&&t<$o(e)&&n(Ho(e,t-1),Ho(e,t)),l=((e,t,o,n,r,s,l)=>{if("colgroup"!==o&&n)return Fo(e,t);{const t=Fo(e,r);return et(l(t.element,s),!0,!1)}})(e,t,e.section,s,o,n,r);return jo(e,t,l)})),Xl=(e,t,o,n)=>((e,t,o,n)=>void 0!==Ho(e[t],o)&&t>0&&n(Ho(e[t-1],o),Ho(e[t],o)))(e,t,o,n)||((e,t,o)=>t>0&&o(Ho(e,t-1),Ho(e,t)))(e[t],o,n),Zl=(e,t,o,n)=>{const r=e=>(e=>"row"===e?(e=>Mt(e,"rowspan")>1)(t):jt(t))(e)?`${e}group`:e;return e?cl(t)?r(o):null:n&&cl(t)?r("row"===o?"col":"row"):null},ea=(e,t,o)=>et(o(e.element,t),!0,e.isLocked),ta=(e,t,o,n,r,s,l)=>E(e,((e,a)=>(e=>{const c=e.cells,i=E(c,((e,c)=>{if((e=>O(t,(t=>o(e.element,t.element))))(e)){const t=l(e,a,c)?r(e,o,n):e;return s(t,a,c).each((e=>{var o,n;o=t.element,n={scope:C.from(e)},G(n,((e,t)=>{e.fold((()=>{we(o,t)}),(e=>{fe(o.dom,t,e)}))}))})),t}return e}));return tt(e.element,i,e.section,e.isNew)})(e))),oa=(e,t,o)=>j(e,((n,r)=>Xl(e,r,t,o)?[]:[Fo(n,t)])),na=(e,t,o,n,r)=>{const s=Vo(e).rows,l=j(t,(e=>oa(s,e,n))),a=E(s,(e=>il(e.cells))),c=((e,t)=>P(t,h)&&il(e)?x:(e,o,n)=>!("th"===ne(e.element)&&t[o]))(l,a),i=((e,t)=>(o,n)=>C.some(Zl(e,o.element,"row",t[n])))(o,a);return ta(e,l,n,r,ea,i,c)},ra=(e,t,o,n)=>{const r=Vo(e).rows,s=E(t,(e=>Fo(r[e.row],e.column)));return ta(e,s,o,n,ea,C.none,x)},sa=e=>{if(!l(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],o={};return N(e,((n,r)=>{const s=q(n);if(1!==s.length)throw new Error("one and only one name per case");const a=s[0],c=n[a];if(void 0!==o[a])throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!l(c))throw new Error("case arguments must be an array");t.push(a),o[a]=(...o)=>{const n=o.length;if(n!==c.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+c.length+" ("+c+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[r].apply(null,o)},match:e=>{const n=q(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!P(t,(e=>D(n,e))))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,o)},log:e=>{console.log(e,{constructors:t,constructor:a,params:o})}}}})),o},la={...sa([{none:[]},{only:["index"]},{left:["index","next"]},{middle:["prev","index","next"]},{right:["prev","index"]}])},aa=(e,t,o)=>{const n=((e,t)=>sn(e)?((e,t)=>{const o=rn(e);return E(o,((e,o)=>({element:e.element,width:t[o],colspan:e.colspan})))})(e,t):((e,t)=>{const o=nn(e);return E(o,(e=>{const o=((e,t,o)=>{let n=0;for(let r=e;r{o.setElementWidth(e.element,e.width)}))},ca=(e,t,o,n,r)=>{const s=Xo(e),l=r.getCellDelta(t),a=r.getWidths(s,r),c=o===s.grid.columns-1,i=n.clampTableDelta(a,o,l,r.minCellWidth(),c),m=((e,t,o,n,r)=>{const s=e.slice(0),l=((e,t)=>0===e.length?la.none():1===e.length?la.only(0):0===t?la.left(0,1):t===e.length-1?la.right(t-1,t):t>0&&tn.singleColumnWidth(s[e],o)),((e,t)=>r.calcLeftEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)),((e,t,l)=>r.calcMiddleDeltas(s,e,t,l,o,n.minCellWidth(),n.isRelative)),((e,t)=>r.calcRightEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)))})(a,o,i,r,n),d=E(m,((e,t)=>e+a[t]));aa(s,d,r),n.resizeTable(r.adjustTableWidth,i,c)},ia=(e,t,o)=>{const n=Xo(e),r=((e,t)=>lr(e,t,Yn,(e=>e.getOrThunk(Ft))))(n,e),s=E(r,((e,n)=>o===n?Math.max(t+e,Ft()):e)),l=((e,t)=>E(e.all,((e,o)=>({element:e.element,height:t[o]}))))(n,s);N(l,(e=>{$n(e.element,e.height)})),N(nn(n),(e=>{(e=>{Lt(e,"height")})(e.element)}));const a=z(s,((e,t)=>e+t),0);$n(e,a)},ma=e=>A(e,((e,t)=>O(e,(e=>e.column===t.column))?e:e.concat([t])),[]).sort(((e,t)=>e.column-t.column)),da=ue("col"),ua=ue("colgroup"),fa=e=>"tr"===ne(e)||ua(e),ga=e=>({element:e,colspan:Wt(e,"colspan",1),rowspan:Wt(e,"rowspan",1)}),ha=e=>be(e,"scope").map((e=>e.substr(0,3))),pa=(e,t=ga)=>{const o=o=>{if(fa(o))return ua((r={element:o}).element)?e.colgroup(r):e.row(r);{const r=o,s=(t=>da(t.element)?e.col(t):e.cell(t))(t(r));return n=C.some({item:r,replacement:s}),s}var r};let n=C.none();return{getOrInit:(e,t)=>n.fold((()=>o(e)),(n=>t(e,n.item)?n.replacement:o(e)))}},ba=e=>t=>{const o=[],n=n=>{const r="td"===e?{scope:null}:{},s=t.replace(n,e,r);return o.push({item:n,sub:s}),s};return{replaceOrInit:(e,t)=>{if(fa(e)||da(e))return e;{const r=e;return((e,t)=>L(o,(o=>t(o.item,e))))(r,t).fold((()=>n(r)),(o=>t(e,o.item)?o.sub:n(r)))}}}},wa=e=>({unmerge:t=>{const o=ha(t);return o.each((e=>ge(t,"scope",e))),()=>{const n=e.cell({element:t,colspan:1,rowspan:1});return Lt(n,"width"),Lt(t,"width"),o.each((e=>ge(n,"scope",e))),n}},merge:e=>(Lt(e[0],"width"),(()=>{const t=yt(E(e,ha));if(0===t.length)return C.none();{const e=t[0],o=["row","col"];return O(t,(t=>t!==e&&D(o,t)))?C.none():C.from(e)}})().fold((()=>we(e[0],"scope")),(t=>ge(e[0],"scope",t+"group"))),g(e[0]))}),va=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],ya=xs(),xa=e=>((e,t)=>{const o=e.property().name(t);return D(va,o)})(ya,e),Ca=e=>((e,t)=>{const o=e.property().name(t);return D(["ol","ul"],o)})(ya,e),Sa=e=>{const t=ue("br"),o=e=>Cr(e).bind((o=>{const n=Ae(o).map((e=>!!xa(e)||!!((e,t)=>D(["br","img","hr","input"],e.property().name(t)))(ya,e)&&"img"!==ne(e))).getOr(!1);return Ne(o).map((r=>{return!0===n||("li"===ne(s=r)||ft(s,Ca).isSome())||t(o)||xa(r)&&!Re(e,r)?[]:[xe.fromTag("br")];var s}))})).getOr([]),n=(()=>{const n=j(e,(e=>{const n=Le(e);return(e=>P(e,(e=>t(e)||ie(e)&&0===hr(e).trim().length)))(n)?[]:n.concat(o(e))}));return 0===n.length?[xe.fromTag("br")]:n})();Ve(e[0]),$e(e[0],n)},Ta=e=>es(e,!0),Ra=e=>{0===qt(e).length&&qe(e)},Da=(e,t)=>({grid:e,cursor:t}),Oa=(e,t,o)=>{const n=((e,t,o)=>{var n,r;const s=Vo(e).rows;return C.from(null===(r=null===(n=s[t])||void 0===n?void 0:n.cells[o])||void 0===r?void 0:r.element).filter(Ta).orThunk((()=>(e=>V(e,(e=>V(e.cells,(e=>{const t=e.element;return xt(Ta(t),t)})))))(s)))})(e,t,o);return Da(e,n)},ka=e=>A(e,((e,t)=>O(e,(e=>e.row===t.row))?e:e.concat([t])),[]).sort(((e,t)=>e.row-t.row)),Ea=(e,t)=>(o,n,r,s,l)=>{const a=ka(n),c=E(a,(e=>e.row)),i=((e,t,o,n,r,s,l)=>{const{cols:a,rows:c}=Vo(e),i=c[t[0]],m=j(t,(e=>((e,t,o)=>{const n=e[t];return j(n.cells,((n,r)=>Xl(e,t,r,o)?[]:[n]))})(c,e,r))),d=E(i.cells,((e,t)=>il(oa(c,t,r)))),u=[...c];N(t,(e=>{u[e]=l.transformRow(c[e],o)}));const f=[...a,...u],g=((e,t)=>P(t,h)&&il(e.cells)?x:(e,o,n)=>!("th"===ne(e.element)&&t[n]))(i,d),p=((e,t)=>(o,n,r)=>C.some(Zl(e,o.element,"col",t[r])))(n,d);return ta(f,m,r,s,l.transformCell,p,g)})(o,c,e,t,r,s.replaceOrInit,l);return Oa(i,n[0].row,n[0].column)},Na=Ea("thead",!0),_a=Ea("tbody",!1),Ba=Ea("tfoot",!1),za=(e,t,o)=>{const n=((e,t)=>Jt(e,(()=>t)))(e,o.section),r=Zo(n);return Ol(r,t,!0)},Aa=(e,t,o,n)=>((e,t,o,n)=>{const r=Zo(t),s=n.getWidths(r,n);aa(r,s,n)})(0,t,0,n.sizing),La=(e,t,o,n)=>((e,t,o,n,r)=>{const s=Zo(t),l=n.getWidths(s,n),a=n.pixelWidth(),{newSizes:c,delta:i}=r.calcRedestributedWidths(l,a,o.pixelDelta,n.isRelative);aa(s,c,n),n.adjustTableWidth(i)})(0,t,o,n.sizing,n.resize),Wa=(e,t)=>O(t,(e=>0===e.column&&e.isLocked)),Ma=(e,t)=>O(t,(t=>t.column+t.colspan>=e.grid.columns&&t.isLocked)),ja=(e,t)=>{const o=an(e),n=ma(t);return A(n,((e,t)=>e+o[t.column].map(Lo).getOr(0)),0)},Pa=e=>(t,o)=>zl(t,o).filter((o=>!(e?Wa:Ma)(t,o))).map((e=>({details:e,pixelDelta:ja(t,e)}))),Ia=e=>(t,o)=>Bl(t,o).filter((o=>!(e?Wa:Ma)(t,o.cells))),Fa=ba("th"),Ha=ba("td"),$a=_l(((e,t,o,n)=>{const r=t[0].row,s=ka(t),l=z(s,((e,t)=>({grid:Jl(e.grid,r,t.row+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Oa(l,r,t[0].column)}),zl,f,f,pa),Va=_l(((e,t,o,n)=>{const r=ka(t),s=r[r.length-1],l=s.row+s.rowspan,a=z(r,((e,t)=>Jl(e,l,t.row,o,n.getOrInit)),e);return Oa(a,l,t[0].column)}),zl,f,f,pa),qa=_l(((e,t,o,n)=>{const r=t.details,s=ma(r),l=s[0].column,a=z(s,((e,t)=>({grid:Ql(e.grid,l,t.column+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Oa(a,r[0].row,l)}),Pa(!0),La,f,pa),Ua=_l(((e,t,o,n)=>{const r=t.details,s=r[r.length-1],l=s.column+s.colspan,a=ma(r),c=z(a,((e,t)=>Ql(e,l,t.column,o,n.getOrInit)),e);return Oa(c,r[0].row,l)}),Pa(!1),La,f,pa),Ga=_l(((e,t,o,n)=>{const r=ma(t.details),s=((e,t)=>j(e,(e=>{const o=e.cells,n=z(t,((e,t)=>t>=0&&t0?[tt(e.element,n,e.section,e.isNew)]:[]})))(e,E(r,(e=>e.column))),l=s.length>0?s[0].cells.length-1:0;return Oa(s,r[0].row,Math.min(r[0].column,l))}),((e,t)=>Al(e,t).map((t=>({details:t,pixelDelta:-ja(e,t)})))),La,Ra,pa),Ka=_l(((e,t,o,n)=>{const r=ka(t),s=((e,t,o)=>{const{rows:n,cols:r}=Vo(e);return[...r,...n.slice(0,t),...n.slice(o+1)]})(e,r[0].row,r[r.length-1].row),l=Math.max(Vo(s).rows.length-1,0);return Oa(s,Math.min(t[0].row,l),t[0].column)}),zl,f,Ra,pa),Ya=_l(((e,t,o,n)=>{const r=ma(t),s=E(r,(e=>e.column)),l=na(e,s,!0,o,n.replaceOrInit);return Oa(l,t[0].row,t[0].column)}),Al,f,f,Fa),Ja=_l(((e,t,o,n)=>{const r=ma(t),s=E(r,(e=>e.column)),l=na(e,s,!1,o,n.replaceOrInit);return Oa(l,t[0].row,t[0].column)}),Al,f,f,Ha),Qa=_l(Na,zl,f,f,Fa),Xa=_l(_a,zl,f,f,Ha),Za=_l(Ba,zl,f,f,Ha),ec=_l(((e,t,o,n)=>{const r=ra(e,t,o,n.replaceOrInit);return Oa(r,t[0].row,t[0].column)}),Al,f,f,Fa),tc=_l(((e,t,o,n)=>{const r=ra(e,t,o,n.replaceOrInit);return Oa(r,t[0].row,t[0].column)}),Al,f,f,Ha),oc=_l(((e,t,o,n)=>{const r=t.cells;Sa(r);const s=((e,t,o,n)=>{const r=Vo(e).rows;if(0===r.length)return e;for(let e=t.startRow;e<=t.finishRow;e++)for(let o=t.startCol;o<=t.finishCol;o++){const t=r[e],s=Fo(t,o).isLocked;Po(t,o,et(n(),!1,s))}return e})(e,t.bounds,0,n.merge(r));return Da(s,C.from(r[0]))}),((e,t)=>((e,t)=>t.mergable)(0,t).filter((t=>Ll(e,t.cells)))),Aa,f,wa),nc=_l(((e,t,o,n)=>{const r=z(t,((e,t)=>Wl(e,t,o,n.unmerge(t))),e);return Da(r,C.from(t[0]))}),((e,t)=>((e,t)=>t.unmergable)(0,t).filter((t=>Ll(e,t)))),Aa,f,wa),rc=_l(((e,t,o,n)=>{const r=((e,t)=>{const o=Xo(e);return Ol(o,t,!0)})(t.clipboard,t.generators);var s,l;return((e,t,o,n,r)=>{const s=Ko(t),l=((e,t,o)=>{const n=$o(t[0]),r=Vo(t).cols.length+e.row,s=k(n-e.column,(t=>t+e.column));return{row:r,column:L(s,(e=>P(o,(t=>t!==e)))).getOr(n-1)}})(e,t,s),a=Vo(o).rows,c=Gl(l,a,s),i=((e,t,o)=>{if(e.row>=t.length||e.column>$o(t[0]))return Pl.error("invalid start address out of table bounds, row: "+e.row+", column: "+e.column);const n=t.slice(e.row),r=n[0].cells.slice(e.column),s=$o(o[0]),l=o.length;return Pl.value({rowDelta:n.length-l,colDelta:r.length-s})})(l,t,a);return i.map((e=>{const o={...e,colDelta:e.colDelta-c.length},s=ql(t,o,n),i=Ko(s),m=Gl(l,a,i);return((e,t,o,n,r,s)=>{const l=e.row,a=e.column,c=l+o.length,i=a+$o(o[0])+s.length,m=I(s,x);for(let e=l;eDa(e,C.some(t.element))),(e=>Oa(e,t.row,t.column)))}),((e,t)=>Vt(t.element).bind((o=>El(e,o).map((e=>({...e,generators:t.generators,clipboard:t.clipboard})))))),Aa,f,pa),sc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[0].column,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Kl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,t.cells[0].column)}),Ia(!0),f,f,pa),lc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[t.cells.length-1].column+t.cells[t.cells.length-1].colspan,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Kl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,s)}),Ia(!1),f,f,pa),ac=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[0].row,l=r[s],a=za(t.clipboard,t.generators,l),c=Yl(s,e,a,t.generators,o);return Oa(c,t.cells[0].row,t.cells[0].column)}),Bl,f,f,pa),cc=_l(((e,t,o,n)=>{const r=Vo(e).rows,s=t.cells[t.cells.length-1].row+t.cells[t.cells.length-1].rowspan,l=r[t.cells[0].row],a=za(t.clipboard,t.generators,l),c=Yl(s,e,a,t.generators,o);return Oa(c,s,t.cells[0].column)}),Bl,f,f,pa),ic=(e,t)=>{const o=Xo(e);return zl(o,t).bind((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=M(E(o.all,(e=>B(e.cells,(e=>e.column>=n&&e.column{const o=Xo(e);return zl(o,t).bind(ul).getOr("")},dc=(e,t)=>{const o=Xo(e);return zl(o,t).bind((e=>{const t=e[e.length-1],n=e[0].row,r=t.row+t.rowspan;return(e=>{const t=E(e,(e=>dl(e).type)),o=D(t,"header"),n=D(t,"footer");if(o||n){const e=D(t,"body");return!o||e||n?o||e||!n?C.none():C.some("footer"):C.some("header")}return C.some("body")})(o.all.slice(n,r))})).getOr("")},uc=(e,t)=>e.dispatch("NewRow",{node:t}),fc=(e,t)=>e.dispatch("NewCell",{node:t}),gc=(e,t,o)=>{e.dispatch("TableModified",{...o,table:t})},hc={structure:!1,style:!0},pc={structure:!0,style:!1},bc={structure:!0,style:!0},wc=(e,t)=>Hr(e)?ur(t):$r(e)?dr(t):mr(t),vc=(e,t,o)=>{const n=e=>"table"===ne(os(e)),r=Wr(e),s=Ir(e)?f:Zs,l=t=>{switch(Mr(e)){case"section":return wl();case"sectionCells":return vl();case"cells":return yl();default:return((e,t)=>{var o;switch((o=Xo(e),V(o.all,(e=>{const t=dl(e);return"header"===t.type?C.from(t.subType):C.none()}))).getOr(t)){case"section":return hl();case"sectionCells":return pl();case"cells":return bl()}})(t,"section")}},a=(n,s,a,c)=>(i,m,d=!1)=>{rs(i);const u=xe.fromDom(e.getDoc()),f=_r(a,u,r),g={sizing:wc(e,i),resize:Ir(e)?sl():ll(),section:l(i)};return s(i)?n(i,m,f,g).bind((n=>{t.refresh(i.dom),N(n.newRows,(t=>{uc(e,t.dom)})),N(n.newCells,(t=>{fc(e,t.dom)}));const r=((t,n)=>n.cursor.fold((()=>{const n=qt(t);return H(n).filter(st).map((n=>{o.clearSelectedCells(t.dom);const r=e.dom.createRng();return r.selectNode(n.dom),e.selection.setRng(r),ge(n,"data-mce-selected","1"),r}))}),(n=>{const r=Qs(Xs,n),s=e.dom.createRng();return s.setStart(r.element.dom,r.offset),s.setEnd(r.element.dom,r.offset),e.selection.setRng(s),o.clearSelectedCells(t.dom),C.some(s)})))(i,n);return st(i)&&(rs(i),d||gc(e,i.dom,c)),r.map((e=>({rng:e,effect:c})))})):C.none()},c=a(Ka,(t=>!n(e)||al(t).rows>1),f,pc),i=a(Ga,(t=>!n(e)||al(t).columns>1),f,pc);return{deleteRow:c,deleteColumn:i,insertRowsBefore:a($a,x,f,pc),insertRowsAfter:a(Va,x,f,pc),insertColumnsBefore:a(qa,x,s,pc),insertColumnsAfter:a(Ua,x,s,pc),mergeCells:a(oc,x,f,pc),unmergeCells:a(nc,x,f,pc),pasteColsBefore:a(sc,x,f,pc),pasteColsAfter:a(lc,x,f,pc),pasteRowsBefore:a(ac,x,f,pc),pasteRowsAfter:a(cc,x,f,pc),pasteCells:a(rc,x,f,bc),makeCellsHeader:a(ec,x,f,pc),unmakeCellsHeader:a(tc,x,f,pc),makeColumnsHeader:a(Ya,x,f,pc),unmakeColumnsHeader:a(Ja,x,f,pc),makeRowsHeader:a(Qa,x,f,pc),makeRowsBody:a(Xa,x,f,pc),makeRowsFooter:a(Za,x,f,pc),getTableRowType:dc,getTableCellType:mc,getTableColType:ic}},yc=(e,t,o)=>{const n=Wt(e,t,1);1===o||n<=1?we(e,t):ge(e,t,Math.min(o,n))},xc=(e,t)=>o=>{const n=o.column+o.colspan-1,r=o.column;return n>=e&&r{const n=o.substring(0,o.length-e.length),r=parseFloat(n);return n===r.toString()?t(r):Cc.invalid(o)},Tc={...Cc,from:e=>Rt(e,"%")?Sc("%",Cc.percent,e):Rt(e,"px")?Sc("px",Cc.pixels,e):Cc.invalid(e)},Rc=(e,t,o)=>{const n=Tc.from(o),r=P(e,(e=>"0px"===e))?((e,t)=>{const o=e.fold((()=>g("")),(e=>g(e/t+"px")),(()=>g(100/t+"%")));return k(t,o)})(n,e.length):((e,t,o)=>e.fold((()=>t),(e=>((e,t,o)=>{const n=o/t;return E(e,(e=>Tc.from(e).fold((()=>e),(e=>e*n+"px"),(e=>e/100*o+"px"))))})(t,o,e)),(e=>((e,t)=>E(e,(e=>Tc.from(e).fold((()=>e),(e=>e/t*100+"%"),(e=>e+"%")))))(t,o))))(n,e,t);return kc(r)},Dc=(e,t)=>0===e.length?t:z(e,((e,t)=>Tc.from(t).fold(g(0),h,h)+e),0),Oc=(e,t)=>Tc.from(e).fold(g(e),(e=>e+t+"px"),(e=>e+t+"%")),kc=e=>{if(0===e.length)return e;const t=z(e,((e,t)=>{const o=Tc.from(t).fold((()=>({value:t,remainder:0})),(e=>(e=>{const t=Math.floor(e);return{value:t+"px",remainder:e-t}})(e)),(e=>({value:e+"%",remainder:0})));return{output:[o.value].concat(e.output),remainder:e.remainder+o.remainder}}),{output:[],remainder:0}),o=t.output;return o.slice(0,o.length-1).concat([Oc(o[o.length-1],Math.round(t.remainder))])},Ec=Tc.from,Nc=(e,t,o)=>{const n=Xo(e),r=n.all,s=nn(n),l=rn(n);t.each((t=>{const o=Ec(t).fold(g("px"),g("px"),g("%")),r=Ao(e),a=((e,t)=>nr(e,t,er,rr))(n,e),c=Rc(a,r,t);sn(n)?((e,t,o)=>{N(t,((t,n)=>{const r=Dc([e[n]],It());Nt(t.element,"width",r+o)}))})(c,l,o):((e,t,o)=>{N(t,(t=>{const n=e.slice(t.column,t.colspan+t.column),r=Dc(n,It());Nt(t.element,"width",r+o)}))})(c,s,o),Nt(e,"width",t)})),o.each((t=>{const o=gn(e),l=((e,t)=>lr(e,t,tr,rr))(n,e);((e,t,o)=>{N(o,(e=>{Lt(e.element,"height")})),N(t,((t,o)=>{Nt(t.element,"height",e[o])}))})(Rc(l,o,t),r,s),Nt(e,"height",t)}))},_c=e=>Un(e).exists((e=>Wn.test(e))),Bc=e=>Un(e).exists((e=>Mn.test(e))),zc=e=>Un(e).isNone(),Ac=e=>{we(e,"width"),we(e,"height")},Lc=e=>{const t=Qn(e);Nc(e,C.some(t),C.none()),Ac(e)},Wc=e=>{const t=(e=>Ao(e)+"px")(e);Nc(e,C.some(t),C.none()),Ac(e)},Mc=e=>{Lt(e,"width");const t=Ut(e),o=t.length>0?t:qt(e);N(o,(e=>{Lt(e,"width"),Ac(e)})),Ac(e)},jc={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},colGroups:!1},Pc=(e,t,o,n)=>k(e,(e=>((e,t,o,n)=>{const r=xe.fromTag("tr");for(let s=0;s{e.selection.select(t.dom,!0),e.selection.collapse(!0)},Fc=(e,t,o,n,s)=>{const l=(e=>{const t=e.options,o=t.get("table_default_styles");return t.isSet("table_default_styles")?o:((e,t)=>Vr(e)||!Ur(e)?t:$r(e)?{...t,width:Lr(e)}:{...t,width:Ar})(e,o)})(e),a={styles:l,attributes:Kr(e),colGroups:Yr(e)};return e.undoManager.ignore((()=>{const r=((e,t,o,n,r,s=jc)=>{const l=xe.fromTag("table"),a="cells"!==r;_t(l,s.styles),he(l,s.attributes),s.colGroups&&Ie(l,(e=>{const t=xe.fromTag("colgroup");return k(e,(()=>Ie(t,xe.fromTag("col")))),t})(t));const c=Math.min(e,o);if(a&&o>0){const e=xe.fromTag("thead");Ie(l,e);const s=Pc(o,t,"sectionCells"===r?c:0,n);$e(e,s)}const i=xe.fromTag("tbody");Ie(l,i);const m=Pc(a?e-c:e,t,a?0:o,n);return $e(i,m),l})(o,t,s,n,Mr(e),a);ge(r,"data-mce-id","__mce");const l=(e=>{const t=xe.fromTag("div"),o=xe.fromDom(e.dom.cloneNode(!0));return Ie(t,o),(e=>e.dom.innerHTML)(t)})(r);e.insertContent(l),e.addVisual()})),bt(os(e),'table[data-mce-id="__mce"]').map((t=>($r(e)?Wc(t):Vr(e)?Mc(t):(Hr(e)||(e=>r(e)&&-1!==e.indexOf("%"))(l.width))&&Lc(t),rs(t),we(t,"data-mce-id"),((e,t)=>{N(dt(t,"tr"),(t=>{uc(e,t.dom),N(dt(t,"th,td"),(t=>{fc(e,t.dom)}))}))})(e,t),((e,t)=>{bt(t,"td,th").each(b(Ic,e))})(e,t),t.dom))).getOrNull()};var Hc=tinymce.util.Tools.resolve("tinymce.FakeClipboard");const $c="x-tinymce/dom-table-",Vc=$c+"rows",qc=$c+"columns",Uc=e=>{const t=Hc.FakeClipboardItem(e);Hc.write([t])},Gc=e=>{var t;const o=null!==(t=Hc.read())&&void 0!==t?t:[];return V(o,(t=>C.from(t.getType(e))))},Kc=e=>{Gc(e).isSome()&&Hc.clear()},Yc=e=>{e.fold(Qc,(e=>Uc({[Vc]:e})))},Jc=()=>Gc(Vc),Qc=()=>Kc(Vc),Xc=e=>{e.fold(ei,(e=>Uc({[qc]:e})))},Zc=()=>Gc(qc),ei=()=>Kc(qc),ti=e=>$s(ss(e),ns(e)).filter(ds),oi=(e,t)=>{const o=ns(e),n=e=>Gt(e,o),l=t=>(e=>Vs(ss(e),ns(e)).filter(ds))(e).bind((e=>n(e).map((o=>t(o,e))))),a=t=>{e.focus()},c=(t,o=!1)=>l(((n,r)=>{const s=Fs(qs(e),n,r);t(n,s,o).each(a)})),i=()=>l(((t,o)=>((e,t,o)=>{const n=Xo(e);return zl(n,t).bind((e=>{const t=Ol(n,o,!1),r=Vo(t).rows.slice(e[0].row,e[e.length-1].row+e[e.length-1].rowspan),s=j(r,(e=>{const t=B(e.cells,(e=>!e.isLocked));return t.length>0?[{...e,cells:t}]:[]})),l=kl(s);return xt(l.length>0,l)})).map((e=>E(e,(e=>{const t=Ke(e.element);return N(e.cells,(e=>{const o=Ye(e.element);Cl(o,"colspan",e.colspan,1),Cl(o,"rowspan",e.rowspan,1),Ie(t,o)})),t}))))})(t,Fs(qs(e),t,o),_r(f,xe.fromDom(e.getDoc()),C.none())))),m=()=>l(((t,o)=>((e,t)=>{const o=Xo(e);return Al(o,t).map((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=((e,t,o)=>{if(sn(e)){const n=B(rn(e),xc(t,o)),r=E(n,(e=>{const n=Ye(e.element);return yc(n,"span",o-t),n})),s=xe.fromTag("colgroup");return $e(s,r),[s]}return[]})(o,n,r),l=((e,t,o)=>E(e.all,(e=>{const n=B(e.cells,xc(t,o)),r=E(n,(e=>{const n=Ye(e.element);return yc(n,"colspan",o-t),n})),s=xe.fromTag("tr");return $e(s,r),s})))(o,n,r);return[...s,...l]}))})(t,Fs(qs(e),t,o)))),d=(t,o)=>o().each((o=>{const n=E(o,(e=>Ye(e)));l(((o,r)=>{const s=Br(xe.fromDom(e.getDoc())),l=((e,t,o,n)=>({selection:zs(e),clipboard:o,generators:n}))(qs(e),0,n,s);t(o,l).each(a)}))})),g=e=>(t,o)=>((e,t)=>X(e,t)?C.from(e[t]):C.none())(o,"type").each((t=>{c(e(t),o.no_events)}));G({mceTableSplitCells:()=>c(t.unmergeCells),mceTableMergeCells:()=>c(t.mergeCells),mceTableInsertRowBefore:()=>c(t.insertRowsBefore),mceTableInsertRowAfter:()=>c(t.insertRowsAfter),mceTableInsertColBefore:()=>c(t.insertColumnsBefore),mceTableInsertColAfter:()=>c(t.insertColumnsAfter),mceTableDeleteCol:()=>c(t.deleteColumn),mceTableDeleteRow:()=>c(t.deleteRow),mceTableCutCol:()=>m().each((e=>{Xc(e),c(t.deleteColumn)})),mceTableCutRow:()=>i().each((e=>{Yc(e),c(t.deleteRow)})),mceTableCopyCol:()=>m().each((e=>Xc(e))),mceTableCopyRow:()=>i().each((e=>Yc(e))),mceTablePasteColBefore:()=>d(t.pasteColsBefore,Zc),mceTablePasteColAfter:()=>d(t.pasteColsAfter,Zc),mceTablePasteRowBefore:()=>d(t.pasteRowsBefore,Jc),mceTablePasteRowAfter:()=>d(t.pasteRowsAfter,Jc),mceTableDelete:()=>ti(e).each((t=>{Gt(t,o).filter(w(o)).each((t=>{const o=xe.fromText("");if(je(t,o),qe(t),e.dom.isEmpty(e.getBody()))e.setContent(""),e.selection.setCursorLocation();else{const t=e.dom.createRng();t.setStart(o.dom,0),t.setEnd(o.dom,0),e.selection.setRng(t),e.nodeChanged()}}))})),mceTableCellToggleClass:(t,o)=>{l((t=>{const n=qs(e),r=P(n,(t=>e.formatter.match("tablecellclass",{value:o},t.dom))),s=r?e.formatter.remove:e.formatter.apply;N(n,(e=>s("tablecellclass",{value:o},e.dom))),gc(e,t.dom,hc)}))},mceTableToggleClass:(t,o)=>{l((t=>{e.formatter.toggle("tableclass",{value:o},t.dom),gc(e,t.dom,hc)}))},mceTableToggleCaption:()=>{ti(e).each((t=>{Gt(t,o).each((o=>{pt(o,"caption").fold((()=>{const t=xe.fromTag("caption");Ie(t,xe.fromText("Caption")),((e,t)=>{We(e,0).fold((()=>{Ie(e,t)}),(e=>{Me(e,t)}))})(o,t),e.selection.setCursorLocation(t.dom,0)}),(n=>{ue("caption")(t)&&Te("td",o).each((t=>e.selection.setCursorLocation(t.dom,0))),qe(n)})),gc(e,o.dom,pc)}))}))},mceTableSizingMode:(t,n)=>(t=>ti(e).each((n=>{Vr(e)||$r(e)||Hr(e)||Gt(n,o).each((o=>{"relative"!==t||_c(o)?"fixed"!==t||Bc(o)?"responsive"!==t||zc(o)||Mc(o):Wc(o):Lc(o),rs(o),gc(e,o.dom,pc)}))})))(n),mceTableCellType:g((e=>"th"===e?t.makeCellsHeader:t.unmakeCellsHeader)),mceTableColType:g((e=>"th"===e?t.makeColumnsHeader:t.unmakeColumnsHeader)),mceTableRowType:g((e=>{switch(e){case"header":return t.makeRowsHeader;case"footer":return t.makeRowsFooter;default:return t.makeRowsBody}}))},((t,o)=>e.addCommand(o,t))),e.addCommand("mceInsertTable",((t,o)=>{((e,t,o,n={})=>{const r=e=>u(e)&&e>0;if(r(t)&&r(o)){const r=n.headerRows||0,s=n.headerColumns||0;return Fc(e,o,t,s,r)}console.error("Invalid values for mceInsertTable - rows and columns values are required to insert a table.")})(e,o.rows,o.columns,o.options)})),e.addCommand("mceTableApplyCellStyle",((t,o)=>{const l=e=>"tablecell"+e.toLowerCase().replace("-","");if(!s(o))return;const a=B(qs(e),ds);if(0===a.length)return;const c=((e,t)=>{const o={};return((e,t,o,n)=>{G(e,((e,r)=>{(t(e,r)?o:n)(e,r)}))})(e,t,(e=>(t,o)=>{e[o]=t})(o),f),o})(o,((t,o)=>e.formatter.has(l(o))&&r(t)));(e=>{for(const t in e)if(U.call(e,t))return!1;return!0})(c)||(G(c,((t,o)=>{const n=l(o);N(a,(o=>{""===t?e.formatter.remove(n,{value:null},o.dom,!0):e.formatter.apply(n,{value:t},o.dom)}))})),n(a[0]).each((t=>gc(e,t.dom,hc))))}))},ni=sa([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),ri={before:ni.before,on:ni.on,after:ni.after,cata:(e,t,o,n)=>e.fold(t,o,n),getStart:e=>e.fold(h,h,h)},si=(e,t)=>({selection:e,kill:t}),li=(e,t)=>{const o=e.document.createRange();return o.selectNode(t.dom),o},ai=(e,t)=>{const o=e.document.createRange();return ci(o,t),o},ci=(e,t)=>e.selectNodeContents(t.dom),ii=(e,t,o)=>{const n=e.document.createRange();var r;return r=n,t.fold((e=>{r.setStartBefore(e.dom)}),((e,t)=>{r.setStart(e.dom,t)}),(e=>{r.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,o)=>{e.setEnd(t.dom,o)}),(t=>{e.setEndAfter(t.dom)}))})(n,o),n},mi=(e,t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},di=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}),ui=sa([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),fi=(e,t,o)=>t(xe.fromDom(o.startContainer),o.startOffset,xe.fromDom(o.endContainer),o.endOffset),gi=(e,t)=>{const o=((e,t)=>t.match({domRange:e=>({ltr:g(e),rtl:C.none}),relative:(t,o)=>({ltr:Zt((()=>ii(e,t,o))),rtl:Zt((()=>C.some(ii(e,o,t))))}),exact:(t,o,n,r)=>({ltr:Zt((()=>mi(e,t,o,n,r))),rtl:Zt((()=>C.some(mi(e,n,r,t,o))))})}))(e,t);return((e,t)=>{const o=t.ltr();return o.collapsed?t.rtl().filter((e=>!1===e.collapsed)).map((e=>ui.rtl(xe.fromDom(e.endContainer),e.endOffset,xe.fromDom(e.startContainer),e.startOffset))).getOrThunk((()=>fi(0,ui.ltr,o))):fi(0,ui.ltr,o)})(0,o)},hi=(e,t)=>gi(e,t).match({ltr:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},rtl:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(n.dom,r),s.setEnd(t.dom,o),s}});ui.ltr,ui.rtl;const pi=(e,t,o,n)=>({start:e,soffset:t,finish:o,foffset:n}),bi=(e,t,o,n)=>({start:ri.on(e,t),finish:ri.on(o,n)}),wi=(e,t)=>{const o=hi(e,t);return pi(xe.fromDom(o.startContainer),o.startOffset,xe.fromDom(o.endContainer),o.endOffset)},vi=bi,yi=(e,t,o,n,r)=>Re(o,n)?C.none():Os(o,n,t).bind((t=>{const n=t.boxes.getOr([]);return n.length>1?(r(e,n,t.start,t.finish),C.some(si(C.some(vi(o,0,o,wr(o))),!0))):C.none()})),xi=(e,t)=>({item:e,mode:t}),Ci=(e,t,o,n=Si)=>e.property().parent(t).map((e=>xi(e,n))),Si=(e,t,o,n=Ti)=>o.sibling(e,t).map((e=>xi(e,n))),Ti=(e,t,o,n=Ti)=>{const r=e.property().children(t);return o.first(r).map((e=>xi(e,n)))},Ri=[{current:Ci,next:Si,fallback:C.none()},{current:Si,next:Ti,fallback:C.some(Ci)},{current:Ti,next:Ti,fallback:C.some(Si)}],Di=(e,t,o,n,r=Ri)=>L(r,(e=>e.current===o)).bind((o=>o.current(e,t,n,o.next).orThunk((()=>o.fallback.bind((o=>Di(e,t,o,n))))))),Oi=(e,t,o,n,r,s)=>Di(e,t,n,r).bind((t=>s(t.item)?C.none():o(t.item)?C.some(t.item):Oi(e,t.item,o,t.mode,r,s))),ki=e=>t=>0===e.property().children(t).length,Ei=(e,t,o,n)=>Oi(e,t,o,Si,{sibling:(e,t)=>e.query().prevSibling(t),first:e=>e.length>0?C.some(e[e.length-1]):C.none()},n),Ni=(e,t,o,n)=>Oi(e,t,o,Si,{sibling:(e,t)=>e.query().nextSibling(t),first:e=>e.length>0?C.some(e[0]):C.none()},n),_i=xs(),Bi=(e,t)=>((e,t,o)=>Ei(e,t,ki(e),o))(_i,e,t),zi=(e,t)=>((e,t,o)=>Ni(e,t,ki(e),o))(_i,e,t),Ai=sa([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),Li=e=>wt(e,"tr"),Wi={...Ai,verify:(e,t,o,n,r,s,l)=>wt(n,"td,th",l).bind((o=>wt(t,"td,th",l).map((t=>Re(o,t)?Re(n,o)&&wr(o)===r?s(t):Ai.none("in same cell"):Rs(Li,[o,t]).fold((()=>((e,t,o)=>{const n=e.getRect(t),r=e.getRect(o);return r.right>n.left&&r.lefts(t))))))).getOr(Ai.none("default")),cata:(e,t,o,n,r)=>e.fold(t,o,n,r)},Mi=ue("br"),ji=(e,t,o)=>t(e,o).bind((e=>ie(e)&&0===hr(e).trim().length?ji(e,t,o):C.some(e))),Pi=(e,t,o,n)=>((e,t)=>We(e,t).filter(Mi).orThunk((()=>We(e,t-1).filter(Mi))))(t,o).bind((t=>n.traverse(t).fold((()=>ji(t,n.gather,e).map(n.relative)),(e=>(e=>Ne(e).bind((t=>{const o=Le(t);return((e,t)=>W(e,b(Re,t)))(o,e).map((n=>((e,t,o,n)=>({parent:e,children:t,element:o,index:n}))(t,o,e,n)))})))(e).map((e=>ri.on(e.parent,e.index))))))),Ii=(e,t)=>({left:e.left,top:e.top+t,right:e.right,bottom:e.bottom+t}),Fi=(e,t)=>({left:e.left,top:e.top-t,right:e.right,bottom:e.bottom-t}),Hi=(e,t,o)=>({left:e.left+t,top:e.top+o,right:e.right+t,bottom:e.bottom+o}),$i=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom}),Vi=(e,t)=>C.some(e.getRect(t)),qi=(e,t,o)=>ce(t)?Vi(e,t).map($i):ie(t)?((e,t,o)=>o>=0&&o0?e.getRangedRect(t,o-1,t,o):C.none())(e,t,o).map($i):C.none(),Ui=(e,t)=>ce(t)?Vi(e,t).map($i):ie(t)?e.getRangedRect(t,0,t,wr(t)).map($i):C.none(),Gi=sa([{none:[]},{retry:["caret"]}]),Ki=(e,t,o)=>gt(t,xa).fold(y,(t=>Ui(e,t).exists((e=>((e,t)=>e.leftt.right)(o,e))))),Yi={point:e=>e.bottom,adjuster:(e,t,o,n,r)=>{const s=Ii(r,5);return Math.abs(o.bottom-n.bottom)<1||o.top>r.bottom?Gi.retry(s):o.top===r.bottom?Gi.retry(Ii(r,1)):Ki(e,t,r)?Gi.retry(Hi(s,5,0)):Gi.none()},move:Ii,gather:zi},Ji=(e,t,o,n,r)=>0===r?C.some(n):((e,t,o)=>e.elementFromPoint(t,o).filter((e=>"table"===ne(e))).isSome())(e,n.left,t.point(n))?((e,t,o,n,r)=>Ji(e,t,o,t.move(n,5),r))(e,t,o,n,r-1):e.situsFromPoint(n.left,t.point(n)).bind((s=>s.start.fold(C.none,(s=>Ui(e,s).bind((l=>t.adjuster(e,s,l,o,n).fold(C.none,(n=>Ji(e,t,o,n,r-1))))).orThunk((()=>C.some(n)))),C.none))),Qi=(e,t,o)=>{const n=e.move(o,5),r=Ji(t,e,o,n,100).getOr(n);return((e,t,o)=>e.point(t)>o.getInnerHeight()?C.some(e.point(t)-o.getInnerHeight()):e.point(t)<0?C.some(-e.point(t)):C.none())(e,r,t).fold((()=>t.situsFromPoint(r.left,e.point(r))),(o=>(t.scrollBy(0,o),t.situsFromPoint(r.left,e.point(r)-o))))},Xi={tryUp:b(Qi,{point:e=>e.top,adjuster:(e,t,o,n,r)=>{const s=Fi(r,5);return Math.abs(o.top-n.top)<1||o.bottome.getSelection().bind((n=>((e,t,o,n)=>{const r=Mi(t)?((e,t,o)=>o.traverse(t).orThunk((()=>ji(t,o.gather,e))).map(o.relative))(e,t,n):Pi(e,t,o,n);return r.map((e=>({start:e,finish:e})))})(t,n.finish,n.foffset,o).fold((()=>C.some(Gs(n.finish,n.foffset))),(r=>{const s=e.fromSitus(r);return l=Wi.verify(e,n.finish,n.foffset,s.finish,s.foffset,o.failure,t),Wi.cata(l,(e=>C.none()),(()=>C.none()),(e=>C.some(Gs(e,0))),(e=>C.some(Gs(e,wr(e)))));var l})))),em=(e,t,o,n,r,s)=>0===s?C.none():nm(e,t,o,n,r).bind((l=>{const a=e.fromSitus(l),c=Wi.verify(e,o,n,a.finish,a.foffset,r.failure,t);return Wi.cata(c,(()=>C.none()),(()=>C.some(l)),(l=>Re(o,l)&&0===n?tm(e,o,n,Fi,r):em(e,t,l,0,r,s-1)),(l=>Re(o,l)&&n===wr(l)?tm(e,o,n,Ii,r):em(e,t,l,wr(l),r,s-1)))})),tm=(e,t,o,n,r)=>qi(e,t,o).bind((t=>om(e,r,n(t,Xi.getJumpSize())))),om=(e,t,o)=>{const n=No().browser;return n.isChromium()||n.isSafari()||n.isFirefox()?t.retry(e,o):C.none()},nm=(e,t,o,n,r)=>qi(e,o,n).bind((t=>om(e,r,t))),rm=(e,t,o,n,r)=>wt(n,"td,th",t).bind((n=>wt(n,"table",t).bind((s=>((e,t)=>ft(e,(e=>Ne(e).exists((e=>Re(e,t)))),void 0).isSome())(r,s)?((e,t,o)=>Zi(e,t,o).bind((n=>em(e,t,n.element,n.offset,o,20).map(e.fromSitus))))(e,t,o).bind((e=>wt(e.finish,"td,th",t).map((t=>({start:n,finish:t,range:e}))))):C.none())))),sm=(e,t,o,n,r,s)=>s(n,t).orThunk((()=>rm(e,t,o,n,r).map((e=>{const t=e.range;return si(C.some(vi(t.start,t.soffset,t.finish,t.foffset)),!0)})))),lm=(e,t)=>wt(e,"tr",t).bind((e=>wt(e,"table",t).bind((o=>{const n=dt(o,"tr");return Re(e,n[0])?((e,t,o)=>Ei(_i,e,(e=>Cr(e).isSome()),o))(o,0,t).map((e=>{const t=wr(e);return si(C.some(vi(e,t,e,t)),!0)})):C.none()})))),am=(e,t)=>wt(e,"tr",t).bind((e=>wt(e,"table",t).bind((o=>{const n=dt(o,"tr");return Re(e,n[n.length-1])?((e,t,o)=>Ni(_i,e,(e=>xr(e).isSome()),o))(o,0,t).map((e=>si(C.some(vi(e,0,e,0)),!0))):C.none()})))),cm=(e,t,o,n,r,s,l)=>rm(e,o,n,r,s).bind((e=>yi(t,o,e.start,e.finish,l))),im=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},mm=()=>{const e=(e=>{const t=im(C.none()),o=()=>t.get().each(e);return{clear:()=>{o(),t.set(C.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{o(),t.set(C.some(e))}}})(f);return{...e,on:t=>e.get().each(t)}},dm=(e,t)=>wt(e,"td,th",t),um=e=>_e(e).exists(es),fm={traverse:Ae,gather:zi,relative:ri.before,retry:Xi.tryDown,failure:Wi.failedDown},gm={traverse:ze,gather:Bi,relative:ri.before,retry:Xi.tryUp,failure:Wi.failedUp},hm=e=>t=>t===e,pm=hm(38),bm=hm(40),wm=e=>e>=37&&e<=40,vm={isBackward:hm(37),isForward:hm(39)},ym={isBackward:hm(39),isForward:hm(37)},xm=sa([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Cm={domRange:xm.domRange,relative:xm.relative,exact:xm.exact,exactFromRange:e=>xm.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>xe.fromDom(e.startContainer),relative:(e,t)=>ri.getStart(e),exact:(e,t,o,n)=>e}))(e);return xe.fromDom(Ee(t).dom.defaultView)},range:pi},Sm=(e,t)=>{const o=ne(e);return"input"===o?ri.after(e):D(["br","img"],o)?0===t?ri.before(e):ri.after(e):ri.on(e,t)},Tm=e=>C.from(e.getSelection()),Rm=(e,t)=>{Tm(e).each((e=>{e.removeAllRanges(),e.addRange(t)}))},Dm=(e,t,o,n,r)=>{const s=mi(e,t,o,n,r);Rm(e,s)},Om=(e,t)=>gi(e,t).match({ltr:(t,o,n,r)=>{Dm(e,t,o,n,r)},rtl:(t,o,n,r)=>{Tm(e).each((s=>{if(s.setBaseAndExtent)s.setBaseAndExtent(t.dom,o,n.dom,r);else if(s.extend)try{((e,t,o,n,r,s)=>{t.collapse(o.dom,n),t.extend(r.dom,s)})(0,s,t,o,n,r)}catch(s){Dm(e,n,r,t,o)}else Dm(e,n,r,t,o)}))}}),km=(e,t,o,n,r)=>{const s=((e,t,o,n)=>{const r=Sm(e,t),s=Sm(o,n);return Cm.relative(r,s)})(t,o,n,r);Om(e,s)},Em=(e,t,o)=>{const n=((e,t)=>{const o=e.fold(ri.before,Sm,ri.after),n=t.fold(ri.before,Sm,ri.after);return Cm.relative(o,n)})(t,o);Om(e,n)},Nm=e=>{if(e.rangeCount>0){const t=e.getRangeAt(0),o=e.getRangeAt(e.rangeCount-1);return C.some(pi(xe.fromDom(t.startContainer),t.startOffset,xe.fromDom(o.endContainer),o.endOffset))}return C.none()},_m=e=>{if(null===e.anchorNode||null===e.focusNode)return Nm(e);{const t=xe.fromDom(e.anchorNode),o=xe.fromDom(e.focusNode);return((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=ke(e).dom.createRange();return r.setStart(e.dom,t),r.setEnd(o.dom,n),r})(e,t,o,n),s=Re(e,o)&&t===n;return r.collapsed&&!s})(t,e.anchorOffset,o,e.focusOffset)?C.some(pi(t,e.anchorOffset,o,e.focusOffset)):Nm(e)}},Bm=(e,t,o=!0)=>{const n=(o?ai:li)(e,t);Rm(e,n)},zm=e=>(e=>Tm(e).filter((e=>e.rangeCount>0)).bind(_m))(e).map((e=>Cm.exact(e.start,e.soffset,e.finish,e.foffset))),Am=(e,t,o)=>((e,t,o)=>((e,t,o)=>e.caretPositionFromPoint?((e,t,o)=>{var n;return C.from(null===(n=e.caretPositionFromPoint)||void 0===n?void 0:n.call(e,t,o)).bind((t=>{if(null===t.offsetNode)return C.none();const o=e.createRange();return o.setStart(t.offsetNode,t.offset),o.collapse(),C.some(o)}))})(e,t,o):e.caretRangeFromPoint?((e,t,o)=>{var n;return C.from(null===(n=e.caretRangeFromPoint)||void 0===n?void 0:n.call(e,t,o))})(e,t,o):C.none())(e.document,t,o).map((e=>pi(xe.fromDom(e.startContainer),e.startOffset,xe.fromDom(e.endContainer),e.endOffset))))(e,t,o),Lm=e=>({elementFromPoint:(t,o)=>xe.fromPoint(xe.fromDom(e.document),t,o),getRect:e=>e.dom.getBoundingClientRect(),getRangedRect:(t,o,n,r)=>{const s=Cm.exact(t,o,n,r);return((e,t)=>(e=>{const t=e.getClientRects(),o=t.length>0?t[0]:e.getBoundingClientRect();return o.width>0||o.height>0?C.some(o).map(di):C.none()})(hi(e,t)))(e,s)},getSelection:()=>zm(e).map((t=>wi(e,t))),fromSitus:t=>{const o=Cm.relative(t.start,t.finish);return wi(e,o)},situsFromPoint:(t,o)=>Am(e,t,o).map((e=>bi(e.start,e.soffset,e.finish,e.foffset))),clearSelection:()=>{(e=>{Tm(e).each((e=>e.removeAllRanges()))})(e)},collapseSelection:(t=!1)=>{zm(e).each((o=>o.fold((e=>e.collapse(t)),((o,n)=>{const r=t?o:n;Em(e,r,r)}),((o,n,r,s)=>{const l=t?o:r,a=t?n:s;km(e,l,a,l,a)}))))},setSelection:t=>{km(e,t.start,t.soffset,t.finish,t.foffset)},setRelativeSelection:(t,o)=>{Em(e,t,o)},selectNode:t=>{Bm(e,t,!1)},selectContents:t=>{Bm(e,t)},getInnerHeight:()=>e.innerHeight,getScrollY:()=>(e=>{const t=void 0!==e?e.dom:document,o=t.body.scrollLeft||t.documentElement.scrollLeft,n=t.body.scrollTop||t.documentElement.scrollTop;return bn(o,n)})(xe.fromDom(e.document)).top,scrollBy:(t,o)=>{((e,t,o)=>{const n=(void 0!==o?o.dom:document).defaultView;n&&n.scrollBy(e,t)})(t,o,xe.fromDom(e.document))}}),Wm=(e,t)=>({rows:e,cols:t}),Mm=e=>gt(e,ae).exists(es),jm=(e,t)=>Mm(e)||Mm(t),Pm=e=>void 0!==e.dom.classList,Im=(e,t)=>((e,t,o)=>{const n=((e,t)=>{const o=pe(e,t);return void 0===o||""===o?[]:o.split(" ")})(e,t).concat([o]);return ge(e,t,n.join(" ")),!0})(e,"class",t),Fm=(e,t)=>{Pm(e)?e.dom.classList.add(t):Im(e,t)},Hm=(e,t)=>Pm(e)&&e.dom.classList.contains(t),$m=()=>({tag:"none"}),Vm=e=>({tag:"multiple",elements:e}),qm=e=>({tag:"single",element:e}),Um=e=>{const t=xe.fromDom((e=>{if(m(e.target)){const t=xe.fromDom(e.target);if(ce(t)&&m(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return H(t)}}return C.from(e.target)})(e).getOr(e.target)),o=()=>e.stopPropagation(),n=()=>e.preventDefault(),r=(s=n,l=o,(...e)=>s(l.apply(null,e)));var s,l;return((e,t,o,n,r,s,l)=>({target:e,x:t,y:o,stop:n,prevent:r,kill:s,raw:l}))(t,e.clientX,e.clientY,o,n,r,e)},Gm=(e,t,o,n)=>{e.dom.removeEventListener(t,o,n)},Km=x,Ym=(e,t,o)=>((e,t,o,n)=>((e,t,o,n,r)=>{const s=((e,t)=>o=>{e(o)&&t(Um(o))})(o,n);return e.dom.addEventListener(t,s,r),{unbind:b(Gm,e,t,s,r)}})(e,t,o,n,!1))(e,t,Km,o),Jm=Um,Qm=e=>!Hm(xe.fromDom(e.target),"ephox-snooker-resizer-bar"),Xm=(e,t)=>{const o=(r=Is.selectedSelector,{get:()=>_s(xe.fromDom(e.getBody()),r).fold((()=>Vs(ss(e),ns(e)).fold($m,qm)),Vm)}),n=((e,t,o)=>{const n=t=>{we(t,e.selected),we(t,e.firstSelected),we(t,e.lastSelected)},r=t=>{ge(t,e.selected,"1")},s=e=>{l(e),o()},l=t=>{const o=dt(t,`${e.selectedSelector},${e.firstSelectedSelector},${e.lastSelectedSelector}`);N(o,n)};return{clearBeforeUpdate:l,clear:s,selectRange:(o,n,l,a)=>{s(o),N(n,r),ge(l,e.firstSelected,"1"),ge(a,e.lastSelected,"1"),t(n,l,a)},selectedSelector:e.selectedSelector,firstSelectedSelector:e.firstSelectedSelector,lastSelectedSelector:e.lastSelectedSelector}})(Is,((t,o,n)=>{Gt(o).each((r=>{const s=E(t,(e=>e.dom)),l=Wr(e),a=_r(f,xe.fromDom(e.getDoc()),l),c=((e,t,o)=>{const n=Xo(e);return zl(n,t).map((e=>{const t=Ol(n,o,!1),{rows:r}=Vo(t),s=((e,t)=>{const o=e.slice(0,t[t.length-1].row+1),n=kl(o);return j(n,(e=>{const o=e.cells.slice(0,t[t.length-1].column+1);return E(o,(e=>e.element))}))})(r,e),l=((e,t)=>{const o=e.slice(t[0].row+t[0].rowspan-1,e.length),n=kl(o);return j(n,(e=>{const o=e.cells.slice(t[0].column+t[0].colspan-1,e.cells.length);return E(o,(e=>e.element))}))})(r,e);return{upOrLeftCells:s,downOrRightCells:l}}))})(r,{selection:qs(e)},a).map((e=>K(e,(e=>E(e,(e=>e.dom)))))).getOrUndefined();((e,t,o,n,r)=>{e.dispatch("TableSelectionChange",{cells:t,start:o,finish:n,otherCells:r})})(e,s,o.dom,n.dom,c)}))}),(()=>(e=>{e.dispatch("TableSelectionClear")})(e)));var r;return e.on("init",(o=>{const r=e.getWin(),s=os(e),l=ns(e),a=((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=mm(),s=r.clear,l=s=>{r.on((r=>{n.clearBeforeUpdate(t),dm(s.target,o).each((l=>{Os(r,l,o).each((o=>{const r=o.boxes.getOr([]);if(1===r.length){const e=r[0],o="false"===ts(e),l=vt(Zr(s.target),e,Re);o&&l&&n.selectRange(t,r,e,e)}else r.length>1&&(n.selectRange(t,r,o.start,o.finish),e.selectContents(l))}))}))}))};return{clearstate:s,mousedown:e=>{n.clear(t),dm(e.target,o).filter(um).each(r.set)},mouseover:e=>{l(e)},mouseup:e=>{l(e),s()}}})(Lm(e),t,o,n);return{clearstate:r.clearstate,mousedown:r.mousedown,mouseover:r.mouseover,mouseup:r.mouseup}})(r,s,l,n),c=((e,t,o,n)=>{const r=Lm(e),s=()=>(n.clear(t),C.none());return{keydown:(e,l,a,c,i,m)=>{const d=e.raw,u=d.which,f=!0===d.shiftKey,g=ks(t,n.selectedSelector).fold((()=>(wm(u)&&!f&&n.clearBeforeUpdate(t),wm(u)&&f&&!jm(l,c)?C.none:bm(u)&&f?b(cm,r,t,o,fm,c,l,n.selectRange):pm(u)&&f?b(cm,r,t,o,gm,c,l,n.selectRange):bm(u)?b(sm,r,o,fm,c,l,am):pm(u)?b(sm,r,o,gm,c,l,lm):C.none)),(e=>{const o=o=>()=>{const s=V(o,(o=>((e,t,o,n,r)=>Ns(n,e,t,r.firstSelectedSelector,r.lastSelectedSelector).map((e=>(r.clearBeforeUpdate(o),r.selectRange(o,e.boxes,e.start,e.finish),e.boxes))))(o.rows,o.cols,t,e,n)));return s.fold((()=>Es(t,n.firstSelectedSelector,n.lastSelectedSelector).map((e=>{const o=bm(u)||m.isForward(u)?ri.after:ri.before;return r.setRelativeSelection(ri.on(e.first,0),o(e.table)),n.clear(t),si(C.none(),!0)}))),(e=>C.some(si(C.none(),!0))))};return wm(u)&&f&&!jm(l,c)?C.none:bm(u)&&f?o([Wm(1,0)]):pm(u)&&f?o([Wm(-1,0)]):m.isBackward(u)&&f?o([Wm(0,-1),Wm(-1,0)]):m.isForward(u)&&f?o([Wm(0,1),Wm(1,0)]):wm(u)&&!f?s:C.none}));return g()},keyup:(e,r,s,l,a)=>ks(t,n.selectedSelector).fold((()=>{const c=e.raw,i=c.which;return!0===c.shiftKey&&wm(i)&&jm(r,l)?((e,t,o,n,r,s,l)=>Re(o,r)&&n===s?C.none():wt(o,"td,th",t).bind((o=>wt(r,"td,th",t).bind((n=>yi(e,t,o,n,l))))))(t,o,r,s,l,a,n.selectRange):C.none()}),C.none)}})(r,s,l,n),i=((e,t,o,n)=>{const r=Lm(e);return(e,s)=>{n.clearBeforeUpdate(t),Os(e,s,o).each((e=>{const o=e.boxes.getOr([]);n.selectRange(t,o,e.start,e.finish),r.selectContents(s),r.collapseSelection()}))}})(r,s,l,n);e.on("TableSelectorChange",(e=>i(e.start,e.finish)));const m=(t,o)=>{(e=>!0===e.raw.shiftKey)(t)&&(o.kill&&t.kill(),o.selection.each((t=>{const o=Cm.relative(t.start,t.finish),n=hi(r,o);e.selection.setRng(n)})))},d=e=>0===e.button,u=(()=>{const e=im(xe.fromDom(s)),t=im(0);return{touchEnd:o=>{const n=xe.fromDom(o.target);if(ue("td")(n)||ue("th")(n)){const r=e.get(),s=t.get();Re(r,n)&&o.timeStamp-s<300&&(o.preventDefault(),i(n,n))}e.set(n),t.set(o.timeStamp)}}})();e.on("dragstart",(e=>{a.clearstate()})),e.on("mousedown",(e=>{d(e)&&Qm(e)&&a.mousedown(Jm(e))})),e.on("mouseover",(e=>{var t;(void 0===(t=e).buttons||1&t.buttons)&&Qm(e)&&a.mouseover(Jm(e))})),e.on("mouseup",(e=>{d(e)&&Qm(e)&&a.mouseup(Jm(e))})),e.on("touchend",u.touchEnd),e.on("keyup",(t=>{const o=Jm(t);if(o.raw.shiftKey&&wm(o.raw.which)){const t=e.selection.getRng(),n=xe.fromDom(t.startContainer),r=xe.fromDom(t.endContainer);c.keyup(o,n,t.startOffset,r,t.endOffset).each((e=>{m(o,e)}))}})),e.on("keydown",(o=>{const n=Jm(o);t.hide();const r=e.selection.getRng(),s=xe.fromDom(r.startContainer),l=xe.fromDom(r.endContainer),a=dn(vm,ym)(xe.fromDom(e.selection.getStart()));c.keydown(n,s,r.startOffset,l,r.endOffset,a).each((e=>{m(n,e)})),t.show()})),e.on("NodeChange",(()=>{const t=e.selection,o=xe.fromDom(t.getStart()),r=xe.fromDom(t.getEnd());Rs(Gt,[o,r]).fold((()=>n.clear(s)),f)}))})),e.on("PreInit",(()=>{e.serializer.addTempAttr(Is.firstSelected),e.serializer.addTempAttr(Is.lastSelected)})),{getSelectedCells:()=>((e,t)=>{switch(e.tag){case"none":return t();case"single":return(e=>[e.dom])(e.element);case"multiple":return(e=>E(e,(e=>e.dom)))(e.elements)}})(o.get(),g([])),clearSelectedCells:e=>n.clear(xe.fromDom(e))}},Zm=e=>{let t=[];return{bind:e=>{if(void 0===e)throw new Error("Event bind error: undefined handler");t.push(e)},unbind:e=>{t=B(t,(t=>t!==e))},trigger:(...o)=>{const n={};N(e,((e,t)=>{n[e]=o[t]})),N(t,(e=>{e(n)}))}}},ed=e=>({registry:K(e,(e=>({bind:e.bind,unbind:e.unbind}))),trigger:K(e,(e=>e.trigger))}),td=e=>e.slice(0).sort(),od=(e,t)=>{const o=B(t,(t=>!D(e,t)));o.length>0&&(e=>{throw new Error("Unsupported keys for object: "+td(e).join(", "))})(o)},nd=e=>((e,t)=>((e,t,o)=>{if(0===t.length)throw new Error("You must specify at least one required field.");return((e,t)=>{if(!l(t))throw new Error("The "+e+" fields must be an array. Was: "+t+".");N(t,(t=>{if(!r(t))throw new Error("The value "+t+" in the "+e+" fields was not a string.")}))})("required",t),(e=>{const t=td(e);L(t,((e,o)=>o{throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+t.join(", ")+"].")}))})(t),n=>{const r=q(n);P(t,(e=>D(r,e)))||((e,t)=>{throw new Error("All required keys ("+td(e).join(", ")+") were not specified. Specified keys were: "+td(t).join(", ")+".")})(t,r),e(t,r);const s=B(t,(e=>!o.validate(n[e],e)));return s.length>0&&((e,t)=>{throw new Error("All values need to be of type: "+t+". Keys ("+td(e).join(", ")+") were not.")})(s,o.label),n}})(e,t,{validate:d,label:"function"}))(od,e),rd=nd(["compare","extract","mutate","sink"]),sd=nd(["element","start","stop","destroy"]),ld=nd(["forceDrop","drop","move","delayDrop"]),ad=()=>{const e=(()=>{const e=ed({move:Zm(["info"])});return{onEvent:f,reset:f,events:e.registry}})(),t=(()=>{let e=C.none();const t=ed({move:Zm(["info"])});return{onEvent:(o,n)=>{n.extract(o).each((o=>{const r=((t,o)=>{const n=e.map((e=>t.compare(e,o)));return e=C.some(o),n})(n,o);r.each((e=>{t.trigger.move(e)}))}))},reset:()=>{e=C.none()},events:t.registry}})();let o=e;return{on:()=>{o.reset(),o=t},off:()=>{o.reset(),o=e},isOn:()=>o===t,onEvent:(e,t)=>{o.onEvent(e,t)},events:t.events}},cd=e=>{const t=e.replace(/\./g,"-");return{resolve:e=>t+"-"+e}},id=cd("ephox-dragster").resolve;var md=rd({compare:(e,t)=>bn(t.left-e.left,t.top-e.top),extract:e=>C.some(bn(e.x,e.y)),sink:(e,t)=>{const o=(e=>{const t={layerClass:id("blocker"),...e},o=xe.fromTag("div");return ge(o,"role","presentation"),_t(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),Fm(o,id("blocker")),Fm(o,t.layerClass),{element:g(o),destroy:()=>{qe(o)}}})(t),n=Ym(o.element(),"mousedown",e.forceDrop),r=Ym(o.element(),"mouseup",e.drop),s=Ym(o.element(),"mousemove",e.move),l=Ym(o.element(),"mouseout",e.delayDrop);return sd({element:o.element,start:e=>{Ie(e,o.element())},stop:()=>{qe(o.element())},destroy:()=>{o.destroy(),r.unbind(),s.unbind(),l.unbind(),n.unbind()}})},mutate:(e,t)=>{e.mutate(t.left,t.top)}});const dd=cd("ephox-snooker").resolve,ud=dd("resizer-bar"),fd=dd("resizer-rows"),gd=dd("resizer-cols"),hd=e=>{const t=dt(e.parent(),"."+ud);N(t,qe)},pd=(e,t,o)=>{const n=e.origin();N(t,(t=>{t.each((t=>{const r=o(n,t);Fm(r,ud),Ie(e.parent(),r)}))}))},bd=(e,t,o,n,r)=>{const s=vn(o),l=t.isResizable,a=n.length>0?_n.positions(n,o):[],c=a.length>0?((e,t)=>j(e.all,((e,o)=>t(e.element)?[o]:[])))(e,l):[];((e,t,o,n)=>{pd(e,t,((e,t)=>{const r=((e,t,o,n)=>{const r=xe.fromTag("div");return _t(r,{position:"absolute",left:t+"px",top:o-3.5+"px",height:"7px",width:n+"px"}),he(r,{"data-row":e,role:"presentation"}),r})(t.row,o.left-e.left,t.y-e.top,n);return Fm(r,fd),r}))})(t,B(a,((e,t)=>O(c,(e=>t===e)))),s,Lo(o));const i=r.length>0?zn.positions(r,o):[],m=i.length>0?((e,t)=>{const o=[];return k(e.grid.columns,(n=>{ln(e,n).map((e=>e.element)).forall(t)&&o.push(n)})),B(o,(o=>{const n=on(e,(e=>e.column===o));return P(n,(e=>t(e.element)))}))})(e,l):[];((e,t,o,n)=>{pd(e,t,((e,t)=>{const r=((e,t,o,n,r)=>{const s=xe.fromTag("div");return _t(s,{position:"absolute",left:t-3.5+"px",top:o+"px",height:r+"px",width:"7px"}),he(s,{"data-column":e,role:"presentation"}),s})(t.col,t.x-e.left,o.top-e.top,0,n);return Fm(r,gd),r}))})(t,B(i,((e,t)=>O(m,(e=>t===e)))),s,hn(o))},wd=(e,t)=>{if(hd(e),e.isResizable(t)){const o=Xo(t),n=mn(o),r=an(o);bd(o,e,t,n,r)}},vd=(e,t)=>{const o=dt(e.parent(),"."+ud);N(o,t)},yd=e=>{vd(e,(e=>{Nt(e,"display","none")}))},xd=e=>{vd(e,(e=>{Nt(e,"display","block")}))},Cd=dd("resizer-bar-dragging"),Sd=e=>{const t=(()=>{const e=ed({drag:Zm(["xDelta","yDelta","target"])});let t=C.none();const o=(()=>{const e=ed({drag:Zm(["xDelta","yDelta"])});return{mutate:(t,o)=>{e.trigger.drag(t,o)},events:e.registry}})();return o.events.drag.bind((o=>{t.each((t=>{e.trigger.drag(o.xDelta,o.yDelta,t)}))})),{assign:e=>{t=C.some(e)},get:()=>t,mutate:o.mutate,events:e.registry}})(),o=((e,t={})=>{var o;return((e,t,o)=>{let n=!1;const r=ed({start:Zm([]),stop:Zm([])}),s=ad(),l=()=>{m.stop(),s.isOn()&&(s.off(),r.trigger.stop())},c=(e=>{let t=null;const o=()=>{a(t)||(clearTimeout(t),t=null)};return{cancel:o,throttle:(...n)=>{o(),t=setTimeout((()=>{t=null,e.apply(null,n)}),200)}}})(l);s.events.move.bind((o=>{t.mutate(e,o.info)}));const i=e=>(...t)=>{n&&e.apply(null,t)},m=t.sink(ld({forceDrop:l,drop:i(l),move:i((e=>{c.cancel(),s.onEvent(e,t)})),delayDrop:i(c.throttle)}),o);return{element:m.element,go:e=>{m.start(e),s.on(),r.trigger.start()},on:()=>{n=!0},off:()=>{n=!1},isActive:()=>n,destroy:()=>{m.destroy()},events:r.registry}})(e,null!==(o=t.mode)&&void 0!==o?o:md,t)})(t,{});let n=C.none();const r=(e,t)=>C.from(pe(e,t));t.events.drag.bind((e=>{r(e.target,"data-row").each((t=>{const o=Pt(e.target,"top");Nt(e.target,"top",o+e.yDelta+"px")})),r(e.target,"data-column").each((t=>{const o=Pt(e.target,"left");Nt(e.target,"left",o+e.xDelta+"px")}))}));const s=(e,t)=>Pt(e,t)-Wt(e,"data-initial-"+t,0);o.events.stop.bind((()=>{t.get().each((t=>{n.each((o=>{r(t,"data-row").each((e=>{const n=s(t,"top");we(t,"data-initial-top"),d.trigger.adjustHeight(o,n,parseInt(e,10))})),r(t,"data-column").each((e=>{const n=s(t,"left");we(t,"data-initial-left"),d.trigger.adjustWidth(o,n,parseInt(e,10))})),wd(e,o)}))}))}));const l=(n,r)=>{d.trigger.startAdjust(),t.assign(n),ge(n,"data-initial-"+r,Pt(n,r)),Fm(n,Cd),Nt(n,"opacity","0.2"),o.go(e.dragContainer())},c=Ym(e.parent(),"mousedown",(e=>{var t;t=e.target,Hm(t,fd)&&l(e.target,"top"),(e=>Hm(e,gd))(e.target)&&l(e.target,"left")})),i=t=>Re(t,e.view()),m=Ym(e.view(),"mouseover",(t=>{var r;(r=t.target,wt(r,"table",i).filter(es)).fold((()=>{st(t.target)&&hd(e)}),(t=>{o.isActive()&&(n=C.some(t),wd(e,t))}))})),d=ed({adjustHeight:Zm(["table","delta","row"]),adjustWidth:Zm(["table","delta","column"]),startAdjust:Zm([])});return{destroy:()=>{c.unbind(),m.unbind(),o.destroy(),hd(e)},refresh:t=>{wd(e,t)},on:o.on,off:o.off,hideBars:b(yd,e),showBars:b(xd,e),events:d.registry}};let Td=0;const Rd=(e,t)=>{const o=(e=>!(e=>e.inline&&(e=>{var t;if(!e.inline)return C.none();const o=null!==(t=Jr(e))&&void 0!==t?t:"";if(o.length>0)return bt(lt(),o);const n=Qr(e);return m(n)?C.some(xe.fromDom(n)):C.none()})(e).isSome())(e)&&"split"===Xr(e))(e),n=xe.fromDom(e.getBody()),r=(e=>{const t=(e=>{const t=(new Date).getTime(),o=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return Td++,e+"_"+o+Td+String(t)})("resizer-container"),o=xe.fromTag("div");return ge(o,"id",t),_t(o,{position:e,height:"0",width:"0",padding:"0",margin:"0",border:"0"}),o})(o?"relative":"static"),s=lt();return o?(je(n,r),((e,t,o,n)=>({parent:g(t),view:g(e),dragContainer:g(o),origin:()=>vn(t),isResizable:n}))(n,r,s,t)):(Ie(s,r),((e,t,o)=>({parent:g(t),view:g(e),dragContainer:g(t),origin:g(bn(0,0)),isResizable:o}))(n,r,t))},Dd=e=>m(e)&&"TABLE"===e.nodeName,Od="bar-",kd=e=>"false"!==pe(e,"data-mce-resize"),Ed=e=>{const t=mm(),o=mm(),n=mm();let r,s,l,a;const c=t=>wc(e,t),i=()=>Pr(e)?ll():sl(),m=(t,o,n,m)=>{const d=(e=>{return Tt(t=e,"corner-")?(e=>e.substring(7))(t):t;var t})(o),u=Rt(d,"e"),f=Tt(d,"n");if(""===s&&Lc(t),""===a&&(e=>{const t=(e=>gn(e)+"px")(e);Nc(e,C.none(),C.some(t)),Ac(e)})(t),n!==r&&""!==s){Nt(t,"width",s);const o=i(),l=c(t),a=Pr(e)||u?(e=>al(e).columns)(t)-1:0;ca(t,n-r,a,o,l)}else if((e=>/^(\d+(\.\d+)?)%$/.test(e))(s)){const e=parseFloat(s.replace("%",""));Nt(t,"width",n*e/r+"%")}if((e=>/^(\d+(\.\d+)?)px$/.test(e))(s)&&(e=>{const t=Xo(e);sn(t)||N(qt(e),(e=>{const t=Bt(e,"width");Nt(e,"width",t),we(e,"width")}))})(t),m!==l&&""!==a){Nt(t,"height",a);const e=f?0:(e=>al(e).rows)(t)-1;ia(t,m-l,e)}};e.on("init",(()=>{const r=((e,t)=>e.inline?Rd(e,t):((e,t)=>{const o=me(e)?(e=>xe.fromDom(Ee(e).dom.documentElement))(e):e;return{parent:g(o),view:g(e),dragContainer:g(o),origin:g(bn(0,0)),isResizable:t}})(xe.fromDom(e.getDoc()),t))(e,kd);if(n.set(r),(e=>{const t=e.options.get("object_resizing");return D(t.split(","),"table")})(e)&&qr(e)){const n=((e,t,o)=>{const n=_n,r=zn,s=Sd(e),l=ed({beforeResize:Zm(["table","type"]),afterResize:Zm(["table","type"]),startDrag:Zm([])});return s.events.adjustHeight.bind((e=>{const t=e.table;l.trigger.beforeResize(t,"row");const o=n.delta(e.delta,t);ia(t,o,e.row),l.trigger.afterResize(t,"row")})),s.events.startAdjust.bind((e=>{l.trigger.startDrag()})),s.events.adjustWidth.bind((e=>{const n=e.table;l.trigger.beforeResize(n,"col");const s=r.delta(e.delta,n),a=o(n);ca(n,s,e.column,t,a),l.trigger.afterResize(n,"col")})),{on:s.on,off:s.off,refreshBars:s.refresh,hideBars:s.hideBars,showBars:s.showBars,destroy:s.destroy,events:l.registry}})(r,i(),c);e.mode.isReadOnly()||n.on(),n.events.startDrag.bind((o=>{t.set(e.selection.getRng())})),n.events.beforeResize.bind((t=>{const o=t.table.dom;((e,t,o,n,r)=>{e.dispatch("ObjectResizeStart",{target:t,width:o,height:n,origin:r})})(e,o,ls(o),as(o),Od+t.type)})),n.events.afterResize.bind((o=>{const n=o.table,r=n.dom;rs(n),t.on((t=>{e.selection.setRng(t),e.focus()})),((e,t,o,n,r)=>{e.dispatch("ObjectResized",{target:t,width:o,height:n,origin:r})})(e,r,ls(r),as(r),Od+o.type),e.undoManager.add()})),o.set(n)}})),e.on("ObjectResizeStart",(t=>{const o=t.target;if(Dd(o)&&!e.mode.isReadOnly()){const n=xe.fromDom(o);N(e.dom.select(".mce-clonedresizable"),(t=>{e.dom.addClass(t,"mce-"+jr(e)+"-columns")})),!Bc(n)&&$r(e)?Wc(n):!_c(n)&&Hr(e)&&Lc(n),zc(n)&&Tt(t.origin,Od)&&Lc(n),r=t.width,s=Vr(e)?"":is(e,o).getOr(""),l=t.height,a=ms(e,o).getOr("")}})),e.on("ObjectResized",(t=>{const o=t.target;if(Dd(o)){const n=xe.fromDom(o),r=t.origin;(e=>Tt(e,"corner-"))(r)&&m(n,r,t.width,t.height),rs(n),gc(e,n.dom,hc)}}));const d=()=>{o.on((e=>{e.on(),e.showBars()}))},u=()=>{o.on((e=>{e.off(),e.hideBars()}))};return e.on("DisabledStateChange",(e=>{e.state?u():d()})),e.on("SwitchMode",(()=>{e.mode.isReadOnly()?u():d()})),e.on("dragstart dragend",(e=>{"dragstart"===e.type?u():d()})),e.on("remove",(()=>{o.on((e=>{e.destroy()})),n.on((t=>{((e,t)=>{e.inline&&qe(t.parent())})(e,t)}))})),{refresh:e=>{o.on((t=>t.refreshBars(xe.fromDom(e))))},hide:()=>{o.on((e=>e.hideBars()))},show:()=>{o.on((e=>e.showBars()))}}},Nd=e=>{(e=>{const t=e.options.register;t("table_clone_elements",{processor:"string[]"}),t("table_use_colgroups",{processor:"boolean",default:!0}),t("table_header_type",{processor:e=>{const t=D(["section","cells","sectionCells","auto"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be one of: section, cells, sectionCells or auto."}},default:"section"}),t("table_sizing_mode",{processor:"string",default:"auto"}),t("table_default_attributes",{processor:"object",default:{border:"1"}}),t("table_default_styles",{processor:"object",default:{"border-collapse":"collapse"}}),t("table_column_resizing",{processor:e=>{const t=D(["preservetable","resizetable"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be preservetable, or resizetable."}},default:"preservetable"}),t("table_resize_bars",{processor:"boolean",default:!0}),t("table_style_by_css",{processor:"boolean",default:!0}),t("table_merge_content_on_paste",{processor:"boolean",default:!0})})(e);const t=Ed(e),o=Xm(e,t),n=vc(e,t,o);return oi(e,n),((e,t)=>{const o=ns(e),n=t=>Vs(ss(e)).bind((n=>Gt(n,o).map((o=>{const r=Fs(qs(e),o,n);return t(o,r)})))).getOr("");G({mceTableRowType:()=>n(t.getTableRowType),mceTableCellType:()=>n(t.getTableCellType),mceTableColType:()=>n(t.getTableColType)},((t,o)=>e.addQueryValueHandler(o,t)))})(e,n),Us(e,n),{getSelectedCells:o.getSelectedCells,clearSelectedCells:o.clearSelectedCells}};e.add("dom",(e=>({table:Nd(e)})))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/accordion/plugin.min.js b/apps/web-ele/public/tinymce/plugins/accordion/plugin.min.js new file mode 100644 index 000000000..3c8860445 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/accordion/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const o=e=>t=>typeof t===e,n=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(e),r=o("boolean"),s=e=>null==e,i=e=>!s(e),a=o("function"),d=o("number"),l=e=>()=>e,c=(e,t)=>e===t,m=l(!1);class u{constructor(e,t){this.tag=e,this.value=t}static some(e){return new u(!0,e)}static none(){return u.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?u.some(e(this.value)):u.none()}bind(e){return this.tag?e(this.value):u.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:u.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return i(e)?u.some(e):u.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}u.singletonNone=new u(!1);const g=Array.prototype.indexOf,p=(e,t)=>{return o=e,n=t,g.call(o,n)>-1;var o,n},h=(e,t)=>{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;oe.dom.nodeName.toLowerCase(),w=e=>e.dom.nodeType,b=e=>t=>w(t)===e,N=b(1),T=b(3),A=b(9),C=b(11),S=(e,t,o)=>{if(!(n(o)||r(o)||d(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},x=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},D=(e,t)=>u.from(x(e,t)),E=(e,t)=>{e.dom.removeAttribute(t)},O=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},M={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return O(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return O(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return O(o)},fromDom:O,fromPoint:(e,t,o)=>u.from(e.dom.elementFromPoint(t,o)).map(O)},P=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},R=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,k=P,B=(L=/^\s+|\s+$/g,e=>e.replace(L,""));var L;const $=e=>void 0!==e.style&&a(e.style.getPropertyValue),V=e=>u.from(e.dom.parentNode).map(M.fromDom),I=e=>u.from(e.dom.nextSibling).map(M.fromDom),j=e=>h(e.dom.childNodes,M.fromDom),q=e=>M.fromDom(e.dom.host),F=e=>{const t=T(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=(e=>M.fromDom(e.dom.getRootNode()))(e);return C(o=t)&&i(o.dom.host)?u.some(t):u.none();var o})(M.fromDom(t)).fold((()=>o.body.contains(t)),(n=F,r=q,e=>n(r(e))));var n,r},H=(e,t)=>$(e)?e.style.getPropertyValue(t):"",z=(e,t)=>{V(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},K=(e,t)=>{I(e).fold((()=>{V(e).each((e=>{U(e,t)}))}),(e=>{z(e,t)}))},U=(e,t)=>{e.dom.appendChild(t.dom)},Y=(e,t)=>{f(t,((o,n)=>{const r=0===n?e:t[n-1];K(r,o)}))},_=(e,t)=>{let o=[];return f(j(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(_(e,t))})),o},G=(e,t,o)=>{let n=e.dom;const r=a(o)?o:m;for(;n.parentNode;){n=n.parentNode;const e=M.fromDom(n);if(t(e))return u.some(e);if(r(e))break}return u.none()},J=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},Q=(e,t,o)=>G(e,(e=>P(e,t)),o),W=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return R(o)?u.none():u.from(o.querySelector(e)).map(M.fromDom)})(t,e),X=(e=>{const t=t=>e(t)?u.from(t.dom.nodeValue):u.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(T);var Z=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];const ee=(e,t)=>({element:e,offset:t}),te=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>te(e,t,o).orThunk((()=>u.some(t))))):u.none(),oe=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,ne=(e,t)=>{const o=te(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return ee(o,oe(e,o));const n=e.property().children(o);return n.length>0?ne(e,n[n.length-1]):ee(o,oe(e,o))},re=ne,se={up:l({selector:Q,closest:(e,t,o)=>((e,t,o,n,r)=>((e,t)=>P(e,t))(o,n)?u.some(o):a(r)&&r(o)?u.none():t(o,n,r))(0,Q,e,t,o),predicate:G,all:(e,t)=>{const o=a(t)?t:m;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=M.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r}}),down:l({selector:(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return R(o)?[]:h(o.querySelectorAll(e),M.fromDom)})(t,e),predicate:_}),styles:l({get:(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||F(e)?n:H(o,t)},getRaw:(e,t)=>{const o=e.dom,n=H(o,t);return u.from(n).filter((e=>e.length>0))},set:(e,t,o)=>{((e,t,o)=>{if(!n(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);$(e)&&e.style.setProperty(t,o)})(e.dom,t,o)},remove:(e,t)=>{((e,t)=>{$(e)&&e.style.removeProperty(t)})(e.dom,t),((e,t,o=c)=>e.exists((e=>o(e,t))))(D(e,"style").map(B),"")&&E(e,"style")}}),attrs:l({get:x,set:(e,t,o)=>{S(e.dom,t,o)},remove:E,copyTo:(e,t)=>{const o=(n=e.dom.attributes,r=(e,t)=>(e[t.name]=t.value,e),s={},f(n,((e,t)=>{s=r(s,e)})),s);var n,r,s;((e,t)=>{const o=e.dom;((e,t)=>{const o=y(e);for(let n=0,r=o.length;n{S(o,t,e)}))})(t,o)}}),insert:l({before:z,after:K,afterAll:Y,append:U,appendAll:(e,t)=>{f(t,(t=>{U(e,t)}))},prepend:(e,t)=>{(e=>(e=>{const t=e.dom.childNodes;return u.from(t[0]).map(M.fromDom)})(e))(e).fold((()=>{U(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},wrap:(e,t)=>{z(e,t),U(t,e)}}),remove:l({unwrap:e=>{const t=j(e);t.length>0&&Y(e,t),J(e)},remove:J}),create:l({nu:M.fromTag,clone:e=>M.fromDom(e.dom.cloneNode(!1)),text:M.fromText}),query:l({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:e=>u.from(e.dom.previousSibling).map(M.fromDom),nextSibling:I}),property:l({children:j,name:v,parent:V,document:e=>{return(t=e,A(t)?t:M.fromDom(t.dom.ownerDocument)).dom;var t},isText:T,isComment:e=>8===w(e)||"#comment"===v(e),isElement:N,isSpecial:e=>{const t=v(e);return p(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>N(e)?D(e,"lang"):u.none(),getText:e=>X.get(e),setText:(e,t)=>X.set(e,t),isBoundary:e=>!!N(e)&&("body"===v(e)||p(Z,v(e))),isEmptyTag:e=>!!N(e)&&p(["br","img","hr","input"],v(e)),isNonEditable:e=>N(e)&&"false"===x(e,"contenteditable")}),eq:(e,t)=>e.dom===t.dom,is:k},ie="details",ae="mce-accordion",de="mce-accordion-summary",le="mce-accordion-body",ce="div";var me=tinymce.util.Tools.resolve("tinymce.util.Tools");const ue=e=>"SUMMARY"===(null==e?void 0:e.nodeName),ge=e=>"DETAILS"===(null==e?void 0:e.nodeName),pe=e=>e.hasAttribute("open"),he=e=>{const t=e.selection.getNode();return ue(t)||Boolean(e.dom.getParent(t,ue))},fe=e=>!he(e)&&e.dom.isEditable(e.selection.getNode())&&!e.mode.isReadOnly(),ye=e=>u.from(e.dom.getParent(e.selection.getNode(),ge)),ve=e=>(e.innerHTML='
    ',e),we=e=>ve(e.dom.create("p")),be=e=>t=>{((e,t)=>{if(ue(null==t?void 0:t.lastChild)){const o=we(e);t.appendChild(o),e.selection.setCursorLocation(o,0)}})(e,t),((e,t)=>{if(!ue(null==t?void 0:t.firstChild)){const o=(e=>ve(e.dom.create("summary")))(e);t.prepend(o),e.selection.setCursorLocation(o,0)}})(e,t)},Ne=e=>{if(!fe(e))return;const o=M.fromDom(e.getBody()),n=(e=>{const o=(new Date).getTime(),n=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return t++,e+"_"+n+t+String(o)})("acc"),r=e.dom.encode(e.selection.getRng().toString()||e.translate("Accordion summary...")),s=e.dom.encode(e.translate("Accordion body...")),i=`${r}`,a=`<${ce} class="${le}">

    ${s}

    `;e.undoManager.transact((()=>{e.insertContent([`
    `,i,a,"
    "].join("")),W(o,`[data-mce-id="${n}"]`).each((t=>{E(t,"data-mce-id"),W(t,"summary").each((t=>{const o=e.dom.createRng(),n=re(se,t);o.setStart(n.element.dom,n.offset),o.setEnd(n.element.dom,n.offset),e.selection.setRng(o)}))}))}))},Te=(e,t)=>{const o=null!=t?t:!pe(e);return o?e.setAttribute("open","open"):e.removeAttribute("open"),o},Ae=e=>{e.addCommand("InsertAccordion",(()=>Ne(e))),e.addCommand("ToggleAccordion",((t,o)=>((e,t)=>{ye(e).each((o=>{((e,t,o)=>{e.dispatch("ToggledAccordion",{element:t,state:o})})(e,o,Te(o,t))}))})(e,o))),e.addCommand("ToggleAllAccordions",((t,o)=>((e,t)=>{const o=Array.from(e.getBody().querySelectorAll("details"));0!==o.length&&(f(o,(e=>Te(e,null!=t?t:!pe(e)))),((e,t,o)=>{e.dispatch("ToggledAllAccordions",{elements:t,state:o})})(e,o,t))})(e,o))),e.addCommand("RemoveAccordion",(()=>(e=>{e.mode.isReadOnly()||ye(e).each((t=>{const{nextSibling:o}=t;o?(e.selection.select(o,!0),e.selection.collapse(!0)):((e,t)=>{const o=we(e);t.insertAdjacentElement("afterend",o),e.selection.setCursorLocation(o,0)})(e,t),t.remove()}))})(e)))};var Ce=tinymce.util.Tools.resolve("tinymce.html.Node");const Se=e=>{var t,o;return null!==(o=null===(t=e.attr("class"))||void 0===t?void 0:t.split(" "))&&void 0!==o?o:[]},xe=(e,t)=>{const o=new Set([...Se(e),...t]),n=Array.from(o);n.length>0&&e.attr("class",n.join(" "))},De=(e,t)=>{const o=(e=>{const o=[];for(let r=0,s=e.length;r0?o.join(" "):null)},Ee=e=>e.name===ie&&p(Se(e),ae),Oe=e=>{const t=e.children();let o,n;const r=[];for(let e=0;e{const t=new Ce("br",1);t.attr("data-mce-bogus","1"),e.empty(),e.append(t)};var Pe=tinymce.util.Tools.resolve("tinymce.util.VK");const Re=e=>{(e=>{e.on("keydown",(t=>{(!t.shiftKey&&t.keyCode===Pe.ENTER&&he(e)||(e=>{const t=e.selection.getRng();return ge(t.startContainer)&&t.collapsed&&0===t.startOffset})(e))&&(t.preventDefault(),e.execCommand("ToggleAccordion"))}))})(e),e.on("ExecCommand",(t=>{const o=t.command.toLowerCase();"delete"!==o&&"forwarddelete"!==o||!(e=>ye(e).isSome())(e)||(e=>{me.each(me.grep(e.dom.select("details",e.getBody())),be(e))})(e)}))};var ke=tinymce.util.Tools.resolve("tinymce.Env");const Be=e=>t=>{const o=()=>t.setEnabled(fe(e));return e.on("NodeChange",o),()=>e.off("NodeChange",o)};e.add("accordion",(e=>{(e=>{const t=()=>e.execCommand("InsertAccordion");e.ui.registry.addButton("accordion",{icon:"accordion",tooltip:"Insert accordion",onSetup:Be(e),onAction:t}),e.ui.registry.addMenuItem("accordion",{icon:"accordion",text:"Accordion",onSetup:Be(e),onAction:t}),e.ui.registry.addToggleButton("accordiontoggle",{icon:"accordion-toggle",tooltip:"Toggle accordion",onAction:()=>e.execCommand("ToggleAccordion")}),e.ui.registry.addToggleButton("accordionremove",{icon:"remove",tooltip:"Delete accordion",onAction:()=>e.execCommand("RemoveAccordion")}),e.ui.registry.addContextToolbar("accordion",{predicate:t=>e.dom.is(t,"details")&&e.getBody().contains(t)&&e.dom.isEditable(t.parentNode),items:"accordiontoggle accordionremove",scope:"node",position:"node"})})(e),Ae(e),Re(e),(e=>{e.on("PreInit",(()=>{const{serializer:t,parser:o}=e;o.addNodeFilter(ie,(e=>{for(let t=0;t0)for(let e=0;e{const t=new Set([de]);for(let o=0;o{ke.browser.isSafari()&&e.on("click",(t=>{if(ue(t.target)){const o=t.target,n=e.selection.getRng();n.collapsed&&n.startContainer===o.parentNode&&0===n.startOffset&&e.selection.setCursorLocation(o,0)}}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/advlist/plugin.min.js b/apps/web-ele/public/tinymce/plugins/advlist/plugin.min.js new file mode 100644 index 000000000..781711d9d --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/advlist/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=(t,e,s)=>{const r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===s?null:{"list-style-type":s})},s=t=>e=>e.options.get(t),r=s("advlist_number_styles"),n=s("advlist_bullet_styles"),l=t=>null==t,i=t=>!l(t);class o{constructor(t,e){this.tag=t,this.value=e}static some(t){return new o(!0,t)}static none(){return o.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?o.some(t(this.value)):o.none()}bind(t){return this.tag?t(this.value):o.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:o.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return i(t)?o.some(t):o.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}o.singletonNone=new o(!1);const a=Array.prototype.indexOf,u=Object.keys;var d=tinymce.util.Tools.resolve("tinymce.util.Tools");const c=t=>e=>i(e)&&t.test(e.nodeName),h=c(/^(OL|UL|DL)$/),g=c(/^(TH|TD)$/),p=t=>l(t)||"default"===t?"":t,m=(t,e)=>s=>((t,e)=>{const s=t.selection.getNode();return e({parents:t.dom.getParents(s),element:s}),t.on("NodeChange",e),()=>t.off("NodeChange",e)})(t,(r=>((t,r)=>{const n=t.selection.getStart(!0);s.setActive(((t,e,s)=>((t,e,s)=>{for(let e=0,n=t.length;ee.nodeName===s&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))))(t,r,e)),s.setEnabled(!((t,e)=>{const s=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&!t.dom.isEditable(e))(t,s)||!t.selection.isEditable()})(t,n))})(t,r.parents))),v=(t,s,r,n,l,i)=>{const c={"lower-latin":"lower-alpha","upper-latin":"upper-alpha","lower-alpha":"lower-latin","upper-alpha":"upper-latin"},h=(g=t=>{return e=i,s=t,a.call(e,s)>-1;var e,s},((t,e)=>{const s={};return((t,e)=>{const s=u(t);for(let r=0,n=s.length;r{const n=e(t,r);s[n.k]=n.v})),s})(c,((t,e)=>({k:e,v:g(t)}))));var g;t.ui.registry.addSplitButton(s,{tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(d.map(i,(t=>{const e="OL"===l?"num":"bull",s="disc"===t||"decimal"===t?"default":t,r=p(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:r,icon:"list-"+e+"-"+s,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(s,r)=>{e(t,l,r)},select:e=>{const s=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),s=t.dom.getStyle(e,"listStyleType");return o.from(s)})(t);return s.exists((t=>e===t||c[t]===e&&!h[e]))},onSetup:m(t,l)})},y=(t,s,r,n,l,i)=>{i.length>1?v(t,s,r,n,l,i):((t,s,r,n,l,i)=>{t.ui.registry.addToggleButton(s,{active:!1,tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",onSetup:m(t,l),onAction:()=>t.queryCommandState(n)||""===i?t.execCommand(n):e(t,l,i)})})(t,s,r,n,l,p(i[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{y(t,"numlist","Numbered list","InsertOrderedList","OL",r(t)),y(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((s,r)=>{e(t,"UL",r["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((s,r)=>{e(t,"OL",r["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the List Styles plugin.")}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/anchor/plugin.min.js b/apps/web-ele/public/tinymce/plugins/anchor/plugin.min.js new file mode 100644 index 000000000..3c944ed47 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/anchor/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=e=>e.options.get("allow_html_in_named_anchor");const a="a:not([href])",r=e=>!e,i=e=>e.getAttribute("id")||e.getAttribute("name")||"",l=e=>(e=>"a"===e.nodeName.toLowerCase())(e)&&!e.getAttribute("href")&&""!==i(e),s=e=>e.dom.getParent(e.selection.getStart(),a),d=(e,a)=>{const r=s(e);r?((e,t,o)=>{o.removeAttribute("name"),o.id=t,e.addVisual(),e.undoManager.add()})(e,a,r):((e,a)=>{e.undoManager.transact((()=>{n(e)||e.selection.collapse(!0),e.selection.isCollapsed()?e.insertContent(e.dom.createHTML("a",{id:a})):((e=>{const n=e.dom;t(n).walk(e.selection.getRng(),(e=>{o.each(e,(e=>{var t;l(t=e)&&!t.firstChild&&n.remove(e,!1)}))}))})(e),e.formatter.remove("namedAnchor",void 0,void 0,!0),e.formatter.apply("namedAnchor",{value:a}),e.addVisual())}))})(e,a),e.focus()},c=e=>(e=>r(e.attr("href"))&&!r(e.attr("id")||e.attr("name")))(e)&&!e.firstChild,m=e=>t=>{for(let o=0;ot=>{const o=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",o),o(),()=>{e.off("NodeChange",o)}};e.add("anchor",(e=>{(e=>{(0,e.options.register)("allow_html_in_named_anchor",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreInit",(()=>{e.parser.addNodeFilter("a",m("false")),e.serializer.addNodeFilter("a",m(null))}))})(e),(e=>{e.addCommand("mceAnchor",(()=>{(e=>{const t=(e=>{const t=s(e);return t?i(t):""})(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:t=>{((e,t)=>/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)?(d(e,t),!0):(e.windowManager.alert("ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!1))(e,t.getData().id)&&t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand("mceAnchor");e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:t,onSetup:t=>{const o=e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind,n=u(e)(t);return()=>{o(),n()}}}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:t,onSetup:u(e)})})(e),e.on("PreInit",(()=>{(e=>{e.formatter.register("namedAnchor",{inline:"a",selector:a,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:(e,t,o)=>l(e)})})(e)}))}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/autolink/plugin.min.js b/apps/web-ele/public/tinymce/plugins/autolink/plugin.min.js new file mode 100644 index 000000000..ba87c861c --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/autolink/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e);const l=e=>undefined===e;const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]")||e.mode.isReadOnly())return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),w=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),h=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),w);if(!h)return null;let v=h.container;const _=k.backwards(h.container,h.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),w),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(h.container,h.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=4&&b.substr(0,4)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/autoresize/plugin.min.js b/apps/web-ele/public/tinymce/plugins/autoresize/plugin.min.js new file mode 100644 index 000000000..1f5e37f58 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/autoresize/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env");const o=e=>t=>t.options.get(e),n=o("min_height"),s=o("max_height"),i=o("autoresize_overflow_padding"),r=o("autoresize_bottom_margin"),g=(e,t)=>{const o=e.getBody();o&&(o.style.overflowY=t?"":"hidden",t||(o.scrollTop=0))},l=(e,t,o,n)=>{var s;const i=parseInt(null!==(s=e.getStyle(t,o,n))&&void 0!==s?s:"",10);return isNaN(i)?0:i},a=(e,o,r,c)=>{var d;const u=e.dom,h=e.getDoc();if(!h)return;if((e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen())(e))return void g(e,!0);const m=h.documentElement,f=c?c():i(e),p=null!==(d=n(e))&&void 0!==d?d:e.getElement().offsetHeight;let y=p;const S=l(u,m,"margin-top",!0),v=l(u,m,"margin-bottom",!0);let C=m.offsetHeight+S+v+f;C<0&&(C=0);const H=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;C+H>p&&(y=C+H);const b=s(e);b&&y>b?(y=b,g(e,!0)):g(e,!1);const w=o.get();if(w.set&&(e.dom.setStyles(e.getDoc().documentElement,{"min-height":0}),e.dom.setStyles(e.getBody(),{"min-height":"inherit"})),y!==w.totalHeight&&(C-f!==w.contentHeight||!w.set)){const n=y-w.totalHeight;if(u.setStyle(e.getContainer(),"height",y+"px"),o.set({totalHeight:y,contentHeight:C,set:!0}),(e=>{e.dispatch("ResizeEditor")})(e),t.browser.isSafari()&&(t.os.isMacOS()||t.os.isiOS())){const t=e.getWin();t.scrollTo(t.pageXOffset,t.pageYOffset)}e.hasFocus()&&(e=>{if("setcontent"===(null==e?void 0:e.type.toLowerCase())){const t=e;return!0===t.selection||!0===t.paste}return!1})(r)&&e.selection.scrollIntoView(),(t.browser.isSafari()||t.browser.isChromium())&&n<0&&a(e,o,r,c)}};e.add("autoresize",(e=>{if((e=>{const t=e.options.register;t("autoresize_overflow_padding",{processor:"number",default:1}),t("autoresize_bottom_margin",{processor:"number",default:50})})(e),e.options.isSet("resize")||e.options.set("resize",!1),!e.inline){const o=(()=>{let e={totalHeight:0,contentHeight:0,set:!1};return{get:()=>e,set:t=>{e=t}}})();((e,t)=>{e.addCommand("mceAutoResize",(()=>{a(e,t)}))})(e,o),((e,o)=>{const n=()=>r(e);e.on("init",(s=>{const r=i(e),g=e.dom;g.setStyles(e.getDoc().documentElement,{height:"auto"}),t.browser.isEdge()||t.browser.isIE()?g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r,"min-height":0}):g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r}),a(e,o,s,n)})),e.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",(t=>{a(e,o,t,n)}))})(e,o)}}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/autosave/plugin.min.js b/apps/web-ele/public/tinymce/plugins/autosave/plugin.min.js new file mode 100644 index 000000000..354d42e6a --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/autosave/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(r=o=t,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":e;var r,o,a,s})(t);const r=t=>undefined===t;var o=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),s=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=t=>{const e=/^(\d+)([ms]?)$/.exec(t);return(e&&e[2]?{s:1e3,m:6e4}[e[2]]:1)*parseInt(t,10)},i=t=>e=>e.options.get(t),u=i("autosave_ask_before_unload"),l=i("autosave_restore_when_empty"),c=i("autosave_interval"),d=i("autosave_retention"),m=t=>{const e=document.location;return t.options.get("autosave_prefix").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},v=(t,e)=>{if(r(e))return t.dom.isEmpty(t.getBody());{const r=s.trim(e);if(""===r)return!0;{const e=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(e)}}},f=t=>{var e;const r=parseInt(null!==(e=a.getItem(m(t)+"time"))&&void 0!==e?e:"0",10)||0;return!((new Date).getTime()-r>d(t)&&(p(t,!1),1))},p=(t,e)=>{const r=m(t);a.removeItem(r+"draft"),a.removeItem(r+"time"),!1!==e&&(t=>{t.dispatch("RemoveDraft")})(t)},y=t=>{const e=m(t);!v(t)&&t.isDirty()&&(a.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),a.setItem(e+"time",(new Date).getTime().toString()),(t=>{t.dispatch("StoreDraft")})(t))},g=t=>{var e;const r=m(t);f(t)&&(t.setContent(null!==(e=a.getItem(r+"draft"))&&void 0!==e?e:"",{format:"raw"}),(t=>{t.dispatch("RestoreDraft")})(t))};var D=tinymce.util.Tools.resolve("tinymce.EditorManager");const h=t=>e=>{const r=()=>f(t)&&!t.mode.isReadOnly();e.setEnabled(r());const o=()=>e.setEnabled(r());return t.on("StoreDraft RestoreDraft RemoveDraft",o),()=>t.off("StoreDraft RestoreDraft RemoveDraft",o)};t.add("autosave",(t=>((t=>{const r=t.options.register,o=t=>{const r=e(t);return r?{value:n(t),valid:r}:{valid:!1,message:"Must be a string."}};r("autosave_ask_before_unload",{processor:"boolean",default:!0}),r("autosave_prefix",{processor:"string",default:"tinymce-autosave-{path}{query}{hash}-{id}-"}),r("autosave_restore_when_empty",{processor:"boolean",default:!1}),r("autosave_interval",{processor:o,default:"30s"}),r("autosave_retention",{processor:o,default:"20m"})})(t),(t=>{t.editorManager.on("BeforeUnload",(t=>{let e;s.each(D.get(),(t=>{t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&u(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))})),e&&(t.preventDefault(),t.returnValue=e)}))})(t),(t=>{(t=>{const e=c(t);o.setEditorInterval(t,(()=>{y(t)}),e)})(t);const e=()=>{(t=>{t.undoManager.transact((()=>{g(t),p(t)})),t.focus()})(t)};t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)})})(t),t.on("init",(()=>{l(t)&&t.dom.isEmpty(t.getBody())&&g(t)})),(t=>({hasDraft:()=>f(t),storeDraft:()=>y(t),restoreDraft:()=>g(t),removeDraft:e=>p(t,e),isEmpty:e=>v(t,e)}))(t))))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/charmap/plugin.min.js b/apps/web-ele/public/tinymce/plugins/charmap/plugin.min.js new file mode 100644 index 000000000..cd905e69e --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/charmap/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=(e,t)=>{const r=((e,t)=>e.dispatch("insertCustomChar",{chr:t}))(e,t).chr;e.execCommand("mceInsertContent",!1,r)},r=e=>t=>e===t,a=e=>"array"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=a=e,(n=String).prototype.isPrototypeOf(r)||(null===(i=a.constructor)||void 0===i?void 0:i.name)===n.name)?"string":t;var r,a,n,i})(e);const n=r(null),i=r(void 0),o=e=>"function"==typeof e,s=()=>false;class l{constructor(e,t){this.tag=e,this.value=t}static some(e){return new l(!0,e)}static none(){return l.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?l.some(e(this.value)):l.none()}bind(e){return this.tag?e(this.value):l.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:l.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?l.none():l.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}l.singletonNone=new l(!1);const c=Array.prototype.push,u=(e,t)=>{const r=e.length,a=new Array(r);for(let n=0;nt=>t.options.get(e),m=h("charmap"),p=h("charmap_append"),d=g.isArray,f="User Defined",y=e=>{return d(e)?(t=e,g.grep(t,(e=>d(e)&&2===e.length))):"function"==typeof e?e():[];var t},b=e=>{const t=((e,t)=>{const r=m(e);r&&(t=[{name:f,characters:y(r)}]);const a=p(e);if(a){const e=g.grep(t,(e=>e.name===f));return e.length?(e[0].characters=[...e[0].characters,...y(a)],t):t.concat({name:f,characters:y(a)})}return t})(e,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return t.length>1?[{name:"All",characters:(r=t,n=e=>e.characters,(e=>{const t=[];for(let r=0,n=e.length;r{let t=e;return{get:()=>t,set:e=>{t=e}}},v=(e,t,r=0,a)=>{const n=e.indexOf(t,r);return-1!==n&&(!!i(a)||n+t.length<=a)},k=String.fromCodePoint,C=(e,t)=>{const r=[],a=t.toLowerCase();return(e=>{for(let n=0,i=e.length;n!!v(k(e).toLowerCase(),r)||v(t.toLowerCase(),r)||v(t.toLowerCase().replace(/\s+/g,""),r))((t=e[n])[0],t[1],a)&&r.push(t);var t})(e.characters),u(r,(e=>({text:e[1],value:k(e[0]),icon:k(e[0])})))},x="pattern",A=(e,r)=>{const a=()=>[{label:"Search",type:"input",name:x},{type:"collection",name:"results"}],i=1===r.length?w(f):w("All"),o=(e=>{let t=null;const r=()=>{n(t)||(clearTimeout(t),t=null)};return{cancel:r,throttle:(...a)=>{r(),t=setTimeout((()=>{t=null,e.apply(null,a)}),40)}}})((e=>{const t=e.getData().pattern;((e,t)=>{var a,n;(a=r,n=e=>e.name===i.get(),((e,t,r)=>{for(let a=0,n=e.length;a{const a=C(r,t);e.setData({results:a})}))})(e,t)})),c={title:"Special Character",size:"normal",body:1===r.length?{type:"panel",items:a()}:{type:"tabpanel",tabs:u(r,(e=>({title:e.name,name:e.name,items:a()})))},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{pattern:"",results:C(r[0],"")},onAction:(r,a)=>{"results"===a.name&&(t(e,a.value),r.close())},onTabChange:(e,t)=>{i.set(t.newTabName),o.throttle(e)},onChange:(e,t)=>{t.name===x&&o.throttle(e)}};e.windowManager.open(c).focus(x)},q=e=>t=>{const r=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",r),r(),()=>{e.off("NodeChange",r)}};e.add("charmap",(e=>{(e=>{const t=e.options.register,r=e=>o(e)||a(e);t("charmap",{processor:r}),t("charmap_append",{processor:r})})(e);const r=b(e);return((e,t)=>{e.addCommand("mceShowCharmap",(()=>{A(e,t)}))})(e,r),(e=>{const t=()=>e.execCommand("mceShowCharmap");e.ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:t,onSetup:q(e)}),e.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:t,onSetup:q(e)})})(e),((e,t)=>{e.ui.registry.addAutocompleter("charmap",{trigger:":",columns:"auto",minChars:2,fetch:(e,r)=>new Promise(((r,a)=>{r(C(t,e))})),onAction:(t,r,a)=>{e.selection.setRng(r),e.insertContent(a),t.hide()}})})(e,r[0]),(e=>({getCharMap:()=>b(e),insertChar:r=>{t(e,r)}}))(e)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/code/plugin.min.js b/apps/web-ele/public/tinymce/plugins/code/plugin.min.js new file mode 100644 index 000000000..54a780cdd --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/code/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/codesample/plugin.min.js b/apps/web-ele/public/tinymce/plugins/codesample/plugin.min.js new file mode 100644 index 000000000..2283bb91e --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/codesample/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>!(e=>null==e)(e),n=()=>{};class a{constructor(e,t){this.tag=e,this.value=t}static some(e){return new a(!0,e)}static none(){return a.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?a.some(e(this.value)):a.none()}bind(e){return this.tag?e(this.value):a.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:a.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return t(e)?a.some(e):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);var s=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils");const r="undefined"!=typeof window?window:Function("return this;")(),i=function(){const e=window.Prism;window.Prism={manual:!0};var t=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},s={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof r?new r(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=_.value.length,_=_.next){var F=_.value;if(t.length>e.length)return;if(!(F instanceof r)){var A,S=1;if(y){if(!(A=i(v,x,e,m))||A.index>=e.length)break;var $=A.index,z=A.index+A[0].length,E=x;for(E+=_.value.length;$>=E;)E+=(_=_.next).value.length;if(x=E-=_.value.length,_.value instanceof r)continue;for(var C=_;C!==t.tail&&(Ed.reach&&(d.reach=O);var P=_.prev;if(B&&(P=u(t,P,B),x+=B.length),c(t,P,S),_=u(t,P,new r(g,f?s.tokenize(j,f):j,w,j)),T&&u(t,_,T),S>1){var N={cause:g+","+b,reach:O};o(e,t,n,_.prev,x,N),d&&N.reach>d.reach&&(d.reach=N.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,n){var a=t.next,s={value:n,prev:t,next:a};return t.next=s,a.prev=s,e.length++,s}function c(e,t,n){for(var a=t.next,s=0;s"+r.content+""},!e.document)return e.addEventListener?(s.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var n=JSON.parse(t.data),a=n.language,r=n.code,i=n.immediateClose;e.postMessage(s.highlight(r,s.languages[a],a)),i&&e.close()}),!1),s):s;var d=s.util.currentScript();function g(){s.manual||s.highlightAll()}if(d&&(s.filename=d.src,d.hasAttribute("data-manual")&&(s.manual=!0)),!s.manual){var p=document.readyState;"loading"===p||"interactive"===p&&d&&d.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return s}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});return t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,s,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(s,(function(e){if("function"==typeof r&&!r(e))return e;for(var s,o=i.length;-1!==n.code.indexOf(s=t(a,o));)++o;return i[o]=e,s})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var s=0,r=Object.keys(n.tokenStack);!function i(o){for(var l=0;l=r.length);l++){var u=o[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=r[s],d=n.tokenStack[c],g="string"==typeof u?u:u.content,p=t(a,c),b=g.indexOf(p);if(b>-1){++s;var h=g.substring(0,b),f=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),m=g.substring(b+p.length),y=[];h&&y.push.apply(y,i([h])),y.push(f),m&&y.push.apply(y,i([m])),"string"==typeof u?o.splice.apply(o,[l,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return o}(n.tokens)}}}})}(t),t.languages.c=t.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),t.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),t.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},t.languages.c.string],char:t.languages.c.char,comment:t.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:t.languages.c}}}}),t.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete t.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(t),function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,a){return RegExp(t(e,n),a||"")}function a(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var s="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(r),c=RegExp(l(s+" "+r+" "+i+" "+o)),d=l(r+" "+i+" "+o),g=l(s+" "+r+" "+o),p=a(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),b=a(/\((?:[^()]|<>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,f=t(/<<0>>(?:\s*<<1>>)?/.source,[h,p]),m=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,f]),y=/\[\s*(?:,\s*)*\]/.source,w=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[m,y]),k=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,b,y]),v=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[k]),_=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[v,m,y]),x={keyword:c,punctuation:/[<>()?,.:[\]]/},F=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,A=/"(?:\\.|[^\\"\r\n])*"/.source,S=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[S]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,_]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,f]),lookbehind:!0,inside:x},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:x},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[_,g,h]),inside:x}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[b]),lookbehind:!0,alias:"class-name",inside:x},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[_,m]),inside:x,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[_]),lookbehind:!0,inside:x,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,p]),inside:{function:n(/^<<0>>/.source,[h]),generic:{pattern:RegExp(p),alias:"class-name",inside:x}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,f,h,_,c.source,b,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(_),greedy:!0,inside:x},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var $=A+"|"+F,z=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[$]),E=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),C=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,j=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[m,E]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[C,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[C]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[E]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var B=/:[^}\r\n]+/.source,T=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),O=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[T,B]),P=a(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[$]),2),N=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[P,B]);function R(t,a){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[a,B]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[O]),lookbehind:!0,greedy:!0,inside:R(O,T)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:R(N,P)}],char:{pattern:RegExp(F),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(t),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(t),function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:a.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:a.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:a.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(t),t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:t.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),t.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),t.languages.markup&&(t.languages.markup.tag.addInlined("script","javascript"),t.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),t.languages.js=t.languages.javascript,t.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.languages.markup.doctype.inside["internal-subset"].inside=t.languages.markup,t.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(e,n){var a={};a["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[n]},a.cdata=/^$/i;var s={"included-cdata":{pattern://i,inside:a}};s["language-"+n]={pattern:/[\s\S]+/,inside:t.languages[n]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:s},t.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(t.languages.markup.tag,"addAttribute",{value:function(e,n){t.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[n,"language-"+n],inside:t.languages[n]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,t.languages.xml=t.languages.extend("markup",{}),t.languages.ssml=t.languages.xml,t.languages.atom=t.languages.xml,t.languages.rss=t.languages.xml,function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:s,punctuation:r};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:s,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(t),t.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},t.languages.python["string-interpolation"].inside.interpolation.inside.rest=t.languages.python,t.languages.py=t.languages.python,function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",a=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+a),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+a+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(t),window.Prism=e,t}(),o=e=>t=>t.options.get(e),l=o("codesample_languages"),u=o("codesample_global_prismjs"),c=e=>r.Prism&&u(e)?r.Prism:i,d=e=>t(e)&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-"),g=e=>{const t=e.selection?e.selection.getNode():null;return d(t)?a.some(t):a.none()},p=e=>{const t=(e=>l(e)||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}])(e),n=(r=t,(e=>0""),(e=>e.value));var r;const i=((e,t)=>g(e).fold((()=>t),(e=>{const n=e.className.match(/language-(\w+)/);return n?n[1]:t})))(e,n),o=(e=>g(e).bind((e=>a.from(e.textContent))).getOr(""))(e);e.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"listbox",name:"language",label:"Language",items:t},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:i,code:o},onSubmit:t=>{const n=t.getData();((e,t,n)=>{const a=e.dom;e.undoManager.transact((()=>{const r=g(e);return n=s.DOM.encode(n),r.fold((()=>{e.insertContent('
    '+n+"
    ");const s=a.select("#__new")[0];a.setAttrib(s,"id",null),e.selection.select(s)}),(s=>{a.setAttrib(s,"class","language-"+t),s.innerHTML=n,c(e).highlightElement(s),e.selection.select(s)}))}))})(e,n.language,n.code),t.close()}})},b=(h=/^\s+|\s+$/g,e=>e.replace(h,""));var h,f=tinymce.util.Tools.resolve("tinymce.util.Tools");const m=(e,t=n)=>n=>{const a=()=>{n.setEnabled(e.selection.isEditable()),t(n)};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("codesample",(e=>{(e=>{const t=e.options.register;t("codesample_languages",{processor:"object[]"}),t("codesample_global_prismjs",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreProcess",(t=>{const n=e.dom,a=n.select("pre[contenteditable=false]",t.node);f.each(f.grep(a,d),(e=>{const t=e.textContent;let a;for(n.setAttrib(e,"class",b(n.getAttrib(e,"class"))),n.setAttrib(e,"contentEditable",null),n.setAttrib(e,"data-mce-highlighted",null);a=e.firstChild;)e.removeChild(a);n.add(e,"code").textContent=t}))})),e.on("SetContent",(()=>{const t=e.dom,n=f.grep(t.select("pre"),(e=>d(e)&&"true"!==t.getAttrib(e,"data-mce-highlighted")));n.length&&e.undoManager.transact((()=>{f.each(n,(n=>{var a;f.each(t.select("br",n),(n=>{t.replace(e.getDoc().createTextNode("\n"),n)})),n.innerHTML=t.encode(null!==(a=n.textContent)&&void 0!==a?a:""),c(e).highlightElement(n),t.setAttrib(n,"data-mce-highlighted",!0),n.className=b(n.className)}))}))})),e.on("PreInit",(()=>{e.parser.addNodeFilter("pre",(e=>{var t;for(let n=0,a=e.length;n{const t=()=>e.execCommand("codesample");e.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:t,onSetup:m(e,(t=>{t.setActive((e=>{const t=e.selection.getStart();return e.dom.is(t,'pre[class*="language-"]')})(e))}))}),e.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:t,onSetup:m(e)})})(e),(e=>{e.addCommand("codesample",(()=>{const t=e.selection.getNode();e.selection.isCollapsed()||d(t)?p(e):e.formatter.toggle("code")}))})(e),e.on("dblclick",(t=>{d(t.target)&&p(e)}))}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/directionality/plugin.min.js b/apps/web-ele/public/tinymce/plugins/directionality/plugin.min.js new file mode 100644 index 000000000..a4f37805b --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/directionality/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>typeof e===t,o=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(o=r=t,(n=String).prototype.isPrototypeOf(o)||(null===(i=r.constructor)||void 0===i?void 0:i.name)===n.name)?"string":e;var o,r,n,i})(t),r=e("boolean"),n=t=>!(t=>null==t)(t),i=e("function"),s=e("number"),l=()=>false;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return n(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=(t,e)=>{for(let o=0,r=t.length;o{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},d=c,h=(t,e)=>{const o=t.dom;if(1!==o.nodeType)return!1;{const t=o;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}};"undefined"!=typeof window?window:Function("return this;")();const m=t=>e=>(t=>t.dom.nodeType)(e)===t,g=m(1),f=m(3),v=m(11),y=(t,e)=>{t.dom.removeAttribute(e)},p=t=>d(t.dom.host),w=t=>{const e=f(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;const o=e.ownerDocument;return(t=>{const e=(t=>d(t.dom.getRootNode()))(t);return v(o=e)&&n(o.dom.host)?a.some(e):a.none();var o})(d(e)).fold((()=>o.body.contains(e)),(r=w,i=p,t=>r(i(t))));var r,i},b=t=>"rtl"===((t,e)=>{const o=t.dom,r=window.getComputedStyle(o).getPropertyValue(e);return""!==r||w(t)?r:((t,e)=>(t=>void 0!==t.style&&i(t.style.getPropertyValue))(t)?t.style.getPropertyValue(e):"")(o,e)})(t,"direction")?"rtl":"ltr",S=(t,e)=>(t=>((t,e)=>{const o=[];for(let r=0,n=t.length;r{const o=t.length,r=new Array(o);for(let n=0;nh(t,e))))(t),N=t=>g(t)&&"li"===t.dom.nodeName.toLowerCase();const A=(t,e,n)=>{u(e,(e=>{const c=d(e),m=N(c),f=((t,e)=>{return(e?(o=t,r="ol,ul",((t,e,o)=>{let n=t.dom;const s=i(o)?o:l;for(;n.parentNode;){n=n.parentNode;const t=d(n);if(h(t,r))return a.some(t);if(s(t))break}return a.none()})(o,0,n)):a.some(t)).getOr(t);var o,r,n})(c,m);var v;(v=f,(t=>a.from(t.dom.parentNode).map(d))(v).filter(g)).each((e=>{if(t.setStyle(f.dom,"direction",null),b(e)===n?y(f,"dir"):((t,e,n)=>{((t,e,n)=>{if(!(o(n)||r(n)||s(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(t.dom,e,n)})(f,"dir",n),b(f)!==n&&t.setStyle(f.dom,"direction",n),m){const e=S(f,"li[dir],li[style]");u(e,(e=>{y(e,"dir"),t.setStyle(e.dom,"direction",null)}))}}))}))},T=(t,e)=>{t.selection.isEditable()&&(A(t.dom,t.selection.getSelectedBlocks(),e),t.nodeChanged())},C=(t,e)=>o=>{const r=r=>{const n=d(r.element);o.setActive(b(n)===e),o.setEnabled(t.selection.isEditable())};return t.on("NodeChange",r),o.setEnabled(t.selection.isEditable()),()=>t.off("NodeChange",r)};t.add("directionality",(t=>{(t=>{t.addCommand("mceDirectionLTR",(()=>{T(t,"ltr")})),t.addCommand("mceDirectionRTL",(()=>{T(t,"rtl")}))})(t),(t=>{t.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:()=>t.execCommand("mceDirectionLTR"),onSetup:C(t,"ltr")}),t.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:()=>t.execCommand("mceDirectionRTL"),onSetup:C(t,"rtl")})})(t)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.js b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.js new file mode 100644 index 000000000..6fcec717a --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'💯',fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'🔢',fitzpatrick_scale:false,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'😀',fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'😬',fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'😁',fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'😂',fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'🤣',fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'🥳',fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'😃',fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'😄',fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'😅',fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'😆',fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'😇',fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'😉',fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'😊',fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'🙂',fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'🙃',fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'☺️',fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'😋',fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'😌',fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'😍',fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'🥰',fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😘',fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'😗',fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'😙',fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😚',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'😜',fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'🤪',fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'🤨',fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'🧐',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'😝',fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'😛',fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'🤑',fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'🤓',fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'😎',fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'🤩',fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:'🤡',fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'🤠',fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:'🤗',fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'😏',fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'😶',fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'😐',fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'😑',fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'😒',fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'🙄',fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'🤔',fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'🤥',fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'🤭',fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'🤫',fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'🤬',fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'🤯',fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'😳',fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'😞',fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'😟',fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'😠',fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'😡',fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'😔',fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'😕',fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'🙁',fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'☹',fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'😣',fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'😖',fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'😫',fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'😩',fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'🥺',fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'😤',fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'😮',fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'😱',fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'😨',fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'😰',fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:'😯',fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:'😦',fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'😧',fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'😢',fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'😥',fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:'🤤',fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'😪',fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'😓',fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'🥵',fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'🥶',fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'😭',fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'😵',fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'😲',fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'🤐',fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'🤢',fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'🤧',fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:'🤮',fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'😷',fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'🤒',fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'🤕',fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'🥴',fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'😴',fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'💤',fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'💩',fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'😈',fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:'👿',fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'👹',fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'👺',fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'💀',fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'👻',fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'👽',fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:'🤖',fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'😺',fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'😸',fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'😹',fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'😻',fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'😼',fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'😽',fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'🙀',fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'😿',fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'😾',fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'🤲',fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'🙌',fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'👏',fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'👋',fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'🤙',fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'👍',fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'👎',fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'👊',fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'✊',fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'🤛',fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'🤜',fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'✌',fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'👌',fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'✋',fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'🤚',fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'👐',fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'💪',fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'🙏',fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:'🦶',fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:'🦵',fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:'🤝',fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'☝',fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'👆',fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'👇',fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'👈',fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'👉',fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'🖕',fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'🖐',fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'🤟',fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'🤘',fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'🤞',fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'🖖',fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'✍',fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:'🤳',fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'💅',fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:'👄',fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:'🦷',fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:'👅',fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'👂',fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:'👃',fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'👁',fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'👀',fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:'🧠',fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'👤',fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'👥',fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'🗣',fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'👶',fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:'🧒',fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'👦',fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:'👧',fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:'🧑',fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'👨',fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:'👩',fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'👱‍♀️',fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'👱',fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'🧔',fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'🧓',fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'👴',fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'👵',fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'👲',fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'🧕',fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'👳‍♀️',fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'👳',fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'👮‍♀️',fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'👮',fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'👷‍♀️',fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'👷',fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'💂‍♀️',fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'💂',fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'🕵️‍♀️',fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'🕵',fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'👩‍⚕️',fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'👨‍⚕️',fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'👩‍🌾',fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'👨‍🌾',fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'👩‍🍳',fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:'👨‍🍳',fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'👩‍🎓',fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:'👨‍🎓',fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'👩‍🎤',fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'👨‍🎤',fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'👩‍🏫',fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'👨‍🏫',fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'👩‍🏭',fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'👨‍🏭',fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'👩‍💻',fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'👨‍💻',fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'👩‍💼',fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'👨‍💼',fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'👩‍🔧',fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'👨‍🔧',fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'👩‍🔬',fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'👨‍🔬',fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'👩‍🎨',fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:'👨‍🎨',fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'👩‍🚒',fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'👨‍🚒',fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'👩‍✈️',fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'👨‍✈️',fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'👩‍🚀',fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'👨‍🚀',fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'👩‍⚖️',fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'👨‍⚖️',fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'🦸‍♀️',fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'🦸‍♂️',fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'🦹‍♀️',fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'🦹‍♂️',fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'🤶',fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'🎅',fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'🧙‍♀️',fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'🧙‍♂️',fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:'🧝‍♀️',fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:'🧝‍♂️',fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:'🧛‍♀️',fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'🧛‍♂️',fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'🧟‍♀️',fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'🧟‍♂️',fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:'🧞‍♀️',fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:'🧞‍♂️',fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'🧜‍♀️',fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:'🧜‍♂️',fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:'🧚‍♀️',fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:'🧚‍♂️',fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'👼',fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:'🤰',fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'🤱',fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'👸',fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'🤴',fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'👰',fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'🤵',fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'🏃‍♀️',fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'🏃',fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'🚶‍♀️',fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'🚶',fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'💃',fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'🕺',fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'👯',fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'👯‍♂️',fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'👫',fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'👬',fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'👭',fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'🙇‍♀️',fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'🙇',fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'🤦‍♂️',fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'🤦‍♀️',fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'🤷',fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'🤷‍♂️',fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'💁',fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'💁‍♂️',fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'🙅',fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'🙅‍♂️',fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'🙆',fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'🙆‍♂️',fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'🙋',fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'🙋‍♂️',fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'🙎',fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'🙎‍♂️',fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'🙍',fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'🙍‍♂️',fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'💇',fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'💇‍♂️',fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'💆',fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'💆‍♂️',fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'🧖‍♀️',fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'🧖‍♂️',fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'💑',fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👩‍❤️‍👩',fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👨‍❤️‍👨',fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'💏',fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👩‍❤️‍💋‍👩',fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👨‍❤️‍💋‍👨',fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'👪',fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'👨‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'🧶',fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'🧵',fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:'🧥',fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'🥼',fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'👚',fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'👕',fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:'👖',fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'👔',fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'👗',fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'👙',fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'👘',fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'💄',fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'💋',fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'👣',fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'🥿',fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'👠',fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'👡',fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:'👢',fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'👞',fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'👟',fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'🥾',fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:'🧦',fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'🧤',fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'🧣',fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'👒',fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'🎩',fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'🧢',fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'⛑',fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'🎓',fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'👑',fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'🎒',fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:'🧳',fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'👝',fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'👛',fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'👜',fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'💼',fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'👓',fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'🕶',fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'🥽',fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'💍',fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'🌂',fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'🐶',fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'🐱',fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'🐭',fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'🐹',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'🐰',fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'🦊',fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'🐻',fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'🐼',fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'🐨',fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'🐯',fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'🦁',fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐮',fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'🐷',fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'🐽',fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'🐸',fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'🦑',fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'🐙',fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'🦐',fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'🐵',fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'🦍',fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'🙈',fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'🙉',fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'🙊',fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'🐒',fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'🐔',fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'🐧',fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'🐦',fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'🐤',fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'🐣',fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'🐥',fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'🦆',fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'🦅',fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'🦉',fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'🦇',fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'🐺',fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'🐗',fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'🐴',fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'🦄',fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'🐝',fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'🐛',fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'🦋',fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'🐌',fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'🐞',fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'🐜',fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'🦗',fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'🕷',fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'🦂',fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'🦀',fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'🐍',fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'🦎',fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'🦖',fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'🦕',fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'🐢',fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'🐠',fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'🐟',fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'🐡',fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'🐬',fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'🦈',fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'🐳',fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'🐋',fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'🐊',fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'🐆',fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'🦓',fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'🐅',fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'🐃',fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'🐂',fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐄',fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'🦌',fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'🐪',fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'🐫',fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'🦒',fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'🐘',fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'🦏',fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'🐐',fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'🐏',fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'🐑',fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'🐎',fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'🐖',fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'🐀',fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'🐁',fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'🐓',fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'🦃',fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'🕊',fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'🐕',fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'🐩',fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'🐈',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'🐇',fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'🐿',fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'🦔',fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'🦝',fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'🦙',fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'🦛',fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'🦘',fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'🦡',fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'🦢',fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'🦚',fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'🦜',fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'🦞',fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'🦟',fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'🐾',fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'🐉',fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'🐲',fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'🌵',fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'🎄',fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'🌲',fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'🌳',fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'🌴',fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'🌱',fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'🌿',fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'☘',fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'🍀',fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'🎍',fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'🎋',fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'🍃',fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'🍂',fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'🍁',fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'🌾',fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'🌺',fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'🌻',fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'🌹',fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'🥀',fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'🌷',fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'🌼',fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'🌸',fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'💐',fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'🍄',fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'🌰',fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'🎃',fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'🐚',fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'🕸',fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'🌎',fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'🌍',fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'🌏',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'🌕',fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'🌖',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌗',fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌘',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌑',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌒',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌓',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'🌔',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌚',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌝',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌛',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌜',fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'🌞',fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'🌙',fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'⭐',fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'🌟',fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'💫',fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'✨',fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:'☄',fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'☀️',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'🌤',fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'⛅',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'🌥',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'🌦',fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'☁️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'🌧',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'⛈',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'🌩',fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'⚡',fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'🔥',fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'💥',fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'❄️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'🌨',fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'⛄',fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'☃',fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'🌬',fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'💨',fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'🌪',fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:'🌫',fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'☂',fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'☔',fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'💧',fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'💦',fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'🌊',fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'🍏',fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'🍎',fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'🍐',fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'🍊',fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'🍋',fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'🍌',fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'🍉',fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'🍇',fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'🍓',fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'🍈',fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'🍒',fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'🍑',fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'🍍',fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'🥥',fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'🥝',fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'🥭',fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'🥑',fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'🥦',fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'🍅',fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'🍆',fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'🥒',fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'🥕',fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'🌶',fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'🥔',fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'🌽',fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'🥬',fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'🍠',fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'🥜',fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'🍯',fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'🥐',fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'🍞',fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'🥖',fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'🥯',fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'🥨',fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'🧀',fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'🥚',fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'🥓',fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'🥩',fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'🥞',fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'🍗',fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'🍖',fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'🦴',fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'🍤',fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'🍳',fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'🍔',fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'🍟',fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'🥙',fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'🌭',fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'🍕',fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'🥪',fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'🥫',fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'🍝',fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'🌮',fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'🌯',fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'🥗',fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'🥘',fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'🍜',fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'🍲',fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'🍥',fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'🥠',fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'🍣',fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'🍱',fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'🍛',fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'🍙',fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'🍚',fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'🍘',fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'🍢',fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'🍡',fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'🍧',fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'🍨',fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'🍦',fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'🥧',fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'🍰',fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'🧁',fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'🥮',fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'🎂',fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'🍮',fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'🍬',fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'🍭',fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'🍫',fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'🍿',fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'🥟',fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'🍩',fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'🍪',fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'🥛',fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍺',fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍻',fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'🥂',fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'🍷',fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'🥃',fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'🍸',fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'🍹',fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'🍾',fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'🍶',fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'🍵',fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'🥤',fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'☕',fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'🍼',fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'🧂',fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'🥄',fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'🍴',fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'🍽',fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'🥣',fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'🥡',fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'🥢',fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'⚽',fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'🏀',fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'🏈',fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:'⚾',fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:'🥎',fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'🎾',fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:'🏐',fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:'🏉',fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'🥏',fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'🎱',fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'⛳',fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'🏌️‍♀️',fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:'🏌',fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'🏓',fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:'🏸',fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:'🥅',fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:'🏒',fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:'🏑',fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'🥍',fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:'🏏',fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'🎿',fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'⛷',fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'🏂',fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'🤺',fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♀️',fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♂️',fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♀️',fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♂️',fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'🤾‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:'🤾‍♂️',fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:'⛸',fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:'🥌',fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:'🛹',fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'🛷',fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'🏹',fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'🎣',fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'🥊',fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'🥋',fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'🚣‍♀️',fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'🚣',fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'🧗‍♀️',fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'🧗‍♂️',fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'🏊‍♀️',fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'🏊',fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♂️',fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♀️',fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♂️',fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'🏄‍♀️',fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'🏄',fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'🛀',fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'⛹️‍♀️',fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:'⛹',fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'🏋️‍♀️',fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'🏋',fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'🚴‍♀️',fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'🚴',fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'🚵‍♀️',fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'🚵',fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'🏇',fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'🕴',fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'🏆',fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'🎽',fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:'🏅',fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'🎖',fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'🥇',fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'🥈',fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'🥉',fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'🎗',fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'🏵',fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'🎫',fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'🎟',fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'🎭',fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'🎨',fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'🎪',fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♀️',fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♂️',fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'🎤',fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'🎧',fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'🎼',fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'🎹',fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'🥁',fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'🎷',fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:'🎺',fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:'🎸',fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'🎻',fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:'🎬',fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'🎮',fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'👾',fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'🎯',fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'🎲',fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'🎰',fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'🧩',fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'🎳',fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'🚗',fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'🚕',fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'🚙',fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'🚌',fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'🚎',fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'🏎',fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'🚓',fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'🚑',fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'🚒',fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'🚐',fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'🚚',fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'🚛',fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'🚜',fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'🛴',fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'🏍',fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'🚲',fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'🛵',fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'🚨',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'🚔',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'🚍',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'🚘',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'🚖',fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'🚡',fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'🚠',fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'🚟',fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'🚃',fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'🚋',fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'🚝',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'🚄',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'🚅',fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'🚈',fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'🚞',fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'🚂',fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'🚆',fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'🚇',fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'🚊',fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'🚉',fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'🛸',fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'🚁',fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'🛩',fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'✈️',fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'🛫',fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'🛬',fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'⛵',fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'🛥',fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'🚤',fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'⛴',fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'🛳',fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'🚀',fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'🛰',fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'💺',fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'🛶',fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'⚓',fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'🚧',fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'⛽',fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'🚏',fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'🚦',fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'🚥',fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'🏁',fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'🚢',fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'🎡',fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'🎢',fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'🎠',fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'🏗',fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'🌁',fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'🗼',fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'🏭',fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'⛲',fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'🎑',fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'⛰',fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'🏔',fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'🗻',fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'🌋',fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'🗾',fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'🏕',fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'⛺',fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'🏞',fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'🛣',fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'🛤',fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'🌅',fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'🌄',fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'🏜',fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'🏖',fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'🏝',fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'🌇',fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'🌆',fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'🏙',fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'🌃',fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'🌉',fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'🌌',fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'🌠',fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'🎇',fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'🎆',fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'🌈',fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'🏘',fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'🏰',fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'🏯',fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'🏟',fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'🗽',fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:'🏠',fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'🏡',fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'🏚',fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'🏢',fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'🏬',fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'🏣',fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'🏤',fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'🏥',fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'🏦',fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'🏨',fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'🏪',fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'🏫',fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'🏩',fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'💒',fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'🏛',fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'⛪',fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'🕌',fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'🕍',fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'🕋',fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'⛩',fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'⌚',fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'📱',fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:'📲',fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'💻',fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'⌨',fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'🖥',fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:'🖨',fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:'🖱',fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'🖲',fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:'🕹',fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:'🗜',fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'💽',fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'💾',fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'💿',fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'📀',fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'📼',fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:'📷',fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'📸',fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:'📹',fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:'🎥',fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'📽',fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:'🎞',fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'📞',fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'☎️',fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'📟',fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:'📠',fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'📺',fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'📻',fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'🎙',fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:'🎚',fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:'🎛',fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'🧭',fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'⏱',fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:'⏲',fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'⏰',fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'🕰',fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'⏳',fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'⌛',fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'📡',fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'🔋',fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:'🔌',fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'💡',fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'🔦',fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:'🕯',fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'🧯',fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'🗑',fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:'🛢',fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'💸',fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'💵',fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'💴',fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'💶',fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'💷',fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'💰',fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'💳',fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'💎',fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'⚖',fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'🧰',fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'🔧',fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:'🔨',fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'⚒',fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'🛠',fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:'⛏',fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'🔩',fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:'⚙',fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:'🧱',fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:'⛓',fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'🧲',fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'🔫',fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'💣',fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'🧨',fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'🔪',fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:'🗡',fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:'⚔',fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:'🛡',fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'🚬',fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'☠',fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'⚰',fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'⚱',fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:'🏺',fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'🔮',fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'📿',fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'🧿',fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:'💈',fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'⚗',fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'🔭',fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'🔬',fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:'🕳',fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'💊',fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'💉',fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'🧬',fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'🦠',fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'🧫',fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'🧪',fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'🌡',fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'🧹',fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:'🧺',fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:'🧻',fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:'🏷',fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'🔖',fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'🚽',fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'🚿',fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'🛁',fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'🧼',fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'🧽',fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'🧴',fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:'🔑',fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:'🗝',fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'🛋',fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'🛌',fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:'🛏',fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:'🚪',fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:'🛎',fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'🧸',fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:'🖼',fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:'🗺',fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'⛱',fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'🗿',fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'🛍',fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:'🛒',fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'🎈',fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'🎏',fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'🎀',fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'🎁',fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'🎊',fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'🎉',fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'🎎',fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'🎐',fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'🎌',fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'🏮',fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:'🧧',fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'✉️',fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'📩',fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'📨',fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'📧',fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'💌',fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'📮',fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'📪',fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'📫',fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'📬',fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'📭',fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'📦',fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'📯',fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'📥',fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'📤',fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'📜',fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'📃',fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'📑',fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'🧾',fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'📊',fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'📈',fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'📉',fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'📄',fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:'📅',fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'📆',fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'🗓',fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:'📇',fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'🗃',fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:'🗳',fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'🗄',fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'📋',fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'🗒',fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'📁',fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'📂',fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'🗂',fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'🗞',fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:'📰',fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'📓',fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'📕',fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'📗',fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'📘',fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'📙',fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'📔',fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:'📒',fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:'📚',fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'📖',fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:'🧷',fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:'🔗',fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'📎',fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'🖇',fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:'✂️',fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'📐',fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'📏',fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:'🧮',fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'📌',fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'📍',fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'🚩',fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'🏳',fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:'🏴',fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'🏳️‍🌈',fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'🔐',fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:'🔒',fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:'🔓',fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'🔏',fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'🖊',fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'🖋',fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'✒️',fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'📝',fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'✏️',fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'🖍',fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'🖌',fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'🔍',fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'🔎',fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:'❤️',fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'🧡',fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'💛',fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'💚',fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'💙',fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'💜',fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:'🖤',fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'💔',fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'❣',fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'💕',fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'💞',fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'💓',fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'💗',fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'💖',fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'💘',fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'💝',fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'💟',fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'☮',fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:'✝',fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'☪',fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'🕉',fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'☸',fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:'✡',fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'🔯',fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'🕎',fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:'☯',fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'☦',fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'🛐',fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'⛎',fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'♈',fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'♉',fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'♊',fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'♋',fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'♌',fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'♍',fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'♎',fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'♏',fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'♐',fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'♑',fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'♒',fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'♓',fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:'🆔',fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'⚛',fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'🈳',fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'🈹',fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'☢',fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:'☣',fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'📴',fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'📳',fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'🈶',fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'🈚',fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'🈸',fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'🈺',fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'🈷️',fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'✴️',fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:'🆚',fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'🉑',fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'💮',fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'🉐',fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'㊙️',fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'㊗️',fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'🈴',fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'🈵',fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'🈲',fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'🅰️',fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'🅱️',fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'🆎',fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'🆑',fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'🅾️',fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'🆘',fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'⛔',fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'📛',fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'🚫',fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'❌',fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:'⭕',fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:'🛑',fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:'💢',fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'♨️',fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'🚷',fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'🚯',fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'🚳',fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'🚱',fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'🔞',fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'📵',fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'❗',fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'❕',fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:'❓',fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'❔',fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'‼️',fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'⁉️',fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'🔅',fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'🔆',fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:'🔱',fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'⚜',fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'〽️',fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'⚠️',fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'🚸',fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:'🔰',fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'♻️',fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'🈯',fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'💹',fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'❇️',fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'✳️',fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'❎',fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'✅',fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'💠',fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'🌀',fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:'➿',fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'🌐',fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'Ⓜ️',fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'🏧',fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'🈂️',fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'🛂',fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'🛃',fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'🛄',fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'🛅',fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'♿',fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'🚭',fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'🚾',fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'🅿️',fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'🚰',fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'🚹',fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'🚺',fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'🚼',fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'🚻',fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'🚮',fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'🎦',fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'📶',fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'🈁',fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'🆖',fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'🆗',fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'🆙',fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:'🆒',fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'🆕',fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:'🆓',fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0️⃣',fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1️⃣',fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2️⃣',fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3️⃣',fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4️⃣',fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5️⃣',fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6️⃣',fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7️⃣',fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8️⃣',fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9️⃣',fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'🔟',fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*⃣',fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:'⏏️',fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'▶️',fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'⏸',fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'⏭',fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:'⏹',fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:'⏺',fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'⏯',fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:'⏮',fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'⏩',fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'⏪',fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'🔀',fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:'🔁',fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'🔂',fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'◀️',fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'🔼',fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'🔽',fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'⏫',fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'⏬',fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'➡️',fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'⬅️',fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'⬆️',fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'⬇️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'↗️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'↘️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'↙️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'↖️',fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'↕️',fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'↔️',fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'🔄',fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'↪️',fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'↩️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'⤴️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'⤵️',fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#️⃣',fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'ℹ️',fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'🔤',fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'🔡',fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'🔠',fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'🔣',fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'🎵',fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:'🎶',fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'〰️',fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'➰',fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'✔️',fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'🔃',fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'➕',fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'➖',fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'➗',fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'✖️',fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:'♾',fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'💲',fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'💱',fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'©️',fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'®️',fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'™️',fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:'🔚',fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:'🔙',fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:'🔛',fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:'🔝',fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:'🔜',fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'☑️',fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'🔘',fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:'⚪',fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'⚫',fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'🔴',fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'🔵',fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔸',fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔹',fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔶',fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔷',fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'🔺',fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'▪️',fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'▫️',fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'⬛',fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'⬜',fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'🔻',fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'◼️',fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'◻️',fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'◾',fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'◽',fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'🔲',fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'🔳',fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'🔈',fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'🔉',fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'🔊',fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'🔇',fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'📣',fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'📢',fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'🔔',fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'🔕',fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'🃏',fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'🀄',fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'♠️',fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'♣️',fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'♥️',fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'♦️',fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'🎴',fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'💭',fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'🗯',fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'💬',fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'🗨',fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'🕐',fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'🕑',fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'🕒',fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'🕓',fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'🕔',fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'🕕',fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'🕖',fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'🕗',fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'🕘',fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'🕙',fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'🕚',fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'🕛',fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'🕜',fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'🕝',fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'🕞',fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'🕟',fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'🕠',fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'🕡',fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'🕢',fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'🕣',fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'🕤',fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'🕥',fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'🕦',fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'🕧',fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'🇦🇫',fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:'🇦🇽',fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'🇦🇱',fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'🇩🇿',fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'🇦🇸',fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'🇦🇩',fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'🇦🇴',fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'🇦🇮',fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'🇦🇶',fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'🇦🇬',fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'🇦🇷',fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'🇦🇲',fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'🇦🇼',fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'🇦🇺',fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'🇦🇹',fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'🇦🇿',fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'🇧🇸',fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'🇧🇭',fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'🇧🇩',fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'🇧🇧',fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'🇧🇾',fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'🇧🇪',fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'🇧🇿',fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'🇧🇯',fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'🇧🇲',fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'🇧🇹',fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'🇧🇴',fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'🇧🇶',fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'🇧🇦',fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'🇧🇼',fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'🇧🇷',fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'🇮🇴',fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'🇻🇬',fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'🇧🇳',fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'🇧🇬',fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'🇧🇫',fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'🇧🇮',fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'🇨🇻',fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'🇰🇭',fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'🇨🇲',fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'🇨🇦',fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'🇮🇨',fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'🇰🇾',fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'🇨🇫',fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'🇹🇩',fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'🇨🇱',fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'🇨🇳',fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'🇨🇽',fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'🇨🇨',fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'🇨🇴',fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'🇰🇲',fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'🇨🇬',fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'🇨🇩',fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'🇨🇰',fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'🇨🇷',fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'🇭🇷',fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'🇨🇺',fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:'🇨🇼',fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'🇨🇾',fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'🇨🇿',fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'🇩🇰',fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'🇩🇯',fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'🇩🇲',fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'🇩🇴',fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'🇪🇨',fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'🇪🇬',fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'🇸🇻',fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'🇬🇶',fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'🇪🇷',fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'🇪🇪',fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'🇪🇹',fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'🇪🇺',fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'🇫🇰',fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'🇫🇴',fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'🇫🇯',fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'🇫🇮',fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'🇫🇷',fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'🇬🇫',fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'🇵🇫',fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'🇹🇫',fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'🇬🇦',fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'🇬🇲',fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'🇬🇪',fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'🇩🇪',fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'🇬🇭',fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'🇬🇮',fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'🇬🇷',fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'🇬🇱',fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'🇬🇩',fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'🇬🇵',fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'🇬🇺',fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'🇬🇹',fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'🇬🇬',fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'🇬🇳',fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'🇬🇼',fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'🇬🇾',fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'🇭🇹',fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'🇭🇳',fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'🇭🇰',fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'🇭🇺',fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'🇮🇸',fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'🇮🇳',fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'🇮🇩',fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'🇮🇷',fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'🇮🇶',fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'🇮🇪',fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'🇮🇲',fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'🇮🇱',fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'🇮🇹',fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'🇨🇮',fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'🇯🇲',fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'🇯🇵',fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'🇯🇪',fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'🇯🇴',fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'🇰🇿',fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'🇰🇪',fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'🇰🇮',fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'🇽🇰',fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'🇰🇼',fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'🇰🇬',fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'🇱🇦',fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'🇱🇻',fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'🇱🇧',fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'🇱🇸',fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'🇱🇷',fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'🇱🇾',fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'🇱🇮',fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'🇱🇹',fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'🇱🇺',fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'🇲🇴',fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'🇲🇰',fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'🇲🇬',fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'🇲🇼',fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'🇲🇾',fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'🇲🇻',fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'🇲🇱',fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'🇲🇹',fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'🇲🇭',fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'🇲🇶',fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'🇲🇷',fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'🇲🇺',fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'🇾🇹',fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'🇲🇽',fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'🇫🇲',fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'🇲🇩',fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'🇲🇨',fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'🇲🇳',fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'🇲🇪',fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'🇲🇸',fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'🇲🇦',fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'🇲🇿',fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'🇲🇲',fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'🇳🇦',fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'🇳🇷',fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'🇳🇵',fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'🇳🇱',fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'🇳🇨',fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'🇳🇿',fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'🇳🇮',fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'🇳🇪',fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'🇳🇬',fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'🇳🇺',fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'🇳🇫',fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'🇲🇵',fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'🇰🇵',fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'🇳🇴',fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'🇴🇲',fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'🇵🇰',fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'🇵🇼',fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'🇵🇸',fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'🇵🇦',fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'🇵🇬',fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'🇵🇾',fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'🇵🇪',fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'🇵🇭',fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'🇵🇳',fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'🇵🇱',fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'🇵🇹',fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'🇵🇷',fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'🇶🇦',fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:'🇷🇪',fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'🇷🇴',fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'🇷🇺',fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'🇷🇼',fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:'🇧🇱',fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'🇸🇭',fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'🇰🇳',fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'🇱🇨',fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'🇵🇲',fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'🇻🇨',fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'🇼🇸',fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'🇸🇲',fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'🇸🇹',fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'🇸🇦',fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'🇸🇳',fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'🇷🇸',fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'🇸🇨',fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'🇸🇱',fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'🇸🇬',fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'🇸🇽',fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'🇸🇰',fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'🇸🇮',fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'🇸🇧',fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'🇸🇴',fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'🇿🇦',fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'🇬🇸',fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'🇰🇷',fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'🇸🇸',fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'🇪🇸',fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'🇱🇰',fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'🇸🇩',fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'🇸🇷',fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'🇸🇿',fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'🇸🇪',fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'🇨🇭',fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'🇸🇾',fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'🇹🇼',fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'🇹🇯',fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'🇹🇿',fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'🇹🇭',fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'🇹🇱',fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'🇹🇬',fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'🇹🇰',fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'🇹🇴',fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'🇹🇹',fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'🇹🇳',fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'🇹🇷',fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'🇹🇲',fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'🇹🇨',fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'🇹🇻',fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'🇺🇬',fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'🇺🇦',fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'🇦🇪',fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'🇬🇧',fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:'🏴󠁧󠁢󠁥󠁮󠁧󠁿',fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:'🏴󠁧󠁢󠁳󠁣󠁴󠁿',fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:'🏴󠁧󠁢󠁷󠁬󠁳󠁿',fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'🇺🇸',fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'🇻🇮',fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'🇺🇾',fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'🇺🇿',fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'🇻🇺',fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'🇻🇦',fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'🇻🇪',fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'🇻🇳',fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'🇼🇫',fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'🇪🇭',fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'🇾🇪',fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'🇿🇲',fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'🇿🇼',fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'🇺🇳',fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'🏴‍☠️',fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.min.js b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.min.js new file mode 100644 index 000000000..37f3bcf83 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojiimages.min.js @@ -0,0 +1,3 @@ +// Source: npm package: emojilib +// Images provided by twemoji: https://github.com/twitter/twemoji +window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'\u{1f4af}',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'\u{1f522}',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'\u{1f600}',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'\u{1f62c}',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'\u{1f601}',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'\u{1f602}',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'\u{1f923}',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'\u{1f973}',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'\u{1f603}',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'\u{1f604}',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'\u{1f605}',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'\u{1f606}',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'\u{1f607}',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'\u{1f609}',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'\u{1f60a}',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'\u{1f642}',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'\u{1f643}',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'\u263a\ufe0f',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'\u{1f60b}',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'\u{1f60c}',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'\u{1f60d}',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'\u{1f970}',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f618}',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'\u{1f617}',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'\u{1f619}',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f61a}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'\u{1f61c}',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'\u{1f92a}',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'\u{1f928}',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'\u{1f9d0}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'\u{1f61d}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'\u{1f61b}',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'\u{1f911}',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'\u{1f913}',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'\u{1f60e}',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'\u{1f929}',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:'\u{1f921}',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'\u{1f920}',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:'\u{1f917}',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'\u{1f60f}',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'\u{1f636}',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'\u{1f610}',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'\u{1f611}',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'\u{1f612}',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'\u{1f644}',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'\u{1f914}',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'\u{1f925}',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'\u{1f92d}',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'\u{1f92b}',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'\u{1f92c}',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'\u{1f92f}',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'\u{1f633}',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'\u{1f61e}',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'\u{1f61f}',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'\u{1f620}',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'\u{1f621}',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'\u{1f614}',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'\u{1f615}',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'\u{1f641}',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'\u2639',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'\u{1f623}',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'\u{1f616}',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'\u{1f62b}',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'\u{1f629}',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'\u{1f97a}',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'\u{1f624}',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'\u{1f62e}',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'\u{1f631}',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'\u{1f628}',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'\u{1f630}',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:'\u{1f62f}',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:'\u{1f626}',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'\u{1f627}',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'\u{1f622}',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'\u{1f625}',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:'\u{1f924}',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'\u{1f62a}',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'\u{1f613}',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'\u{1f975}',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'\u{1f976}',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'\u{1f62d}',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'\u{1f635}',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'\u{1f632}',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'\u{1f910}',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'\u{1f922}',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'\u{1f927}',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:'\u{1f92e}',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'\u{1f637}',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'\u{1f912}',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'\u{1f915}',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'\u{1f974}',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'\u{1f634}',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'\u{1f4a4}',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'\u{1f4a9}',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'\u{1f608}',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:'\u{1f47f}',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'\u{1f479}',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'\u{1f47a}',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'\u{1f480}',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'\u{1f47b}',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'\u{1f47d}',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:'\u{1f916}',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'\u{1f63a}',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'\u{1f638}',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'\u{1f639}',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'\u{1f63b}',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'\u{1f63c}',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'\u{1f63d}',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'\u{1f640}',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'\u{1f63f}',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'\u{1f63e}',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'\u{1f932}',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'\u{1f64c}',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'\u{1f44f}',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'\u{1f44b}',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'\u{1f919}',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'\u{1f44d}',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'\u{1f44e}',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'\u{1f44a}',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'\u270a',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'\u{1f91b}',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'\u{1f91c}',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'\u270c',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'\u{1f44c}',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'\u270b',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'\u{1f91a}',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'\u{1f450}',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'\u{1f4aa}',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'\u{1f64f}',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:'\u{1f9b6}',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:'\u{1f9b5}',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:'\u{1f91d}',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'\u261d',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'\u{1f446}',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'\u{1f447}',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'\u{1f448}',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'\u{1f449}',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'\u{1f595}',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'\u{1f590}',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'\u{1f91f}',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'\u{1f918}',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'\u{1f91e}',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'\u{1f596}',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'\u270d',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:'\u{1f933}',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'\u{1f485}',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:'\u{1f444}',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:'\u{1f9b7}',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:'\u{1f445}',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'\u{1f442}',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:'\u{1f443}',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'\u{1f441}',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'\u{1f440}',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:'\u{1f9e0}',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'\u{1f464}',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'\u{1f465}',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'\u{1f5e3}',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'\u{1f476}',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:'\u{1f9d2}',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'\u{1f466}',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:'\u{1f467}',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:'\u{1f9d1}',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'\u{1f468}',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:'\u{1f469}',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'\u{1f471}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'\u{1f471}',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'\u{1f9d4}',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'\u{1f9d3}',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'\u{1f474}',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'\u{1f475}',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'\u{1f472}',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'\u{1f9d5}',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'\u{1f473}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'\u{1f473}',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'\u{1f46e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'\u{1f46e}',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'\u{1f477}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'\u{1f477}',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'\u{1f482}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'\u{1f482}',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'\u{1f575}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'\u{1f575}',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'\u{1f469}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'\u{1f468}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'\u{1f469}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'\u{1f468}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'\u{1f469}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:'\u{1f468}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'\u{1f469}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:'\u{1f468}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'\u{1f469}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'\u{1f468}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'\u{1f469}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'\u{1f468}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'\u{1f469}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'\u{1f468}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'\u{1f469}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'\u{1f468}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'\u{1f469}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'\u{1f468}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'\u{1f469}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'\u{1f468}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'\u{1f469}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'\u{1f468}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'\u{1f469}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:'\u{1f468}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'\u{1f469}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'\u{1f468}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'\u{1f469}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'\u{1f468}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'\u{1f469}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'\u{1f468}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'\u{1f469}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'\u{1f468}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'\u{1f9b8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'\u{1f9b8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'\u{1f9b9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'\u{1f9b9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'\u{1f936}',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'\u{1f385}',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'\u{1f9d9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'\u{1f9d9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:'\u{1f9dd}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:'\u{1f9dd}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:'\u{1f9db}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'\u{1f9db}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'\u{1f9df}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'\u{1f9df}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:'\u{1f9de}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:'\u{1f9de}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'\u{1f9dc}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:'\u{1f9dc}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:'\u{1f9da}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:'\u{1f9da}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'\u{1f47c}',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:'\u{1f930}',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'\u{1f931}',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'\u{1f478}',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'\u{1f934}',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'\u{1f470}',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'\u{1f935}',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'\u{1f3c3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'\u{1f3c3}',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'\u{1f6b6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'\u{1f6b6}',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'\u{1f483}',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'\u{1f57a}',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'\u{1f46f}',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'\u{1f46f}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'\u{1f46b}',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'\u{1f46c}',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'\u{1f46d}',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'\u{1f647}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'\u{1f647}',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'\u{1f926}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'\u{1f926}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'\u{1f937}',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'\u{1f937}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'\u{1f481}',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'\u{1f481}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'\u{1f645}',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'\u{1f645}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'\u{1f646}',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'\u{1f646}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'\u{1f64b}',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'\u{1f64b}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'\u{1f64e}',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'\u{1f64e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'\u{1f487}',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'\u{1f487}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'\u{1f486}',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'\u{1f486}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f491}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f48f}',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'\u{1f46a}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'\u{1f9f6}',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'\u{1f9f5}',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:'\u{1f9e5}',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'\u{1f97c}',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'\u{1f45a}',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'\u{1f455}',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:'\u{1f456}',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'\u{1f454}',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'\u{1f457}',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'\u{1f459}',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'\u{1f458}',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'\u{1f484}',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'\u{1f48b}',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'\u{1f463}',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'\u{1f97f}',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'\u{1f460}',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'\u{1f461}',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:'\u{1f462}',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'\u{1f45e}',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'\u{1f45f}',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'\u{1f97e}',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:'\u{1f9e6}',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'\u{1f9e4}',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'\u{1f9e3}',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'\u{1f452}',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'\u{1f3a9}',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'\u{1f9e2}',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'\u26d1',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'\u{1f393}',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'\u{1f451}',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'\u{1f392}',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:'\u{1f9f3}',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'\u{1f45d}',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'\u{1f45b}',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'\u{1f45c}',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'\u{1f4bc}',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'\u{1f453}',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'\u{1f576}',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'\u{1f97d}',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'\u{1f48d}',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'\u{1f302}',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'\u{1f436}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'\u{1f431}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'\u{1f42d}',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'\u{1f439}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'\u{1f430}',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'\u{1f98a}',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'\u{1f43b}',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'\u{1f43c}',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'\u{1f428}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'\u{1f42f}',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'\u{1f981}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f42e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'\u{1f437}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'\u{1f43d}',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'\u{1f438}',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'\u{1f991}',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'\u{1f419}',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'\u{1f990}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'\u{1f435}',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'\u{1f98d}',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'\u{1f648}',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'\u{1f649}',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'\u{1f64a}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'\u{1f412}',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'\u{1f414}',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'\u{1f427}',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'\u{1f426}',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'\u{1f424}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'\u{1f423}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'\u{1f425}',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'\u{1f986}',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'\u{1f985}',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'\u{1f989}',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'\u{1f987}',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'\u{1f43a}',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'\u{1f417}',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'\u{1f434}',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'\u{1f984}',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'\u{1f41d}',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'\u{1f41b}',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'\u{1f98b}',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'\u{1f40c}',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'\u{1f41e}',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'\u{1f41c}',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'\u{1f997}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'\u{1f577}',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'\u{1f982}',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'\u{1f980}',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'\u{1f40d}',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'\u{1f98e}',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'\u{1f996}',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'\u{1f995}',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'\u{1f422}',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'\u{1f420}',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'\u{1f41f}',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'\u{1f421}',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'\u{1f42c}',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'\u{1f988}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'\u{1f433}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'\u{1f40b}',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'\u{1f40a}',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'\u{1f406}',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'\u{1f993}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'\u{1f405}',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'\u{1f403}',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'\u{1f402}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f404}',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'\u{1f98c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'\u{1f42a}',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'\u{1f42b}',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'\u{1f992}',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'\u{1f418}',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'\u{1f98f}',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'\u{1f410}',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'\u{1f40f}',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'\u{1f411}',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'\u{1f40e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'\u{1f416}',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'\u{1f400}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'\u{1f401}',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'\u{1f413}',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'\u{1f983}',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'\u{1f54a}',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'\u{1f415}',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'\u{1f429}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'\u{1f408}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'\u{1f407}',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'\u{1f43f}',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'\u{1f994}',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'\u{1f99d}',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'\u{1f999}',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'\u{1f99b}',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'\u{1f998}',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'\u{1f9a1}',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'\u{1f9a2}',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'\u{1f99a}',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'\u{1f99c}',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'\u{1f99e}',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'\u{1f99f}',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'\u{1f43e}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f409}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f432}',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'\u{1f335}',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'\u{1f384}',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'\u{1f332}',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'\u{1f333}',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'\u{1f334}',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'\u{1f331}',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'\u{1f33f}',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'\u2618',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'\u{1f340}',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'\u{1f38d}',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'\u{1f38b}',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'\u{1f343}',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'\u{1f342}',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'\u{1f341}',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'\u{1f33e}',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'\u{1f33a}',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'\u{1f33b}',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'\u{1f339}',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'\u{1f940}',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'\u{1f337}',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'\u{1f33c}',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'\u{1f338}',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'\u{1f490}',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'\u{1f344}',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'\u{1f330}',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'\u{1f383}',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'\u{1f41a}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'\u{1f578}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'\u{1f30e}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'\u{1f30d}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'\u{1f30f}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'\u{1f315}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'\u{1f316}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f317}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f318}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f311}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f312}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f313}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'\u{1f314}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31a}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31d}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31b}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31c}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'\u{1f31e}',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'\u{1f319}',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'\u2b50',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'\u{1f31f}',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'\u{1f4ab}',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'\u2728',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:'\u2604',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'\u2600\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'\u{1f324}',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'\u26c5',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'\u{1f325}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'\u{1f326}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'\u2601\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'\u{1f327}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'\u26c8',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'\u{1f329}',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'\u26a1',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'\u{1f525}',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'\u{1f4a5}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'\u2744\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'\u{1f328}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'\u26c4',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'\u2603',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'\u{1f32c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'\u{1f4a8}',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'\u{1f32a}',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:'\u{1f32b}',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'\u2602',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'\u2614',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'\u{1f4a7}',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'\u{1f4a6}',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'\u{1f30a}',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'\u{1f34f}',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'\u{1f34e}',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'\u{1f350}',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'\u{1f34a}',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'\u{1f34b}',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'\u{1f34c}',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'\u{1f349}',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'\u{1f347}',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'\u{1f353}',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'\u{1f348}',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'\u{1f352}',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'\u{1f351}',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'\u{1f34d}',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'\u{1f965}',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'\u{1f95d}',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'\u{1f96d}',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'\u{1f951}',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'\u{1f966}',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'\u{1f345}',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'\u{1f346}',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'\u{1f952}',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'\u{1f955}',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'\u{1f336}',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'\u{1f954}',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'\u{1f33d}',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'\u{1f96c}',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'\u{1f360}',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'\u{1f95c}',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'\u{1f36f}',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'\u{1f950}',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'\u{1f35e}',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'\u{1f956}',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'\u{1f96f}',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'\u{1f968}',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'\u{1f9c0}',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'\u{1f95a}',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'\u{1f953}',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'\u{1f969}',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'\u{1f95e}',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'\u{1f357}',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'\u{1f356}',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'\u{1f9b4}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'\u{1f364}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'\u{1f373}',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'\u{1f354}',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'\u{1f35f}',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'\u{1f959}',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'\u{1f32d}',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'\u{1f355}',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'\u{1f96a}',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'\u{1f96b}',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'\u{1f35d}',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'\u{1f32e}',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'\u{1f32f}',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'\u{1f957}',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'\u{1f958}',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'\u{1f35c}',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'\u{1f372}',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'\u{1f365}',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'\u{1f960}',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'\u{1f363}',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'\u{1f371}',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'\u{1f35b}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'\u{1f359}',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'\u{1f35a}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'\u{1f358}',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'\u{1f362}',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'\u{1f361}',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'\u{1f367}',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'\u{1f368}',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'\u{1f366}',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'\u{1f967}',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'\u{1f370}',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'\u{1f9c1}',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'\u{1f96e}',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'\u{1f382}',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'\u{1f36e}',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'\u{1f36c}',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'\u{1f36d}',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'\u{1f36b}',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'\u{1f37f}',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'\u{1f95f}',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'\u{1f369}',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'\u{1f36a}',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'\u{1f95b}',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37a}',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37b}',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'\u{1f942}',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'\u{1f377}',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'\u{1f943}',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'\u{1f378}',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'\u{1f379}',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'\u{1f37e}',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'\u{1f376}',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'\u{1f375}',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'\u{1f964}',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'\u2615',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'\u{1f37c}',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'\u{1f9c2}',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'\u{1f944}',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'\u{1f374}',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'\u{1f37d}',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'\u{1f963}',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'\u{1f961}',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'\u{1f962}',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'\u26bd',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'\u{1f3c0}',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'\u{1f3c8}',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:'\u26be',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:'\u{1f94e}',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'\u{1f3be}',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:'\u{1f3d0}',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:'\u{1f3c9}',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'\u{1f94f}',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'\u{1f3b1}',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'\u26f3',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'\u{1f3cc}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:'\u{1f3cc}',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'\u{1f3d3}',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:'\u{1f3f8}',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:'\u{1f945}',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:'\u{1f3d2}',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:'\u{1f3d1}',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'\u{1f94d}',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:'\u{1f3cf}',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'\u{1f3bf}',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'\u26f7',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'\u{1f3c2}',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'\u{1f93a}',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:'\u26f8',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:'\u{1f94c}',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:'\u{1f6f9}',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'\u{1f6f7}',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'\u{1f3f9}',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'\u{1f3a3}',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'\u{1f94a}',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'\u{1f94b}',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'\u{1f6a3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'\u{1f6a3}',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'\u{1f9d7}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'\u{1f9d7}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'\u{1f3ca}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'\u{1f3ca}',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'\u{1f3c4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'\u{1f3c4}',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'\u{1f6c0}',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'\u26f9\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:'\u26f9',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'\u{1f3cb}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'\u{1f3cb}',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'\u{1f6b4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'\u{1f6b4}',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'\u{1f6b5}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'\u{1f6b5}',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'\u{1f3c7}',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'\u{1f574}',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'\u{1f3c6}',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'\u{1f3bd}',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:'\u{1f3c5}',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'\u{1f396}',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'\u{1f947}',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'\u{1f948}',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'\u{1f949}',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'\u{1f397}',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'\u{1f3f5}',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'\u{1f3ab}',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'\u{1f39f}',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'\u{1f3ad}',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'\u{1f3a8}',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'\u{1f3aa}',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'\u{1f3a4}',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'\u{1f3a7}',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'\u{1f3bc}',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'\u{1f3b9}',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'\u{1f941}',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'\u{1f3b7}',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:'\u{1f3ba}',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:'\u{1f3b8}',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'\u{1f3bb}',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:'\u{1f3ac}',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'\u{1f3ae}',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'\u{1f47e}',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'\u{1f3af}',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'\u{1f3b2}',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'\u{1f3b0}',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'\u{1f9e9}',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'\u{1f3b3}',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'\u{1f697}',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'\u{1f695}',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'\u{1f699}',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'\u{1f68c}',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'\u{1f68e}',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'\u{1f3ce}',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'\u{1f693}',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'\u{1f691}',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'\u{1f692}',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'\u{1f690}',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'\u{1f69a}',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'\u{1f69b}',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'\u{1f69c}',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'\u{1f6f4}',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'\u{1f3cd}',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'\u{1f6b2}',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'\u{1f6f5}',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'\u{1f6a8}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'\u{1f694}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'\u{1f68d}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'\u{1f698}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'\u{1f696}',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a1}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a0}',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'\u{1f69f}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'\u{1f683}',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'\u{1f68b}',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'\u{1f69d}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'\u{1f684}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'\u{1f685}',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'\u{1f688}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'\u{1f69e}',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'\u{1f682}',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'\u{1f686}',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'\u{1f687}',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'\u{1f68a}',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'\u{1f689}',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'\u{1f6f8}',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'\u{1f681}',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'\u{1f6e9}',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'\u2708\ufe0f',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'\u{1f6eb}',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'\u{1f6ec}',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'\u26f5',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'\u{1f6e5}',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'\u{1f6a4}',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'\u26f4',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'\u{1f6f3}',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'\u{1f680}',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'\u{1f6f0}',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'\u{1f4ba}',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'\u{1f6f6}',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'\u2693',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'\u{1f6a7}',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'\u26fd',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'\u{1f68f}',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'\u{1f6a6}',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'\u{1f6a5}',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'\u{1f3c1}',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'\u{1f6a2}',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'\u{1f3a1}',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'\u{1f3a2}',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'\u{1f3a0}',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'\u{1f3d7}',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'\u{1f301}',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'\u{1f5fc}',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'\u{1f3ed}',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'\u26f2',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'\u{1f391}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'\u26f0',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'\u{1f3d4}',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'\u{1f5fb}',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'\u{1f30b}',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'\u{1f5fe}',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'\u{1f3d5}',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'\u26fa',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'\u{1f3de}',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'\u{1f6e3}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'\u{1f6e4}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'\u{1f305}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'\u{1f304}',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'\u{1f3dc}',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'\u{1f3d6}',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'\u{1f3dd}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'\u{1f307}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'\u{1f306}',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'\u{1f3d9}',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'\u{1f303}',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'\u{1f309}',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'\u{1f30c}',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'\u{1f320}',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'\u{1f387}',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'\u{1f386}',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'\u{1f308}',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'\u{1f3d8}',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'\u{1f3f0}',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'\u{1f3ef}',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'\u{1f3df}',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'\u{1f5fd}',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:'\u{1f3e0}',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'\u{1f3e1}',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'\u{1f3da}',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'\u{1f3e2}',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'\u{1f3ec}',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'\u{1f3e3}',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'\u{1f3e4}',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'\u{1f3e5}',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'\u{1f3e6}',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'\u{1f3e8}',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'\u{1f3ea}',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'\u{1f3eb}',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'\u{1f3e9}',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'\u{1f492}',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'\u{1f3db}',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'\u26ea',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'\u{1f54c}',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'\u{1f54d}',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'\u{1f54b}',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'\u26e9',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'\u231a',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'\u{1f4f1}',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:'\u{1f4f2}',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'\u{1f4bb}',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'\u2328',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'\u{1f5a5}',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:'\u{1f5a8}',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:'\u{1f5b1}',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'\u{1f5b2}',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:'\u{1f579}',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:'\u{1f5dc}',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'\u{1f4bd}',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'\u{1f4be}',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'\u{1f4bf}',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'\u{1f4c0}',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'\u{1f4fc}',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:'\u{1f4f7}',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'\u{1f4f8}',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:'\u{1f4f9}',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:'\u{1f3a5}',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'\u{1f4fd}',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:'\u{1f39e}',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'\u{1f4de}',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'\u260e\ufe0f',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'\u{1f4df}',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:'\u{1f4e0}',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'\u{1f4fa}',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'\u{1f4fb}',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'\u{1f399}',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:'\u{1f39a}',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:'\u{1f39b}',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'\u{1f9ed}',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'\u23f1',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:'\u23f2',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'\u23f0',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'\u{1f570}',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'\u23f3',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'\u231b',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'\u{1f4e1}',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'\u{1f50b}',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:'\u{1f50c}',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'\u{1f4a1}',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'\u{1f526}',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:'\u{1f56f}',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'\u{1f9ef}',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'\u{1f5d1}',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:'\u{1f6e2}',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'\u{1f4b8}',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'\u{1f4b5}',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'\u{1f4b4}',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'\u{1f4b6}',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'\u{1f4b7}',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'\u{1f4b0}',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'\u{1f4b3}',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'\u{1f48e}',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'\u2696',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'\u{1f9f0}',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'\u{1f527}',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:'\u{1f528}',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'\u2692',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'\u{1f6e0}',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:'\u26cf',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'\u{1f529}',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:'\u2699',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:'\u{1f9f1}',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:'\u26d3',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'\u{1f9f2}',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'\u{1f52b}',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'\u{1f4a3}',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'\u{1f9e8}',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'\u{1f52a}',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:'\u{1f5e1}',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:'\u2694',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:'\u{1f6e1}',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'\u{1f6ac}',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'\u2620',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'\u26b0',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'\u26b1',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:'\u{1f3fa}',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'\u{1f52e}',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'\u{1f4ff}',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'\u{1f9ff}',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:'\u{1f488}',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'\u2697',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'\u{1f52d}',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'\u{1f52c}',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:'\u{1f573}',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'\u{1f48a}',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'\u{1f489}',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'\u{1f9ec}',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'\u{1f9a0}',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'\u{1f9eb}',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'\u{1f9ea}',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'\u{1f321}',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'\u{1f9f9}',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:'\u{1f9fa}',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:'\u{1f9fb}',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:'\u{1f3f7}',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'\u{1f516}',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'\u{1f6bd}',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'\u{1f6bf}',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'\u{1f6c1}',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'\u{1f9fc}',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'\u{1f9fd}',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'\u{1f9f4}',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:'\u{1f511}',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:'\u{1f5dd}',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'\u{1f6cb}',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'\u{1f6cc}',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:'\u{1f6cf}',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:'\u{1f6aa}',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:'\u{1f6ce}',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'\u{1f9f8}',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:'\u{1f5bc}',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:'\u{1f5fa}',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'\u26f1',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'\u{1f5ff}',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'\u{1f6cd}',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:'\u{1f6d2}',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'\u{1f388}',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'\u{1f38f}',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'\u{1f380}',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'\u{1f381}',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'\u{1f38a}',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'\u{1f389}',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'\u{1f38e}',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'\u{1f390}',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'\u{1f38c}',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'\u{1f3ee}',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:'\u{1f9e7}',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'\u2709\ufe0f',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'\u{1f4e9}',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'\u{1f4e8}',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'\u{1f4e7}',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'\u{1f48c}',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'\u{1f4ee}',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'\u{1f4ea}',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'\u{1f4eb}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'\u{1f4ec}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'\u{1f4ed}',fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'\u{1f4e6}',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'\u{1f4ef}',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'\u{1f4e5}',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'\u{1f4e4}',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'\u{1f4dc}',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'\u{1f4c3}',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'\u{1f4d1}',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'\u{1f9fe}',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'\u{1f4ca}',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'\u{1f4c8}',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'\u{1f4c9}',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'\u{1f4c4}',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:'\u{1f4c5}',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'\u{1f4c6}',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'\u{1f5d3}',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:'\u{1f4c7}',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'\u{1f5c3}',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:'\u{1f5f3}',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'\u{1f5c4}',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'\u{1f4cb}',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'\u{1f5d2}',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'\u{1f4c1}',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'\u{1f4c2}',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'\u{1f5c2}',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'\u{1f5de}',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:'\u{1f4f0}',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'\u{1f4d3}',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'\u{1f4d5}',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'\u{1f4d7}',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'\u{1f4d8}',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'\u{1f4d9}',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'\u{1f4d4}',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:'\u{1f4d2}',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:'\u{1f4da}',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'\u{1f4d6}',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:'\u{1f9f7}',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:'\u{1f517}',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'\u{1f4ce}',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'\u{1f587}',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:'\u2702\ufe0f',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'\u{1f4d0}',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'\u{1f4cf}',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:'\u{1f9ee}',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'\u{1f4cc}',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'\u{1f4cd}',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'\u{1f6a9}',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'\u{1f3f3}',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:'\u{1f3f4}',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'\u{1f3f3}\ufe0f\u200d\u{1f308}',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'\u{1f510}',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:'\u{1f512}',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:'\u{1f513}',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'\u{1f50f}',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'\u{1f58a}',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'\u{1f58b}',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'\u2712\ufe0f',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'\u{1f4dd}',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'\u270f\ufe0f',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'\u{1f58d}',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'\u{1f58c}',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'\u{1f50d}',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'\u{1f50e}',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:'\u2764\ufe0f',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f9e1}',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49b}',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49a}',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f499}',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49c}',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:'\u{1f5a4}',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'\u{1f494}',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'\u2763',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'\u{1f495}',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'\u{1f49e}',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'\u{1f493}',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'\u{1f497}',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f496}',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'\u{1f498}',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'\u{1f49d}',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'\u{1f49f}',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'\u262e',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:'\u271d',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'\u262a',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u{1f549}',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u2638',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:'\u2721',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'\u{1f52f}',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'\u{1f54e}',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:'\u262f',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'\u2626',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'\u{1f6d0}',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'\u26ce',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2648',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2649',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264a',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264b',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264c',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264d',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264e',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'\u264f',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2650',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2651',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2652',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2653',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:'\u{1f194}',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'\u269b',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'\u{1f233}',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'\u{1f239}',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'\u2622',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:'\u2623',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'\u{1f4f4}',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'\u{1f4f3}',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'\u{1f236}',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'\u{1f21a}',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'\u{1f238}',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'\u{1f23a}',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'\u{1f237}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'\u2734\ufe0f',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:'\u{1f19a}',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'\u{1f251}',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'\u{1f4ae}',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'\u{1f250}',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'\u3299\ufe0f',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'\u3297\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'\u{1f234}',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'\u{1f235}',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'\u{1f232}',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'\u{1f170}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'\u{1f171}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'\u{1f18e}',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'\u{1f191}',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'\u{1f17e}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'\u{1f198}',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'\u26d4',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'\u{1f4db}',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'\u{1f6ab}',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'\u274c',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:'\u2b55',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:'\u{1f6d1}',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:'\u{1f4a2}',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'\u2668\ufe0f',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'\u{1f6b7}',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'\u{1f6af}',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'\u{1f6b3}',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'\u{1f6b1}',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'\u{1f51e}',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'\u{1f4f5}',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'\u2757',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'\u2755',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:'\u2753',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'\u2754',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'\u203c\ufe0f',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'\u2049\ufe0f',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'\u{1f505}',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'\u{1f506}',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:'\u{1f531}',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'\u269c',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'\u303d\ufe0f',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'\u26a0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'\u{1f6b8}',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:'\u{1f530}',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'\u267b\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'\u{1f22f}',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'\u{1f4b9}',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'\u2747\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'\u2733\ufe0f',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'\u274e',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'\u2705',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'\u{1f4a0}',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'\u{1f300}',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:'\u27bf',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'\u{1f310}',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'\u24c2\ufe0f',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'\u{1f3e7}',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'\u{1f202}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'\u{1f6c2}',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'\u{1f6c3}',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'\u{1f6c4}',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'\u{1f6c5}',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'\u267f',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'\u{1f6ad}',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'\u{1f6be}',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'\u{1f17f}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'\u{1f6b0}',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'\u{1f6b9}',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'\u{1f6ba}',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'\u{1f6bc}',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'\u{1f6bb}',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'\u{1f6ae}',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'\u{1f3a6}',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'\u{1f4f6}',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'\u{1f201}',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'\u{1f196}',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'\u{1f197}',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'\u{1f199}',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:'\u{1f192}',fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'\u{1f195}',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:'\u{1f193}',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'\u{1f51f}',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*\u20e3',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:'\u23cf\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'\u25b6\ufe0f',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'\u23f8',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'\u23ed',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:'\u23f9',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:'\u23fa',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'\u23ef',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:'\u23ee',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'\u23e9',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'\u23ea',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'\u{1f500}',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:'\u{1f501}',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'\u{1f502}',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'\u25c0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'\u{1f53c}',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'\u{1f53d}',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'\u23eb',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'\u23ec',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'\u27a1\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'\u2b05\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'\u2b06\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'\u2b07\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'\u2197\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'\u2198\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'\u2199\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'\u2196\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'\u2195\ufe0f',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'\u2194\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'\u{1f504}',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'\u21aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'\u21a9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'\u2934\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'\u2935\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'\u2139\ufe0f',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'\u{1f524}',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'\u{1f521}',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'\u{1f520}',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'\u{1f523}',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'\u{1f3b5}',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:'\u{1f3b6}',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'\u3030\ufe0f',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'\u27b0',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'\u2714\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'\u{1f503}',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'\u2795',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'\u2796',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'\u2797',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'\u2716\ufe0f',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:'\u267e',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'\u{1f4b2}',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'\u{1f4b1}',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'\xa9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'\xae\ufe0f',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'\u2122\ufe0f',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:'\u{1f51a}',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:'\u{1f519}',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:'\u{1f51b}',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:'\u{1f51d}',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:'\u{1f51c}',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'\u2611\ufe0f',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'\u{1f518}',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:'\u26aa',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'\u26ab',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'\u{1f534}',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'\u{1f535}',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f538}',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f539}',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f536}',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f537}',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'\u{1f53a}',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'\u25aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'\u25ab\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'\u2b1b',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'\u2b1c',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'\u{1f53b}',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'\u25fc\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'\u25fb\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'\u25fe',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'\u25fd',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'\u{1f532}',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'\u{1f533}',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'\u{1f508}',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'\u{1f509}',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'\u{1f50a}',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'\u{1f507}',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'\u{1f4e3}',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'\u{1f4e2}',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'\u{1f514}',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'\u{1f515}',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'\u{1f0cf}',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'\u{1f004}',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'\u2660\ufe0f',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'\u2663\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'\u2665\ufe0f',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'\u2666\ufe0f',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'\u{1f3b4}',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'\u{1f4ad}',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'\u{1f5ef}',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'\u{1f4ac}',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'\u{1f5e8}',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'\u{1f550}',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'\u{1f551}',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'\u{1f552}',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'\u{1f553}',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'\u{1f554}',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'\u{1f555}',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'\u{1f556}',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'\u{1f557}',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'\u{1f558}',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'\u{1f559}',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'\u{1f55a}',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'\u{1f55b}',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'\u{1f55c}',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'\u{1f55d}',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'\u{1f55e}',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'\u{1f55f}',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'\u{1f560}',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'\u{1f561}',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'\u{1f562}',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'\u{1f563}',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'\u{1f564}',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'\u{1f565}',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'\u{1f566}',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'\u{1f567}',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'\u{1f1e8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'\u{1f1ea}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'\u{1f1eb}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'\u{1f1e9}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'\u{1f1ef}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'\u{1f1fd}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'\u{1f1f4}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'\u{1f1f6}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'\u{1f1ec}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'\u{1f1fa}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'\u{1f3f4}\u200d\u2620\ufe0f',fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.js b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.js new file mode 100644 index 000000000..88455e9a4 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.js @@ -0,0 +1 @@ +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"😀",fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"😬",fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"😁",fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"😂",fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"🤣",fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"🥳",fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"😃",fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"😄",fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"😅",fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"😆",fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"😇",fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"😉",fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"😊",fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"🙂",fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"🙃",fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"☺️",fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"😋",fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"😌",fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"😍",fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"🥰",fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😘",fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"😗",fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"😙",fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😚",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"😜",fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"🤪",fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"🤨",fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"🧐",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"😝",fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"😛",fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"🤑",fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"🤓",fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"😎",fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"🤩",fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:"🤡",fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"🤠",fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:"🤗",fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"😏",fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"😶",fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"😐",fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"😑",fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"😒",fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"🙄",fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"🤔",fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"🤥",fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"🤭",fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"🤫",fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"🤬",fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"🤯",fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"😳",fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"😞",fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"😟",fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"😠",fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"😡",fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"😔",fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"😕",fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"🙁",fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"☹",fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"😣",fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"😖",fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"😫",fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"😩",fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"🥺",fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"😤",fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"😮",fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"😱",fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"😨",fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"😰",fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:"😯",fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:"😦",fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"😧",fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"😢",fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"😥",fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:"🤤",fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"😪",fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"😓",fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"🥵",fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"🥶",fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"😭",fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"😵",fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"😲",fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"🤐",fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"🤢",fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"🤧",fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:"🤮",fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"😷",fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"🤒",fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"🤕",fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"🥴",fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"😴",fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"💤",fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"💩",fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"😈",fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:"👿",fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"👹",fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"👺",fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"💀",fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"👻",fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"👽",fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:"🤖",fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"😺",fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"😸",fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"😹",fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"😻",fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"😼",fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"😽",fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"🙀",fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"😿",fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"😾",fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"🤲",fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"🙌",fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"👏",fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"👋",fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"🤙",fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"👍",fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"👎",fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"👊",fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"✊",fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"🤛",fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"🤜",fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"✌",fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"👌",fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"✋",fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"🤚",fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"👐",fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"💪",fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"🙏",fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:"🦶",fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:"🦵",fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:"🤝",fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"☝",fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"👆",fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"👇",fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"👈",fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"👉",fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"🖕",fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"🖐",fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"🤟",fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"🤘",fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"🤞",fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"🖖",fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"✍",fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:"🤳",fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"💅",fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:"👄",fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:"🦷",fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:"👅",fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"👂",fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:"👃",fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"👁",fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"👀",fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:"🧠",fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"👤",fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"👥",fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"🗣",fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"👶",fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:"🧒",fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"👦",fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:"👧",fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:"🧑",fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"👨",fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:"👩",fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"👱‍♀️",fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"👱",fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"🧔",fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"🧓",fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"👴",fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"👵",fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"👲",fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"🧕",fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"👳‍♀️",fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"👳",fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"👮‍♀️",fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"👮",fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"👷‍♀️",fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"👷",fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"💂‍♀️",fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"💂",fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"🕵️‍♀️",fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"🕵",fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"👩‍⚕️",fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"👨‍⚕️",fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"👩‍🌾",fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"👨‍🌾",fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"👩‍🍳",fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:"👨‍🍳",fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"👩‍🎓",fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:"👨‍🎓",fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"👩‍🎤",fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"👨‍🎤",fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"👩‍🏫",fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"👨‍🏫",fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"👩‍🏭",fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"👨‍🏭",fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"👩‍💻",fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"👨‍💻",fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"👩‍💼",fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"👨‍💼",fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"👩‍🔧",fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"👨‍🔧",fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"👩‍🔬",fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"👨‍🔬",fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"👩‍🎨",fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:"👨‍🎨",fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"👩‍🚒",fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"👨‍🚒",fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"👩‍✈️",fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"👨‍✈️",fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"👩‍🚀",fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"👨‍🚀",fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"👩‍⚖️",fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"👨‍⚖️",fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"🦸‍♀️",fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"🦸‍♂️",fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"🦹‍♀️",fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"🦹‍♂️",fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"🤶",fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"🎅",fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"🧙‍♀️",fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"🧙‍♂️",fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:"🧝‍♀️",fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:"🧝‍♂️",fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:"🧛‍♀️",fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"🧛‍♂️",fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"🧟‍♀️",fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"🧟‍♂️",fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:"🧞‍♀️",fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:"🧞‍♂️",fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"🧜‍♀️",fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:"🧜‍♂️",fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:"🧚‍♀️",fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:"🧚‍♂️",fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"👼",fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:"🤰",fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"🤱",fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"👸",fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"🤴",fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"👰",fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"🤵",fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"🏃‍♀️",fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"🏃",fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"🚶‍♀️",fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"🚶",fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"💃",fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"🕺",fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"👯",fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"👯‍♂️",fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"👫",fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"👬",fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"👭",fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"🙇‍♀️",fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"🙇",fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"🤦‍♂️",fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"🤦‍♀️",fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"🤷",fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"🤷‍♂️",fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"💁",fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"💁‍♂️",fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"🙅",fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"🙅‍♂️",fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"🙆",fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"🙆‍♂️",fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"🙋",fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"🙋‍♂️",fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"🙎",fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"🙎‍♂️",fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"🙍",fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"🙍‍♂️",fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"💇",fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"💇‍♂️",fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"💆",fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"💆‍♂️",fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"🧖‍♀️",fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"🧖‍♂️",fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"💑",fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👩‍❤️‍👩",fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👨‍❤️‍👨",fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"💏",fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👩‍❤️‍💋‍👩",fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👨‍❤️‍💋‍👨",fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"👪",fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"👨‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"🧶",fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"🧵",fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:"🧥",fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"🥼",fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"👚",fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"👕",fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:"👖",fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"👔",fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"👗",fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"👙",fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"👘",fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"💄",fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"💋",fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"👣",fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"🥿",fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"👠",fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"👡",fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:"👢",fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"👞",fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"👟",fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"🥾",fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:"🧦",fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"🧤",fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"🧣",fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"👒",fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"🎩",fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"🧢",fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"⛑",fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"🎓",fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"👑",fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"🎒",fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:"🧳",fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"👝",fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"👛",fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"👜",fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"💼",fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"👓",fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"🕶",fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"🥽",fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"💍",fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"🌂",fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"🐶",fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"🐱",fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"🐭",fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"🐹",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"🐰",fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"🦊",fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"🐻",fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"🐼",fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"🐨",fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"🐯",fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"🦁",fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐮",fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"🐷",fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"🐽",fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"🐸",fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"🦑",fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"🐙",fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"🦐",fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"🐵",fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"🦍",fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"🙈",fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"🙉",fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"🙊",fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"🐒",fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"🐔",fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"🐧",fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"🐦",fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"🐤",fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"🐣",fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"🐥",fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"🦆",fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"🦅",fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"🦉",fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"🦇",fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"🐺",fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"🐗",fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"🐴",fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"🦄",fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"🐝",fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"🐛",fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"🦋",fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"🐌",fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"🐞",fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"🐜",fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"🦗",fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"🕷",fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"🦂",fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"🦀",fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"🐍",fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"🦎",fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"🦖",fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"🦕",fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"🐢",fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"🐠",fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"🐟",fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"🐡",fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"🐬",fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"🦈",fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"🐳",fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"🐋",fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"🐊",fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"🐆",fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"🦓",fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"🐅",fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"🐃",fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"🐂",fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐄",fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"🦌",fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"🐪",fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"🐫",fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"🦒",fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"🐘",fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"🦏",fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"🐐",fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"🐏",fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"🐑",fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"🐎",fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"🐖",fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"🐀",fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"🐁",fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"🐓",fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"🦃",fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"🕊",fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"🐕",fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"🐩",fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"🐈",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"🐇",fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"🐿",fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"🦔",fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"🦝",fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"🦙",fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"🦛",fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"🦘",fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"🦡",fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"🦢",fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"🦚",fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"🦜",fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"🦞",fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"🦟",fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"🐾",fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"🐉",fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"🐲",fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"🌵",fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"🎄",fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"🌲",fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"🌳",fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"🌴",fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"🌱",fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"🌿",fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"☘",fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"🍀",fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"🎍",fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"🎋",fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"🍃",fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"🍂",fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"🍁",fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"🌾",fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"🌺",fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"🌻",fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"🌹",fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"🥀",fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"🌷",fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"🌼",fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"🌸",fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"💐",fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"🍄",fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"🌰",fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"🎃",fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"🐚",fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"🕸",fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"🌎",fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"🌍",fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"🌏",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"🌕",fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"🌖",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌗",fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌘",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌑",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌒",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌓",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"🌔",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌚",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌝",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌛",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌜",fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"🌞",fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"🌙",fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"⭐",fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"🌟",fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"💫",fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"✨",fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:"☄",fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"☀️",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"🌤",fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"⛅",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"🌥",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"🌦",fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"☁️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"🌧",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"⛈",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"🌩",fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"⚡",fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"🔥",fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"💥",fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"❄️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"🌨",fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"⛄",fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"☃",fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"🌬",fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"💨",fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"🌪",fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:"🌫",fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"☂",fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"☔",fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"💧",fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"💦",fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"🌊",fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"🍏",fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"🍎",fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"🍐",fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"🍊",fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"🍋",fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"🍌",fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"🍉",fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"🍇",fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"🍓",fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"🍈",fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"🍒",fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"🍑",fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"🍍",fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"🥥",fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"🥝",fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"🥭",fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"🥑",fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"🥦",fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"🍅",fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"🍆",fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"🥒",fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"🥕",fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"🌶",fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"🥔",fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"🌽",fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"🥬",fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"🍠",fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"🥜",fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"🍯",fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"🥐",fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"🍞",fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"🥖",fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"🥯",fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"🥨",fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"🧀",fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"🥚",fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"🥓",fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"🥩",fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"🥞",fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"🍗",fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"🍖",fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"🦴",fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"🍤",fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"🍳",fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"🍔",fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"🍟",fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"🥙",fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"🌭",fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"🍕",fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"🥪",fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"🥫",fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"🍝",fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"🌮",fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"🌯",fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"🥗",fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"🥘",fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"🍜",fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"🍲",fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"🍥",fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"🥠",fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"🍣",fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"🍱",fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"🍛",fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"🍙",fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"🍚",fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"🍘",fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"🍢",fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"🍡",fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"🍧",fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"🍨",fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"🍦",fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"🥧",fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"🍰",fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"🧁",fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"🥮",fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"🎂",fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"🍮",fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"🍬",fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"🍭",fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"🍫",fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"🍿",fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"🥟",fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"🍩",fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"🍪",fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"🥛",fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍺",fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍻",fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"🥂",fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"🍷",fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"🥃",fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"🍸",fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"🍹",fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"🍾",fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"🍶",fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"🍵",fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"🥤",fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"☕",fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"🍼",fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"🧂",fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"🥄",fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"🍴",fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"🍽",fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"🥣",fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"🥡",fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"🥢",fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"⚽",fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"🏀",fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"🏈",fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:"⚾",fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:"🥎",fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"🎾",fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:"🏐",fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:"🏉",fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"🥏",fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"🎱",fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"⛳",fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"🏌️‍♀️",fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:"🏌",fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"🏓",fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:"🏸",fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:"🥅",fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:"🏒",fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:"🏑",fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"🥍",fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:"🏏",fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"🎿",fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"⛷",fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"🏂",fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"🤺",fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♀️",fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♂️",fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♀️",fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♂️",fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"🤾‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:"🤾‍♂️",fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:"⛸",fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:"🥌",fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:"🛹",fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"🛷",fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"🏹",fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"🎣",fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"🥊",fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"🥋",fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"🚣‍♀️",fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"🚣",fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"🧗‍♀️",fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"🧗‍♂️",fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"🏊‍♀️",fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"🏊",fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♂️",fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♀️",fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♂️",fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"🏄‍♀️",fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"🏄",fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"🛀",fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"⛹️‍♀️",fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:"⛹",fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"🏋️‍♀️",fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"🏋",fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"🚴‍♀️",fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"🚴",fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"🚵‍♀️",fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"🚵",fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"🏇",fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"🕴",fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"🏆",fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"🎽",fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:"🏅",fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"🎖",fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"🥇",fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"🥈",fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"🥉",fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"🎗",fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"🏵",fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"🎫",fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"🎟",fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"🎭",fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"🎨",fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"🎪",fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♀️",fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♂️",fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"🎤",fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"🎧",fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"🎼",fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"🎹",fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"🥁",fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"🎷",fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:"🎺",fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:"🎸",fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"🎻",fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:"🎬",fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"🎮",fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"👾",fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"🎯",fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"🎲",fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"🎰",fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"🧩",fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"🎳",fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"🚗",fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"🚕",fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"🚙",fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"🚌",fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"🚎",fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"🏎",fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"🚓",fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"🚑",fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"🚒",fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"🚐",fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"🚚",fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"🚛",fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"🚜",fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"🛴",fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"🏍",fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"🚲",fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"🛵",fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"🚨",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"🚔",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"🚍",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"🚘",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"🚖",fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"🚡",fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"🚠",fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"🚟",fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"🚃",fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"🚋",fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"🚝",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"🚄",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"🚅",fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"🚈",fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"🚞",fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"🚂",fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"🚆",fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"🚇",fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"🚊",fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"🚉",fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"🛸",fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"🚁",fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"🛩",fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"✈️",fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"🛫",fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"🛬",fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"⛵",fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"🛥",fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"🚤",fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"⛴",fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"🛳",fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"🚀",fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"🛰",fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"💺",fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"🛶",fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"⚓",fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"🚧",fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"⛽",fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"🚏",fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"🚦",fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"🚥",fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"🏁",fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"🚢",fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"🎡",fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"🎢",fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"🎠",fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"🏗",fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"🌁",fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"🗼",fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"🏭",fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"⛲",fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"🎑",fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"⛰",fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"🏔",fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"🗻",fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"🌋",fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"🗾",fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"🏕",fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"⛺",fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"🏞",fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"🛣",fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"🛤",fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"🌅",fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"🌄",fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"🏜",fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"🏖",fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"🏝",fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"🌇",fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"🌆",fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"🏙",fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"🌃",fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"🌉",fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"🌌",fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"🌠",fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"🎇",fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"🎆",fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"🌈",fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"🏘",fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"🏰",fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"🏯",fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"🏟",fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"🗽",fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:"🏠",fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"🏡",fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"🏚",fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"🏢",fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"🏬",fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"🏣",fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"🏤",fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"🏥",fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"🏦",fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"🏨",fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"🏪",fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"🏫",fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"🏩",fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"💒",fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"🏛",fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"⛪",fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"🕌",fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"🕍",fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"🕋",fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"⛩",fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"⌚",fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"📱",fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:"📲",fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"💻",fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"⌨",fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"🖥",fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:"🖨",fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:"🖱",fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"🖲",fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:"🕹",fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:"🗜",fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"💽",fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"💾",fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"💿",fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"📀",fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"📼",fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:"📷",fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"📸",fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:"📹",fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:"🎥",fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"📽",fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:"🎞",fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"📞",fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"☎️",fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"📟",fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:"📠",fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"📺",fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"📻",fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"🎙",fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:"🎚",fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:"🎛",fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"🧭",fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"⏱",fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:"⏲",fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"⏰",fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"🕰",fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"⏳",fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"⌛",fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"📡",fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"🔋",fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:"🔌",fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"💡",fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"🔦",fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:"🕯",fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"🧯",fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"🗑",fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:"🛢",fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"💸",fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"💵",fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"💴",fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"💶",fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"💷",fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"💰",fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"💳",fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"💎",fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"⚖",fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"🧰",fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"🔧",fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:"🔨",fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"⚒",fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"🛠",fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:"⛏",fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"🔩",fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:"⚙",fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:"🧱",fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:"⛓",fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"🧲",fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"🔫",fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"💣",fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"🧨",fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"🔪",fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:"🗡",fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:"⚔",fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:"🛡",fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"🚬",fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"☠",fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"⚰",fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"⚱",fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:"🏺",fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"🔮",fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"📿",fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"🧿",fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:"💈",fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"⚗",fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"🔭",fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"🔬",fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:"🕳",fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"💊",fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"💉",fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"🧬",fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"🦠",fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"🧫",fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"🧪",fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"🌡",fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"🧹",fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:"🧺",fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:"🧻",fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:"🏷",fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"🔖",fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"🚽",fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"🚿",fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"🛁",fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"🧼",fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"🧽",fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"🧴",fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:"🔑",fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:"🗝",fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"🛋",fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"🛌",fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:"🛏",fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:"🚪",fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:"🛎",fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"🧸",fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:"🖼",fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:"🗺",fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"⛱",fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"🗿",fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"🛍",fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:"🛒",fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"🎈",fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"🎏",fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"🎀",fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"🎁",fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"🎊",fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"🎉",fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"🎎",fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"🎐",fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"🎌",fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"🏮",fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:"🧧",fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"✉️",fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"📩",fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"📨",fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"📧",fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"💌",fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"📮",fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"📪",fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"📫",fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"📬",fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"📭",fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"📦",fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"📯",fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"📥",fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"📤",fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"📜",fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"📃",fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"📑",fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"🧾",fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"📊",fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"📈",fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"📉",fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"📄",fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:"📅",fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"📆",fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"🗓",fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:"📇",fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"🗃",fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:"🗳",fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"🗄",fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"📋",fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"🗒",fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"📁",fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"📂",fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"🗂",fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"🗞",fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:"📰",fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"📓",fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"📕",fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"📗",fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"📘",fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"📙",fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"📔",fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:"📒",fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:"📚",fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"📖",fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:"🧷",fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:"🔗",fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"📎",fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"🖇",fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:"✂️",fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"📐",fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"📏",fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:"🧮",fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"📌",fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"📍",fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"🚩",fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"🏳",fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:"🏴",fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"🏳️‍🌈",fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"🔐",fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:"🔒",fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:"🔓",fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"🔏",fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"🖊",fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"🖋",fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"✒️",fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"📝",fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"✏️",fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"🖍",fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"🖌",fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"🔍",fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"🔎",fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:"❤️",fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"🧡",fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"💛",fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"💚",fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"💙",fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"💜",fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:"🖤",fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"💔",fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"❣",fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"💕",fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"💞",fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"💓",fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"💗",fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"💖",fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"💘",fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"💝",fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"💟",fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"☮",fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:"✝",fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"☪",fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"🕉",fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"☸",fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:"✡",fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"🔯",fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"🕎",fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:"☯",fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"☦",fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"🛐",fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"⛎",fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"♈",fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"♉",fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"♊",fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"♋",fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"♌",fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"♍",fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"♎",fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"♏",fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"♐",fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"♑",fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"♒",fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"♓",fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:"🆔",fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"⚛",fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"🈳",fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"🈹",fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"☢",fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:"☣",fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"📴",fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"📳",fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"🈶",fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"🈚",fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"🈸",fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"🈺",fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"🈷️",fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"✴️",fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:"🆚",fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"🉑",fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"💮",fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"🉐",fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"㊙️",fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"㊗️",fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"🈴",fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"🈵",fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"🈲",fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"🅰️",fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"🅱️",fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"🆎",fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"🆑",fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"🅾️",fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"🆘",fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"⛔",fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"📛",fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"🚫",fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"❌",fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:"⭕",fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:"🛑",fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:"💢",fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"♨️",fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"🚷",fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"🚯",fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"🚳",fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"🚱",fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"🔞",fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"📵",fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"❗",fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"❕",fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:"❓",fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"❔",fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"‼️",fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"⁉️",fitzpatrick_scale:false,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"💯",fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"🔅",fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"🔆",fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:"🔱",fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"⚜",fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"〽️",fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"⚠️",fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"🚸",fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:"🔰",fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"♻️",fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"🈯",fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"💹",fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"❇️",fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"✳️",fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"❎",fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"✅",fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"💠",fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"🌀",fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:"➿",fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"🌐",fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"Ⓜ️",fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"🏧",fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"🈂️",fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"🛂",fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"🛃",fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"🛄",fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"🛅",fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"♿",fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"🚭",fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"🚾",fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"🅿️",fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"🚰",fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"🚹",fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"🚺",fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"🚼",fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"🚻",fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"🚮",fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"🎦",fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"📶",fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"🈁",fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"🆖",fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"🆗",fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"🆙",fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:"🆒",fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"🆕",fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:"🆓",fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0️⃣",fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1️⃣",fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2️⃣",fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3️⃣",fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4️⃣",fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5️⃣",fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6️⃣",fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7️⃣",fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8️⃣",fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9️⃣",fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"🔟",fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*⃣",fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"🔢",fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:"⏏️",fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"▶️",fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"⏸",fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"⏭",fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:"⏹",fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:"⏺",fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"⏯",fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:"⏮",fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"⏩",fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"⏪",fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"🔀",fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:"🔁",fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"🔂",fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"◀️",fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"🔼",fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"🔽",fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"⏫",fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"⏬",fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"➡️",fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"⬅️",fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"⬆️",fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"⬇️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"↗️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"↘️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"↙️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"↖️",fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"↕️",fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"↔️",fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"🔄",fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"↪️",fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"↩️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"⤴️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"⤵️",fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#️⃣",fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"ℹ️",fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"🔤",fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"🔡",fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"🔠",fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"🔣",fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"🎵",fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:"🎶",fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"〰️",fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"➰",fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"✔️",fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"🔃",fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"➕",fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"➖",fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"➗",fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"✖️",fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:"♾",fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"💲",fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"💱",fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"©️",fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"®️",fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"™️",fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:"🔚",fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:"🔙",fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:"🔛",fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:"🔝",fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:"🔜",fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"☑️",fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"🔘",fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:"⚪",fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"⚫",fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"🔴",fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"🔵",fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔸",fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔹",fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔶",fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔷",fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"🔺",fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"▪️",fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"▫️",fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"⬛",fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"⬜",fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"🔻",fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"◼️",fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"◻️",fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"◾",fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"◽",fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"🔲",fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"🔳",fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"🔈",fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"🔉",fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"🔊",fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"🔇",fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"📣",fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"📢",fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"🔔",fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"🔕",fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"🃏",fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"🀄",fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"♠️",fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"♣️",fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"♥️",fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"♦️",fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"🎴",fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"💭",fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"🗯",fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"💬",fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"🗨",fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"🕐",fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"🕑",fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"🕒",fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"🕓",fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"🕔",fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"🕕",fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"🕖",fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"🕗",fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"🕘",fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"🕙",fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"🕚",fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"🕛",fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"🕜",fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"🕝",fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"🕞",fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"🕟",fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"🕠",fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"🕡",fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"🕢",fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"🕣",fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"🕤",fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"🕥",fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"🕦",fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"🕧",fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"🇦🇫",fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:"🇦🇽",fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"🇦🇱",fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"🇩🇿",fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"🇦🇸",fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"🇦🇩",fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"🇦🇴",fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"🇦🇮",fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"🇦🇶",fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"🇦🇬",fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"🇦🇷",fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"🇦🇲",fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"🇦🇼",fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"🇦🇺",fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"🇦🇹",fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"🇦🇿",fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"🇧🇸",fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"🇧🇭",fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"🇧🇩",fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"🇧🇧",fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"🇧🇾",fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"🇧🇪",fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"🇧🇿",fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"🇧🇯",fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"🇧🇲",fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"🇧🇹",fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"🇧🇴",fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"🇧🇶",fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"🇧🇦",fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"🇧🇼",fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"🇧🇷",fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"🇮🇴",fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"🇻🇬",fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"🇧🇳",fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"🇧🇬",fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"🇧🇫",fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"🇧🇮",fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"🇨🇻",fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"🇰🇭",fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"🇨🇲",fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"🇨🇦",fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"🇮🇨",fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"🇰🇾",fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"🇨🇫",fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"🇹🇩",fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"🇨🇱",fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"🇨🇳",fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"🇨🇽",fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"🇨🇨",fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"🇨🇴",fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"🇰🇲",fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"🇨🇬",fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"🇨🇩",fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"🇨🇰",fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"🇨🇷",fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"🇭🇷",fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"🇨🇺",fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:"🇨🇼",fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"🇨🇾",fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"🇨🇿",fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"🇩🇰",fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"🇩🇯",fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"🇩🇲",fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"🇩🇴",fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"🇪🇨",fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"🇪🇬",fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"🇸🇻",fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"🇬🇶",fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"🇪🇷",fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"🇪🇪",fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"🇪🇹",fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"🇪🇺",fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"🇫🇰",fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"🇫🇴",fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"🇫🇯",fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"🇫🇮",fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"🇫🇷",fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"🇬🇫",fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"🇵🇫",fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"🇹🇫",fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"🇬🇦",fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"🇬🇲",fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"🇬🇪",fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"🇩🇪",fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"🇬🇭",fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"🇬🇮",fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"🇬🇷",fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"🇬🇱",fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"🇬🇩",fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"🇬🇵",fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"🇬🇺",fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"🇬🇹",fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"🇬🇬",fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"🇬🇳",fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"🇬🇼",fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"🇬🇾",fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"🇭🇹",fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"🇭🇳",fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"🇭🇰",fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"🇭🇺",fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"🇮🇸",fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"🇮🇳",fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"🇮🇩",fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"🇮🇷",fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"🇮🇶",fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"🇮🇪",fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"🇮🇲",fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"🇮🇱",fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"🇮🇹",fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"🇨🇮",fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"🇯🇲",fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"🇯🇵",fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"🇯🇪",fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"🇯🇴",fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"🇰🇿",fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"🇰🇪",fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"🇰🇮",fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"🇽🇰",fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"🇰🇼",fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"🇰🇬",fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"🇱🇦",fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"🇱🇻",fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"🇱🇧",fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"🇱🇸",fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"🇱🇷",fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"🇱🇾",fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"🇱🇮",fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"🇱🇹",fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"🇱🇺",fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"🇲🇴",fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"🇲🇰",fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"🇲🇬",fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"🇲🇼",fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"🇲🇾",fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"🇲🇻",fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"🇲🇱",fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"🇲🇹",fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"🇲🇭",fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"🇲🇶",fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"🇲🇷",fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"🇲🇺",fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"🇾🇹",fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"🇲🇽",fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"🇫🇲",fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"🇲🇩",fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"🇲🇨",fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"🇲🇳",fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"🇲🇪",fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"🇲🇸",fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"🇲🇦",fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"🇲🇿",fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"🇲🇲",fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"🇳🇦",fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"🇳🇷",fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"🇳🇵",fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"🇳🇱",fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"🇳🇨",fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"🇳🇿",fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"🇳🇮",fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"🇳🇪",fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"🇳🇬",fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"🇳🇺",fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"🇳🇫",fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"🇲🇵",fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"🇰🇵",fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"🇳🇴",fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"🇴🇲",fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"🇵🇰",fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"🇵🇼",fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"🇵🇸",fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"🇵🇦",fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"🇵🇬",fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"🇵🇾",fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"🇵🇪",fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"🇵🇭",fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"🇵🇳",fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"🇵🇱",fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"🇵🇹",fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"🇵🇷",fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"🇶🇦",fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:"🇷🇪",fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"🇷🇴",fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"🇷🇺",fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"🇷🇼",fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:"🇧🇱",fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"🇸🇭",fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"🇰🇳",fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"🇱🇨",fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"🇵🇲",fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"🇻🇨",fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"🇼🇸",fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"🇸🇲",fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"🇸🇹",fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"🇸🇦",fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"🇸🇳",fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"🇷🇸",fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"🇸🇨",fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"🇸🇱",fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"🇸🇬",fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"🇸🇽",fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"🇸🇰",fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"🇸🇮",fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"🇸🇧",fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"🇸🇴",fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"🇿🇦",fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"🇬🇸",fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"🇰🇷",fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"🇸🇸",fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"🇪🇸",fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"🇱🇰",fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"🇸🇩",fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"🇸🇷",fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"🇸🇿",fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"🇸🇪",fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"🇨🇭",fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"🇸🇾",fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"🇹🇼",fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"🇹🇯",fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"🇹🇿",fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"🇹🇭",fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"🇹🇱",fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"🇹🇬",fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"🇹🇰",fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"🇹🇴",fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"🇹🇹",fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"🇹🇳",fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"🇹🇷",fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"🇹🇲",fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"🇹🇨",fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"🇹🇻",fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"🇺🇬",fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"🇺🇦",fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"🇦🇪",fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"🇬🇧",fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:"🏴󠁧󠁢󠁥󠁮󠁧󠁿",fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:"🏴󠁧󠁢󠁳󠁣󠁴󠁿",fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:"🏴󠁧󠁢󠁷󠁬󠁳󠁿",fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"🇺🇸",fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"🇻🇮",fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"🇺🇾",fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"🇺🇿",fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"🇻🇺",fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"🇻🇦",fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"🇻🇪",fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"🇻🇳",fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"🇼🇫",fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"🇪🇭",fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"🇾🇪",fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"🇿🇲",fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"🇿🇼",fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"🇺🇳",fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"🏴‍☠️",fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.min.js b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.min.js new file mode 100644 index 000000000..5a1c49160 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/emoticons/js/emojis.min.js @@ -0,0 +1,2 @@ +// Source: npm package: emojilib, file:emojis.json +window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"\u{1f600}",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"\u{1f62c}",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"\u{1f601}",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"\u{1f602}",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"\u{1f923}",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"\u{1f973}",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"\u{1f603}",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"\u{1f604}",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"\u{1f605}",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"\u{1f606}",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"\u{1f607}",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"\u{1f609}",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"\u{1f60a}",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"\u{1f642}",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"\u{1f643}",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"\u{1f60b}",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"\u{1f60c}",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"\u{1f60d}",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"\u{1f970}",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f618}",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"\u{1f617}",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"\u{1f619}",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f61a}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"\u{1f61c}",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"\u{1f92a}",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"\u{1f928}",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"\u{1f9d0}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"\u{1f61d}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"\u{1f61b}",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"\u{1f911}",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"\u{1f913}",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"\u{1f60e}",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"\u{1f929}",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:"\u{1f921}",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"\u{1f920}",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:"\u{1f917}",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"\u{1f60f}",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"\u{1f636}",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"\u{1f610}",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"\u{1f611}",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"\u{1f612}",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"\u{1f644}",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"\u{1f914}",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"\u{1f925}",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"\u{1f92d}",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"\u{1f92b}",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"\u{1f92c}",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"\u{1f92f}",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"\u{1f633}",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"\u{1f61e}",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"\u{1f61f}",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"\u{1f620}",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"\u{1f621}",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"\u{1f614}",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"\u{1f615}",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"\u{1f641}",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"\u{1f623}",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"\u{1f616}",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"\u{1f62b}",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"\u{1f629}",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"\u{1f97a}",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"\u{1f624}",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"\u{1f62e}",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"\u{1f631}",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"\u{1f628}",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"\u{1f630}",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:"\u{1f62f}",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:"\u{1f626}",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"\u{1f627}",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"\u{1f622}",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"\u{1f625}",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:"\u{1f924}",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"\u{1f62a}",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"\u{1f613}",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"\u{1f975}",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"\u{1f976}",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"\u{1f62d}",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"\u{1f635}",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"\u{1f632}",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"\u{1f910}",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"\u{1f922}",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"\u{1f927}",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:"\u{1f92e}",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"\u{1f637}",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"\u{1f912}",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"\u{1f915}",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"\u{1f974}",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"\u{1f634}",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"\u{1f4a4}",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"\u{1f4a9}",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"\u{1f608}",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:"\u{1f47f}",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"\u{1f479}",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"\u{1f47a}",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"\u{1f480}",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"\u{1f47b}",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"\u{1f47d}",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:"\u{1f916}",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"\u{1f63a}",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"\u{1f638}",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"\u{1f639}",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"\u{1f63b}",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"\u{1f63c}",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"\u{1f63d}",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"\u{1f640}",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"\u{1f63f}",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"\u{1f63e}",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"\u{1f932}",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"\u{1f64c}",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"\u{1f44f}",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"\u{1f44b}",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"\u{1f919}",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"\u{1f44d}",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"\u{1f44e}",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"\u{1f44a}",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"\u{1f91b}",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"\u{1f91c}",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"\u{1f44c}",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"\u{1f91a}",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"\u{1f450}",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"\u{1f4aa}",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"\u{1f64f}",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:"\u{1f9b6}",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:"\u{1f9b5}",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:"\u{1f91d}",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"\u{1f446}",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"\u{1f447}",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"\u{1f448}",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"\u{1f449}",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"\u{1f595}",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"\u{1f590}",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"\u{1f91f}",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"\u{1f918}",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"\u{1f91e}",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"\u{1f596}",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:"\u{1f933}",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"\u{1f485}",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:"\u{1f444}",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:"\u{1f9b7}",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:"\u{1f445}",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"\u{1f442}",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:"\u{1f443}",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"\u{1f441}",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"\u{1f440}",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:"\u{1f9e0}",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"\u{1f464}",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"\u{1f465}",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"\u{1f5e3}",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"\u{1f476}",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:"\u{1f9d2}",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"\u{1f466}",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:"\u{1f467}",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:"\u{1f9d1}",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"\u{1f468}",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:"\u{1f469}",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"\u{1f471}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"\u{1f471}",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"\u{1f9d4}",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"\u{1f9d3}",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"\u{1f474}",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"\u{1f475}",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"\u{1f472}",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"\u{1f9d5}",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"\u{1f473}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"\u{1f473}",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"\u{1f46e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"\u{1f46e}",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"\u{1f477}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"\u{1f477}",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"\u{1f482}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"\u{1f482}",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"\u{1f575}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"\u{1f575}",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"\u{1f469}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"\u{1f468}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"\u{1f469}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"\u{1f468}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"\u{1f469}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:"\u{1f468}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"\u{1f469}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:"\u{1f468}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"\u{1f469}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"\u{1f468}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"\u{1f469}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"\u{1f468}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"\u{1f469}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"\u{1f468}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"\u{1f469}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"\u{1f468}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"\u{1f469}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"\u{1f468}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"\u{1f469}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"\u{1f468}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"\u{1f469}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"\u{1f468}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"\u{1f469}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:"\u{1f468}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"\u{1f469}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"\u{1f468}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"\u{1f469}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"\u{1f468}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"\u{1f469}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"\u{1f468}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"\u{1f469}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"\u{1f468}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"\u{1f9b8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"\u{1f9b8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"\u{1f9b9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"\u{1f9b9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"\u{1f936}",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"\u{1f385}",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"\u{1f9d9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"\u{1f9d9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:"\u{1f9dd}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:"\u{1f9dd}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:"\u{1f9db}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"\u{1f9db}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"\u{1f9df}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"\u{1f9df}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:"\u{1f9de}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:"\u{1f9de}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"\u{1f9dc}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:"\u{1f9dc}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:"\u{1f9da}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:"\u{1f9da}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"\u{1f47c}",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:"\u{1f930}",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"\u{1f931}",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"\u{1f478}",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"\u{1f934}",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"\u{1f470}",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"\u{1f935}",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"\u{1f3c3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"\u{1f3c3}",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"\u{1f6b6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"\u{1f6b6}",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"\u{1f483}",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"\u{1f57a}",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"\u{1f46f}",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"\u{1f46f}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"\u{1f46b}",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"\u{1f46c}",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"\u{1f46d}",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"\u{1f647}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"\u{1f647}",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"\u{1f926}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"\u{1f926}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"\u{1f937}",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"\u{1f937}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"\u{1f481}",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"\u{1f481}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"\u{1f645}",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"\u{1f645}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"\u{1f646}",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"\u{1f646}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"\u{1f64b}",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"\u{1f64b}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"\u{1f64e}",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"\u{1f64e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"\u{1f487}",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"\u{1f487}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"\u{1f486}",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"\u{1f486}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f491}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f48f}",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"\u{1f46a}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"\u{1f9f6}",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"\u{1f9f5}",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:"\u{1f9e5}",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"\u{1f97c}",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"\u{1f45a}",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"\u{1f455}",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:"\u{1f456}",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"\u{1f454}",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"\u{1f457}",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"\u{1f459}",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"\u{1f458}",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"\u{1f484}",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"\u{1f48b}",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"\u{1f463}",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"\u{1f97f}",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"\u{1f460}",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"\u{1f461}",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:"\u{1f462}",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"\u{1f45e}",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"\u{1f45f}",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"\u{1f97e}",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:"\u{1f9e6}",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"\u{1f9e4}",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"\u{1f9e3}",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"\u{1f452}",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"\u{1f3a9}",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"\u{1f9e2}",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"\u{1f393}",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"\u{1f451}",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"\u{1f392}",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:"\u{1f9f3}",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"\u{1f45d}",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"\u{1f45b}",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"\u{1f45c}",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"\u{1f4bc}",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"\u{1f453}",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"\u{1f576}",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"\u{1f97d}",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"\u{1f48d}",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"\u{1f302}",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"\u{1f436}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"\u{1f431}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"\u{1f42d}",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"\u{1f439}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"\u{1f430}",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"\u{1f98a}",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"\u{1f43b}",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"\u{1f43c}",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"\u{1f428}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"\u{1f42f}",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"\u{1f981}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f42e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"\u{1f437}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"\u{1f43d}",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"\u{1f438}",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"\u{1f991}",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"\u{1f419}",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"\u{1f990}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"\u{1f435}",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"\u{1f98d}",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"\u{1f648}",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"\u{1f649}",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"\u{1f64a}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"\u{1f412}",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"\u{1f414}",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"\u{1f427}",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"\u{1f426}",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"\u{1f424}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"\u{1f423}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"\u{1f425}",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"\u{1f986}",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"\u{1f985}",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"\u{1f989}",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"\u{1f987}",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"\u{1f43a}",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"\u{1f417}",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"\u{1f434}",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"\u{1f984}",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"\u{1f41d}",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"\u{1f41b}",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"\u{1f98b}",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"\u{1f40c}",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"\u{1f41e}",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"\u{1f41c}",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"\u{1f997}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"\u{1f577}",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"\u{1f982}",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"\u{1f980}",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"\u{1f40d}",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"\u{1f98e}",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"\u{1f996}",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"\u{1f995}",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"\u{1f422}",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"\u{1f420}",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"\u{1f41f}",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"\u{1f421}",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"\u{1f42c}",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"\u{1f988}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"\u{1f433}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"\u{1f40b}",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"\u{1f40a}",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"\u{1f406}",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"\u{1f993}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"\u{1f405}",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"\u{1f403}",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"\u{1f402}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f404}",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"\u{1f98c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"\u{1f42a}",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"\u{1f42b}",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"\u{1f992}",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"\u{1f418}",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"\u{1f98f}",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"\u{1f410}",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"\u{1f40f}",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"\u{1f411}",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"\u{1f40e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"\u{1f416}",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"\u{1f400}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"\u{1f401}",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"\u{1f413}",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"\u{1f983}",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"\u{1f54a}",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"\u{1f415}",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"\u{1f429}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"\u{1f408}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"\u{1f407}",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"\u{1f43f}",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"\u{1f994}",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"\u{1f99d}",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"\u{1f999}",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"\u{1f99b}",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"\u{1f998}",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"\u{1f9a1}",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"\u{1f9a2}",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"\u{1f99a}",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"\u{1f99c}",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"\u{1f99e}",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"\u{1f99f}",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"\u{1f43e}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f409}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f432}",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"\u{1f335}",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"\u{1f384}",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"\u{1f332}",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"\u{1f333}",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"\u{1f334}",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"\u{1f331}",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"\u{1f33f}",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"\u{1f340}",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"\u{1f38d}",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"\u{1f38b}",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"\u{1f343}",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"\u{1f342}",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"\u{1f341}",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"\u{1f33e}",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"\u{1f33a}",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"\u{1f33b}",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"\u{1f339}",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"\u{1f940}",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"\u{1f337}",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"\u{1f33c}",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"\u{1f338}",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"\u{1f490}",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"\u{1f344}",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"\u{1f330}",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"\u{1f383}",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"\u{1f41a}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"\u{1f578}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"\u{1f30e}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"\u{1f30d}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"\u{1f30f}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"\u{1f315}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"\u{1f316}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f317}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f318}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f311}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f312}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f313}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"\u{1f314}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31a}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31d}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31b}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31c}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"\u{1f31e}",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"\u{1f319}",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"\u{1f31f}",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"\u{1f4ab}",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"\u{1f324}",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"\u{1f325}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"\u{1f326}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"\u{1f327}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"\u{1f329}",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"\u{1f525}",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"\u{1f4a5}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"\u{1f328}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"\u{1f32c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"\u{1f4a8}",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"\u{1f32a}",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:"\u{1f32b}",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"\u{1f4a7}",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"\u{1f4a6}",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"\u{1f30a}",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"\u{1f34f}",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"\u{1f34e}",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"\u{1f350}",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"\u{1f34a}",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"\u{1f34b}",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"\u{1f34c}",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"\u{1f349}",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"\u{1f347}",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"\u{1f353}",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"\u{1f348}",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"\u{1f352}",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"\u{1f351}",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"\u{1f34d}",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"\u{1f965}",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"\u{1f95d}",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"\u{1f96d}",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"\u{1f951}",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"\u{1f966}",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"\u{1f345}",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"\u{1f346}",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"\u{1f952}",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"\u{1f955}",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"\u{1f336}",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"\u{1f954}",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"\u{1f33d}",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"\u{1f96c}",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"\u{1f360}",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"\u{1f95c}",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"\u{1f36f}",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"\u{1f950}",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"\u{1f35e}",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"\u{1f956}",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"\u{1f96f}",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"\u{1f968}",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"\u{1f9c0}",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"\u{1f95a}",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"\u{1f953}",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"\u{1f969}",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"\u{1f95e}",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"\u{1f357}",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"\u{1f356}",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"\u{1f9b4}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"\u{1f364}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"\u{1f373}",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"\u{1f354}",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"\u{1f35f}",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"\u{1f959}",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"\u{1f32d}",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"\u{1f355}",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"\u{1f96a}",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"\u{1f96b}",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"\u{1f35d}",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"\u{1f32e}",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"\u{1f32f}",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"\u{1f957}",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"\u{1f958}",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"\u{1f35c}",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"\u{1f372}",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"\u{1f365}",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"\u{1f960}",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"\u{1f363}",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"\u{1f371}",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"\u{1f35b}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"\u{1f359}",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"\u{1f35a}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"\u{1f358}",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"\u{1f362}",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"\u{1f361}",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"\u{1f367}",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"\u{1f368}",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"\u{1f366}",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"\u{1f967}",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"\u{1f370}",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"\u{1f9c1}",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"\u{1f96e}",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"\u{1f382}",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"\u{1f36e}",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"\u{1f36c}",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"\u{1f36d}",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"\u{1f36b}",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"\u{1f37f}",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"\u{1f95f}",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"\u{1f369}",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"\u{1f36a}",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"\u{1f95b}",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37a}",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37b}",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"\u{1f942}",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"\u{1f377}",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"\u{1f943}",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"\u{1f378}",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"\u{1f379}",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"\u{1f37e}",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"\u{1f376}",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"\u{1f375}",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"\u{1f964}",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"\u{1f37c}",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"\u{1f9c2}",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"\u{1f944}",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"\u{1f374}",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"\u{1f37d}",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"\u{1f963}",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"\u{1f961}",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"\u{1f962}",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"\u{1f3c0}",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"\u{1f3c8}",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:"\u{1f94e}",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"\u{1f3be}",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:"\u{1f3d0}",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:"\u{1f3c9}",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"\u{1f94f}",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"\u{1f3b1}",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"\u{1f3cc}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:"\u{1f3cc}",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"\u{1f3d3}",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:"\u{1f3f8}",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:"\u{1f945}",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:"\u{1f3d2}",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:"\u{1f3d1}",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"\u{1f94d}",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:"\u{1f3cf}",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"\u{1f3bf}",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"\u{1f3c2}",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"\u{1f93a}",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:"\u{1f94c}",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:"\u{1f6f9}",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"\u{1f6f7}",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"\u{1f3f9}",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"\u{1f3a3}",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"\u{1f94a}",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"\u{1f94b}",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"\u{1f6a3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"\u{1f6a3}",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"\u{1f9d7}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"\u{1f9d7}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"\u{1f3ca}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"\u{1f3ca}",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"\u{1f3c4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"\u{1f3c4}",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"\u{1f6c0}",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"\u{1f3cb}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"\u{1f3cb}",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"\u{1f6b4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"\u{1f6b4}",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"\u{1f6b5}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"\u{1f6b5}",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"\u{1f3c7}",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"\u{1f574}",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"\u{1f3c6}",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"\u{1f3bd}",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:"\u{1f3c5}",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"\u{1f396}",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"\u{1f947}",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"\u{1f948}",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"\u{1f949}",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"\u{1f397}",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"\u{1f3f5}",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"\u{1f3ab}",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"\u{1f39f}",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"\u{1f3ad}",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"\u{1f3a8}",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"\u{1f3aa}",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"\u{1f3a4}",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"\u{1f3a7}",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"\u{1f3bc}",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"\u{1f3b9}",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"\u{1f941}",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"\u{1f3b7}",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:"\u{1f3ba}",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:"\u{1f3b8}",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"\u{1f3bb}",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:"\u{1f3ac}",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"\u{1f3ae}",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"\u{1f47e}",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"\u{1f3af}",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"\u{1f3b2}",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"\u{1f3b0}",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"\u{1f9e9}",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"\u{1f3b3}",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"\u{1f697}",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"\u{1f695}",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"\u{1f699}",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"\u{1f68c}",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"\u{1f68e}",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"\u{1f3ce}",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"\u{1f693}",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"\u{1f691}",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"\u{1f692}",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"\u{1f690}",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"\u{1f69a}",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"\u{1f69b}",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"\u{1f69c}",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"\u{1f6f4}",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"\u{1f3cd}",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"\u{1f6b2}",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"\u{1f6f5}",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"\u{1f6a8}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"\u{1f694}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"\u{1f68d}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"\u{1f698}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"\u{1f696}",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a1}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a0}",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"\u{1f69f}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"\u{1f683}",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"\u{1f68b}",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"\u{1f69d}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"\u{1f684}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"\u{1f685}",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"\u{1f688}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"\u{1f69e}",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"\u{1f682}",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"\u{1f686}",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"\u{1f687}",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"\u{1f68a}",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"\u{1f689}",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"\u{1f6f8}",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"\u{1f681}",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"\u{1f6e9}",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"\u{1f6eb}",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"\u{1f6ec}",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"\u{1f6e5}",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"\u{1f6a4}",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"\u{1f6f3}",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"\u{1f680}",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"\u{1f6f0}",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"\u{1f4ba}",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"\u{1f6f6}",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"\u{1f6a7}",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"\u{1f68f}",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"\u{1f6a6}",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"\u{1f6a5}",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"\u{1f3c1}",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"\u{1f6a2}",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"\u{1f3a1}",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"\u{1f3a2}",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"\u{1f3a0}",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"\u{1f3d7}",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"\u{1f301}",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"\u{1f5fc}",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"\u{1f3ed}",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"\u{1f391}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"\u{1f3d4}",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"\u{1f5fb}",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"\u{1f30b}",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"\u{1f5fe}",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"\u{1f3d5}",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"\u{1f3de}",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"\u{1f6e3}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"\u{1f6e4}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"\u{1f305}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"\u{1f304}",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"\u{1f3dc}",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"\u{1f3d6}",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"\u{1f3dd}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"\u{1f307}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"\u{1f306}",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"\u{1f3d9}",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"\u{1f303}",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"\u{1f309}",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"\u{1f30c}",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"\u{1f320}",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"\u{1f387}",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"\u{1f386}",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"\u{1f308}",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"\u{1f3d8}",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"\u{1f3f0}",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"\u{1f3ef}",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"\u{1f3df}",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"\u{1f5fd}",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:"\u{1f3e0}",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"\u{1f3e1}",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"\u{1f3da}",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"\u{1f3e2}",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"\u{1f3ec}",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"\u{1f3e3}",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"\u{1f3e4}",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"\u{1f3e5}",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"\u{1f3e6}",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"\u{1f3e8}",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"\u{1f3ea}",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"\u{1f3eb}",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"\u{1f3e9}",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"\u{1f492}",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"\u{1f3db}",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"\u{1f54c}",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"\u{1f54d}",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"\u{1f54b}",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"\u{1f4f1}",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:"\u{1f4f2}",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"\u{1f4bb}",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"\u{1f5a5}",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:"\u{1f5a8}",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:"\u{1f5b1}",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"\u{1f5b2}",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:"\u{1f579}",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:"\u{1f5dc}",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"\u{1f4bd}",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"\u{1f4be}",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"\u{1f4bf}",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"\u{1f4c0}",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"\u{1f4fc}",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:"\u{1f4f7}",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"\u{1f4f8}",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:"\u{1f4f9}",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:"\u{1f3a5}",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"\u{1f4fd}",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:"\u{1f39e}",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"\u{1f4de}",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"\u{1f4df}",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:"\u{1f4e0}",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"\u{1f4fa}",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"\u{1f4fb}",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"\u{1f399}",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:"\u{1f39a}",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:"\u{1f39b}",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"\u{1f9ed}",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"\u{1f570}",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"\u{1f4e1}",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"\u{1f50b}",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:"\u{1f50c}",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"\u{1f4a1}",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"\u{1f526}",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:"\u{1f56f}",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"\u{1f9ef}",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"\u{1f5d1}",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:"\u{1f6e2}",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"\u{1f4b8}",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"\u{1f4b5}",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"\u{1f4b4}",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"\u{1f4b6}",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"\u{1f4b7}",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"\u{1f4b0}",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"\u{1f4b3}",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"\u{1f48e}",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"\u{1f9f0}",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"\u{1f527}",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:"\u{1f528}",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"\u{1f6e0}",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"\u{1f529}",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:"\u{1f9f1}",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"\u{1f9f2}",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"\u{1f52b}",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"\u{1f4a3}",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"\u{1f9e8}",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"\u{1f52a}",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:"\u{1f5e1}",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:"\u{1f6e1}",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"\u{1f6ac}",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:"\u{1f3fa}",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"\u{1f52e}",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"\u{1f4ff}",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"\u{1f9ff}",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:"\u{1f488}",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"\u{1f52d}",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"\u{1f52c}",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:"\u{1f573}",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"\u{1f48a}",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"\u{1f489}",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"\u{1f9ec}",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"\u{1f9a0}",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"\u{1f9eb}",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"\u{1f9ea}",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"\u{1f321}",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"\u{1f9f9}",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:"\u{1f9fa}",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:"\u{1f9fb}",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:"\u{1f3f7}",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"\u{1f516}",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"\u{1f6bd}",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"\u{1f6bf}",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"\u{1f6c1}",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"\u{1f9fc}",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"\u{1f9fd}",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"\u{1f9f4}",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:"\u{1f511}",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:"\u{1f5dd}",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"\u{1f6cb}",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"\u{1f6cc}",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:"\u{1f6cf}",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:"\u{1f6aa}",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:"\u{1f6ce}",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"\u{1f9f8}",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:"\u{1f5bc}",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:"\u{1f5fa}",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"\u{1f5ff}",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"\u{1f6cd}",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:"\u{1f6d2}",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"\u{1f388}",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"\u{1f38f}",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"\u{1f380}",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"\u{1f381}",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"\u{1f38a}",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"\u{1f389}",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"\u{1f38e}",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"\u{1f390}",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"\u{1f38c}",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"\u{1f3ee}",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:"\u{1f9e7}",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"\u{1f4e9}",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"\u{1f4e8}",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"\u{1f4e7}",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"\u{1f48c}",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"\u{1f4ee}",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"\u{1f4ea}",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"\u{1f4eb}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"\u{1f4ec}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"\u{1f4ed}",fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"\u{1f4e6}",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"\u{1f4ef}",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"\u{1f4e5}",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"\u{1f4e4}",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"\u{1f4dc}",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"\u{1f4c3}",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"\u{1f4d1}",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"\u{1f9fe}",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"\u{1f4ca}",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"\u{1f4c8}",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"\u{1f4c9}",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"\u{1f4c4}",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:"\u{1f4c5}",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"\u{1f4c6}",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"\u{1f5d3}",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:"\u{1f4c7}",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"\u{1f5c3}",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:"\u{1f5f3}",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"\u{1f5c4}",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"\u{1f4cb}",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"\u{1f5d2}",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"\u{1f4c1}",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"\u{1f4c2}",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"\u{1f5c2}",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"\u{1f5de}",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:"\u{1f4f0}",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"\u{1f4d3}",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"\u{1f4d5}",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"\u{1f4d7}",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"\u{1f4d8}",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"\u{1f4d9}",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"\u{1f4d4}",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:"\u{1f4d2}",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:"\u{1f4da}",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"\u{1f4d6}",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:"\u{1f9f7}",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:"\u{1f517}",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"\u{1f4ce}",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"\u{1f587}",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"\u{1f4d0}",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"\u{1f4cf}",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:"\u{1f9ee}",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"\u{1f4cc}",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"\u{1f4cd}",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"\u{1f6a9}",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"\u{1f3f3}",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:"\u{1f3f4}",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"\u{1f3f3}\ufe0f\u200d\u{1f308}",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"\u{1f510}",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:"\u{1f512}",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:"\u{1f513}",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"\u{1f50f}",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"\u{1f58a}",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"\u{1f58b}",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"\u{1f4dd}",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"\u{1f58d}",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"\u{1f58c}",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"\u{1f50d}",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"\u{1f50e}",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f9e1}",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49b}",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49a}",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f499}",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49c}",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:"\u{1f5a4}",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"\u{1f494}",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"\u{1f495}",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"\u{1f49e}",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"\u{1f493}",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"\u{1f497}",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f496}",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"\u{1f498}",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"\u{1f49d}",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"\u{1f49f}",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u{1f549}",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"\u{1f52f}",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"\u{1f54e}",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"\u{1f6d0}",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:"\u{1f194}",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"\u{1f233}",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"\u{1f239}",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"\u{1f4f4}",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"\u{1f4f3}",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"\u{1f236}",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"\u{1f21a}",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"\u{1f238}",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"\u{1f23a}",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"\u{1f237}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:"\u{1f19a}",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"\u{1f251}",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"\u{1f4ae}",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"\u{1f250}",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"\u{1f234}",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"\u{1f235}",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"\u{1f232}",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"\u{1f170}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"\u{1f171}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"\u{1f18e}",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"\u{1f191}",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"\u{1f17e}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"\u{1f198}",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"\u{1f4db}",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"\u{1f6ab}",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:"\u{1f6d1}",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:"\u{1f4a2}",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"\u{1f6b7}",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"\u{1f6af}",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"\u{1f6b3}",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"\u{1f6b1}",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"\u{1f51e}",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"\u{1f4f5}",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"\u{1f4af}",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"\u{1f505}",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"\u{1f506}",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:"\u{1f531}",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"\u{1f6b8}",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:"\u{1f530}",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"\u{1f22f}",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"\u{1f4b9}",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"\u{1f4a0}",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"\u{1f300}",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"\u{1f310}",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"\u{1f3e7}",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"\u{1f202}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"\u{1f6c2}",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"\u{1f6c3}",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"\u{1f6c4}",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"\u{1f6c5}",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"\u{1f6ad}",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"\u{1f6be}",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"\u{1f17f}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"\u{1f6b0}",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"\u{1f6b9}",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"\u{1f6ba}",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"\u{1f6bc}",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"\u{1f6bb}",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"\u{1f6ae}",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"\u{1f3a6}",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"\u{1f4f6}",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"\u{1f201}",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"\u{1f196}",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"\u{1f197}",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"\u{1f199}",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:"\u{1f192}",fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"\u{1f195}",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:"\u{1f193}",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"\u{1f51f}",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"\u{1f522}",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"\u{1f500}",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:"\u{1f501}",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"\u{1f502}",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"\u{1f53c}",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"\u{1f53d}",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"\u{1f504}",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"\u{1f524}",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"\u{1f521}",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"\u{1f520}",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"\u{1f523}",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"\u{1f3b5}",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:"\u{1f3b6}",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"\u{1f503}",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"\u{1f4b2}",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"\u{1f4b1}",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:"\u{1f51a}",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:"\u{1f519}",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:"\u{1f51b}",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:"\u{1f51d}",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:"\u{1f51c}",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"\u{1f518}",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"\u{1f534}",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"\u{1f535}",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f538}",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f539}",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f536}",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f537}",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"\u{1f53a}",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"\u{1f53b}",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"\u{1f532}",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"\u{1f533}",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"\u{1f508}",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"\u{1f509}",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"\u{1f50a}",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"\u{1f507}",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"\u{1f4e3}",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"\u{1f4e2}",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"\u{1f514}",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"\u{1f515}",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"\u{1f0cf}",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"\u{1f004}",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"\u{1f3b4}",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"\u{1f4ad}",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"\u{1f5ef}",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"\u{1f4ac}",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"\u{1f5e8}",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"\u{1f550}",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"\u{1f551}",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"\u{1f552}",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"\u{1f553}",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"\u{1f554}",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"\u{1f555}",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"\u{1f556}",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"\u{1f557}",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"\u{1f558}",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"\u{1f559}",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"\u{1f55a}",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"\u{1f55b}",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"\u{1f55c}",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"\u{1f55d}",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"\u{1f55e}",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"\u{1f55f}",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"\u{1f560}",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"\u{1f561}",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"\u{1f562}",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"\u{1f563}",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"\u{1f564}",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"\u{1f565}",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"\u{1f566}",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"\u{1f567}",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"\u{1f1e8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"\u{1f1ea}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"\u{1f1eb}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"\u{1f1e9}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"\u{1f1ef}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"\u{1f1fd}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"\u{1f1f4}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"\u{1f1f6}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"\u{1f1ec}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"\u{1f1fa}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"\u{1f3f4}\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/emoticons/plugin.min.js b/apps/web-ele/public/tinymce/plugins/emoticons/plugin.min.js new file mode 100644 index 000000000..23fa192f3 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/emoticons/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>t===e,o=e(null),n=e(void 0),s=()=>{},r=()=>!1;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return null==t?a.none():a.some(t)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const i=(t,e)=>{const o=t.length,n=new Array(o);for(let s=0;s{let e=t;return{get:()=>e,set:t=>{e=t}}},c=Object.keys,u=Object.hasOwnProperty,g=(t,e)=>{const o=c(t);for(let n=0,s=o.length;nu.call(t,e),m=(h=(t,e)=>e,(...t)=>{if(0===t.length)throw new Error("Can't merge zero objects");const e={};for(let o=0;o{const t=(t=>{const e=l(a.none()),o=()=>e.get().each(t);return{clear:()=>{o(),e.set(a.none())},isSet:()=>e.get().isSome(),get:()=>e.get(),set:t=>{o(),e.set(a.some(t))}}})(s);return{...t,on:e=>t.get().each(e)}},y=(t,e,o=0,s)=>{const r=t.indexOf(e,o);return-1!==r&&(!!n(s)||r+e.length<=s)};var v=tinymce.util.Tools.resolve("tinymce.Resource");const f=t=>e=>e.options.get(t),b=f("emoticons_database"),w=f("emoticons_database_url"),j=f("emoticons_database_id"),C=f("emoticons_append"),_=f("emoticons_images_url"),A="All",k={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},O=(t,e)=>d(t,e)?t[e]:e,x=t=>{const e=C(t);return o=t=>({keywords:[],category:"user",...t}),((t,e)=>{const o={};return g(t,((t,n)=>{const s=e(t,n);o[s.k]=s.v})),o})(e,((t,e)=>({k:e,v:o(t)})));var o},E=(t,e)=>y(t.title.toLowerCase(),e)||(t=>{for(let n=0,s=t.length;n{const n=[],s=e.toLowerCase(),a=o.fold((()=>r),(t=>e=>e>=t));for(let o=0;o{const n={pattern:"",results:L(e.listAll(),"",a.some(300))},s=l(A),r=(t=>{let e=null;const n=()=>{o(e)||(clearTimeout(e),e=null)};return{cancel:n,throttle:(...o)=>{n(),e=setTimeout((()=>{e=null,t.apply(null,o)}),200)}}})((t=>{(t=>{const o=t.getData(),n=s.get(),r=e.listCategory(n),i=L(r,o[S],n===A?a.some(300):a.none());t.setData({results:i})})(t)})),c={label:"Search",type:"input",name:S},u={type:"collection",name:"results"},g=()=>({title:"Emojis",size:"normal",body:{type:"tabpanel",tabs:i(e.listCategories(),(t=>({title:t,name:t,items:[c,u]})))},initialData:n,onTabChange:(t,e)=>{s.set(e.newTabName),r.throttle(t)},onChange:r.throttle,onAction:(e,o)=>{"results"===o.name&&(((t,e)=>{t.insertContent(e)})(t,o.value),e.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}),d=t.windowManager.open(g());d.focus(S),e.hasLoaded()||(d.block("Loading emojis..."),e.waitForLoad().then((()=>{d.redial(g()),r.throttle(d),d.focus(S),d.unblock()})).catch((t=>{d.redial({title:"Emojis",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"Could not load emojis"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),d.focus(S),d.unblock()})))},T=t=>e=>{const o=()=>{e.setEnabled(t.selection.isEditable())};return t.on("NodeChange",o),o(),()=>{t.off("NodeChange",o)}};t.add("emoticons",((t,e)=>{((t,e)=>{const o=t.options.register;o("emoticons_database",{processor:"string",default:"emojis"}),o("emoticons_database_url",{processor:"string",default:`${e}/js/${b(t)}${t.suffix}.js`}),o("emoticons_database_id",{processor:"string",default:"tinymce.plugins.emoticons"}),o("emoticons_append",{processor:"object",default:{}}),o("emoticons_images_url",{processor:"string",default:"https://cdnjs.cloudflare.com/ajax/libs/twemoji/15.1.0/72x72/"})})(t,e);const o=((t,e,o)=>{const n=p(),s=p(),r=_(t),i=t=>{return o="=4&&e.substr(0,4)===o?t.char.replace(/src="([^"]+)"/,((t,e)=>`src="${r}${e}"`)):t.char;var e,o};t.on("init",(()=>{v.load(o,e).then((e=>{const o=x(t);(t=>{const e={},o=[];g(t,((t,n)=>{const s={title:n,keywords:t.keywords,char:i(t),category:O(k,t.category)},r=void 0!==e[s.category]?e[s.category]:[];e[s.category]=r.concat([s]),o.push(s)})),n.set(e),s.set(o)})(m(e,o))}),(t=>{console.log(`Failed to load emojis: ${t}`),n.set({}),s.set([])}))}));const l=()=>s.get().getOr([]),u=()=>n.isSet()&&s.isSet();return{listCategories:()=>[A].concat(c(n.get().getOr({}))),hasLoaded:u,waitForLoad:()=>u()?Promise.resolve(!0):new Promise(((t,o)=>{let n=15;const s=setInterval((()=>{u()?(clearInterval(s),t(!0)):(n--,n<0&&(console.log("Could not load emojis from url: "+e),clearInterval(s),o(!1)))}),100)})),listAll:l,listCategory:t=>t===A?l():n.get().bind((e=>a.from(e[t]))).getOr([])}})(t,w(t),j(t));return((t,e)=>{t.addCommand("mceEmoticons",(()=>N(t,e)))})(t,o),(t=>{const e=()=>t.execCommand("mceEmoticons");t.ui.registry.addButton("emoticons",{tooltip:"Emojis",icon:"emoji",onAction:e,onSetup:T(t)}),t.ui.registry.addMenuItem("emoticons",{text:"Emojis...",icon:"emoji",onAction:e,onSetup:T(t)})})(t),((t,e)=>{t.ui.registry.addAutocompleter("emoticons",{trigger:":",columns:"auto",minChars:2,fetch:(t,o)=>e.waitForLoad().then((()=>{const n=e.listAll();return L(n,t,a.some(o))})),onAction:(e,o,n)=>{t.selection.setRng(o),t.insertContent(n),e.hide()}})})(t,o),(t=>{t.on("PreInit",(()=>{t.parser.addAttributeFilter("data-emoticon",(t=>{(t=>{for(let o=0,n=t.length;oo.waitForLoad().then((()=>o.listAll()))}}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/fullscreen/plugin.min.js b/apps/web-ele/public/tinymce/plugins/fullscreen/plugin.min.js new file mode 100644 index 000000000..37f4522f9 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/fullscreen/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";const e=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}};var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const n=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=r=e,(o=String).prototype.isPrototypeOf(n)||(null===(s=r.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var n,r,o,s})(t)===e,r=e=>t=>typeof t===e,o=e=>t=>e===t,s=n("string"),i=n("object"),l=n("array"),a=o(null),c=r("boolean"),u=o(void 0),d=e=>!(e=>null==e)(e),m=r("function"),h=r("number"),g=()=>{},p=e=>()=>e;function f(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const v=p(!1),w=p(!0);class y{constructor(e,t){this.tag=e,this.value=t}static some(e){return new y(!0,e)}static none(){return y.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?y.some(e(this.value)):y.none()}bind(e){return this.tag?e(this.value):y.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:y.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?y.some(e):y.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}y.singletonNone=new y(!1);const b=Array.prototype.push,S=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o{for(let n=0,r=e.length;n{const n=[];for(let r=0,o=e.length;r((e,t,n)=>{for(let r=0,o=e.length;r{const n=e(y.none()),r=()=>n.get().each(t);return{clear:()=>{r(),n.set(y.none())},isSet:()=>n.get().isSome(),get:()=>n.get(),set:e=>{r(),n.set(y.some(e))}}},k=()=>O((e=>e.unbind())),T=Object.keys,C="undefined"!=typeof window?window:Function("return this;")(),A=(e,t)=>((e,t)=>{let n=null!=t?t:C;for(let t=0;t{const t=A("ownerDocument.defaultView",e);return i(e)&&((e=>((e,t)=>{const n=((e,t)=>A(e,t))(e,t);if(null==n)throw new Error(e+" not available on this browser");return n})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(R(e).constructor.name))},M=e=>t=>(e=>e.dom.nodeType)(t)===e,P=M(1),D=M(3),N=M(11),H=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},V=(e,t)=>{e.dom.removeAttribute(t)},W=(e,t,n=0,r)=>{const o=e.indexOf(t,n);return-1!==o&&(!!u(r)||o+t.length<=r)},q=e=>void 0!==e.style&&m(e.style.getPropertyValue),B=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},I=B,j=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},_=e=>I(e.dom.ownerDocument),z=e=>S(e.dom.childNodes,I),K=e=>{const t=(e=>I(e.dom.getRootNode()))(e);return N(n=t)&&d(n.dom.host)?y.some(t):y.none();var n},$=e=>I(e.dom.host),U=e=>{const t=D(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return K(I(t)).fold((()=>n.body.contains(t)),(r=U,o=$,e=>r(o(e))));var r,o},X=(e,t,n)=>{if(!s(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);q(e)&&e.style.setProperty(t,n)},Y=(e,t,n)=>{const r=e.dom;X(r,t,n)},G=(e,t)=>{const n=e.dom;((e,t)=>{const n=T(e);for(let r=0,o=n.length;r{X(n,t,e)}))},J=(e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return""!==r||U(e)?r:Q(n,t)},Q=(e,t)=>q(e)?e.style.getPropertyValue(t):"",Z=e=>{const t=I((e=>{if(d(e.target)){const t=I(e.target);if(P(t)&&d(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return(e=>0e.stopPropagation(),r=()=>e.preventDefault(),o=(s=r,i=n,(...e)=>s(i.apply(null,e)));var s,i;return((e,t,n,r,o,s,i)=>({target:e,x:t,y:n,stop:r,prevent:o,kill:s,raw:i}))(t,e.clientX,e.clientY,n,r,o,e)},ee=(e,t,n,r)=>{e.dom.removeEventListener(t,n,r)},te=w,ne=(e,t,n)=>((e,t,n,r)=>((e,t,n,r,o)=>{const s=((e,t)=>n=>{e(n)&&t(Z(n))})(n,r);return e.dom.addEventListener(t,s,o),{unbind:f(ee,e,t,s,o)}})(e,t,n,r,!1))(e,t,te,n),re=()=>oe(0,0),oe=(e,t)=>({major:e,minor:t}),se={nu:oe,detect:(e,t)=>{const n=String(t).toLowerCase();return 0===e.length?re():((e,t)=>{const n=((e,t)=>{for(let n=0;nNumber(t.replace(n,"$"+e));return oe(r(1),r(2))})(e,n)},unknown:re},ie=(e,t)=>{const n=String(t).toLowerCase();return F(e,(e=>e.search(n)))},le=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ae=e=>t=>W(t,e),ce=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>W(e,"edge/")&&W(e,"chrome")&&W(e,"safari")&&W(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,le],search:e=>W(e,"chrome")&&!W(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>W(e,"msie")||W(e,"trident")},{name:"Opera",versionRegexes:[le,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:ae("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:ae("firefox")},{name:"Safari",versionRegexes:[le,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(W(e,"safari")||W(e,"mobile/"))&&W(e,"applewebkit")}],ue=[{name:"Windows",search:ae("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>W(e,"iphone")||W(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:ae("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:ae("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:ae("linux"),versionRegexes:[]},{name:"Solaris",search:ae("sunos"),versionRegexes:[]},{name:"FreeBSD",search:ae("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:ae("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],de={browsers:p(ce),oses:p(ue)},me="Edge",he="Chromium",ge="Opera",pe="Firefox",fe="Safari",ve=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isEdge:r(me),isChromium:r(he),isIE:r("IE"),isOpera:r(ge),isFirefox:r(pe),isSafari:r(fe)}},we=()=>ve({current:void 0,version:se.unknown()}),ye=ve,be=(p(me),p(he),p("IE"),p(ge),p(pe),p(fe),"Windows"),Se="Android",xe="Linux",Ee="macOS",Fe="Solaris",Oe="FreeBSD",ke="ChromeOS",Te=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isWindows:r(be),isiOS:r("iOS"),isAndroid:r(Se),isMacOS:r(Ee),isLinux:r(xe),isSolaris:r(Fe),isFreeBSD:r(Oe),isChromeOS:r(ke)}},Ce=()=>Te({current:void 0,version:se.unknown()}),Ae=Te,Re=(p(be),p("iOS"),p(Se),p(xe),p(Ee),p(Fe),p(Oe),p(ke),(e,t,n)=>{const r=de.browsers(),o=de.oses(),s=t.bind((e=>((e,t)=>((e,t)=>{for(let n=0;n{const n=t.brand.toLowerCase();return F(e,(e=>{var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:se.nu(parseInt(t.version,10),0)})))})))(r,e))).orThunk((()=>((e,t)=>ie(e,t).map((e=>{const n=se.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(r,e))).fold(we,ye),i=((e,t)=>ie(e,t).map((e=>{const n=se.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(o,e).fold(Ce,Ae),l=((e,t,n,r)=>{const o=e.isiOS()&&!0===/ipad/i.test(n),s=e.isiOS()&&!o,i=e.isiOS()||e.isAndroid(),l=i||r("(pointer:coarse)"),a=o||!s&&i&&r("(min-device-width:768px)"),c=s||i&&!a,u=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),d=!c&&!a&&!u;return{isiPad:p(o),isiPhone:p(s),isTablet:p(a),isPhone:p(c),isTouch:p(l),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:p(u),isDesktop:p(d)}})(i,s,e,n);return{browser:s,os:i,deviceType:l}}),Le=e=>window.matchMedia(e).matches;let Me=(e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)})((()=>Re(window.navigator.userAgent,y.from(window.navigator.userAgentData),Le)));const Pe=(e,t)=>({left:e,top:t,translate:(n,r)=>Pe(e+n,t+r)}),De=Pe,Ne=e=>{const t=void 0===e?window:e;return Me().browser.isFirefox()?y.none():y.from(t.visualViewport)},He=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),Ve=e=>{const t=void 0===e?window:e,n=t.document,r=(e=>{const t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return De(n,r)})(I(n));return Ne(t).fold((()=>{const e=t.document.documentElement,n=e.clientWidth,o=e.clientHeight;return He(r.left,r.top,n,o)}),(e=>He(Math.max(e.pageLeft,r.left),Math.max(e.pageTop,r.top),e.width,e.height)))},We=(e,t,n)=>Ne(n).map((n=>{const r=e=>t(Z(e));return n.addEventListener(e,r),{unbind:()=>n.removeEventListener(e,r)}})).getOrThunk((()=>({unbind:g})));var qe=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),Be=tinymce.util.Tools.resolve("tinymce.Env");const Ie=(e,t)=>{e.dispatch("FullscreenStateChanged",{state:t}),e.dispatch("ResizeEditor")},je=e=>e.options.get("fullscreen_native");const _e=e=>{return e.dom===(void 0!==(t=_(e).dom).fullscreenElement?t.fullscreenElement:void 0!==t.msFullscreenElement?t.msFullscreenElement:void 0!==t.webkitFullscreenElement?t.webkitFullscreenElement:null);var t},ze=(e,t,n)=>((e,t,n)=>E(((e,t)=>{const n=m(t)?t:v;let r=e.dom;const o=[];for(;null!==r.parentNode&&void 0!==r.parentNode;){const e=r.parentNode,t=I(e);if(o.push(t),!0===n(t))break;r=e}return o})(e,n),t))(e,(e=>j(e,t)),n),Ke=(e,t)=>(e=>{return E((e=>y.from(e.dom.parentNode).map(I))(n=e).map(z).map((e=>E(e,(e=>{return t=e,!(n.dom===t.dom);var t})))).getOr([]),(e=>j(e,t)));var n})(e),$e="data-ephox-mobile-fullscreen-style",Ue="position:absolute!important;",Xe="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",Ye=Be.os.isAndroid(),Ge=(e,t,n)=>{const r=t=>n=>{const r=H(n,"style"),o=void 0===r?"no-styles":r.trim();o!==t&&(((e,t,n)=>{((e,t,n)=>{if(!(s(n)||c(n)||h(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(e.dom,t,n)})(n,$e,o),G(n,e.parseStyle(t)))},o=ze(t,"*"),i=(e=>{const t=[];for(let n=0,r=e.length;nKe(e,"*:not(.tox-silver-sink)")))),a=(e=>{const t=J(e,"background-color");return void 0!==t&&""!==t?"background-color:"+t+"!important":"background-color:rgb(255,255,255)!important;"})(n);x(i,r("display:none!important;")),x(o,r(Ue+Xe+a)),r((!0===Ye?"":Ue)+Xe+a)(t)},Je=qe.DOM,Qe=Ne().fold((()=>({bind:g,unbind:g})),(e=>{const t=(()=>{const e=O(g);return{...e,on:t=>e.get().each(t)}})(),n=k(),r=k(),o=(e=>{let t=null;return{cancel:()=>{a(t)||(clearTimeout(t),t=null)},throttle:(...n)=>{a(t)&&(t=setTimeout((()=>{t=null,e.apply(null,n)}),50))}}})((()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0,window.requestAnimationFrame((()=>{t.on((t=>G(t,{top:e.offsetTop+"px",left:e.offsetLeft+"px",height:e.height+"px",width:e.width+"px"})))}))}));return{bind:e=>{t.set(e),o.throttle(),n.set(We("resize",o.throttle)),r.set(We("scroll",o.throttle))},unbind:()=>{t.on((()=>{n.clear(),r.clear()})),t.clear()}}})),Ze=(e,t)=>{const n=document.body,r=document.documentElement,o=e.getContainer(),s=I(o),i=(l=s,y.from(l.dom.nextSibling).map(I)).filter((e=>(e=>P(e)&&L(e.dom))(e)&&(e=>(e=>void 0!==e.dom.classList)(e)&&e.dom.classList.contains("tox-silver-sink"))(e)));var l;const a=(e=>{const t=I(e.getElement());return K(t).map($).getOrThunk((()=>(e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return I(t)})(_(t))))})(e),c=t.get(),u=I(e.getBody()),d=Be.deviceType.isTouch(),m=o.style,h=e.iframeElement,g=null==h?void 0:h.style,p=e=>{e(n,"tox-fullscreen"),e(r,"tox-fullscreen"),e(o,"tox-fullscreen"),K(s).map((e=>$(e).dom)).each((t=>{e(t,"tox-fullscreen"),e(t,"tox-shadowhost")}))},f=()=>{d&&(e=>{const t=(e=>{const t=document;return 1!==(n=t).nodeType&&9!==n.nodeType&&11!==n.nodeType||0===n.childElementCount?[]:S(t.querySelectorAll(e),I);var n})("["+$e+"]");x(t,(t=>{const n=H(t,$e);n&&"no-styles"!==n?G(t,e.parseStyle(n)):V(t,"style"),V(t,$e)}))})(e.dom),p(Je.removeClass),Qe.unbind(),y.from(t.get()).each((e=>e.fullscreenChangeHandler.unbind()))};if(c)c.fullscreenChangeHandler.unbind(),je(e)&&_e(a)&&(e=>{const t=e.dom;t.exitFullscreen?t.exitFullscreen():t.msExitFullscreen?t.msExitFullscreen():t.webkitCancelFullScreen&&t.webkitCancelFullScreen()})(_(a)),g.width=c.iframeWidth,g.height=c.iframeHeight,m.width=c.containerWidth,m.height=c.containerHeight,m.top=c.containerTop,m.left=c.containerLeft,w=i,b=c.sinkCssPosition,E=(e,t)=>{Y(e,"position",t)},w.isSome()&&b.isSome()?y.some(E(w.getOrDie(),b.getOrDie())):y.none(),f(),v=c.scrollPos,window.scrollTo(v.x,v.y),t.set(null),Ie(e,!1),e.off("remove",f);else{const n=ne(_(a),void 0!==document.fullscreenElement?"fullscreenchange":void 0!==document.msFullscreenElement?"MSFullscreenChange":void 0!==document.webkitFullscreenElement?"webkitfullscreenchange":"fullscreenchange",(n=>{je(e)&&(_e(a)||null===t.get()||Ze(e,t))})),r={scrollPos:Ve(window),containerWidth:m.width,containerHeight:m.height,containerTop:m.top,containerLeft:m.left,iframeWidth:g.width,iframeHeight:g.height,fullscreenChangeHandler:n,sinkCssPosition:i.map((e=>J(e,"position")))};d&&Ge(e.dom,s,u),g.width=g.height="100%",m.width=m.height="",p(Je.addClass),i.each((e=>{Y(e,"position","fixed")})),Qe.bind(s),e.on("remove",f),t.set(r),je(e)&&(e=>{const t=e.dom;t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitRequestFullScreen&&t.webkitRequestFullScreen()})(a),Ie(e,!0)}var v,w,b,E};var et=tinymce.util.Tools.resolve("tinymce.util.VK");const tt=(e,t)=>n=>{n.setActive(null!==t.get());const r=e=>n.setActive(e.state);return e.on("FullscreenStateChanged",r),()=>e.off("FullscreenStateChanged",r)};t.add("fullscreen",(t=>{const n=e(null);return t.inline||((e=>{(0,e.options.register)("fullscreen_native",{processor:"boolean",default:!1})})(t),((e,t)=>{e.addCommand("mceFullScreen",(()=>{Ze(e,t)}))})(t,n),((e,t)=>{const n=()=>e.execCommand("mceFullScreen");e.ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",icon:"fullscreen",shortcut:"Meta+Shift+F",onAction:n,onSetup:tt(e,t),context:"any"}),e.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:n,onSetup:tt(e,t),shortcut:"Meta+Shift+F",context:"any"})})(t,n),((e,t)=>{e.on("init",(()=>{e.on("keydown",(e=>{e.keyCode!==et.TAB||e.metaKey||e.ctrlKey||!t.get()||e.preventDefault()}))}))})(t,n),t.addShortcut("Meta+Shift+F","","mceFullScreen")),(e=>({isFullscreen:()=>null!==e.get()}))(n)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ar.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ar.js new file mode 100644 index 000000000..e2cf02f56 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ar.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar', +'

    بدء التنقل بواسطة لوحة المفاتيح

    \n' + + '\n' + + '
    \n' + + '
    التركيز على شريط القوائم
    \n' + + '
    نظاما التشغيل Windows أو Linux: Alt + F9
    \n' + + '
    نظام التشغيل macOS: ⌥F9
    \n' + + '
    التركيز على شريط الأدوات
    \n' + + '
    نظاما التشغيل Windows أو Linux: Alt + F10
    \n' + + '
    نظام التشغيل macOS: ⌥F10
    \n' + + '
    التركيز على التذييل
    \n' + + '
    نظاما التشغيل Windows أو Linux: Alt + F11
    \n' + + '
    نظام التشغيل macOS: ⌥F11
    \n' + + '
    تركيز الإشعارات
    \n' + + '
    نظاما التشغيل Windows أو Linux: Alt + F12
    \n' + + '
    نظام التشغيل macOS: ⌥F12
    \n' + + '
    التركيز على شريط أدوات السياق
    \n' + + '
    أنظمة التشغيل Windows أو Linux أو macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    سيبدأ التنقل عند عنصر واجهة المستخدم الأول، والذي سيتم تمييزه أو تسطيره في حالة العنصر الأول في\n' + + ' مسار عنصر التذييل.

    \n' + + '\n' + + '

    التنقل بين أقسام واجهة المستخدم

    \n' + + '\n' + + '

    للانتقال من أحد أقسام واجهة المستخدم إلى القسم التالي، اضغط على Tab.

    \n' + + '\n' + + '

    للانتقال من أحد أقسام واجهة المستخدم إلى القسم السابق، اضغط على Shift+Tab.

    \n' + + '\n' + + '

    ترتيب علامات Tab لأقسام واجهة المستخدم هذه هو:

    \n' + + '\n' + + '
      \n' + + '
    1. شريط القوائم
    2. \n' + + '
    3. كل مجموعة شريط الأدوات
    4. \n' + + '
    5. الشريط الجانبي
    6. \n' + + '
    7. مسار العنصر في التذييل
    8. \n' + + '
    9. زر تبديل عدد الكلمات في التذييل
    10. \n' + + '
    11. رابط إدراج العلامة التجارية في التذييل
    12. \n' + + '
    13. مؤشر تغيير حجم المحرر في التذييل
    14. \n' + + '
    \n' + + '\n' + + '

    إذا لم يكن قسم واجهة المستخدم موجودًا، فسيتم تخطيه.

    \n' + + '\n' + + '

    إذا كان التذييل يحتوي على التركيز على ‏‫التنقل بواسطة لوحة المفاتيح، ولا يوجد شريط جانبي مرئي، فإن الضغط على Shift+Tab\n' + + ' ينقل التركيز إلى مجموعة شريط الأدوات الأولى، وليس الأخيرة.

    \n' + + '\n' + + '

    التنقل بين أقسام واجهة المستخدم

    \n' + + '\n' + + '

    للانتقال من أحد عناصر واجهة المستخدم إلى العنصر التالي، اضغط على مفتاح السهم المناسب.

    \n' + + '\n' + + '

    مفتاحا السهمين اليسار‎ واليمين‎

    \n' + + '\n' + + '
      \n' + + '
    • التنقل بين القوائم في شريط القوائم.
    • \n' + + '
    • فتح قائمة فرعية في القائمة.
    • \n' + + '
    • التنقل بين الأزرار في مجموعة شريط الأدوات.
    • \n' + + '
    • التنقل بين العناصر في مسار عنصر التذييل.
    • \n' + + '
    \n' + + '\n' + + '

    مفتاحا السهمين لأسفل‎ ولأعلى‎

    \n' + + '\n' + + '
      \n' + + '
    • التنقل بين عناصر القائمة في القائمة.
    • \n' + + '
    • التنقل بين العناصر في قائمة شريط الأدوات المنبثقة.
    • \n' + + '
    \n' + + '\n' + + '

    دورة مفاتيح الأسهم‎ داخل قسم واجهة المستخدم التي تم التركيز عليها.

    \n' + + '\n' + + '

    لإغلاق قائمة مفتوحة أو قائمة فرعية مفتوحة أو قائمة منبثقة مفتوحة، اضغط على مفتاح Esc.

    \n' + + '\n' + + '

    إذا كان التركيز الحالي على "الجزء العلوي" من قسم معين لواجهة المستخدم، فإن الضغط على مفتاح Esc يؤدي أيضًا إلى الخروج\n' + + ' من التنقل بواسطة لوحة المفاتيح بالكامل.

    \n' + + '\n' + + '

    تنفيذ عنصر قائمة أو زر شريط أدوات

    \n' + + '\n' + + '

    عندما يتم تمييز عنصر القائمة المطلوب أو زر شريط الأدوات، اضغط على زر Return، أو Enter،\n' + + ' أو مفتاح المسافة لتنفيذ العنصر.

    \n' + + '\n' + + '

    التنقل في مربعات الحوار غير المبوبة

    \n' + + '\n' + + '

    في مربعات الحوار غير المبوبة، يتم التركيز على المكون التفاعلي الأول عند فتح مربع الحوار.

    \n' + + '\n' + + '

    التنقل بين مكونات الحوار التفاعلي بالضغط على زر Tab أو Shift+Tab.

    \n' + + '\n' + + '

    التنقل في مربعات الحوار المبوبة

    \n' + + '\n' + + '

    في مربعات الحوار المبوبة، يتم التركيز على الزر الأول في قائمة علامات التبويب عند فتح مربع الحوار.

    \n' + + '\n' + + '

    التنقل بين المكونات التفاعلية لعلامة التبويب لمربع الحوار هذه بالضغط على زر Tab أو\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    التبديل إلى علامة تبويب أخرى لمربع الحوار من خلال التركيز على قائمة علامة التبويب ثم الضغط على زر السهم المناسب\n' + + ' مفتاح للتنقل بين علامات التبويب المتاحة.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js new file mode 100644 index 000000000..09eacf3a8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG', +'

    Начало на навигацията с клавиатурата

    \n' + + '\n' + + '
    \n' + + '
    Фокусиране върху лентата с менюта
    \n' + + '
    Windows или Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Фокусиране върху лентата с инструменти
    \n' + + '
    Windows или Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Фокусиране върху долния колонтитул
    \n' + + '
    Windows или Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Фокусиране на известието
    \n' + + '
    Windows или Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Фокусиране върху контекстуалната лента с инструменти
    \n' + + '
    Windows, Linux или macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Навигацията ще започне с първия елемент на ПИ, който ще бъде маркиран или подчертан в случая на първия елемент в\n' + + ' пътя до елемента в долния колонтитул.

    \n' + + '\n' + + '

    Навигиране между раздели на ПИ

    \n' + + '\n' + + '

    За да преминете от един раздел на ПИ към следващия, натиснете Tab.

    \n' + + '\n' + + '

    За да преминете от един раздел на ПИ към предишния, натиснете Shift+Tab.

    \n' + + '\n' + + '

    Редът за обхождане с табулация на тези раздели на ПИ е:

    \n' + + '\n' + + '
      \n' + + '
    1. Лентата с менюта
    2. \n' + + '
    3. Всяка група на лентата с инструменти
    4. \n' + + '
    5. Страничната лента
    6. \n' + + '
    7. Пътят до елемента в долния колонтитул
    8. \n' + + '
    9. Бутонът за превключване на броя на думите в долния колонтитул
    10. \n' + + '
    11. Връзката за търговска марка в долния колонтитул
    12. \n' + + '
    13. Манипулаторът за преоразмеряване на редактора в долния колонтитул
    14. \n' + + '
    \n' + + '\n' + + '

    Ако някой раздел на ПИ липсва, той се пропуска.

    \n' + + '\n' + + '

    Ако долният колонтитул има фокус за навигация с клавиатурата и няма странична лента, натискането на Shift+Tab\n' + + ' премества фокуса към първата група на лентата с инструменти, а не към последната.

    \n' + + '\n' + + '

    Навигиране в разделите на ПИ

    \n' + + '\n' + + '

    За да преминете от един елемент на ПИ към следващия, натиснете съответния клавиш със стрелка.

    \n' + + '\n' + + '

    С клавишите със стрелка наляво и надясно

    \n' + + '\n' + + '
      \n' + + '
    • се придвижвате между менютата в лентата с менюто;
    • \n' + + '
    • отваряте подменю в меню;
    • \n' + + '
    • се придвижвате между бутоните в група на лентата с инструменти;
    • \n' + + '
    • се придвижвате между елементи в пътя до елемент в долния колонтитул.
    • \n' + + '
    \n' + + '\n' + + '

    С клавишите със стрелка надолу и нагоре

    \n' + + '\n' + + '
      \n' + + '
    • се придвижвате между елементите от менюто в дадено меню;
    • \n' + + '
    • се придвижвате между елементите в изскачащо меню на лентата с инструменти.
    • \n' + + '
    \n' + + '\n' + + '

    Клавишите със стрелки се придвижват в рамките на фокусирания раздел на ПИ.

    \n' + + '\n' + + '

    За да затворите отворено меню, подменю или изскачащо меню, натиснете клавиша Esc.

    \n' + + '\n' + + '

    Ако текущият фокус е върху „горната част“ на конкретен раздел на ПИ, натискането на клавиша Esc също излиза\n' + + ' напълно от навигацията с клавиатурата.

    \n' + + '\n' + + '

    Изпълнение на елемент от менюто или бутон от лентата с инструменти

    \n' + + '\n' + + '

    Когато желаният елемент от менюто или бутон от лентата с инструменти е маркиран, натиснете Return, Enter\n' + + ' или клавиша за интервал, за да изпълните елемента.

    \n' + + '\n' + + '

    Навигиране в диалогови прозорци без раздели

    \n' + + '\n' + + '

    В диалоговите прозорци без раздели първият интерактивен компонент се фокусира, когато се отвори диалоговият прозорец.

    \n' + + '\n' + + '

    Навигирайте между интерактивните компоненти на диалоговия прозорец, като натиснете Tab или Shift+Tab.

    \n' + + '\n' + + '

    Навигиране в диалогови прозорци с раздели

    \n' + + '\n' + + '

    В диалоговите прозорци с раздели първият бутон в менюто с раздели се фокусира, когато се отвори диалоговият прозорец.

    \n' + + '\n' + + '

    Навигирайте между интерактивните компоненти на този диалогов раздел, като натиснете Tab или\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Превключете към друг диалогов раздел, като фокусирате върху менюто с раздели и след това натиснете съответния клавиш със стрелка,\n' + + ' за да преминете през наличните раздели.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ca.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ca.js new file mode 100644 index 000000000..996e29cfe --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ca.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca', +'

    Inici de la navegació amb el teclat

    \n' + + '\n' + + '
    \n' + + '
    Enfocar la barra de menús
    \n' + + '
    Windows o Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + "
    Enfocar la barra d'eines
    \n" + + '
    Windows o Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Enfocar el peu de pàgina
    \n' + + '
    Windows o Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Enfocar la notificació
    \n' + + '
    Windows o Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + "
    Enfocar una barra d'eines contextual
    \n" + + '
    Windows, Linux o macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + "

    La navegació començarà en el primer element de la interfície d'usuari, que es ressaltarà o subratllarà per al primer element a\n" + + " la ruta de l'element de peu de pàgina.

    \n" + + '\n' + + "

    Navegació entre seccions de la interfície d'usuari

    \n" + + '\n' + + "

    Per desplaçar-vos des d'una secció de la interfície d'usuari a la següent, premeu la tecla Tab.

    \n" + + '\n' + + "

    Per desplaçar-vos des d'una secció de la interfície d'usuari a l'anterior, premeu les tecles Maj+Tab.

    \n" + + '\n' + + "

    L'ordre en prémer la tecla Tab d'aquestes secciones de la interfície d'usuari és:

    \n" + + '\n' + + '
      \n' + + '
    1. Barra de menús
    2. \n' + + "
    3. Cada grup de la barra d'eines
    4. \n" + + '
    5. Barra lateral
    6. \n' + + "
    7. Ruta de l'element del peu de pàgina
    8. \n" + + '
    9. Botó de commutació de recompte de paraules al peu de pàgina
    10. \n' + + '
    11. Enllaç de marca del peu de pàgina
    12. \n' + + "
    13. Control de canvi de mida de l'editor al peu de pàgina
    14. \n" + + '
    \n' + + '\n' + + "

    Si no hi ha una secció de la interfície d'usuari, s'ometrà.

    \n" + + '\n' + + '

    Si el peu de pàgina té el focus de navegació del teclat i no hi ha cap barra lateral visible, en prémer Maj+Tab\n' + + " el focus es mou al primer grup de la barra d'eines, no l'últim.

    \n" + + '\n' + + "

    Navegació dins de les seccions de la interfície d'usuari

    \n" + + '\n' + + "

    Per desplaçar-vos des d'un element de la interfície d'usuari al següent, premeu la tecla de Fletxa adequada.

    \n" + + '\n' + + '

    Les tecles de fletxa Esquerra i Dreta

    \n' + + '\n' + + '
      \n' + + '
    • us permeten desplaçar-vos entre menús de la barra de menús.
    • \n' + + '
    • obren un submenú en un menú.
    • \n' + + "
    • us permeten desplaçar-vos entre botons d'un grup de la barra d'eines.
    • \n" + + "
    • us permeten desplaçar-vos entre elements de la ruta d'elements del peu de pàgina.
    • \n" + + '
    \n' + + '\n' + + '

    Les tecles de fletxa Avall i Amunt

    \n' + + '\n' + + '
      \n' + + "
    • us permeten desplaçar-vos entre elements de menú d'un menú.
    • \n" + + "
    • us permeten desplaçar-vos entre elements d'un menú emergent de la barra d'eines.
    • \n" + + '
    \n' + + '\n' + + "

    Les tecles de Fletxa us permeten desplaçar-vos dins de la secció de la interfície d'usuari que té el focus.

    \n" + + '\n' + + '

    Per tancar un menú, un submenú o un menú emergent oberts, premeu la tecla Esc.

    \n' + + '\n' + + "

    Si el focus actual es troba a la ‘part superior’ d'una secció específica de la interfície d'usuari, en prémer la tecla Esc també es tanca\n" + + ' completament la navegació amb el teclat.

    \n' + + '\n' + + "

    Execució d'un element de menú o d'un botó de la barra d'eines

    \n" + + '\n' + + "

    Quan l'element del menú o el botó de la barra d'eines que desitgeu estigui ressaltat, premeu Retorn, Intro\n" + + " o la barra d'espai per executar l'element.

    \n" + + '\n' + + '

    Navegació per quadres de diàleg sense pestanyes

    \n' + + '\n' + + "

    En els quadres de diàleg sense pestanyes, el primer component interactiu pren el focus quan s'obre el quadre diàleg.

    \n" + + '\n' + + '

    Premeu la tecla Tab o les tecles Maj+Tab per desplaçar-vos entre components interactius del quadre de diàleg.

    \n' + + '\n' + + '

    Navegació per quadres de diàleg amb pestanyes

    \n' + + '\n' + + "

    En els quadres de diàleg amb pestanyes, el primer botó del menú de la pestanya pren el focus quan s'obre el quadre diàleg.

    \n" + + '\n' + + "

    Per desplaçar-vos entre components interactius d'aquest quadre de diàleg, premeu la tecla Tab o\n" + + ' les tecles Maj+Tab.

    \n' + + '\n' + + "

    Canvieu a la pestanya d'un altre quadre de diàleg, tot enfocant el menú de la pestanya, i després premeu la tecla Fletxa adequada\n" + + ' per canviar entre les pestanyes disponibles.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/cs.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/cs.js new file mode 100644 index 000000000..4a5a9026e --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/cs.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs', +'

    Začínáme navigovat pomocí klávesnice

    \n' + + '\n' + + '
    \n' + + '
    Přejít na řádek nabídek
    \n' + + '
    Windows nebo Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Přejít na panel nástrojů
    \n' + + '
    Windows nebo Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Přejít na zápatí
    \n' + + '
    Windows nebo Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Přejít na oznámení
    \n' + + '
    Windows nebo Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Přejít na kontextový panel nástrojů
    \n' + + '
    Windows, Linux nebo macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigace začne u první položky uživatelského rozhraní, která bude zvýrazněna nebo v případě první položky\n' + + ' cesty k prvku zápatí podtržena.

    \n' + + '\n' + + '

    Navigace mezi oddíly uživatelského rozhraní

    \n' + + '\n' + + '

    Stisknutím klávesy Tab se posunete z jednoho oddílu uživatelského rozhraní na další.

    \n' + + '\n' + + '

    Stisknutím kláves Shift+Tab se posunete z jednoho oddílu uživatelského rozhraní na předchozí.

    \n' + + '\n' + + '

    Pořadí přepínání mezi oddíly uživatelského rozhraní pomocí klávesy Tab:

    \n' + + '\n' + + '
      \n' + + '
    1. Řádek nabídek
    2. \n' + + '
    3. Každá skupina panelu nástrojů
    4. \n' + + '
    5. Boční panel
    6. \n' + + '
    7. Cesta k prvku v zápatí.
    8. \n' + + '
    9. Tlačítko přepínače počtu slov v zápatí
    10. \n' + + '
    11. Odkaz na informace o značce v zápatí
    12. \n' + + '
    13. Úchyt pro změnu velikosti editoru v zápatí
    14. \n' + + '
    \n' + + '\n' + + '

    Pokud nějaký oddíl uživatelského rozhraní není přítomen, je přeskočen.

    \n' + + '\n' + + '

    Pokud je zápatí vybrané pro navigaci pomocí klávesnice a není zobrazen žádný boční panel, stisknutím kláves Shift+Tab\n' + + ' přejdete na první skupinu panelu nástrojů, nikoli na poslední.

    \n' + + '\n' + + '

    Navigace v rámci oddílů uživatelského rozhraní

    \n' + + '\n' + + '

    Chcete-li se přesunout z jednoho prvku uživatelského rozhraní na další, stiskněte příslušnou klávesu s šipkou.

    \n' + + '\n' + + '

    Klávesy s šipkou vlevovpravo

    \n' + + '\n' + + '
      \n' + + '
    • umožňují přesun mezi nabídkami na řádku nabídek;
    • \n' + + '
    • otevírají podnabídku nabídky;
    • \n' + + '
    • umožňují přesun mezi tlačítky ve skupině panelu nástrojů;
    • \n' + + '
    • umožňují přesun mezi položkami cesty prvku v zápatí.
    • \n' + + '
    \n' + + '\n' + + '

    Klávesy se šipkou dolůnahoru

    \n' + + '\n' + + '
      \n' + + '
    • umožňují přesun mezi položkami nabídky;
    • \n' + + '
    • umožňují přesun mezi položkami místní nabídky panelu nástrojů.
    • \n' + + '
    \n' + + '\n' + + '

    Šipky provádí přepínání v rámci vybraného oddílu uživatelského rozhraní.

    \n' + + '\n' + + '

    Chcete-li zavřít otevřenou nabídku, podnabídku nebo místní nabídku, stiskněte klávesu Esc.

    \n' + + '\n' + + '

    Pokud je aktuálně vybrána horní část oddílu uživatelského rozhraní, stisknutím klávesy Esc zcela ukončíte také\n' + + ' navigaci pomocí klávesnice.

    \n' + + '\n' + + '

    Provedení příkazu položky nabídky nebo tlačítka panelu nástrojů

    \n' + + '\n' + + '

    Pokud je zvýrazněna požadovaná položka nabídky nebo tlačítko panelu nástrojů, stisknutím klávesy Return, Enter\n' + + ' nebo mezerníku provedete příslušný příkaz.

    \n' + + '\n' + + '

    Navigace v dialogových oknech bez záložek

    \n' + + '\n' + + '

    Při otevření dialogových oken bez záložek přejdete na první interaktivní komponentu.

    \n' + + '\n' + + '

    Přecházet mezi interaktivními komponentami dialogového okna můžete stisknutím klávesy Tab nebo kombinace Shift+Tab.

    \n' + + '\n' + + '

    Navigace v dialogových oknech se záložkami

    \n' + + '\n' + + '

    Při otevření dialogových oken se záložkami přejdete na první tlačítko v nabídce záložek.

    \n' + + '\n' + + '

    Přecházet mezi interaktivními komponentami této záložky dialogového okna můžete stisknutím klávesy Tab nebo\n' + + ' kombinace Shift+Tab.

    \n' + + '\n' + + '

    Chcete-li přepnout na další záložku dialogového okna, přejděte na nabídku záložek a poté můžete stisknutím požadované šipky\n' + + ' přepínat mezi dostupnými záložkami.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/da.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/da.js new file mode 100644 index 000000000..4d1e1d4b9 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/da.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.da', +'

    Start tastaturnavigation

    \n' + + '\n' + + '
    \n' + + '
    Fokuser på menulinjen
    \n' + + '
    Windows eller Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokuser på værktøjslinjen
    \n' + + '
    Windows eller Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokuser på sidefoden
    \n' + + '
    Windows eller Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Fokuser på meddelelsen
    \n' + + '
    Windows eller Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokuser på kontekstuel værktøjslinje
    \n' + + '
    Windows, Linux eller macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigationen starter ved det første UI-element, som fremhæves eller understreges hvad angår det første element i\n' + + ' sidefodens sti til elementet.

    \n' + + '\n' + + '

    Naviger mellem UI-sektioner

    \n' + + '\n' + + '

    Gå fra én UI-sektion til den næste ved at trykke på Tab.

    \n' + + '\n' + + '

    Gå fra én UI-sektion til den forrige ved at trykke på Shift+Tab.

    \n' + + '\n' + + '

    Tab-rækkefølgen af disse UI-sektioner er:

    \n' + + '\n' + + '
      \n' + + '
    1. Menulinje
    2. \n' + + '
    3. Hver værktøjsgruppe
    4. \n' + + '
    5. Sidepanel
    6. \n' + + '
    7. Sti til elementet i sidefoden
    8. \n' + + '
    9. Til/fra-knap for ordoptælling i sidefoden
    10. \n' + + '
    11. Brandinglink i sidefoden
    12. \n' + + '
    13. Tilpasningshåndtag for editor i sidefoden
    14. \n' + + '
    \n' + + '\n' + + '

    Hvis en UI-sektion ikke er til stede, springes den over.

    \n' + + '\n' + + '

    Hvis sidefoden har fokus til tastaturnavigation, og der ikke er noget synligt sidepanel, kan der trykkes på Shift+Tab\n' + + ' for at flytte fokus til den første værktøjsgruppe, ikke den sidste.

    \n' + + '\n' + + '

    Naviger inden for UI-sektioner

    \n' + + '\n' + + '

    Gå fra ét UI-element til det næste ved at trykke på den relevante piletast.

    \n' + + '\n' + + '

    Venstre og højre piletast

    \n' + + '\n' + + '
      \n' + + '
    • flytter mellem menuerne i menulinjen.
    • \n' + + '
    • åbner en undermenu i en menu.
    • \n' + + '
    • flytter mellem knapperne i en værktøjsgruppe.
    • \n' + + '
    • flytter mellem elementer i sidefodens sti til elementet.
    • \n' + + '
    \n' + + '\n' + + '

    Pil ned og op

    \n' + + '\n' + + '
      \n' + + '
    • flytter mellem menupunkterne i en menu.
    • \n' + + '
    • flytter mellem punkterne i en genvejsmenu i værktøjslinjen.
    • \n' + + '
    \n' + + '\n' + + '

    Piletasterne kører rundt inden for UI-sektionen, der fokuseres på.

    \n' + + '\n' + + '

    For at lukke en åben menu, en åben undermenu eller en åben genvejsmenu trykkes der på Esc-tasten.

    \n' + + '\n' + + "

    Hvis det aktuelle fokus er i 'toppen' af en bestemt UI-sektion, vil tryk på Esc-tasten også afslutte\n" + + ' tastaturnavigationen helt.

    \n' + + '\n' + + '

    Udfør et menupunkt eller en værktøjslinjeknap

    \n' + + '\n' + + '

    Når det ønskede menupunkt eller den ønskede værktøjslinjeknap er fremhævet, trykkes der på Retur, Enter\n' + + ' eller mellemrumstasten for at udføre elementet.

    \n' + + '\n' + + '

    Naviger i ikke-faneopdelte dialogbokse

    \n' + + '\n' + + '

    I ikke-faneopdelte dialogbokse får den første interaktive komponent fokus, når dialogboksen åbnes.

    \n' + + '\n' + + '

    Naviger mellem interaktive dialogbokskomponenter ved at trykke på Tab eller Shift+Tab.

    \n' + + '\n' + + '

    Naviger i faneopdelte dialogbokse

    \n' + + '\n' + + '

    I faneopdelte dialogbokse får den første knap i fanemenuen fokus, når dialogboksen åbnes.

    \n' + + '\n' + + '

    Naviger mellem interaktive komponenter i denne dialogboksfane ved at trykke på Tab eller\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Skift til en anden dialogboksfane ved at fokusere på fanemenuen og derefter trykke på den relevante piletast\n' + + ' for at køre igennem de tilgængelige faner.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/de.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/de.js new file mode 100644 index 000000000..b8711ed43 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/de.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.de', +'

    Grundlagen der Tastaturnavigation

    \n' + + '\n' + + '
    \n' + + '
    Fokus auf Menüleiste
    \n' + + '
    Windows oder Linux: ALT+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokus auf Symbolleiste
    \n' + + '
    Windows oder Linux: ALT+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokus auf Fußzeile
    \n' + + '
    Windows oder Linux: ALT+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Benachrichtigung fokussieren
    \n' + + '
    Windows oder Linux: ALT+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokus auf kontextbezogene Symbolleiste
    \n' + + '
    Windows, Linux oder macOS: STRG+F9
    \n' + + '
    \n' + + '\n' + + '

    Die Navigation beginnt beim ersten Benutzeroberflächenelement, welches hervorgehoben ist. Falls sich das erste Element im Pfad der Fußzeile befindet,\n' + + ' ist es unterstrichen.

    \n' + + '\n' + + '

    Zwischen Abschnitten der Benutzeroberfläche navigieren

    \n' + + '\n' + + '

    Um von einem Abschnitt der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie TAB.

    \n' + + '\n' + + '

    Um von einem Abschnitt der Benutzeroberfläche zum vorherigen zu wechseln, drücken Sie UMSCHALT+TAB.

    \n' + + '\n' + + '

    Die Abschnitte der Benutzeroberfläche haben folgende TAB-Reihenfolge:

    \n' + + '\n' + + '
      \n' + + '
    1. Menüleiste
    2. \n' + + '
    3. Einzelne Gruppen der Symbolleiste
    4. \n' + + '
    5. Randleiste
    6. \n' + + '
    7. Elementpfad in der Fußzeile
    8. \n' + + '
    9. Umschaltfläche „Wörter zählen“ in der Fußzeile
    10. \n' + + '
    11. Branding-Link in der Fußzeile
    12. \n' + + '
    13. Editor-Ziehpunkt zur Größenänderung in der Fußzeile
    14. \n' + + '
    \n' + + '\n' + + '

    Falls ein Abschnitt der Benutzeroberflächen nicht vorhanden ist, wird er übersprungen.

    \n' + + '\n' + + '

    Wenn in der Fußzeile die Tastaturnavigation fokussiert ist und keine Randleiste angezeigt wird, wechselt der Fokus durch Drücken von UMSCHALT+TAB\n' + + ' zur ersten Gruppe der Symbolleiste, nicht zur letzten.

    \n' + + '\n' + + '

    Innerhalb von Abschnitten der Benutzeroberfläche navigieren

    \n' + + '\n' + + '

    Um von einem Element der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie die entsprechende Pfeiltaste.

    \n' + + '\n' + + '

    Die Pfeiltasten Links und Rechts

    \n' + + '\n' + + '
      \n' + + '
    • wechseln zwischen Menüs in der Menüleiste.
    • \n' + + '
    • öffnen das Untermenü eines Menüs.
    • \n' + + '
    • wechseln zwischen Schaltflächen in einer Gruppe der Symbolleiste.
    • \n' + + '
    • wechseln zwischen Elementen im Elementpfad der Fußzeile.
    • \n' + + '
    \n' + + '\n' + + '

    Die Pfeiltasten Abwärts und Aufwärts

    \n' + + '\n' + + '
      \n' + + '
    • wechseln zwischen Menüelementen in einem Menü.
    • \n' + + '
    • wechseln zwischen Elementen in einem Popupmenü der Symbolleiste.
    • \n' + + '
    \n' + + '\n' + + '

    Die Pfeiltasten rotieren innerhalb des fokussierten Abschnitts der Benutzeroberfläche.

    \n' + + '\n' + + '

    Um ein geöffnetes Menü, ein geöffnetes Untermenü oder ein geöffnetes Popupmenü zu schließen, drücken Sie die ESC-Taste.

    \n' + + '\n' + + '

    Wenn sich der aktuelle Fokus ganz oben in einem bestimmten Abschnitt der Benutzeroberfläche befindet, wird durch Drücken der ESC-Taste auch\n' + + ' die Tastaturnavigation beendet.

    \n' + + '\n' + + '

    Ein Menüelement oder eine Symbolleistenschaltfläche ausführen

    \n' + + '\n' + + '

    Wenn das gewünschte Menüelement oder die gewünschte Symbolleistenschaltfläche hervorgehoben ist, drücken Sie Zurück, Eingabe\n' + + ' oder die Leertaste, um das Element auszuführen.

    \n' + + '\n' + + '

    In Dialogfeldern ohne Registerkarten navigieren

    \n' + + '\n' + + '

    In Dialogfeldern ohne Registerkarten ist beim Öffnen eines Dialogfelds die erste interaktive Komponente fokussiert.

    \n' + + '\n' + + '

    Navigieren Sie zwischen den interaktiven Komponenten eines Dialogfelds, indem Sie TAB oder UMSCHALT+TAB drücken.

    \n' + + '\n' + + '

    In Dialogfeldern mit Registerkarten navigieren

    \n' + + '\n' + + '

    In Dialogfeldern mit Registerkarten ist beim Öffnen eines Dialogfelds die erste Schaltfläche eines Registerkartenmenüs fokussiert.

    \n' + + '\n' + + '

    Navigieren Sie zwischen den interaktiven Komponenten auf dieser Registerkarte des Dialogfelds, indem Sie TAB oder\n' + + ' UMSCHALT+TAB drücken.

    \n' + + '\n' + + '

    Wechseln Sie zu einer anderen Registerkarte des Dialogfelds, indem Sie den Fokus auf das Registerkartenmenü legen und dann die entsprechende Pfeiltaste\n' + + ' drücken, um durch die verfügbaren Registerkarten zu rotieren.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/el.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/el.js new file mode 100644 index 000000000..98afabe94 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/el.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.el', +'

    Έναρξη πλοήγησης μέσω πληκτρολογίου

    \n' + + '\n' + + '
    \n' + + '
    Εστίαση στη γραμμή μενού
    \n' + + '
    Windows ή Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Εστίαση στη γραμμή εργαλείων
    \n' + + '
    Windows ή Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Εστίαση στο υποσέλιδο
    \n' + + '
    Windows ή Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Εστίαση στην ειδοποίηση
    \n' + + '
    Windows ή Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Εστίαση σε γραμμή εργαλείων βάσει περιεχομένου
    \n' + + '
    Windows, Linux ή macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Η πλοήγηση θα ξεκινήσει από το πρώτο στοιχείο περιβάλλοντος χρήστη, που θα επισημαίνεται ή θα είναι υπογραμμισμένο,\n' + + ' όπως στην περίπτωση της διαδρομής του στοιχείου Υποσέλιδου.

    \n' + + '\n' + + '

    Πλοήγηση μεταξύ ενοτήτων του περιβάλλοντος χρήστη

    \n' + + '\n' + + '

    Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην επόμενη, πιέστε το πλήκτρο Tab.

    \n' + + '\n' + + '

    Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην προηγούμενη, πιέστε τα πλήκτρα Shift+Tab.

    \n' + + '\n' + + '

    Η σειρά Tab αυτών των ενοτήτων περιβάλλοντος χρήστη είναι η εξής:

    \n' + + '\n' + + '
      \n' + + '
    1. Γραμμή μενού
    2. \n' + + '
    3. Κάθε ομάδα γραμμής εργαλείων
    4. \n' + + '
    5. Πλαϊνή γραμμή
    6. \n' + + '
    7. Διαδρομή στοιχείου στο υποσέλιδο
    8. \n' + + '
    9. Κουμπί εναλλαγής μέτρησης λέξεων στο υποσέλιδο
    10. \n' + + '
    11. Σύνδεσμος επωνυμίας στο υποσέλιδο
    12. \n' + + '
    13. Λαβή αλλαγής μεγέθους προγράμματος επεξεργασίας στο υποσέλιδο
    14. \n' + + '
    \n' + + '\n' + + '

    Εάν δεν εμφανίζεται ενότητα περιβάλλοντος χρήστη, παραλείπεται.

    \n' + + '\n' + + '

    Εάν η εστίαση πλοήγησης βρίσκεται στο πληκτρολόγιο και δεν υπάρχει εμφανής πλαϊνή γραμμή, εάν πιέσετε Shift+Tab\n' + + ' η εστίαση μετακινείται στην πρώτη ομάδα γραμμής εργαλείων, όχι στην τελευταία.

    \n' + + '\n' + + '

    Πλοήγηση εντός των ενοτήτων του περιβάλλοντος χρήστη

    \n' + + '\n' + + '

    Για να μετακινηθείτε από ένα στοιχείο περιβάλλοντος χρήστη στο επόμενο, πιέστε το αντίστοιχο πλήκτρο βέλους.

    \n' + + '\n' + + '

    Με τα πλήκτρα αριστερού και δεξιού βέλους

    \n' + + '\n' + + '
      \n' + + '
    • γίνεται μετακίνηση μεταξύ των μενού στη γραμμή μενού.
    • \n' + + '
    • ανοίγει ένα υπομενού σε ένα μενού.
    • \n' + + '
    • γίνεται μετακίνηση μεταξύ κουμπιών σε μια ομάδα γραμμής εργαλείων.
    • \n' + + '
    • γίνεται μετακίνηση μεταξύ στοιχείων στη διαδρομή στοιχείου στο υποσέλιδο.
    • \n' + + '
    \n' + + '\n' + + '

    Με τα πλήκτρα επάνω και κάτω βέλους

    \n' + + '\n' + + '
      \n' + + '
    • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα μενού.
    • \n' + + '
    • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα αναδυόμενο μενού γραμμής εργαλείων.
    • \n' + + '
    \n' + + '\n' + + '

    Με τα πλήκτρα βέλους γίνεται κυκλική μετακίνηση εντός της εστιασμένης ενότητας περιβάλλοντος χρήστη.

    \n' + + '\n' + + '

    Για να κλείσετε ένα ανοιχτό μενού, ένα ανοιχτό υπομενού ή ένα ανοιχτό αναδυόμενο μενού, πιέστε το πλήκτρο Esc.

    \n' + + '\n' + + '

    Εάν η τρέχουσα εστίαση βρίσκεται στην κορυφή μιας ενότητας περιβάλλοντος χρήστη, πιέζοντας το πλήκτρο Esc,\n' + + ' γίνεται επίσης πλήρης έξοδος από την πλοήγηση μέσω πληκτρολογίου.

    \n' + + '\n' + + '

    Εκτέλεση ενός στοιχείου μενού ή κουμπιού γραμμής εργαλείων

    \n' + + '\n' + + '

    Όταν το επιθυμητό στοιχείο μενού ή κουμπί γραμμής εργαλείων είναι επισημασμένο, πιέστε τα πλήκτρα Return, Enter,\n' + + ' ή το πλήκτρο διαστήματος για να εκτελέσετε το στοιχείο.

    \n' + + '\n' + + '

    Πλοήγηση σε παράθυρα διαλόγου χωρίς καρτέλες

    \n' + + '\n' + + '

    Σε παράθυρα διαλόγου χωρίς καρτέλες, το πρώτο αλληλεπιδραστικό στοιχείο λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

    \n' + + '\n' + + '

    Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων παραθύρων διαλόγων πιέζοντας τα πλήκτρα Tab ή Shift+Tab.

    \n' + + '\n' + + '

    Πλοήγηση σε παράθυρα διαλόγου με καρτέλες

    \n' + + '\n' + + '

    Σε παράθυρα διαλόγου με καρτέλες, το πρώτο κουμπί στο μενού καρτέλας λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

    \n' + + '\n' + + '

    Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων αυτής της καρτέλα διαλόγου πιέζοντας τα πλήκτρα Tab ή\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Μπορείτε να κάνετε εναλλαγή σε άλλη καρτέλα του παραθύρου διαλόγου, μεταφέροντας την εστίαση στο μενού καρτέλας και πιέζοντας το κατάλληλο πλήκτρο βέλους\n' + + ' για να μετακινηθείτε κυκλικά στις διαθέσιμες καρτέλες.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/en.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/en.js new file mode 100644 index 000000000..5dd753e82 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/en.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.en', +'

    Begin keyboard navigation

    \n' + + '\n' + + '
    \n' + + '
    Focus the Menu bar
    \n' + + '
    Windows or Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Focus the Toolbar
    \n' + + '
    Windows or Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Focus the footer
    \n' + + '
    Windows or Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Focus the notification
    \n' + + '
    Windows or Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Focus a contextual toolbar
    \n' + + '
    Windows, Linux or macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigation will start at the first UI item, which will be highlighted, or underlined in the case of the first item in\n' + + ' the Footer element path.

    \n' + + '\n' + + '

    Navigate between UI sections

    \n' + + '\n' + + '

    To move from one UI section to the next, press Tab.

    \n' + + '\n' + + '

    To move from one UI section to the previous, press Shift+Tab.

    \n' + + '\n' + + '

    The Tab order of these UI sections is:

    \n' + + '\n' + + '
      \n' + + '
    1. Menu bar
    2. \n' + + '
    3. Each toolbar group
    4. \n' + + '
    5. Sidebar
    6. \n' + + '
    7. Element path in the footer
    8. \n' + + '
    9. Word count toggle button in the footer
    10. \n' + + '
    11. Branding link in the footer
    12. \n' + + '
    13. Editor resize handle in the footer
    14. \n' + + '
    \n' + + '\n' + + '

    If a UI section is not present, it is skipped.

    \n' + + '\n' + + '

    If the footer has keyboard navigation focus, and there is no visible sidebar, pressing Shift+Tab\n' + + ' moves focus to the first toolbar group, not the last.

    \n' + + '\n' + + '

    Navigate within UI sections

    \n' + + '\n' + + '

    To move from one UI element to the next, press the appropriate Arrow key.

    \n' + + '\n' + + '

    The Left and Right arrow keys

    \n' + + '\n' + + '
      \n' + + '
    • move between menus in the menu bar.
    • \n' + + '
    • open a sub-menu in a menu.
    • \n' + + '
    • move between buttons in a toolbar group.
    • \n' + + '
    • move between items in the footer’s element path.
    • \n' + + '
    \n' + + '\n' + + '

    The Down and Up arrow keys

    \n' + + '\n' + + '
      \n' + + '
    • move between menu items in a menu.
    • \n' + + '
    • move between items in a toolbar pop-up menu.
    • \n' + + '
    \n' + + '\n' + + '

    Arrow keys cycle within the focused UI section.

    \n' + + '\n' + + '

    To close an open menu, an open sub-menu, or an open pop-up menu, press the Esc key.

    \n' + + '\n' + + '

    If the current focus is at the ‘top’ of a particular UI section, pressing the Esc key also exits\n' + + ' keyboard navigation entirely.

    \n' + + '\n' + + '

    Execute a menu item or toolbar button

    \n' + + '\n' + + '

    When the desired menu item or toolbar button is highlighted, press Return, Enter,\n' + + ' or the Space bar to execute the item.

    \n' + + '\n' + + '

    Navigate non-tabbed dialogs

    \n' + + '\n' + + '

    In non-tabbed dialogs, the first interactive component takes focus when the dialog opens.

    \n' + + '\n' + + '

    Navigate between interactive dialog components by pressing Tab or Shift+Tab.

    \n' + + '\n' + + '

    Navigate tabbed dialogs

    \n' + + '\n' + + '

    In tabbed dialogs, the first button in the tab menu takes focus when the dialog opens.

    \n' + + '\n' + + '

    Navigate between interactive components of this dialog tab by pressing Tab or\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Switch to another dialog tab by giving the tab menu focus and then pressing the appropriate Arrow\n' + + ' key to cycle through the available tabs.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/es.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/es.js new file mode 100644 index 000000000..e426c2e2e --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/es.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.es', +'

    Iniciar la navegación con el teclado

    \n' + + '\n' + + '
    \n' + + '
    Enfocar la barra de menús
    \n' + + '
    Windows o Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Enfocar la barra de herramientas
    \n' + + '
    Windows o Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Enfocar el pie de página
    \n' + + '
    Windows o Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Enfocar la notificación
    \n' + + '
    Windows o Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Enfocar una barra de herramientas contextual
    \n' + + '
    Windows, Linux o macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    La navegación comenzará por el primer elemento de la interfaz de usuario (IU), de tal manera que se resaltará, o bien se subrayará si se trata del primer elemento de\n' + + ' la ruta de elemento del pie de página.

    \n' + + '\n' + + '

    Navegar entre las secciones de la IU

    \n' + + '\n' + + '

    Para pasar de una sección de la IU a la siguiente, pulse la tecla Tab.

    \n' + + '\n' + + '

    Para pasar de una sección de la IU a la anterior, pulse Mayús+Tab.

    \n' + + '\n' + + '

    El orden de tabulación de estas secciones de la IU es:

    \n' + + '\n' + + '
      \n' + + '
    1. Barra de menús
    2. \n' + + '
    3. Cada grupo de barra de herramientas
    4. \n' + + '
    5. Barra lateral
    6. \n' + + '
    7. Ruta del elemento en el pie de página
    8. \n' + + '
    9. Botón de alternancia de recuento de palabras en el pie de página
    10. \n' + + '
    11. Enlace de personalización de marca en el pie de página
    12. \n' + + '
    13. Controlador de cambio de tamaño en el pie de página
    14. \n' + + '
    \n' + + '\n' + + '

    Si una sección de la IU no está presente, esta se omite.

    \n' + + '\n' + + '

    Si el pie de página tiene un enfoque de navegación con el teclado y no hay ninguna barra lateral visible, al pulsar Mayús+Tab,\n' + + ' el enfoque se moverá al primer grupo de barra de herramientas, en lugar de al último.

    \n' + + '\n' + + '

    Navegar dentro de las secciones de la IU

    \n' + + '\n' + + '

    Para pasar de un elemento de la IU al siguiente, pulse la tecla de flecha correspondiente.

    \n' + + '\n' + + '

    Las teclas de flecha izquierda y derecha permiten

    \n' + + '\n' + + '
      \n' + + '
    • desplazarse entre los menús de la barra de menús.
    • \n' + + '
    • abrir el submenú de un menú.
    • \n' + + '
    • desplazarse entre los botones de un grupo de barra de herramientas.
    • \n' + + '
    • desplazarse entre los elementos de la ruta de elemento del pie de página.
    • \n' + + '
    \n' + + '\n' + + '

    Las teclas de flecha abajo y arriba permiten

    \n' + + '\n' + + '
      \n' + + '
    • desplazarse entre los elementos de menú de un menú.
    • \n' + + '
    • desplazarse entre los elementos de un menú emergente de una barra de herramientas.
    • \n' + + '
    \n' + + '\n' + + '

    Las teclas de flecha van cambiando dentro de la sección de la IU enfocada.

    \n' + + '\n' + + '

    Para cerrar un menú, un submenú o un menú emergente que estén abiertos, pulse la tecla Esc.

    \n' + + '\n' + + '

    Si el enfoque actual se encuentra en la parte superior de una sección de la IU determinada, al pulsar la tecla Esc saldrá\n' + + ' de la navegación con el teclado por completo.

    \n' + + '\n' + + '

    Ejecutar un elemento de menú o un botón de barra de herramientas

    \n' + + '\n' + + '

    Si el elemento de menú o el botón de barra de herramientas deseado está resaltado, pulse la tecla Retorno o Entrar,\n' + + ' o la barra espaciadora para ejecutar el elemento.

    \n' + + '\n' + + '

    Navegar por cuadros de diálogo sin pestañas

    \n' + + '\n' + + '

    En los cuadros de diálogo sin pestañas, el primer componente interactivo se enfoca al abrirse el cuadro de diálogo.

    \n' + + '\n' + + '

    Para navegar entre los componentes interactivos del cuadro de diálogo, pulse las teclas Tab o Mayús+Tab.

    \n' + + '\n' + + '

    Navegar por cuadros de diálogo con pestañas

    \n' + + '\n' + + '

    En los cuadros de diálogo con pestañas, el primer botón del menú de pestaña se enfoca al abrirse el cuadro de diálogo.

    \n' + + '\n' + + '

    Para navegar entre componentes interactivos de esta pestaña del cuadro de diálogo, pulse las teclas Tab o\n' + + ' Mayús+Tab.

    \n' + + '\n' + + '

    Si desea cambiar a otra pestaña del cuadro de diálogo, enfoque el menú de pestañas y, a continuación, pulse la tecla de flecha\n' + + ' correspondiente para moverse por las pestañas disponibles.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/eu.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/eu.js new file mode 100644 index 000000000..c18b94030 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/eu.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu', +'

    Hasi teklatuaren nabigazioa

    \n' + + '\n' + + '
    \n' + + '
    Fokuratu menu-barra
    \n' + + '
    Windows edo Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokuratu tresna-barra
    \n' + + '
    Windows edo Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokuratu orri-oina
    \n' + + '
    Windows edo Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Fokuratu jakinarazpena
    \n' + + '
    Windows edo Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokuratu testuinguruaren tresna-barra
    \n' + + '
    Windows, Linux edo macOS: Ktrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Nabigazioa EIko lehen elementuan hasiko da: elementu hori nabarmendu egingo da, edo azpimarratu lehen elementua bada\n' + + ' orri-oineko elementuaren bidea.

    \n' + + '\n' + + '

    Nabigatu EIko atalen artean

    \n' + + '\n' + + '

    EIko atal batetik hurrengora mugitzeko, sakatu Tabuladorea.

    \n' + + '\n' + + '

    EIko atal batetik aurrekora mugitzeko, sakatu Maius+Tabuladorea.

    \n' + + '\n' + + '

    EIko atal hauen Tabuladorea da:

    \n' + + '\n' + + '
      \n' + + '
    1. Menu-barra
    2. \n' + + '
    3. Tresna-barraren talde bakoitza
    4. \n' + + '
    5. Alboko barra
    6. \n' + + '
    7. Orri-oineko elementuaren bidea
    8. \n' + + '
    9. Orri-oneko urrats-kontaketa txandakatzeko botoia
    10. \n' + + '
    11. Orri-oineko marken esteka
    12. \n' + + '
    13. Orri-oineko editorearen tamaina aldatzeko heldulekua
    14. \n' + + '
    \n' + + '\n' + + '

    EIko atal bat ez badago, saltatu egin da.

    \n' + + '\n' + + '

    Orri-oinak teklatuaren nabigazioa fokuratuta badago, eta alboko barra ikusgai ez badago, Maius+Tabuladorea sakatuz gero,\n' + + ' fokua tresna-barrako lehen taldera eramaten da, ez azkenera.

    \n' + + '\n' + + '

    Nabigatu EIko atalen barruan

    \n' + + '\n' + + '

    EIko elementu batetik hurrengora mugitzeko, sakatu dagokion Gezia tekla.

    \n' + + '\n' + + '

    Ezkerrera eta Eskuinera gezi-teklak

    \n' + + '\n' + + '
      \n' + + '
    • menu-barrako menuen artean mugitzen da.
    • \n' + + '
    • ireki azpimenu bat menuan.
    • \n' + + '
    • mugitu botoi batetik bestera tresna-barren talde batean.
    • \n' + + '
    • mugitu orri-oineko elementuaren bideko elementu batetik bestera.
    • \n' + + '
    \n' + + '\n' + + '

    Gora eta Behera gezi-teklak

    \n' + + '\n' + + '
      \n' + + '
    • mugitu menu bateko menu-elementuen artean.
    • \n' + + '
    • mugitu tresna-barrako menu gainerakor bateko menu-elementuen artean.
    • \n' + + '
    \n' + + '\n' + + '

    Gezia teklen zikloa nabarmendutako EI atalen barruan.

    \n' + + '\n' + + '

    Irekitako menu bat ixteko, ireki azpimenua, edo ireki menu gainerakorra, sakatu Ihes tekla.

    \n' + + '\n' + + '

    Une horretan fokuratzea EIko atal jakin baten "goialdean" badago, Ihes tekla sakatuz gero\n' + + ' teklatuaren nabigaziotik irtengo zara.

    \n' + + '\n' + + '

    Exekutatu menuko elementu bat edo tresna-barrako botoi bat

    \n' + + '\n' + + '

    Nahi den menuaren elementua edo tresna-barraren botoia nabarmenduta dagoenean, sakatu Itzuli, Sartu\n' + + ' edo Zuriune-barra elementua exekutatzeko.

    \n' + + '\n' + + '

    Nabigatu fitxarik gabeko elkarrizketak

    \n' + + '\n' + + '

    Fitxarik gabeko elkarrizketetan, lehen osagai interaktiboa fokuratzen da elkarrizketa irekitzen denean.

    \n' + + '\n' + + '

    Nabigatu elkarrizketa interaktiboko osagai batetik bestera Tabuladorea edo Maius+Tabuladorea sakatuta.

    \n' + + '\n' + + '

    Nabigatu fitxadun elkarrizketak

    \n' + + '\n' + + '

    Fitxadun elkarrizketetan, fitxa-menuko lehen botoia fokuratzen da elkarrizketa irekitzen denean.

    \n' + + '\n' + + '

    Nabigatu elkarrizketa-fitxa honen interaktiboko osagai batetik bestera Tabuladorea edo\n' + + ' Maius+Tabuladorea sakatuta.

    \n' + + '\n' + + '

    Aldatu beste elkarrizketa-fitxa batera fitxa-menua fokuratu eta dagokion Gezia\n' + + ' tekla sakatzeko, erabilgarri dauden fitxa batetik bestera txandakatzeko.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fa.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fa.js new file mode 100644 index 000000000..2a55012e8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fa.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa', +'

    شروع پیمایش صفحه‌کلید

    \n' + + '\n' + + '
    \n' + + '
    تمرکز بر نوار منو
    \n' + + '
    Windows یا Linux:‎‏: Alt+F9
    \n' + + '
    ‎‏macOS: ⌥F9‎‏
    \n' + + '
    تمرکز بر نوار ابزار
    \n' + + '
    Windows یا Linux‎‏: Alt+F10
    \n' + + '
    ‎‏macOS: ⌥F10‎‏
    \n' + + '
    تمرکز بر پانویس
    \n' + + '
    Windows یا Linux‎‏: Alt+F11
    \n' + + '
    ‎‏macOS: ⌥F11‎‏
    \n' + + '
    تمرکز اعلان
    \n' + + '
    ویندوز یا لینوکس: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    تمرکز بر نوار ابزار بافتاری
    \n' + + '
    Windows ،Linux یا macOS:‏ Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    پیمایش در اولین مورد رابط کاربری شروع می‌شود و درخصوص اولین مورد در\n' + + ' مسیر عنصر پانویس، برجسته یا زیرخط‌دار می‌شود.

    \n' + + '\n' + + '

    پیمایش بین بخش‌های رابط کاربری

    \n' + + '\n' + + '

    برای جابجایی از یک بخش رابط کاربری به بخش بعدی، Tab را فشار دهید.

    \n' + + '\n' + + '

    برای جابجایی از یک بخش رابط کاربری به بخش قبلی، Shift+Tab را فشار دهید.

    \n' + + '\n' + + '

    ترتیب Tab این بخش‌های رابط کاربری عبارتند از:

    \n' + + '\n' + + '
      \n' + + '
    1. نوار منو
    2. \n' + + '
    3. هر گروه نوار ابزار
    4. \n' + + '
    5. نوار کناری
    6. \n' + + '
    7. مسیر عنصر در پانویس
    8. \n' + + '
    9. دکمه تغییر وضعیت تعداد کلمات در پانویس
    10. \n' + + '
    11. پیوند نمانام‌سازی در پانویس
    12. \n' + + '
    13. دسته تغییر اندازه ویرایشگر در پانویس
    14. \n' + + '
    \n' + + '\n' + + '

    اگر بخشی از رابط کاربری موجود نباشد، رد می‌شود.

    \n' + + '\n' + + '

    اگر پانویس دارای تمرکز بر پیمایش صفحه‌کلید باشد،‌ و نوار کناری قابل‌مشاهده وجود ندارد، فشردن Shift+Tab\n' + + ' تمرکز را به گروه نوار ابزار اول می‌برد، نه آخر.

    \n' + + '\n' + + '

    پیمایش در بخش‌های رابط کاربری

    \n' + + '\n' + + '

    برای جابجایی از یک عنصر رابط کاربری به بعدی، کلید جهت‌نمای مناسب را فشار دهید.

    \n' + + '\n' + + '

    کلیدهای جهت‌نمای چپ و راست

    \n' + + '\n' + + '
      \n' + + '
    • جابجایی بین منوها در نوار منو.
    • \n' + + '
    • باز کردن منوی فرعی در یک منو.
    • \n' + + '
    • جابجایی بین دکمه‌ها در یک گروه نوار ابزار.
    • \n' + + '
    • جابجایی بین موارد در مسیر عنصر پانویس.
    • \n' + + '
    \n' + + '\n' + + '

    کلیدهای جهت‌نمای پایین و بالا

    \n' + + '\n' + + '
      \n' + + '
    • جابجایی بین موارد منو در یک منو.
    • \n' + + '
    • جابجایی بین موارد در یک منوی بازشوی نوار ابزار.
    • \n' + + '
    \n' + + '\n' + + '

    کلیدهایجهت‌نما در بخش رابط کاربری متمرکز می‌چرخند.

    \n' + + '\n' + + '

    برای بستن یک منوی باز، یک منوی فرعی باز، یا یک منوی بازشوی باز، کلید Esc را فشار دهید.

    \n' + + '\n' + + '

    اگر تمرکز فعلی در «بالای» یک بخش رابط کاربری خاص است، فشردن کلید Esc نیز موجب\n' + + ' خروج کامل از پیمایش صفحه‌کلید می‌شود.

    \n' + + '\n' + + '

    اجرای یک مورد منو یا دکمه نوار ابزار

    \n' + + '\n' + + '

    وقتی مورد منو یا دکمه نوار ابزار مورد نظر هایلایت شد، دکمه بازگشت، Enter،\n' + + ' یا نوار Space را فشار دهید تا مورد را اجرا کنید.

    \n' + + '\n' + + '

    پیمایش در کادرهای گفتگوی بدون زبانه

    \n' + + '\n' + + '

    در کادرهای گفتگوی بدون زبانه، وقتی کادر گفتگو باز می‌شود، اولین جزء تعاملی متمرکز می‌شود.

    \n' + + '\n' + + '

    با فشردن Tab یا Shift+Tab، بین اجزای کادر گفتگوی تعاملی پیمایش کنید.

    \n' + + '\n' + + '

    پیمایش کادرهای گفتگوی زبانه‌دار

    \n' + + '\n' + + '

    در کادرهای گفتگوی زبانه‌دار، وقتی کادر گفتگو باز می‌شود، اولین دکمه در منوی زبانه متمرکز می‌شود.

    \n' + + '\n' + + '

    با فشردن Tab یا\n' + + ' Shift+Tab، بین اجزای تعاملی این زبانه کادر گفتگو پیمایش کنید.

    \n' + + '\n' + + '

    با دادن تمرکز به منوی زبانه و سپس فشار دادن کلید جهت‌نمای\n' + + ' مناسب برای چرخش میان زبانه‌های موجود، به زبانه کادر گفتگوی دیگری بروید.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fi.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fi.js new file mode 100644 index 000000000..f01dc91c8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi', +'

    Näppäimistönavigoinnin aloittaminen

    \n' + + '\n' + + '
    \n' + + '
    Siirrä kohdistus valikkopalkkiin
    \n' + + '
    Windows tai Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Siirrä kohdistus työkalupalkkiin
    \n' + + '
    Windows tai Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Siirrä kohdistus alatunnisteeseen
    \n' + + '
    Windows tai Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Keskitä ilmoitukseen
    \n' + + '
    Windows ja Linux: Alt + F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Siirrä kohdistus kontekstuaaliseen työkalupalkkiin
    \n' + + '
    Windows, Linux tai macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigointi aloitetaan ensimmäisestä käyttöliittymän kohteesta, joka joko korostetaan tai alleviivataan, jos\n' + + ' kyseessä on Alatunniste-elementin polun ensimmäinen kohde.

    \n' + + '\n' + + '

    Käyttöliittymän eri osien välillä navigointi

    \n' + + '\n' + + '

    Paina sarkainnäppäintä siirtyäksesi käyttöliittymän osasta seuraavaan.

    \n' + + '\n' + + '

    Jos haluat siirtyä edelliseen käyttöliittymän osaan, paina Shift+sarkainnäppäin.

    \n' + + '\n' + + '

    Sarkainnäppäin siirtää sinua näissä käyttöliittymän osissa tässä järjestyksessä:

    \n' + + '\n' + + '
      \n' + + '
    1. Valikkopalkki
    2. \n' + + '
    3. Työkalupalkin ryhmät
    4. \n' + + '
    5. Sivupalkki
    6. \n' + + '
    7. Elementin polku alatunnisteessa
    8. \n' + + '
    9. Sanalaskurin vaihtopainike alatunnisteessa
    10. \n' + + '
    11. Brändäyslinkki alatunnisteessa
    12. \n' + + '
    13. Editorin koon muuttamisen kahva alatunnisteessa
    14. \n' + + '
    \n' + + '\n' + + '

    Jos jotakin käyttöliittymän osaa ei ole, se ohitetaan.

    \n' + + '\n' + + '

    Jos kohdistus on siirretty alatunnisteeseen näppäimistönavigoinnilla eikä sivupalkkia ole näkyvissä, Shift+sarkainnäppäin\n' + + ' siirtää kohdistuksen työkalupalkin ensimmäiseen ryhmään, eikä viimeiseen.

    \n' + + '\n' + + '

    Käyttöliittymän eri osien sisällä navigointi

    \n' + + '\n' + + '

    Paina nuolinäppäimiä siirtyäksesi käyttöliittymäelementistä seuraavaan.

    \n' + + '\n' + + '

    Vasen- ja Oikea-nuolinäppäimet

    \n' + + '\n' + + '
      \n' + + '
    • siirtävät sinua valikkopalkin valikoiden välillä.
    • \n' + + '
    • avaavat valikon alavalikon.
    • \n' + + '
    • siirtävät sinua työkalupalkin ryhmän painikkeiden välillä.
    • \n' + + '
    • siirtävät sinua kohteiden välillä alatunnisteen elementin polussa.
    • \n' + + '
    \n' + + '\n' + + '

    Alas- ja Ylös-nuolinäppäimet

    \n' + + '\n' + + '
      \n' + + '
    • siirtävät sinua valikon valikkokohteiden välillä.
    • \n' + + '
    • siirtävät sinua työkalupalkin ponnahdusvalikon kohteiden välillä.
    • \n' + + '
    \n' + + '\n' + + '

    Nuolinäppäimet siirtävät sinua käyttöliittymän korostetun osan sisällä syklissä.

    \n' + + '\n' + + '

    Paina Esc-näppäintä sulkeaksesi avoimen valikon, avataksesi alavalikon tai avataksesi ponnahdusvalikon.

    \n' + + '\n' + + '

    Jos kohdistus on käyttöliittymän tietyn osion ylälaidassa, Esc-näppäimen painaminen\n' + + ' poistuu myös näppäimistönavigoinnista kokonaan.

    \n' + + '\n' + + '

    Suorita valikkokohde tai työkalupalkin painike

    \n' + + '\n' + + '

    Kun haluamasi valikkokohde tai työkalupalkin painike on korostettuna, paina Return-, Enter-\n' + + ' tai välilyöntinäppäintä suorittaaksesi kohteen.

    \n' + + '\n' + + '

    Välilehdittömissä valintaikkunoissa navigointi

    \n' + + '\n' + + '

    Kun välilehdetön valintaikkuna avautuu, kohdistus siirtyy sen ensimmäiseen interaktiiviseen komponenttiin.

    \n' + + '\n' + + '

    Voit siirtyä valintaikkunan interaktiivisten komponenttien välillä painamalla sarkainnäppäintä tai Shift+sarkainnäppäin.

    \n' + + '\n' + + '

    Välilehdellisissä valintaikkunoissa navigointi

    \n' + + '\n' + + '

    Kun välilehdellinen valintaikkuna avautuu, kohdistus siirtyy välilehtivalikon ensimmäiseen painikkeeseen.

    \n' + + '\n' + + '

    Voit siirtyä valintaikkunan välilehden interaktiivisen komponenttien välillä painamalla sarkainnäppäintä tai\n' + + ' Shift+sarkainnäppäin.

    \n' + + '\n' + + '

    Voit siirtyä valintaikkunan toiseen välilehteen siirtämällä kohdistuksen välilehtivalikkoon ja painamalla sopivaa nuolinäppäintä\n' + + ' siirtyäksesi käytettävissä olevien välilehtien välillä syklissä.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js new file mode 100644 index 000000000..3f611e873 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR', +'

    Débuter la navigation au clavier

    \n' + + '\n' + + '
    \n' + + '
    Cibler la barre du menu
    \n' + + '
    Windows ou Linux : Alt+F9
    \n' + + '
    macOS : ⌥F9
    \n' + + "
    Cibler la barre d'outils
    \n" + + '
    Windows ou Linux : Alt+F10
    \n' + + '
    macOS : ⌥F10
    \n' + + '
    Cibler le pied de page
    \n' + + '
    Windows ou Linux : Alt+F11
    \n' + + '
    macOS : ⌥F11
    \n' + + '
    Cibler la notification
    \n' + + '
    Windows ou Linux : Alt+F12
    \n' + + '
    macOS : ⌥F12
    \n' + + "
    Cibler une barre d'outils contextuelle
    \n" + + '
    Windows, Linux ou macOS : Ctrl+F9
    \n' + + '
    \n' + + '\n' + + "

    La navigation débutera sur le premier élément de l'interface utilisateur, qui sera mis en surbrillance ou bien souligné dans le cas du premier élément du\n" + + " chemin d'éléments du pied de page.

    \n" + + '\n' + + "

    Naviguer entre les sections de l'interface utilisateur

    \n" + + '\n' + + "

    Pour passer d'une section de l'interface utilisateur à la suivante, appuyez sur Tabulation.

    \n" + + '\n' + + "

    Pour passer d'une section de l'interface utilisateur à la précédente, appuyez sur Maj+Tabulation.

    \n" + + '\n' + + "

    L'ordre de Tabulation de ces sections de l'interface utilisateur est le suivant :

    \n" + + '\n' + + '
      \n' + + '
    1. Barre du menu
    2. \n' + + "
    3. Chaque groupe de barres d'outils
    4. \n" + + '
    5. Barre latérale
    6. \n' + + "
    7. Chemin d'éléments du pied de page
    8. \n" + + "
    9. Bouton d'activation du compteur de mots dans le pied de page
    10. \n" + + '
    11. Lien de marque dans le pied de page
    12. \n' + + "
    13. Poignée de redimensionnement de l'éditeur dans le pied de page
    14. \n" + + '
    \n' + + '\n' + + "

    Si une section de l'interface utilisateur n'est pas présente, elle sera ignorée.

    \n" + + '\n' + + "

    Si le pied de page comporte un ciblage par navigation au clavier et qu'il n'y a aucune barre latérale visible, appuyer sur Maj+Tabulation\n" + + " déplace le ciblage vers le premier groupe de barres d'outils et non le dernier.

    \n" + + '\n' + + "

    Naviguer au sein des sections de l'interface utilisateur

    \n" + + '\n' + + "

    Pour passer d'un élément de l'interface utilisateur au suivant, appuyez sur la Flèche appropriée.

    \n" + + '\n' + + '

    Les touches fléchées Gauche et Droite

    \n' + + '\n' + + '
      \n' + + '
    • se déplacent entre les menus de la barre des menus.
    • \n' + + "
    • ouvrent un sous-menu au sein d'un menu.
    • \n" + + "
    • se déplacent entre les boutons d'un groupe de barres d'outils.
    • \n" + + "
    • se déplacent entre les éléments du chemin d'éléments du pied de page.
    • \n" + + '
    \n' + + '\n' + + '

    Les touches fléchées Bas et Haut

    \n' + + '\n' + + '
      \n' + + "
    • se déplacent entre les éléments de menu au sein d'un menu.
    • \n" + + "
    • se déplacent entre les éléments au sein d'un menu contextuel de barre d'outils.
    • \n" + + '
    \n' + + '\n' + + "

    Les Flèches parcourent la section de l'interface utilisateur ciblée.

    \n" + + '\n' + + '

    Pour fermer un menu ouvert, un sous-menu ouvert ou un menu contextuel ouvert, appuyez sur Echap.

    \n' + + '\n' + + "

    Si l'actuel ciblage se trouve en « haut » d'une section spécifique de l'interface utilisateur, appuyer sur Echap permet également de quitter\n" + + ' entièrement la navigation au clavier.

    \n' + + '\n' + + "

    Exécuter un élément de menu ou un bouton de barre d'outils

    \n" + + '\n' + + "

    Lorsque l'élément de menu ou le bouton de barre d'outils désiré est mis en surbrillance, appuyez sur la touche Retour arrière, Entrée\n" + + " ou la Barre d'espace pour exécuter l'élément.

    \n" + + '\n' + + '

    Naviguer au sein de dialogues sans onglets

    \n' + + '\n' + + "

    Dans les dialogues sans onglets, le premier composant interactif est ciblé lorsque le dialogue s'ouvre.

    \n" + + '\n' + + '

    Naviguez entre les composants du dialogue interactif en appuyant sur Tabulation ou Maj+Tabulation.

    \n' + + '\n' + + '

    Naviguer au sein de dialogues avec onglets

    \n' + + '\n' + + "

    Dans les dialogues avec onglets, le premier bouton du menu de l'onglet est ciblé lorsque le dialogue s'ouvre.

    \n" + + '\n' + + '

    Naviguez entre les composants interactifs de cet onglet de dialogue en appuyant sur Tabulation ou\n' + + ' Maj+Tabulation.

    \n' + + '\n' + + "

    Passez à un autre onglet de dialogue en ciblant le menu de l'onglet et en appuyant sur la Flèche\n" + + ' appropriée pour parcourir les onglets disponibles.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js new file mode 100644 index 000000000..7d6513af8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL', +'

    התחל ניווט במקלדת

    \n' + + '\n' + + '
    \n' + + '
    התמקד בשורת התפריטים
    \n' + + '
    Windows או Linux:‏ Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    העבר מיקוד לסרגל הכלים
    \n' + + '
    Windows או Linux:‏ Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    העבר מיקוד לכותרת התחתונה
    \n' + + '
    Windows או Linux:‏ Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    העבר מיקוד להודעה
    \n' + + '
    Windows או Linux:‏ Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    העבר מיקוד לסרגל כלים הקשרי
    \n' + + '
    Windows‏, Linux או macOS:‏ Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    הניווט יתחיל ברכיב הראשון במשך, שיודגש או שיהיה מתחתיו קו תחתון במקרה של הפריט הראשון\n' + + ' הנתיב של רכיב הכותרת התחתונה.

    \n' + + '\n' + + '

    עבור בין מקטעים במסך

    \n' + + '\n' + + '

    כדי לעבור בין המקטעים במסך, הקש Tab.

    \n' + + '\n' + + '

    כדי לעבור למקטע הקודם במסך, הקש Shift+Tab.

    \n' + + '\n' + + '

    הסדר מבחינת מקש Tab של הרכיבים במסך:

    \n' + + '\n' + + '
      \n' + + '
    1. שורת התפריטים
    2. \n' + + '
    3. כל קבוצה בסרגל הכלים
    4. \n' + + '
    5. הסרגל הצידי
    6. \n' + + '
    7. נתיב של רכיב בכותרת התחתונה
    8. \n' + + '
    9. לחצן לספירת מילים בכותרת התחתונה
    10. \n' + + '
    11. קישור של המותג בכותרת התחתונה
    12. \n' + + '
    13. ידית לשינוי גודל עבור העורך בכותרת התחתונה
    14. \n' + + '
    \n' + + '\n' + + '

    אם רכיב כלשהו במסך לא מופיע, המערכת תדלג עליו.

    \n' + + '\n' + + '

    אם בכותרת התחתונה יש מיקוד של ניווט במקלדת, ולא מופיע סרגל בצד, יש להקיש Shift+Tab\n' + + ' מעביר את המיקוד לקבוצה הראשונה בסרגל הכלים, לא האחרונה.

    \n' + + '\n' + + '

    עבור בתוך מקטעים במסך

    \n' + + '\n' + + '

    כדי לעבור מרכיב אחד לרכיב אחר במסך, הקש על מקש החץ המתאים.

    \n' + + '\n' + + '

    מקשי החיצים שמאלה וימינה

    \n' + + '\n' + + '
      \n' + + '
    • עבור בין תפריטים בשורת התפריטים.
    • \n' + + '
    • פתח תפריט משני בתפריט.
    • \n' + + '
    • עבור בין לחצנים בקבוצה בסרגל הכלים.
    • \n' + + '
    • עבור בין פריטים ברכיב בכותרת התחתונה.
    • \n' + + '
    \n' + + '\n' + + '

    מקשי החיצים למטה ולמעלה

    \n' + + '\n' + + '
      \n' + + '
    • עבור בין פריטים בתפריט.
    • \n' + + '
    • עבור בין פריטים בחלון הקובץ של סרגל הכלים.
    • \n' + + '
    \n' + + '\n' + + '

    מקשי החצים משתנים בתוך המקטע במסך שעליו נמצא המיקוד.

    \n' + + '\n' + + '

    כדי לסגור תפריט פתוח, תפריט משני פתוח או חלון קופץ, הקש על Esc.

    \n' + + '\n' + + "

    אם המיקוד הוא על החלק 'העליון' של מקטע מסוים במסך, הקשה על Esc מביאה גם ליציאה\n" + + ' מהניווט במקלדת לחלוטין.

    \n' + + '\n' + + '

    הפעל פריט בתפריט או לחצן בסרגל הכלים

    \n' + + '\n' + + '

    כאשר הפריט הרצוי בתפריט או הלחצן בסרגל הכלים מודגשים, הקש על Return, Enter,\n' + + ' או על מקש הרווח כדי להפעיל את הפריט.

    \n' + + '\n' + + '

    ניווט בחלונות דו-שיח בלי כרטיסיות

    \n' + + '\n' + + '

    בחלונות דו-שיח בלי כרטיסיות, הרכיב האינטראקטיבי הראשון מקבל את המיקוד כאשר החלון נפתח.

    \n' + + '\n' + + '

    עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או Shift+Tab.

    \n' + + '\n' + + '

    ניווט בחלונות דו-שיח עם כרטיסיות

    \n' + + '\n' + + '

    בחלונות דו-שיח עם כרטיסיות, הלחצן הראשון בתפריט מקבל את המיקוד כאשר החלון נפתח.

    \n' + + '\n' + + '

    עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    עבור לכרטיסיה אחרת בחלון על ידי העברת המיקוד לתפריט הכרטיסיות והקשה על החץהמתאים\n' + + ' כדי לעבור בין הכרטיסיות הזמינות.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hi.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hi.js new file mode 100644 index 000000000..ef59a5cff --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi', +'

    कीबोर्ड नेविगेशन शुरू करें

    \n' + + '\n' + + '
    \n' + + '
    मेन्यू बार पर फ़ोकस करें
    \n' + + '
    Windows या Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    टूलबार पर फ़ोकस करें
    \n' + + '
    Windows या Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    फ़ुटर पर फ़ोकस करें
    \n' + + '
    Windows या Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    नोटिफ़िकेशन फ़ोकस
    \n' + + '
    Windows या Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    प्रासंगिक टूलबार पर फ़ोकस करें
    \n' + + '
    Windows, Linux या macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    नेविगेशन पहले UI आइटम पर शुरू होगा, जिसे हाइलाइट किया जाएगा या पहले आइटम के मामले में फ़ुटर तत्व पथ में\n' + + ' रेखांकित किया जाएगा।

    \n' + + '\n' + + '

    UI सेक्शन के बीच नेविगेट करें

    \n' + + '\n' + + '

    एक UI सेक्शन से दूसरे सेक्शन में जाने के लिए, Tab दबाएं।

    \n' + + '\n' + + '

    एक UI सेक्शन से पिछले सेक्शन में जाने के लिए, Shift+Tab दबाएं।

    \n' + + '\n' + + '

    इन UI सेक्शन का Tab क्रम नीचे दिया गया है:

    \n' + + '\n' + + '
      \n' + + '
    1. मेन्यू बार
    2. \n' + + '
    3. प्रत्येक टूलबार समूह
    4. \n' + + '
    5. साइडबार
    6. \n' + + '
    7. फ़ुटर में तत्व पथ
    8. \n' + + '
    9. फ़ुटर में शब्द गणना टॉगल बटन
    10. \n' + + '
    11. फ़ुटर में ब्रांडिंग लिंक
    12. \n' + + '
    13. फ़ुटर में संपादक का आकार बदलने का हैंडल
    14. \n' + + '
    \n' + + '\n' + + '

    अगर कोई UI सेक्शन मौजूद नहीं है, तो उसे छोड़ दिया जाता है।

    \n' + + '\n' + + '

    अगर फ़ुटर में कीबोर्ड नेविगेशन फ़ोकस है, और कोई दिखा देने वाला साइडबार नहीं है, तो Shift+Tab दबाने से\n' + + ' फ़ोकस पहले टूलबार समूह पर चला जाता है, पिछले पर नहीं।

    \n' + + '\n' + + '

    UI सेक्शन के भीतर नेविगेट करें

    \n' + + '\n' + + '

    एक UI तत्व से दूसरे में जाने के लिए उपयुक्त ऐरो कुंजी दबाएं।

    \n' + + '\n' + + '

    बाएं और दाएं ऐरो कुंजियां

    \n' + + '\n' + + '
      \n' + + '
    • मेन्यू बार में मेन्यू के बीच ले जाती हैं।
    • \n' + + '
    • मेन्यू में एक सब-मेन्यू खोलें।
    • \n' + + '
    • टूलबार समूह में बटनों के बीच ले जाएं।
    • \n' + + '
    • फ़ुटर के तत्व पथ में आइटम के बीच ले जाएं।
    • \n' + + '
    \n' + + '\n' + + '

    नीचे और ऊपर ऐरो कुंजियां

    \n' + + '\n' + + '
      \n' + + '
    • मेन्यू में मेन्यू आइटम के बीच ले जाती हैं।
    • \n' + + '
    • टूलबार पॉप-अप मेन्यू में आइटम के बीच ले जाएं।
    • \n' + + '
    \n' + + '\n' + + '

    फ़ोकस वाले UI सेक्शन के भीतर ऐरो कुंजियां चलाती रहती हैं।

    \n' + + '\n' + + '

    कोई खुला मेन्यू, कोई खुला सब-मेन्यू या कोई खुला पॉप-अप मेन्यू बंद करने के लिए Esc कुंजी दबाएं।

    \n' + + '\n' + + "

    अगर मौजूदा फ़ोकस किसी विशेष UI सेक्शन के 'शीर्ष' पर है, तो Esc कुंजी दबाने से भी\n" + + ' कीबोर्ड नेविगेशन पूरी तरह से बाहर हो जाता है।

    \n' + + '\n' + + '

    मेन्यू आइटम या टूलबार बटन निष्पादित करें

    \n' + + '\n' + + '

    जब वांछित मेन्यू आइटम या टूलबार बटन हाइलाइट किया जाता है, तो आइटम को निष्पादित करने के लिए Return, Enter,\n' + + ' या Space bar दबाएं।

    \n' + + '\n' + + '

    गैर-टैब वाले डायलॉग पर नेविगेट करें

    \n' + + '\n' + + '

    गैर-टैब वाले डायलॉग में, डायलॉग खुलने पर पहला इंटरैक्टिव घटक फ़ोकस लेता है।

    \n' + + '\n' + + '

    Tab or Shift+Tab दबाकर इंटरैक्टिव डायलॉग घटकों के बीच नेविगेट करें।

    \n' + + '\n' + + '

    टैब किए गए डायलॉग पर नेविगेट करें

    \n' + + '\n' + + '

    टैब किए गए डायलॉग में, डायलॉग खुलने पर टैब मेन्यू में पहला बटन फ़ोकस लेता है।

    \n' + + '\n' + + '

    इस डायलॉग टैब के इंटरैक्टिव घटकों के बीच नेविगेट करने के लिए Tab या\n' + + ' Shift+Tab दबाएं।

    \n' + + '\n' + + '

    टैब मेन्यू को फ़ोकस देकर और फिर उपलब्ध टैब में के बीच जाने के लिए उपयुक्त ऐरो\n' + + ' कुंजी दबाकर दूसरे डायलॉग टैब पर स्विच करें।

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hr.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hr.js new file mode 100644 index 000000000..1bf35c50c --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hr.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr', +'

    Početak navigacije na tipkovnici

    \n' + + '\n' + + '
    \n' + + '
    Fokusiranje trake izbornika
    \n' + + '
    Windows ili Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokusiranje alatne trake
    \n' + + '
    Windows ili Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokusiranje podnožja
    \n' + + '
    Windows ili Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Fokusiranje obavijesti
    \n' + + '
    Windows ili Linux: Alt + F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokusiranje kontekstne alatne trake
    \n' + + '
    Windows, Linux ili macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigacija će započeti kod prve stavke na korisničkom sučelju, koja će biti istaknuta ili podcrtana ako se radi o prvoj stavci u\n' + + ' putu elementa u podnožju.

    \n' + + '\n' + + '

    Navigacija između dijelova korisničkog sučelja

    \n' + + '\n' + + '

    Za pomicanje s jednog dijela korisničkog sučelja na drugi pritisnite tabulator.

    \n' + + '\n' + + '

    Za pomicanje s jednog dijela korisničkog sučelja na prethodni pritisnite Shift + tabulator.

    \n' + + '\n' + + '

    Ovo je redoslijed pomicanja tabulatora po dijelovima korisničkog sučelja:

    \n' + + '\n' + + '
      \n' + + '
    1. Traka izbornika
    2. \n' + + '
    3. Pojedinačne grupe na alatnoj traci
    4. \n' + + '
    5. Bočna traka
    6. \n' + + '
    7. Put elemenata u podnožju
    8. \n' + + '
    9. Gumb za pomicanje po broju riječi u podnožju
    10. \n' + + '
    11. Veza na brand u podnožju
    12. \n' + + '
    13. Značajka za promjenu veličine alata za uređivanje u podnožju
    14. \n' + + '
    \n' + + '\n' + + '

    Ako neki dio korisničkog sučelja nije naveden, on se preskače.

    \n' + + '\n' + + '

    Ako u podnožju postoji fokus za navigaciju na tipkovnici, a nema vidljive bočne trake, pritiskom na Shift + tabulator\n' + + ' fokus se prebacuje na prvu skupinu na alatnoj traci, ne na zadnju.

    \n' + + '\n' + + '

    Navigacija unutar dijelova korisničkog sučelja

    \n' + + '\n' + + '

    Za pomicanje s jednog elementa korisničkog sučelja na drugi pritisnite tipku s odgovarajućom strelicom.

    \n' + + '\n' + + '

    Tipke s lijevom i desnom strelicom

    \n' + + '\n' + + '
      \n' + + '
    • služe za pomicanje između izbornika na alatnoj traci.
    • \n' + + '
    • otvaraju podizbornik unutar izbornika.
    • \n' + + '
    • služe za pomicanje između gumba unutar skupina na alatnoj traci.
    • \n' + + '
    • služe za pomicanje između stavki na elementu puta u podnožju.
    • \n' + + '
    \n' + + '\n' + + '

    Tipke s donjom i gornjom strelicom

    \n' + + '\n' + + '
      \n' + + '
    • služe za pomicanje između stavki unutar izbornika.
    • \n' + + '
    • služe za pomicanje između stavki na alatnoj traci skočnog izbornika.
    • \n' + + '
    \n' + + '\n' + + '

    Tipkama strelica kružno se pomičete unutar dijela korisničkog sučelja koji je u fokusu.

    \n' + + '\n' + + '

    Za zatvaranje otvorenog izbornika, otvorenog podizbornika ili otvorenog skočnog izbornika pritisnite tipku Esc.

    \n' + + '\n' + + '

    Ako je fokus trenutačno postavljen na vrh pojedinačnog dijela korisničkog sučelja, pritiskom na tipku Esc također\n' + + ' u potpunosti zatvarate navigaciju na tipkovnici.

    \n' + + '\n' + + '

    Izvršavanje radnji putem stavki izbornika ili gumba na alatnoj traci

    \n' + + '\n' + + '

    Nakon što se istakne stavka izbornika ili gumb na alatnoj traci s radnjom koju želite izvršiti, pritisnite tipku Return, Enter\n' + + ' ili razmak da biste pokrenuli željenu radnju.

    \n' + + '\n' + + '

    Navigacija dijaloškim okvirima izvan kartica

    \n' + + '\n' + + '

    Prilikom otvaranja dijaloških okvira izvan kartica fokus se nalazi na prvoj interaktivnoj komponenti.

    \n' + + '\n' + + '

    Navigaciju između interaktivnih dijaloških komponenata vršite pritiskom na tabulator ili Shift + tabulator.

    \n' + + '\n' + + '

    Navigacija dijaloškim okvirima u karticama

    \n' + + '\n' + + '

    Prilikom otvaranja dijaloških okvira u karticama fokus se nalazi na prvom gumbu u izborniku unutar kartice.

    \n' + + '\n' + + '

    Navigaciju između interaktivnih komponenata dijaloškog okvira u kartici vršite pritiskom na tabulator ili\n' + + ' Shift + tabulator.

    \n' + + '\n' + + '

    Na karticu s drugim dijaloškim okvirom možete se prebaciti tako da stavite fokus na izbornik kartice pa pritisnete tipku s odgovarajućom strelicom\n' + + ' za kružno pomicanje između dostupnih kartica.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js new file mode 100644 index 000000000..5c984bb01 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU', +'

    Billentyűzetes navigáció indítása

    \n' + + '\n' + + '
    \n' + + '
    Fókusz a menüsávra
    \n' + + '
    Windows és Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fókusz az eszköztárra
    \n' + + '
    Windows és Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fókusz a láblécre
    \n' + + '
    Windows és Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Ráközelítés az értesítésre
    \n' + + '
    Windows vagy Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fókusz egy környezetfüggő eszköztárra
    \n' + + '
    Windows, Linux és macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    A navigáció az első felhasználói felületi elemnél kezdődik, amelyet a rendszer kiemel, illetve aláhúz, amennyiben az az első elem\n' + + ' a lábléc elemútvonalán.

    \n' + + '\n' + + '

    Navigálás a felhasználói felület szakaszai között

    \n' + + '\n' + + '

    A felhasználói felület következő szakaszára váltáshoz nyomja meg a Tab billentyűt.

    \n' + + '\n' + + '

    A felhasználói felület előző szakaszára váltáshoz nyomja meg a Shift+Tab billentyűt.

    \n' + + '\n' + + '

    A Tab billentyűvel a felhasználói felület szakaszai között a következő sorrendben vált:

    \n' + + '\n' + + '
      \n' + + '
    1. Menüsáv
    2. \n' + + '
    3. Az egyes eszköztárcsoportok
    4. \n' + + '
    5. Oldalsáv
    6. \n' + + '
    7. Elemútvonal a láblécen
    8. \n' + + '
    9. Szószámátkapcsoló gomb a láblécen
    10. \n' + + '
    11. Márkalink a láblécen
    12. \n' + + '
    13. Szerkesztő átméretezési fogópontja a láblécen
    14. \n' + + '
    \n' + + '\n' + + '

    Ha a felhasználói felület valamelyik eleme nincs jelen, a rendszer kihagyja.

    \n' + + '\n' + + '

    Ha a billentyűzetes navigáció fókusza a láblécen van, és nincs látható oldalsáv, a Shift+Tab\n' + + ' billentyűkombináció lenyomásakor az első eszköztárcsoportra ugrik a fókusz, nem az utolsóra.

    \n' + + '\n' + + '

    Navigálás a felhasználói felület szakaszain belül

    \n' + + '\n' + + '

    A felhasználói felület következő elemére váltáshoz nyomja meg a megfelelő nyílbillentyűt.

    \n' + + '\n' + + '

    A bal és a jobb nyílgomb

    \n' + + '\n' + + '
      \n' + + '
    • a menüsávban a menük között vált.
    • \n' + + '
    • a menükben megnyit egy almenüt.
    • \n' + + '
    • az eszköztárcsoportban a gombok között vált.
    • \n' + + '
    • a lábléc elemútvonalán az elemek között vált.
    • \n' + + '
    \n' + + '\n' + + '

    A le és a fel nyílgomb

    \n' + + '\n' + + '
      \n' + + '
    • a menükben a menüpontok között vált.
    • \n' + + '
    • az eszköztár előugró menüjében az elemek között vált.
    • \n' + + '
    \n' + + '\n' + + '

    A nyílbillentyűk lenyomásával körkörösen lépkedhet a fókuszban lévő felhasználói felületi szakasz elemei között.

    \n' + + '\n' + + '

    A megnyitott menüket, almenüket és előugró menüket az Esc billentyűvel zárhatja be.

    \n' + + '\n' + + '

    Ha a fókusz az aktuális felületi elem „felső” részén van, az Esc billentyűvel az egész\n' + + ' billentyűzetes navigációból kilép.

    \n' + + '\n' + + '

    Menüpont vagy eszköztárgomb aktiválása

    \n' + + '\n' + + '

    Amikor a kívánt menüelem vagy eszköztárgomb van kijelölve, nyomja meg a Return, az Enter\n' + + ' vagy a Szóköz billentyűt az adott elem vagy gomb aktiválásához.

    \n' + + '\n' + + '

    Navigálás a lapokkal nem rendelkező párbeszédablakokban

    \n' + + '\n' + + '

    A lapokkal nem rendelkező párbeszédablakokban az első interaktív összetevő kapja a fókuszt, amikor a párbeszédpanel megnyílik.

    \n' + + '\n' + + '

    A párbeszédpanelek interaktív összetevői között a Tab vagy a Shift+Tab billentyűvel navigálhat.

    \n' + + '\n' + + '

    Navigálás a lapokkal rendelkező párbeszédablakokban

    \n' + + '\n' + + '

    A lapokkal rendelkező párbeszédablakokban a lapmenü első gombja kapja a fókuszt, amikor a párbeszédpanel megnyílik.

    \n' + + '\n' + + '

    A párbeszédpanel e lapjának interaktív összetevői között a Tab vagy\n' + + ' Shift+Tab billentyűvel navigálhat.

    \n' + + '\n' + + '

    A párbeszédablak másik lapjára úgy léphet, hogy a fókuszt a lapmenüre állítja, majd lenyomja a megfelelő nyílbillentyűt\n' + + ' a rendelkezésre álló lapok közötti lépkedéshez.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/id.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/id.js new file mode 100644 index 000000000..d607dd187 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/id.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.id', +'

    Memulai navigasi keyboard

    \n' + + '\n' + + '
    \n' + + '
    Fokus pada bilah Menu
    \n' + + '
    Windows atau Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokus pada Bilah Alat
    \n' + + '
    Windows atau Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokus pada footer
    \n' + + '
    Windows atau Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Fokuskan pemberitahuan
    \n' + + '
    Windows atau Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokus pada bilah alat kontekstual
    \n' + + '
    Windows, Linux, atau macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigasi akan dimulai dari item pertama UI, yang akan disorot atau digarisbawahi di\n' + + ' alur elemen Footer.

    \n' + + '\n' + + '

    Berpindah antar-bagian UI

    \n' + + '\n' + + '

    Untuk berpindah dari satu bagian UI ke bagian berikutnya, tekan Tab.

    \n' + + '\n' + + '

    Untuk berpindah dari satu bagian UI ke bagian sebelumnya, tekan Shift+Tab.

    \n' + + '\n' + + '

    Urutan Tab bagian-bagian UI ini adalah:

    \n' + + '\n' + + '
      \n' + + '
    1. Bilah menu
    2. \n' + + '
    3. Tiap grup bilah alat
    4. \n' + + '
    5. Bilah sisi
    6. \n' + + '
    7. Alur elemen di footer
    8. \n' + + '
    9. Tombol aktifkan/nonaktifkan jumlah kata di footer
    10. \n' + + '
    11. Tautan merek di footer
    12. \n' + + '
    13. Pengatur pengubahan ukuran editor di footer
    14. \n' + + '
    \n' + + '\n' + + '

    Jika suatu bagian UI tidak ada, bagian tersebut dilewati.

    \n' + + '\n' + + '

    Jika fokus navigasi keyboard ada pada footer, tetapi tidak ada bilah sisi yang terlihat, menekan Shift+Tab\n' + + ' akan memindahkan fokus ke grup bilah alat pertama, bukan yang terakhir.

    \n' + + '\n' + + '

    Berpindah di dalam bagian-bagian UI

    \n' + + '\n' + + '

    Untuk berpindah dari satu elemen UI ke elemen berikutnya, tekan tombol Panah yang sesuai.

    \n' + + '\n' + + '

    Tombol panah Kiri dan Kanan untuk

    \n' + + '\n' + + '
      \n' + + '
    • berpindah-pindah antar-menu di dalam bilah menu.
    • \n' + + '
    • membuka sub-menu di dalam menu.
    • \n' + + '
    • berpindah-pindah antar-tombol di dalam grup bilah alat.
    • \n' + + '
    • berpindah-pindah antar-item di dalam alur elemen footer.
    • \n' + + '
    \n' + + '\n' + + '

    Tombol panah Bawah dan Atas untuk

    \n' + + '\n' + + '
      \n' + + '
    • berpindah-pindah antar-item menu di dalam menu.
    • \n' + + '
    • berpindah-pindah antar-item di dalam menu pop-up bilah alat.
    • \n' + + '
    \n' + + '\n' + + '

    Tombol Panah hanya bergerak di dalam bagian UI yang difokuskan.

    \n' + + '\n' + + '

    Untuk menutup menu, sub-menu, atau menu pop-up yang terbuka, tekan tombol Esc.

    \n' + + '\n' + + '

    Jika fokus sedang berada di ‘atas’ bagian UI tertentu, menekan tombol Esc juga dapat mengeluarkan fokus\n' + + ' dari seluruh navigasi keyboard.

    \n' + + '\n' + + '

    Menjalankan item menu atau tombol bilah alat

    \n' + + '\n' + + '

    Jika item menu atau tombol bilah alat yang diinginkan tersorot, tekan Return, Enter,\n' + + ' atau Spasi untuk menjalankan item.

    \n' + + '\n' + + '

    Berpindah dalam dialog tanpa tab

    \n' + + '\n' + + '

    Dalam dialog tanpa tab, fokus diarahkan pada komponen interaktif pertama saat dialog terbuka.

    \n' + + '\n' + + '

    Berpindah di antara komponen dalam dialog interaktif dengan menekan Tab atau Shift+Tab.

    \n' + + '\n' + + '

    Berpindah dalam dialog dengan tab

    \n' + + '\n' + + '

    Dalam dialog yang memiliki tab, fokus diarahkan pada tombol pertama di dalam menu saat dialog terbuka.

    \n' + + '\n' + + '

    Berpindah di antara komponen-komponen interaktif pada tab dialog ini dengan menekan Tab atau\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Beralih ke tab dialog lain dengan mengarahkan fokus pada menu tab lalu tekan tombol Panah\n' + + ' yang sesuai untuk berpindah ke berbagai tab yang tersedia.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/it.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/it.js new file mode 100644 index 000000000..3a791c959 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/it.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.it', +'

    Iniziare la navigazione tramite tastiera

    \n' + + '\n' + + '
    \n' + + '
    Impostare lo stato attivo per la barra dei menu
    \n' + + '
    Windows o Linux: ALT+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Impostare lo stato attivo per la barra degli strumenti
    \n' + + '
    Windows o Linux: ALT+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Impostare lo stato attivo per il piè di pagina
    \n' + + '
    Windows o Linux: ALT+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Metti a fuoco la notifica
    \n' + + '
    Windows o Linux: ALT+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Impostare lo stato attivo per la barra degli strumenti contestuale
    \n' + + '
    Windows, Linux o macOS: CTRL+F9
    \n' + + '
    \n' + + '\n' + + "

    La navigazione inizierà dalla prima voce dell'interfaccia utente, che sarà evidenziata o sottolineata nel caso della prima voce\n" + + " nel percorso dell'elemento del piè di pagina.

    \n" + + '\n' + + "

    Navigare tra le sezioni dell'interfaccia utente

    \n" + + '\n' + + "

    Per passare da una sezione dell'interfaccia utente alla successiva, premere TAB.

    \n" + + '\n' + + "

    Per passare da una sezione dell'interfaccia utente alla precedente, premere MAIUSC+TAB.

    \n" + + '\n' + + "

    L'ordine di tabulazione di queste sezioni dell'interfaccia utente è:

    \n" + + '\n' + + '
      \n' + + '
    1. Barra dei menu
    2. \n' + + '
    3. Ogni gruppo di barre degli strumenti
    4. \n' + + '
    5. Barra laterale
    6. \n' + + "
    7. Percorso dell'elemento nel piè di pagina
    8. \n" + + '
    9. Pulsante di attivazione/disattivazione del conteggio delle parole nel piè di pagina
    10. \n' + + '
    11. Collegamento al marchio nel piè di pagina
    12. \n' + + "
    13. Quadratino di ridimensionamento dell'editor nel piè di pagina
    14. \n" + + '
    \n' + + '\n' + + "

    Se una sezione dell'interfaccia utente non è presente, viene saltata.

    \n" + + '\n' + + '

    Se il piè di pagina ha lo stato attivo per la navigazione tramite tastiera e non è presente alcuna barra laterale visibile, premendo MAIUSC+TAB\n' + + " si sposta lo stato attivo sul primo gruppo di barre degli strumenti, non sull'ultimo.

    \n" + + '\n' + + "

    Navigare all'interno delle sezioni dell'interfaccia utente

    \n" + + '\n' + + "

    Per passare da un elemento dell'interfaccia utente al successivo, premere il tasto freccia appropriato.

    \n" + + '\n' + + '

    I tasti freccia Sinistra e Destra

    \n' + + '\n' + + '
      \n' + + '
    • consentono di spostarsi tra i menu della barra dei menu.
    • \n' + + '
    • aprono un sottomenu in un menu.
    • \n' + + '
    • consentono di spostarsi tra i pulsanti di un gruppo di barre degli strumenti.
    • \n' + + "
    • consentono di spostarsi tra le voci nel percorso dell'elemento del piè di pagina.
    • \n" + + '
    \n' + + '\n' + + '

    I tasti freccia Giù e Su

    \n' + + '\n' + + '
      \n' + + '
    • consentono di spostarsi tra le voci di un menu.
    • \n' + + '
    • consentono di spostarsi tra le voci di un menu a comparsa della barra degli strumenti.
    • \n' + + '
    \n' + + '\n' + + "

    I tasti freccia consentono di spostarsi all'interno della sezione dell'interfaccia utente con stato attivo.

    \n" + + '\n' + + '

    Per chiudere un menu aperto, un sottomenu aperto o un menu a comparsa aperto, premere il tasto ESC.

    \n' + + '\n' + + "

    Se lo stato attivo corrente si trova nella parte superiore di una particolare sezione dell'interfaccia utente, premendo il tasto ESC si esce\n" + + ' completamente dalla navigazione tramite tastiera.

    \n' + + '\n' + + '

    Eseguire una voce di menu o un pulsante della barra degli strumenti

    \n' + + '\n' + + '

    Quando la voce di menu o il pulsante della barra degli strumenti desiderati sono evidenziati, premere il tasto diritorno a capo, il tasto Invio\n' + + ' o la barra spaziatrice per eseguirli.

    \n' + + '\n' + + '

    Navigare nelle finestre di dialogo non a schede

    \n' + + '\n' + + "

    Nelle finestre di dialogo non a schede, all'apertura della finestra di dialogo diventa attivo il primo componente interattivo.

    \n" + + '\n' + + '

    Per spostarsi tra i componenti interattivi della finestra di dialogo, premere TAB o MAIUSC+TAB.

    \n' + + '\n' + + '

    Navigare nelle finestre di dialogo a schede

    \n' + + '\n' + + "

    Nelle finestre di dialogo a schede, all'apertura della finestra di dialogo diventa attivo il primo pulsante del menu della scheda.

    \n" + + '\n' + + '

    Per spostarsi tra i componenti interattivi di questa scheda della finestra di dialogo, premere TAB o\n' + + ' MAIUSC+TAB.

    \n' + + '\n' + + "

    Per passare a un'altra scheda della finestra di dialogo, attivare il menu della scheda e premere il tasto freccia\n" + + ' appropriato per scorrere le schede disponibili.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ja.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ja.js new file mode 100644 index 000000000..26872db10 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ja.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja', +'

    キーボード ナビゲーションの開始

    \n' + + '\n' + + '
    \n' + + '
    メニュー バーをフォーカス
    \n' + + '
    Windows または Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    ツール バーをフォーカス
    \n' + + '
    Windows または Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    フッターをフォーカス
    \n' + + '
    Windows または Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    通知にフォーカス
    \n' + + '
    Windows または Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    コンテキスト ツール バーをフォーカス
    \n' + + '
    Windows、Linux または macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    ナビゲーションは最初の UI 項目から開始され、強調表示されるか、フッターの要素パスにある最初の項目の場合は\n' + + ' 下線が引かれます。

    \n' + + '\n' + + '

    UI セクション間の移動

    \n' + + '\n' + + '

    次の UI セクションに移動するには、Tab を押します。

    \n' + + '\n' + + '

    前の UI セクションに移動するには、Shift+Tab を押します。

    \n' + + '\n' + + '

    これらの UI セクションの Tab の順序:

    \n' + + '\n' + + '
      \n' + + '
    1. メニュー バー
    2. \n' + + '
    3. 各ツール バー グループ
    4. \n' + + '
    5. サイド バー
    6. \n' + + '
    7. フッターの要素パス
    8. \n' + + '
    9. フッターの単語数切り替えボタン
    10. \n' + + '
    11. フッターのブランド リンク
    12. \n' + + '
    13. フッターのエディター サイズ変更ハンドル
    14. \n' + + '
    \n' + + '\n' + + '

    UI セクションが存在しない場合は、スキップされます。

    \n' + + '\n' + + '

    フッターにキーボード ナビゲーション フォーカスがあり、表示可能なサイド バーがない場合、Shift+Tab を押すと、\n' + + ' フォーカスが最後ではなく最初のツール バー グループに移動します。

    \n' + + '\n' + + '

    UI セクション内の移動

    \n' + + '\n' + + '

    次の UI 要素に移動するには、適切な矢印キーを押します。

    \n' + + '\n' + + '

    左矢印右矢印のキー

    \n' + + '\n' + + '
      \n' + + '
    • メニュー バーのメニュー間で移動します。
    • \n' + + '
    • メニュー内のサブメニューを開きます。
    • \n' + + '
    • ツール バー グループのボタン間で移動します。
    • \n' + + '
    • フッターの要素パスの項目間で移動します。
    • \n' + + '
    \n' + + '\n' + + '

    下矢印上矢印のキー

    \n' + + '\n' + + '
      \n' + + '
    • メニュー内のメニュー項目間で移動します。
    • \n' + + '
    • ツール バー ポップアップ メニュー内のメニュー項目間で移動します。
    • \n' + + '
    \n' + + '\n' + + '

    矢印キーで、フォーカスされた UI セクション内で循環します。

    \n' + + '\n' + + '

    開いたメニュー、開いたサブメニュー、開いたポップアップ メニューを閉じるには、Esc キーを押します。

    \n' + + '\n' + + '

    現在のフォーカスが特定の UI セクションの「一番上」にある場合、Esc キーを押すと\n' + + ' キーボード ナビゲーションも完全に閉じられます。

    \n' + + '\n' + + '

    メニュー項目またはツール バー ボタンの実行

    \n' + + '\n' + + '

    目的のメニュー項目やツール バー ボタンが強調表示されている場合、リターンEnter、\n' + + ' またはスペース キーを押して項目を実行します。

    \n' + + '\n' + + '

    タブのないダイアログの移動

    \n' + + '\n' + + '

    タブのないダイアログでは、ダイアログが開くと最初の対話型コンポーネントがフォーカスされます。

    \n' + + '\n' + + '

    Tab または Shift+Tab を押して、対話型ダイアログ コンポーネント間で移動します。

    \n' + + '\n' + + '

    タブ付きダイアログの移動

    \n' + + '\n' + + '

    タブ付きダイアログでは、ダイアログが開くとタブ メニューの最初のボタンがフォーカスされます。

    \n' + + '\n' + + '

    Tab または\n' + + ' Shift+Tab を押して、このダイアログ タブの対話型コンポーネント間で移動します。

    \n' + + '\n' + + '

    タブ メニューをフォーカスしてから適切な矢印キーを押して表示可能なタブを循環して、\n' + + ' 別のダイアログに切り替えます。

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/kk.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/kk.js new file mode 100644 index 000000000..e31532f0e --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/kk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk', +'

    Пернетақта навигациясын бастау

    \n' + + '\n' + + '
    \n' + + '
    Мәзір жолағын фокустау
    \n' + + '
    Windows немесе Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Құралдар тақтасын фокустау
    \n' + + '
    Windows немесе Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Төменгі деректемені фокустау
    \n' + + '
    Windows немесе Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Хабарландыруды белгілеу
    \n' + + '
    Windows немесе Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Мәтінмәндік құралдар тақтасын фокустау
    \n' + + '
    Windows, Linux немесе macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Навигация бөлектелетін немесе Төменгі деректеме элементінің жолындағы бірінші элемент жағдайында асты сызылатын\n' + + ' бірінші ПИ элементінен басталады.

    \n' + + '\n' + + '

    ПИ бөлімдері арасында навигациялау

    \n' + + '\n' + + '

    Бір ПИ бөлімінен келесісіне өту үшін Tab пернесін басыңыз.

    \n' + + '\n' + + '

    Бір ПИ бөлімінен алдыңғысына өту үшін Shift+Tab пернесін басыңыз.

    \n' + + '\n' + + '

    Осы ПИ бөлімдерінің Tab реті:

    \n' + + '\n' + + '
      \n' + + '
    1. Мәзір жолағы
    2. \n' + + '
    3. Әрбір құралдар тақтасы тобы
    4. \n' + + '
    5. Бүйірлік жолақ
    6. \n' + + '
    7. Төменгі деректемедегі элемент жолы
    8. \n' + + '
    9. Төменгі деректемедегі сөздер санын ауыстыру түймесі
    10. \n' + + '
    11. Төменгі деректемедегі брендингтік сілтеме
    12. \n' + + '
    13. Төменгі деректемедегі редактор өлшемін өзгерту тұтқасы
    14. \n' + + '
    \n' + + '\n' + + '

    ПИ бөлімі көрсетілмесе, ол өткізіп жіберіледі.

    \n' + + '\n' + + '

    Төменгі деректемеде пернетақта навигациясының фокусы болса және бүйірлік жолақ көрінбесе, Shift+Tab тіркесімін басу әрекеті\n' + + ' фокусты соңғысы емес, бірінші құралдар тақтасы тобына жылжытады.

    \n' + + '\n' + + '

    ПИ бөлімдерінде навигациялау

    \n' + + '\n' + + '

    Бір ПИ элементінен келесісіне өту үшін Arrow (Көрсеткі) пернесін басыңыз.

    \n' + + '\n' + + '

    Left (Сол жақ) және Right (Оң жақ) көрсеткі пернелері

    \n' + + '\n' + + '
      \n' + + '
    • мәзір жолағындағы мәзірлер арасында жылжыту.
    • \n' + + '
    • мәзірде ішкі мәзірді ашу.
    • \n' + + '
    • құралдар тақтасы тобындағы түймелер арасында жылжыту.
    • \n' + + '
    • төменгі деректеме элементінің жолындағы элементтер арасында жылжыту.
    • \n' + + '
    \n' + + '\n' + + '

    Down (Төмен) және Up (Жоғары) көрсеткі пернелері

    \n' + + '\n' + + '
      \n' + + '
    • мәзірдегі мәзір элементтері арасында жылжыту.
    • \n' + + '
    • құралдар тақтасының ашылмалы мәзіріндегі мәзір элементтері арасында жылжыту.
    • \n' + + '
    \n' + + '\n' + + '

    Фокусталған ПИ бөліміндегі Arrow (Көрсеткі) пернелерінің циклі.

    \n' + + '\n' + + '

    Ашық мәзірді жабу үшін ішкі мәзірді ашып немесе ашылмалы мәзірді ашып, Esc пернесін басыңыз.

    \n' + + '\n' + + '

    Ағымдағы фокус белгілі бір ПИ бөлімінің «үстінде» болса, Esc пернесін басу әрекеті пернетақта\n' + + ' навигациясын толығымен жабады.

    \n' + + '\n' + + '

    Мәзір элементін немесе құралдар тақтасы түймесін орындау

    \n' + + '\n' + + '

    Қажетті мәзір элементі немесе құралдар тақтасы түймесі бөлектелген кезде, элементті орындау үшін Return (Қайтару), Enter (Енгізу)\n' + + ' немесе Space bar (Бос орын) пернесін басыңыз.

    \n' + + '\n' + + '

    Белгіленбеген диалог терезелерін навигациялау

    \n' + + '\n' + + '

    Белгіленбеген диалог терезелерінде диалог терезесі ашылған кезде бірінші интерактивті құрамдас фокусталады.

    \n' + + '\n' + + '

    Tab немесе Shift+Tab пернесін басу арқылы интерактивті диалог терезесінің құрамдастары арасында навигациялаңыз.

    \n' + + '\n' + + '

    Белгіленген диалог терезелерін навигациялау

    \n' + + '\n' + + '

    Белгіленген диалог терезелерінде диалог терезесі ашылған кезде қойынды мәзіріндегі бірінші түйме фокусталады.

    \n' + + '\n' + + '

    Tab немесе\n' + + ' Shift+Tab пернесін басу арқылы осы диалог терезесі қойындысының интерактивті құрамдастары арасында навигациялаңыз.

    \n' + + '\n' + + '

    Қойынды мәзірінің фокусын беру арқылы басқа диалог терезесінің қойындысына ауысып, тиісті Arrow (Көрсеткі)\n' + + ' пернесін басу арқылы қолжетімді қойындылар арасында айналдыруға болады.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js new file mode 100644 index 000000000..e7c8e7fcc --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR', +'

    키보드 탐색 시작

    \n' + + '\n' + + '
    \n' + + '
    메뉴 모음 포커스 표시
    \n' + + '
    Windows 또는 Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    도구 모음 포커스 표시
    \n' + + '
    Windows 또는 Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    푸터 포커스 표시
    \n' + + '
    Windows 또는 Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    알림 포커스
    \n' + + '
    Windows 또는 Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    컨텍스트 도구 모음에 포커스 표시
    \n' + + '
    Windows, Linux 또는 macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    첫 번째 UI 항목에서 탐색이 시작되며, 이때 첫 번째 항목이 강조 표시되거나 푸터 요소 경로에 있는\n' + + ' 경우 밑줄 표시됩니다.

    \n' + + '\n' + + '

    UI 섹션 간 탐색

    \n' + + '\n' + + '

    한 UI 섹션에서 다음 UI 섹션으로 이동하려면 Tab(탭)을 누릅니다.

    \n' + + '\n' + + '

    한 UI 섹션에서 이전 UI 섹션으로 돌아가려면 Shift+Tab(시프트+탭)을 누릅니다.

    \n' + + '\n' + + '

    이 UI 섹션의 Tab(탭) 순서는 다음과 같습니다.

    \n' + + '\n' + + '
      \n' + + '
    1. 메뉴 바
    2. \n' + + '
    3. 각 도구 모음 그룹
    4. \n' + + '
    5. 사이드바
    6. \n' + + '
    7. 푸터의 요소 경로
    8. \n' + + '
    9. 푸터의 단어 수 토글 버튼
    10. \n' + + '
    11. 푸터의 브랜딩 링크
    12. \n' + + '
    13. 푸터의 에디터 크기 변경 핸들
    14. \n' + + '
    \n' + + '\n' + + '

    UI 섹션이 없는 경우 건너뛰기합니다.

    \n' + + '\n' + + '

    푸터에 키보드 탐색 포커스가 있고 사이드바는 보이지 않는 경우 Shift+Tab(시프트+탭)을 누르면\n' + + ' 포커스 표시가 마지막이 아닌 첫 번째 도구 모음 그룹으로 이동합니다.

    \n' + + '\n' + + '

    UI 섹션 내 탐색

    \n' + + '\n' + + '

    한 UI 요소에서 다음 UI 요소로 이동하려면 적절한 화살표 키를 누릅니다.

    \n' + + '\n' + + '

    왼쪽오른쪽 화살표 키의 용도:

    \n' + + '\n' + + '
      \n' + + '
    • 메뉴 모음에서 메뉴 항목 사이를 이동합니다.
    • \n' + + '
    • 메뉴에서 하위 메뉴를 엽니다.
    • \n' + + '
    • 도구 모음 그룹에서 버튼 사이를 이동합니다.
    • \n' + + '
    • 푸터의 요소 경로에서 항목 간에 이동합니다.
    • \n' + + '
    \n' + + '\n' + + '

    아래 화살표 키의 용도:

    \n' + + '\n' + + '
      \n' + + '
    • 메뉴에서 메뉴 항목 사이를 이동합니다.
    • \n' + + '
    • 도구 모음 팝업 메뉴에서 메뉴 항목 사이를 이동합니다.
    • \n' + + '
    \n' + + '\n' + + '

    화살표 키는 포커스 표시 UI 섹션 내에서 순환됩니다.

    \n' + + '\n' + + '

    열려 있는 메뉴, 열려 있는 하위 메뉴 또는 열려 있는 팝업 메뉴를 닫으려면 Esc 키를 누릅니다.

    \n' + + '\n' + + "

    현재 포커스 표시가 특정 UI 섹션 '상단'에 있는 경우 이때도 Esc 키를 누르면\n" + + ' 키보드 탐색이 완전히 종료됩니다.

    \n' + + '\n' + + '

    메뉴 항목 또는 도구 모음 버튼 실행

    \n' + + '\n' + + '

    원하는 메뉴 항목 또는 도구 모음 버튼이 강조 표시되어 있을 때 Return(리턴), Enter(엔터),\n' + + ' 또는 Space bar(스페이스바)를 눌러 해당 항목을 실행합니다.

    \n' + + '\n' + + '

    탭이 없는 대화 탐색

    \n' + + '\n' + + '

    탭이 없는 대화의 경우, 첫 번째 대화형 요소가 포커스 표시된 상태로 대화가 열립니다.

    \n' + + '\n' + + '

    대화형 요소들 사이를 이동할 때는 Tab(탭) 또는 Shift+Tab(시프트+탭)을 누릅니다.

    \n' + + '\n' + + '

    탭이 있는 대화 탐색

    \n' + + '\n' + + '

    탭이 있는 대화의 경우, 탭 메뉴에서 첫 번째 버튼이 포커스 표시된 상태로 대화가 열립니다.

    \n' + + '\n' + + '

    이 대화 탭의 대화형 요소들 사이를 이동할 때는 Tab(탭) 또는\n' + + ' Shift+Tab(시프트+탭)을 누릅니다.

    \n' + + '\n' + + '

    다른 대화 탭으로 이동하려면 탭 메뉴를 포커스 표시한 다음 적절한 화살표\n' + + ' 키를 눌러 사용 가능한 탭들을 지나 원하는 탭으로 이동합니다.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ms.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ms.js new file mode 100644 index 000000000..2c047bb1a --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ms.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms', +'

    Mulakan navigasi papan kekunci

    \n' + + '\n' + + '
    \n' + + '
    Fokus bar Menu
    \n' + + '
    Windows atau Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokus Bar Alat
    \n' + + '
    Windows atau Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokus pengaki
    \n' + + '
    Windows atau Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Tumpu kepada pemberitahuan
    \n' + + '
    Windows atau Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokus bar alat kontekstual
    \n' + + '
    Windows, Linux atau macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigasi akan bermula pada item UI pertama, yang akan diserlahkan atau digaris bawah dalam saiz item pertama dalam\n' + + ' laluan elemen Pengaki.

    \n' + + '\n' + + '

    Navigasi antara bahagian UI

    \n' + + '\n' + + '

    Untuk bergerak dari satu bahagian UI ke yang seterusnya, tekan Tab.

    \n' + + '\n' + + '

    Untuk bergerak dari satu bahagian UI ke yang sebelumnya, tekan Shift+Tab.

    \n' + + '\n' + + '

    Tertib Tab bahagian UI ini ialah:

    \n' + + '\n' + + '
      \n' + + '
    1. Bar menu
    2. \n' + + '
    3. Setiap kumpulan bar alat
    4. \n' + + '
    5. Bar sisi
    6. \n' + + '
    7. Laluan elemen dalam pengaki
    8. \n' + + '
    9. Butang togol kiraan perkataan dalam pengaki
    10. \n' + + '
    11. Pautan penjenamaan dalam pengaki
    12. \n' + + '
    13. Pemegang saiz semula editor dalam pengaki
    14. \n' + + '
    \n' + + '\n' + + '

    Jika bahagian UI tidak wujud, ia dilangkau.

    \n' + + '\n' + + '

    Jika pengaki mempunyai fokus navigasi papan kekunci dan tiada bar sisi kelihatan, menekan Shift+Tab\n' + + ' akan mengalihkan fokus ke kumpulan bar alat pertama, bukannya yang terakhir.

    \n' + + '\n' + + '

    Navigasi dalam bahagian UI

    \n' + + '\n' + + '

    Untuk bergerak dari satu elemen UI ke yang seterusnya, tekan kekunci Anak Panah yang bersesuaian.

    \n' + + '\n' + + '

    Kekunci anak panah Kiri dan Kanan

    \n' + + '\n' + + '
      \n' + + '
    • bergerak antara menu dalam bar menu.
    • \n' + + '
    • membukan submenu dalam menu.
    • \n' + + '
    • bergerak antara butang dalam kumpulan bar alat.
    • \n' + + '
    • Laluan elemen dalam pengaki.
    • \n' + + '
    \n' + + '\n' + + '

    Kekunci anak panah Bawah dan Atas

    \n' + + '\n' + + '
      \n' + + '
    • bergerak antara item menu dalam menu.
    • \n' + + '
    • bergerak antara item dalam menu timbul bar alat.
    • \n' + + '
    \n' + + '\n' + + '

    Kekunci Anak Panah berkitar dalam bahagian UI difokuskan.

    \n' + + '\n' + + '

    Untuk menutup menu buka, submenu terbuka atau menu timbul terbuka, tekan kekunci Esc.

    \n' + + '\n' + + "

    Jika fokus semasa berada di bahagian 'atas' bahagian UI tertentu, menekan kekunci Esc juga akan keluar daripada\n" + + ' navigasi papan kekunci sepenuhnya.

    \n' + + '\n' + + '

    Laksanakan item menu atau butang bar alat

    \n' + + '\n' + + '

    Apabila item menu atau butang bar alat yang diinginkan diserlahkan, tekan Return, Enter,\n' + + ' atau bar Space untuk melaksanakan item.

    \n' + + '\n' + + '

    Navigasi ke dialog tidak bertab

    \n' + + '\n' + + '

    Dalam dialog tidak bertab, komponen interaksi pertama difokuskan apabila dialog dibuka.

    \n' + + '\n' + + '

    Navigasi antara komponen dialog interaktif dengan menekan Tab atau Shift+Tab.

    \n' + + '\n' + + '

    Navigasi ke dialog bertab

    \n' + + '\n' + + '

    Dalam dialog bertab, butang pertama dalam menu tab difokuskan apabila dialog dibuka.

    \n' + + '\n' + + '

    Navigasi antara komponen interaktif tab dialog ini dengan menekan Tab atau\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Tukar kepada tab dialog lain dengan memfokuskan menu tab, kemudian menekan kekunci Anak Panah yang bersesuaian\n' + + ' untuk berkitar menerusi tab yang tersedia.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js new file mode 100644 index 000000000..071e3f55c --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO', +'

    Starte tastaturnavigering

    \n' + + '\n' + + '
    \n' + + '
    Utheve menylinjen
    \n' + + '
    Windows eller Linux: Alt + F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Utheve verktøylinjen
    \n' + + '
    Windows eller Linux: Alt + F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Utheve bunnteksten
    \n' + + '
    Windows eller Linux: Alt + F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Fokuser på varselet
    \n' + + '
    Windows eller Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Utheve en kontekstuell verktøylinje
    \n' + + '
    Windows, Linux eller macOS: Ctrl + F9
    \n' + + '
    \n' + + '\n' + + '

    Navigeringen starter ved det første grensesnittelementet, som utheves, eller understrekes når det gjelder det første elementet i\n' + + ' elementstien i bunnteksten.

    \n' + + '\n' + + '

    Navigere mellom grensesnittdeler

    \n' + + '\n' + + '

    Du kan bevege deg fra én grensesnittdel til den neste ved å trykke på tabulatortasten.

    \n' + + '\n' + + '

    Du kan bevege deg fra én grensesnittdel til den forrige ved å trykke på Shift + tabulatortasten.

    \n' + + '\n' + + '

    Rekkefølgen til tabulatortasten gjennom grensesnittdelene er:

    \n' + + '\n' + + '
      \n' + + '
    1. Menylinjen
    2. \n' + + '
    3. Hver gruppe på verktøylinjen
    4. \n' + + '
    5. Sidestolpen
    6. \n' + + '
    7. Elementstien i bunnteksten
    8. \n' + + '
    9. Veksleknappen for ordantall i bunnteksten
    10. \n' + + '
    11. Merkelenken i bunnteksten
    12. \n' + + '
    13. Skaleringshåndtaket for redigeringsprogrammet i bunnteksten
    14. \n' + + '
    \n' + + '\n' + + '

    Hvis en grensesnittdel ikke er til stede, blir den hoppet over.

    \n' + + '\n' + + '

    Hvis tastaturnavigeringen har uthevet bunnteksten og det ikke finnes en synlig sidestolpe, kan du trykke på Shift + tabulatortasten\n' + + ' for å flytte fokuset til den første gruppen på verktøylinjen i stedet for den siste.

    \n' + + '\n' + + '

    Navigere innenfor grensesnittdeler

    \n' + + '\n' + + '

    Du kan bevege deg fra ett grensesnittelement til det neste ved å trykke på den aktuelle piltasten.

    \n' + + '\n' + + '

    De venstre og høyre piltastene

    \n' + + '\n' + + '
      \n' + + '
    • beveger deg mellom menyer på menylinjen.
    • \n' + + '
    • åpner en undermeny i en meny.
    • \n' + + '
    • beveger deg mellom knapper i en gruppe på verktøylinjen.
    • \n' + + '
    • beveger deg mellom elementer i elementstien i bunnteksten.
    • \n' + + '
    \n' + + '\n' + + '

    Ned- og opp-piltastene

    \n' + + '\n' + + '
      \n' + + '
    • beveger deg mellom menyelementer i en meny.
    • \n' + + '
    • beveger deg mellom elementer i en hurtigmeny på verktøylinjen.
    • \n' + + '
    \n' + + '\n' + + '

    Med piltastene kan du bevege deg innenfor den uthevede grensesnittdelen.

    \n' + + '\n' + + '

    Du kan lukke en åpen meny, en åpen undermeny eller en åpen hurtigmeny ved å klikke på Esc-tasten.

    \n' + + '\n' + + '

    Hvis det øverste nivået i en grensesnittdel er uthevet, kan du ved å trykke på Esc også avslutte\n' + + ' tastaturnavigeringen helt.

    \n' + + '\n' + + '

    Utføre et menyelement eller en knapp på en verktøylinje

    \n' + + '\n' + + '

    Når det ønskede menyelementet eller verktøylinjeknappen er uthevet, trykker du på Retur, Enter,\n' + + ' eller mellomromstasten for å utføre elementet.

    \n' + + '\n' + + '

    Navigere i dialogbokser uten faner

    \n' + + '\n' + + '

    I dialogbokser uten faner blir den første interaktive komponenten uthevet når dialogboksen åpnes.

    \n' + + '\n' + + '

    Naviger mellom interaktive komponenter i dialogboksen ved å trykke på tabulatortasten eller Shift + tabulatortasten.

    \n' + + '\n' + + '

    Navigere i fanebaserte dialogbokser

    \n' + + '\n' + + '

    I fanebaserte dialogbokser blir den første knappen i fanemenyen uthevet når dialogboksen åpnes.

    \n' + + '\n' + + '

    Naviger mellom interaktive komponenter i fanen ved å trykke på tabulatortasten eller\n' + + ' Shift + tabulatortasten.

    \n' + + '\n' + + '

    Veksle til en annen fane i dialogboksen ved å utheve fanemenyen, og trykk deretter på den aktuelle piltasten\n' + + ' for å bevege deg mellom de tilgjengelige fanene.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nl.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nl.js new file mode 100644 index 000000000..05c07aee4 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/nl.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl', +'

    Toetsenbordnavigatie starten

    \n' + + '\n' + + '
    \n' + + '
    Focus op de menubalk instellen
    \n' + + '
    Windows of Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Focus op de werkbalk instellen
    \n' + + '
    Windows of Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Focus op de voettekst instellen
    \n' + + '
    Windows of Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Focus op de melding instellen
    \n' + + '
    Windows of Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Focus op een contextuele werkbalk instellen
    \n' + + '
    Windows, Linux of macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    De navigatie start bij het eerste UI-item, dat wordt gemarkeerd of onderstreept als het eerste item zich in\n' + + ' in het elementenpad van de voettekst bevindt.

    \n' + + '\n' + + '

    Navigeren tussen UI-secties

    \n' + + '\n' + + '

    Druk op Tab om naar de volgende UI-sectie te gaan.

    \n' + + '\n' + + '

    Druk op Shift+Tab om naar de vorige UI-sectie te gaan.

    \n' + + '\n' + + '

    De Tab-volgorde van deze UI-secties is:

    \n' + + '\n' + + '
      \n' + + '
    1. Menubalk
    2. \n' + + '
    3. Elke werkbalkgroep
    4. \n' + + '
    5. Zijbalk
    6. \n' + + '
    7. Elementenpad in de voettekst
    8. \n' + + '
    9. Wisselknop voor aantal woorden in de voettekst
    10. \n' + + '
    11. Merkkoppeling in de voettekst
    12. \n' + + '
    13. Greep voor het wijzigen van het formaat van de editor in de voettekst
    14. \n' + + '
    \n' + + '\n' + + '

    Als een UI-sectie niet aanwezig is, wordt deze overgeslagen.

    \n' + + '\n' + + '

    Als de focus van de toetsenbordnavigatie is ingesteld op de voettekst en er geen zichtbare zijbalk is, kun je op Shift+Tab drukken\n' + + ' om de focus naar de eerste werkbalkgroep in plaats van de laatste te verplaatsen.

    \n' + + '\n' + + '

    Navigeren binnen UI-secties

    \n' + + '\n' + + '

    Druk op de pijltjestoets om naar het betreffende UI-element te gaan.

    \n' + + '\n' + + '

    Met de pijltjestoetsen Links en Rechts

    \n' + + '\n' + + '
      \n' + + "
    • wissel je tussen menu's in de menubalk.
    • \n" + + '
    • open je een submenu in een menu.
    • \n' + + '
    • wissel je tussen knoppen in een werkbalkgroep.
    • \n' + + '
    • wissel je tussen items in het elementenpad in de voettekst.
    • \n' + + '
    \n' + + '\n' + + '

    Met de pijltjestoetsen Omlaag en Omhoog

    \n' + + '\n' + + '
      \n' + + '
    • wissel je tussen menu-items in een menu.
    • \n' + + '
    • wissel je tussen items in een werkbalkpop-upmenu.
    • \n' + + '
    \n' + + '\n' + + '

    Met de pijltjestoetsen wissel je binnen de UI-sectie waarop de focus is ingesteld.

    \n' + + '\n' + + '

    Druk op de toets Esc om een geopend menu, submenu of pop-upmenu te sluiten.

    \n' + + '\n' + + "

    Als de huidige focus is ingesteld 'bovenaan' een bepaalde UI-sectie, kun je op de toets Esc drukken\n" + + ' om de toetsenbordnavigatie af te sluiten.

    \n' + + '\n' + + '

    Een menu-item of werkbalkknop uitvoeren

    \n' + + '\n' + + '

    Als het gewenste menu-item of de gewenste werkbalkknop is gemarkeerd, kun je op Return, Enter\n' + + ' of de spatiebalk drukken om het item uit te voeren.

    \n' + + '\n' + + '

    Navigeren in dialoogvensters zonder tabblad

    \n' + + '\n' + + '

    Als een dialoogvenster zonder tabblad wordt geopend, wordt de focus ingesteld op het eerste interactieve onderdeel.

    \n' + + '\n' + + '

    Je kunt navigeren tussen interactieve onderdelen van een dialoogvenster door op Tab of Shift+Tab te drukken.

    \n' + + '\n' + + '

    Navigeren in dialoogvensters met tabblad

    \n' + + '\n' + + '

    Als een dialoogvenster met tabblad wordt geopend, wordt de focus ingesteld op de eerste knop in het tabbladmenu.

    \n' + + '\n' + + '

    Je kunt navigeren tussen interactieve onderdelen van dit tabblad van het dialoogvenster door op Tab of\n' + + ' Shift+Tab te drukken.

    \n' + + '\n' + + '

    Je kunt overschakelen naar een ander tabblad van het dialoogvenster door de focus in te stellen op het tabbladmenu en vervolgens op de juiste pijltjestoets\n' + + ' te drukken om tussen de beschikbare tabbladen te wisselen.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pl.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pl.js new file mode 100644 index 000000000..e89f808a8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pl.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl', +'

    Początek nawigacji przy użyciu klawiatury

    \n' + + '\n' + + '
    \n' + + '
    Ustaw fokus na pasek menu
    \n' + + '
    Windows lub Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Ustaw fokus na pasek narzędzi
    \n' + + '
    Windows lub Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Ustaw fokus na sekcję Footer
    \n' + + '
    Windows lub Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Skup się na powiadomieniu
    \n' + + '
    Windows lub Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Ustaw fokus na kontekstowy pasek narzędzi
    \n' + + '
    Windows, Linux lub macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Nawigacja zostanie rozpoczęta od pierwszego elementu interfejsu użytkownika, który jest podświetlony lub — w przypadku pierwszego elementu\n' + + ' w ścieżce elementów w sekcji Footer — podkreślony.

    \n' + + '\n' + + '

    Nawigacja pomiędzy sekcjami interfejsu użytkownika

    \n' + + '\n' + + '

    Aby przenieść się z danej sekcji interfejsu użytkownika do następnej, naciśnij Tab.

    \n' + + '\n' + + '

    Aby przenieść się z danej sekcji interfejsu użytkownika do poprzedniej, naciśnij Shift+Tab.

    \n' + + '\n' + + '

    Kolejność klawisza Tab w takich sekcjach interfejsu użytkownika jest następująca:

    \n' + + '\n' + + '
      \n' + + '
    1. Pasek menu
    2. \n' + + '
    3. Każda grupa na pasku narzędzi
    4. \n' + + '
    5. Pasek boczny
    6. \n' + + '
    7. Ścieżka elementów w sekcji Footer
    8. \n' + + '
    9. Przycisk przełączania liczby słów w sekcji Footer
    10. \n' + + '
    11. Łącze brandujące w sekcji Footer
    12. \n' + + '
    13. Uchwyt zmiany rozmiaru edytora w sekcji Footer
    14. \n' + + '
    \n' + + '\n' + + '

    Jeżeli nie ma sekcji interfejsu użytkownika, jest to pomijane.

    \n' + + '\n' + + '

    Jeżeli na sekcji Footer jest ustawiony fokus nawigacji przy użyciu klawiatury i nie ma widocznego paska bocznego, naciśnięcie Shift+Tab\n' + + ' przenosi fokus na pierwszą grupę paska narzędzi, a nie na ostatnią.

    \n' + + '\n' + + '

    Nawigacja wewnątrz sekcji interfejsu użytkownika

    \n' + + '\n' + + '

    Aby przenieść się z danego elementu interfejsu użytkownika do następnego, naciśnij odpowiedni klawisz strzałki.

    \n' + + '\n' + + '

    Klawisze strzałek w prawo i w lewo służą do

    \n' + + '\n' + + '
      \n' + + '
    • przenoszenia się pomiędzy menu na pasku menu,
    • \n' + + '
    • otwarcia podmenu w menu,
    • \n' + + '
    • przenoszenia się pomiędzy przyciskami w grupie paska narzędzi,
    • \n' + + '
    • przenoszenia się pomiędzy elementami w ścieżce elementów w sekcji Footer.
    • \n' + + '
    \n' + + '\n' + + '

    Klawisze strzałek w dół i w górę służą do

    \n' + + '\n' + + '
      \n' + + '
    • przenoszenia się pomiędzy elementami menu w menu,
    • \n' + + '
    • przenoszenia się pomiędzy elementami w wyskakującym menu paska narzędzi.
    • \n' + + '
    \n' + + '\n' + + '

    Klawisze strzałek służą do przemieszczania się w sekcji interfejsu użytkownika z ustawionym fokusem.

    \n' + + '\n' + + '

    Aby zamknąć otwarte menu, otwarte podmenu lub otwarte menu wyskakujące, naciśnij klawisz Esc.

    \n' + + '\n' + + '

    Jeżeli fokus jest ustawiony na górze konkretnej sekcji interfejsu użytkownika, naciśnięcie klawisza Esc powoduje wyjście\n' + + ' z nawigacji przy użyciu klawiatury.

    \n' + + '\n' + + '

    Wykonanie elementu menu lub przycisku paska narzędzi

    \n' + + '\n' + + '

    Gdy podświetlony jest żądany element menu lub przycisk paska narzędzi, naciśnij klawisz Return, Enter\n' + + ' lub Spacja, aby go wykonać.

    \n' + + '\n' + + '

    Nawigacja po oknie dialogowym bez kart

    \n' + + '\n' + + '

    Gdy otwiera się okno dialogowe bez kart, fokus ustawiany jest na pierwszą interaktywną część okna.

    \n' + + '\n' + + '

    Pomiędzy interaktywnymi częściami okna dialogowego nawiguj, naciskając klawisze Tab lub Shift+Tab.

    \n' + + '\n' + + '

    Nawigacja po oknie dialogowym z kartami

    \n' + + '\n' + + '

    W przypadku okna dialogowego z kartami po otwarciu okna dialogowego fokus ustawiany jest na pierwszy przycisk w menu karty.

    \n' + + '\n' + + '

    Nawigację pomiędzy interaktywnymi częściami karty okna dialogowego prowadzi się poprzez naciskanie klawiszy Tab lub\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Przełączenie się na inną kartę okna dialogowego wykonuje się poprzez ustawienie fokusu na menu karty i naciśnięcie odpowiedniego klawisza strzałki\n' + + ' w celu przemieszczenia się pomiędzy dostępnymi kartami.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js new file mode 100644 index 000000000..2938fcfa5 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR', +'

    Iniciar navegação pelo teclado

    \n' + + '\n' + + '
    \n' + + '
    Foco na barra de menus
    \n' + + '
    Windows ou Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Foco na barra de ferramentas
    \n' + + '
    Windows ou Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Foco no rodapé
    \n' + + '
    Windows ou Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Foco na notificação
    \n' + + '
    Windows ou Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Foco na barra de ferramentas contextual
    \n' + + '
    Windows, Linux ou macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    A navegação inicia no primeiro item da IU, que será destacado ou sublinhado no caso do primeiro item no\n' + + ' caminho do elemento Rodapé.

    \n' + + '\n' + + '

    Navegar entre seções da IU

    \n' + + '\n' + + '

    Para ir de uma seção da IU para a seguinte, pressione Tab.

    \n' + + '\n' + + '

    Para ir de uma seção da IU para a anterior, pressione Shift+Tab.

    \n' + + '\n' + + '

    A ordem de Tab destas seções da IU é:

    \n' + + '\n' + + '
      \n' + + '
    1. Barra de menus
    2. \n' + + '
    3. Cada grupo da barra de ferramentas
    4. \n' + + '
    5. Barra lateral
    6. \n' + + '
    7. Caminho do elemento no rodapé
    8. \n' + + '
    9. Botão de alternar contagem de palavras no rodapé
    10. \n' + + '
    11. Link da marca no rodapé
    12. \n' + + '
    13. Alça de redimensionamento do editor no rodapé
    14. \n' + + '
    \n' + + '\n' + + '

    Se não houver uma seção da IU, ela será pulada.

    \n' + + '\n' + + '

    Se o rodapé tiver o foco da navegação pelo teclado e não houver uma barra lateral visível, pressionar Shift+Tab\n' + + ' move o foco para o primeiro grupo da barra de ferramentas, não para o último.

    \n' + + '\n' + + '

    Navegar dentro das seções da IU

    \n' + + '\n' + + '

    Para ir de um elemento da IU para o seguinte, pressione a Seta correspondente.

    \n' + + '\n' + + '

    As teclas de seta Esquerda e Direita

    \n' + + '\n' + + '
      \n' + + '
    • movem entre menus na barra de menus.
    • \n' + + '
    • abrem um submenu em um menu.
    • \n' + + '
    • movem entre botões em um grupo da barra de ferramentas.
    • \n' + + '
    • movem entre itens no caminho do elemento do rodapé.
    • \n' + + '
    \n' + + '\n' + + '

    As teclas de seta Abaixo e Acima

    \n' + + '\n' + + '
      \n' + + '
    • movem entre itens de menu em um menu.
    • \n' + + '
    • movem entre itens em um menu suspenso da barra de ferramentas.
    • \n' + + '
    \n' + + '\n' + + '

    As teclas de Seta alternam dentre a seção da IU em foco.

    \n' + + '\n' + + '

    Para fechar um menu aberto, um submenu aberto ou um menu suspenso aberto, pressione Esc.

    \n' + + '\n' + + '

    Se o foco atual estiver no ‘alto’ de determinada seção da IU, pressionar Esc também sai\n' + + ' totalmente da navegação pelo teclado.

    \n' + + '\n' + + '

    Executar um item de menu ou botão da barra de ferramentas

    \n' + + '\n' + + '

    Com o item de menu ou botão da barra de ferramentas desejado destacado, pressione Return, Enter,\n' + + ' ou a Barra de espaço para executar o item.

    \n' + + '\n' + + '

    Navegar por caixas de diálogo sem guias

    \n' + + '\n' + + '

    Em caixas de diálogo sem guias, o primeiro componente interativo recebe o foco quando a caixa de diálogo abre.

    \n' + + '\n' + + '

    Navegue entre componentes interativos de caixa de diálogo pressionando Tab ou Shift+Tab.

    \n' + + '\n' + + '

    Navegar por caixas de diálogo com guias

    \n' + + '\n' + + '

    Em caixas de diálogo com guias, o primeiro botão no menu da guia recebe o foco quando a caixa de diálogo abre.

    \n' + + '\n' + + '

    Navegue entre componentes interativos dessa guia da caixa de diálogo pressionando Tab ou\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Alterne para outra guia da caixa de diálogo colocando o foco no menu da guia e pressionando a Seta\n' + + ' adequada para percorrer as guias disponíveis.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js new file mode 100644 index 000000000..03da3d614 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT', +'

    Iniciar navegação com teclado

    \n' + + '\n' + + '
    \n' + + '
    Foco na barra de menu
    \n' + + '
    Windows ou Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Foco na barra de ferramentas
    \n' + + '
    Windows ou Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Foco no rodapé
    \n' + + '
    Windows ou Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Focar a notificação
    \n' + + '
    Windows ou Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Foco numa barra de ferramentas contextual
    \n' + + '
    Windows, Linux ou macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    A navegação começará no primeiro item de IU, que estará realçado ou sublinhado, no caso do primeiro item no\n' + + ' caminho do elemento do rodapé.

    \n' + + '\n' + + '

    Navegar entre secções de IU

    \n' + + '\n' + + '

    Para se mover de uma secção de IU para a seguinte, prima Tab.

    \n' + + '\n' + + '

    Para se mover de uma secção de IU para a anterior, prima Shift+Tab.

    \n' + + '\n' + + '

    A ordem de tabulação destas secções de IU é:

    \n' + + '\n' + + '
      \n' + + '
    1. Barra de menu
    2. \n' + + '
    3. Cada grupo da barra de ferramentas
    4. \n' + + '
    5. Barra lateral
    6. \n' + + '
    7. Caminho do elemento no rodapé
    8. \n' + + '
    9. Botão de alternar da contagem de palavras no rodapé
    10. \n' + + '
    11. Ligação da marca no rodapé
    12. \n' + + '
    13. Alça de redimensionamento do editor no rodapé
    14. \n' + + '
    \n' + + '\n' + + '

    Se uma secção de IU não estiver presente, é ignorada.

    \n' + + '\n' + + '

    Se o rodapé tiver foco de navegação com teclado e não existir uma barra lateral visível, premir Shift+Tab\n' + + ' move o foco para o primeiro grupo da barra de ferramentas e não para o último.

    \n' + + '\n' + + '

    Navegar nas secções de IU

    \n' + + '\n' + + '

    Para se mover de um elemento de IU para o seguinte, prima a tecla de seta adequada.

    \n' + + '\n' + + '

    As teclas de seta Para a esquerda e Para a direita

    \n' + + '\n' + + '
      \n' + + '
    • movem-se entre menus na barra de menu.
    • \n' + + '
    • abrem um submenu num menu.
    • \n' + + '
    • movem-se entre botões num grupo da barra de ferramentas.
    • \n' + + '
    • movem-se entre itens no caminho do elemento do rodapé.
    • \n' + + '
    \n' + + '\n' + + '

    As teclas de seta Para cima e Para baixo

    \n' + + '\n' + + '
      \n' + + '
    • movem-se entre itens de menu num menu.
    • \n' + + '
    • movem-se entre itens num menu de pop-up da barra de ferramentas.
    • \n' + + '
    \n' + + '\n' + + '

    As teclas de seta deslocam-se ciclicamente na secção de IU em foco.

    \n' + + '\n' + + '

    Para fechar um menu aberto, um submenu aberto ou um menu de pop-up aberto, prima a tecla Esc.

    \n' + + '\n' + + '

    Se o foco atual estiver no "topo" de determinada secção de IU, premir a tecla Esc também fecha\n' + + ' completamente a navegação com teclado.

    \n' + + '\n' + + '

    Executar um item de menu ou botão da barra de ferramentas

    \n' + + '\n' + + '

    Quando o item de menu ou o botão da barra de ferramentas pretendido estiver realçado, prima Retrocesso, Enter\n' + + ' ou a Barra de espaço para executar o item.

    \n' + + '\n' + + '

    Navegar em diálogos sem separadores

    \n' + + '\n' + + '

    Nos diálogos sem separadores, o primeiro componente interativo fica em foco quando o diálogo abre.

    \n' + + '\n' + + '

    Navegue entre componentes interativos do diálogo, premindo Tab ou Shift+Tab.

    \n' + + '\n' + + '

    Navegar em diálogos com separadores

    \n' + + '\n' + + '

    Nos diálogos com separadores, o primeiro botão no menu do separador fica em foco quando o diálogo abre.

    \n' + + '\n' + + '

    Navegue entre os componentes interativos deste separador do diálogo, premindo Tab ou\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Mude para outro separador do diálogo colocando o menu do separador em foco e, em seguida, premindo a tecla de seta\n' + + ' adequada para se deslocar ciclicamente pelos separadores disponíveis.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ro.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ro.js new file mode 100644 index 000000000..38d3441d8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ro.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro', +'

    Începeți navigarea de la tastatură

    \n' + + '\n' + + '
    \n' + + '
    Focalizare pe bara de meniu
    \n' + + '
    Windows sau Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Focalizare pe bara de instrumente
    \n' + + '
    Windows sau Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Focalizare pe subsol
    \n' + + '
    Windows sau Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Focalizare pe notificare
    \n' + + '
    Windows sau Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Focalizare pe o bară de instrumente contextuală
    \n' + + '
    Windows, Linux sau macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigarea va începe de la primul element al interfeței cu utilizatorul, care va fi evidențiat sau subliniat în cazul primului element din\n' + + ' calea elementului Subsol.

    \n' + + '\n' + + '

    Navigați între secțiunile interfeței cu utilizatorul

    \n' + + '\n' + + '

    Pentru a trece de la o secțiune a interfeței cu utilizatorul la alta, apăsați Tab.

    \n' + + '\n' + + '

    Pentru a trece de la o secțiune a interfeței cu utilizatorul la cea anterioară, apăsați Shift+Tab.

    \n' + + '\n' + + '

    Ordinea cu Tab a acestor secțiuni ale interfeței cu utilizatorul este următoarea:

    \n' + + '\n' + + '
      \n' + + '
    1. Bara de meniu
    2. \n' + + '
    3. Fiecare grup de bare de instrumente
    4. \n' + + '
    5. Bara laterală
    6. \n' + + '
    7. Calea elementului în subsol
    8. \n' + + '
    9. Buton de comutare a numărului de cuvinte în subsol
    10. \n' + + '
    11. Link de branding în subsol
    12. \n' + + '
    13. Mâner de redimensionare a editorului în subsol
    14. \n' + + '
    \n' + + '\n' + + '

    În cazul în care o secțiune a interfeței cu utilizatorul nu este prezentă, aceasta este omisă.

    \n' + + '\n' + + '

    În cazul în care subsolul are focalizarea navigației asupra tastaturii și nu există o bară laterală vizibilă, apăsarea butonului Shift+Tab\n' + + ' mută focalizarea pe primul grup de bare de instrumente, nu pe ultimul.

    \n' + + '\n' + + '

    Navigați în secțiunile interfeței cu utilizatorul

    \n' + + '\n' + + '

    Pentru a trece de la un element de interfață cu utilizatorul la următorul, apăsați tasta cu săgeata corespunzătoare.

    \n' + + '\n' + + '

    Tastele cu săgeți către stânga și dreapta

    \n' + + '\n' + + '
      \n' + + '
    • navighează între meniurile din bara de meniuri.
    • \n' + + '
    • deschid un sub-meniu dintr-un meniu.
    • \n' + + '
    • navighează între butoanele dintr-un grup de bare de instrumente.
    • \n' + + '
    • navighează între elementele din calea elementelor subsolului.
    • \n' + + '
    \n' + + '\n' + + '

    Tastele cu săgeți în sus și în jos

    \n' + + '\n' + + '
      \n' + + '
    • navighează între elementele de meniu dintr-un meniu.
    • \n' + + '
    • navighează între elementele unui meniu pop-up din bara de instrumente.
    • \n' + + '
    \n' + + '\n' + + '

    Tastele cu săgeți navighează în cadrul secțiunii interfeței cu utilizatorul asupra căreia se focalizează.

    \n' + + '\n' + + '

    Pentru a închide un meniu deschis, un sub-meniu deschis sau un meniu pop-up deschis, apăsați tasta Esc.

    \n' + + '\n' + + '

    Dacă focalizarea curentă este asupra „părții superioare” a unei anumite secțiuni a interfeței cu utilizatorul, prin apăsarea tastei Esc se iese, de asemenea,\n' + + ' în întregime din navigarea de la tastatură.

    \n' + + '\n' + + '

    Executarea unui element de meniu sau a unui buton din bara de instrumente

    \n' + + '\n' + + '

    Atunci când elementul de meniu dorit sau butonul dorit din bara de instrumente este evidențiat, apăsați Return, Enter,\n' + + ' sau bara de spațiu pentru a executa elementul.

    \n' + + '\n' + + '

    Navigarea de dialoguri fără file

    \n' + + '\n' + + '

    În dialogurile fără file, prima componentă interactivă beneficiază de focalizare la deschiderea dialogului.

    \n' + + '\n' + + '

    Navigați între componentele dialogului interactiv apăsând Tab sau Shift+Tab.

    \n' + + '\n' + + '

    Navigarea de dialoguri cu file

    \n' + + '\n' + + '

    În dialogurile cu file, primul buton din meniul cu file beneficiază de focalizare la deschiderea dialogului.

    \n' + + '\n' + + '

    Navigați între componentele interactive ale acestei file de dialog apăsând Tab sau\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Treceți la o altă filă de dialog focalizând asupra meniului cu file și apoi apăsând săgeata corespunzătoare\n' + + ' pentru a parcurge filele disponibile.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ru.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ru.js new file mode 100644 index 000000000..d310f5441 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/ru.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru', +'

    Начните управление с помощью клавиатуры

    \n' + + '\n' + + '
    \n' + + '
    Фокус на панели меню
    \n' + + '
    Windows или Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Фокус на панели инструментов
    \n' + + '
    Windows или Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Фокус на нижнем колонтитуле
    \n' + + '
    Windows или Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Фокус на уведомлении
    \n' + + '
    Windows или Linux: Alt+12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Фокус на контекстной панели инструментов
    \n' + + '
    Windows, Linux или macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Первый доступный для управления элемент интерфейса будет выделен цветом или подчеркнут (если он находится\n' + + ' в пути элементов нижнего колонтитула).

    \n' + + '\n' + + '

    Переход между разделами пользовательского интерфейса

    \n' + + '\n' + + '

    Чтобы перейти из текущего раздела интерфейса в следующий, нажмите Tab.

    \n' + + '\n' + + '

    Чтобы перейти из текущего раздела интерфейса в предыдущий, нажмите Shift+Tab.

    \n' + + '\n' + + '

    Вкладки разделов интерфейса расположены в следующем порядке:

    \n' + + '\n' + + '
      \n' + + '
    1. Панель меню
    2. \n' + + '
    3. Группы панели инструментов
    4. \n' + + '
    5. Боковая панель
    6. \n' + + '
    7. Путь элементов нижнего колонтитула
    8. \n' + + '
    9. Подсчет слов/символов в нижнем колонтитуле
    10. \n' + + '
    11. Брендовая ссылка в нижнем колонтитуле
    12. \n' + + '
    13. Угол для изменения размера окна редактора
    14. \n' + + '
    \n' + + '\n' + + '

    Если раздел интерфейса отсутствует, он пропускается.

    \n' + + '\n' + + '

    Если при управлении с клавиатуры фокус находится на нижнем колонтитуле, а видимая боковая панель отсутствует, то при нажатии сочетания клавиш Shift+Tab\n' + + ' фокус переносится на первую группу панели инструментов, а не на последнюю.

    \n' + + '\n' + + '

    Переход между элементами внутри разделов пользовательского интерфейса

    \n' + + '\n' + + '

    Чтобы перейти от текущего элемента интерфейса к следующему, нажмите соответствующую клавишу со стрелкой.

    \n' + + '\n' + + '

    Клавиши со стрелками влево и вправо позволяют

    \n' + + '\n' + + '
      \n' + + '
    • перемещаться между разными меню в панели меню.
    • \n' + + '
    • открывать разделы меню.
    • \n' + + '
    • перемещаться между кнопками в группе панели инструментов.
    • \n' + + '
    • перемещаться между элементами в пути элементов нижнего колонтитула.
    • \n' + + '
    \n' + + '\n' + + '

    Клавиши со стрелками вниз и вверх позволяют

    \n' + + '\n' + + '
      \n' + + '
    • перемещаться между элементами одного меню.
    • \n' + + '
    • перемещаться между элементами всплывающего меню в панели инструментов.
    • \n' + + '
    \n' + + '\n' + + '

    При использовании клавиш со стрелками вы будете циклически перемещаться по элементам в пределах выбранного раздела интерфейса.

    \n' + + '\n' + + '

    Чтобы закрыть открытое меню, его раздел или всплывающее меню, нажмите клавишу Esc.

    \n' + + '\n' + + '

    Если фокус находится наверху какого-либо раздела интерфейса, нажатие клавиши Esc также приведет\n' + + ' к выходу из режима управления с помощью клавиатуры.

    \n' + + '\n' + + '

    Использование элемента меню или кнопки на панели инструментов

    \n' + + '\n' + + '

    Когда элемент меню или кнопка панели инструментов будут выделены, нажмите Return, Enter\n' + + ' или Space, чтобы их активировать.

    \n' + + '\n' + + '

    Управление в диалоговом окне без вкладок

    \n' + + '\n' + + '

    При открытии диалогового окна без вкладок фокус переносится на первый интерактивный компонент.

    \n' + + '\n' + + '

    Для перехода между интерактивными компонентами диалогового окна нажимайте Tab или Shift+Tab.

    \n' + + '\n' + + '

    Управление в диалоговом окне с вкладками

    \n' + + '\n' + + '

    При открытии диалогового окна с вкладками фокус переносится на первую кнопку в меню вкладок.

    \n' + + '\n' + + '

    Для перехода между интерактивными компонентами этой вкладки диалогового окна нажимайте Tab или\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Для перехода на другую вкладку диалогового окна переместите фокус на меню вкладок, а затем используйте клавиши со стрелками\n' + + ' для циклического переключения между доступными вкладками.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sk.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sk.js new file mode 100644 index 000000000..60cc6288c --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk', +'

    Začíname s navigáciou pomocou klávesnice

    \n' + + '\n' + + '
    \n' + + '
    Prejsť na panel s ponukami
    \n' + + '
    Windows alebo Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Prejsť na panel nástrojov
    \n' + + '
    Windows alebo Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Prejsť na pätičku
    \n' + + '
    Windows alebo Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Zaostriť na oznámenie
    \n' + + '
    Windows alebo Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Prejsť na kontextový panel nástrojov
    \n' + + '
    Windows, Linux alebo macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigácia začne pri prvej položke používateľského rozhrania, ktorá bude zvýraznená alebo v prípade prvej položky\n' + + ' cesty k pätičke podčiarknutá.

    \n' + + '\n' + + '

    Navigácia medzi časťami používateľského rozhrania

    \n' + + '\n' + + '

    Ak sa chcete posunúť z jednej časti používateľského rozhrania do druhej, stlačte tlačidlo Tab.

    \n' + + '\n' + + '

    Ak sa chcete posunúť z jednej časti používateľského rozhrania do predchádzajúcej, stlačte tlačidlá Shift + Tab.

    \n' + + '\n' + + '

    Poradie prepínania medzi týmito časťami používateľského rozhrania pri stláčaní tlačidla Tab:

    \n' + + '\n' + + '
      \n' + + '
    1. Panel s ponukou
    2. \n' + + '
    3. Každá skupina panela nástrojov
    4. \n' + + '
    5. Bočný panel
    6. \n' + + '
    7. Cesta k prvku v pätičke
    8. \n' + + '
    9. Prepínač počtu slov v pätičke
    10. \n' + + '
    11. Odkaz na informácie o značke v pätičke
    12. \n' + + '
    13. Úchyt na zmenu veľkosti editora v pätičke
    14. \n' + + '
    \n' + + '\n' + + '

    Ak nejaká časť používateľského rozhrania nie je prítomná, preskočí sa.

    \n' + + '\n' + + '

    Ak je pätička vybratá na navigáciu pomocou klávesnice a nie je viditeľný bočný panel, stlačením klávesov Shift+Tab\n' + + ' prejdete na prvú skupinu panela nástrojov, nie na poslednú.

    \n' + + '\n' + + '

    Navigácia v rámci častí používateľského rozhrania

    \n' + + '\n' + + '

    Ak sa chcete posunúť z jedného prvku používateľského rozhrania na ďalší, stlačte príslušný kláves so šípkou.

    \n' + + '\n' + + '

    Klávesy so šípkami doľava a doprava

    \n' + + '\n' + + '
      \n' + + '
    • umožňujú presun medzi ponukami na paneli ponúk,
    • \n' + + '
    • otvárajú podponuku v rámci ponuky,
    • \n' + + '
    • umožňujú presun medzi tlačidlami v skupine panelov nástrojov,
    • \n' + + '
    • umožňujú presun medzi položkami cesty prvku v pätičke.
    • \n' + + '
    \n' + + '\n' + + '

    Klávesy so šípkami dole a hore

    \n' + + '\n' + + '
      \n' + + '
    • umožňujú presun medzi položkami ponuky,
    • \n' + + '
    • umožňujú presun medzi položkami v kontextovej ponuke panela nástrojov.
    • \n' + + '
    \n' + + '\n' + + '

    Klávesy so šípkami vykonávajú prepínanie v rámci vybranej časti používateľského rozhrania.

    \n' + + '\n' + + '

    Ak chcete zatvoriť otvorenú ponuku, otvorenú podponuku alebo otvorenú kontextovú ponuku, stlačte kláves Esc.

    \n' + + '\n' + + '

    Ak je aktuálne vybratá horná časť konkrétneho používateľského rozhrania, stlačením klávesu Esc úplne ukončíte tiež\n' + + ' navigáciu pomocou klávesnice.

    \n' + + '\n' + + '

    Vykonanie príkazu položky ponuky alebo tlačidla panela nástrojov

    \n' + + '\n' + + '

    Keď je zvýraznená požadovaná položka ponuky alebo tlačidlo panela nástrojov, stlačením klávesov Return, Enter\n' + + ' alebo medzerníka vykonáte príslušný príkaz položky.

    \n' + + '\n' + + '

    Navigácia v dialógových oknách bez záložiek

    \n' + + '\n' + + '

    Pri otvorení dialógových okien bez záložiek prejdete na prvý interaktívny komponent.

    \n' + + '\n' + + '

    Medzi interaktívnymi dialógovými komponentmi môžete prechádzať stlačením klávesov Tab alebo Shift+Tab.

    \n' + + '\n' + + '

    Navigácia v dialógových oknách so záložkami

    \n' + + '\n' + + '

    Pri otvorení dialógových okien so záložkami prejdete na prvé tlačidlo v ponuke záložiek.

    \n' + + '\n' + + '

    Medzi interaktívnymi komponentmi tejto dialógovej záložky môžete prechádzať stlačením klávesov Tab alebo\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Ak chcete prepnúť na ďalšiu záložku dialógového okna, prejdite do ponuky záložiek a potom môžete stlačením príslušného klávesu so šípkou\n' + + ' prepínať medzi dostupnými záložkami.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js new file mode 100644 index 000000000..2b25f5a34 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI', +'

    Začetek krmarjenja s tipkovnico

    \n' + + '\n' + + '
    \n' + + '
    Fokus na menijsko vrstico
    \n' + + '
    Windows ali Linux: Alt + F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokus na orodno vrstico
    \n' + + '
    Windows ali Linux: Alt + F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokus na nogo
    \n' + + '
    Windows ali Linux: Alt + F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Označitev obvestila
    \n' + + '
    Windows ali Linux: Alt + F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokus na kontekstualno orodno vrstico
    \n' + + '
    Windows, Linux ali macOS: Ctrl + F9
    \n' + + '
    \n' + + '\n' + + '

    Krmarjenje se bo začelo s prvim elementom uporabniškega vmesnika, ki bo izpostavljena ali podčrtan, če gre za prvi element na\n' + + ' poti do elementa noge.

    \n' + + '\n' + + '

    Krmarjenje med razdelki uporabniškega vmesnika

    \n' + + '\n' + + '

    Če se želite pomakniti z enega dela uporabniškega vmesnika na naslednjega, pritisnite tabulatorko.

    \n' + + '\n' + + '

    Če se želite pomakniti z enega dela uporabniškega vmesnika na prejšnjega, pritisnite shift + tabulatorko.

    \n' + + '\n' + + '

    Zaporedje teh razdelkov uporabniškega vmesnika, ko pritiskate tabulatorko, je:

    \n' + + '\n' + + '
      \n' + + '
    1. Menijska vrstica
    2. \n' + + '
    3. Posamezne skupine orodne vrstice
    4. \n' + + '
    5. Stranska vrstica
    6. \n' + + '
    7. Pod do elementa v nogi
    8. \n' + + '
    9. Gumb za preklop štetja besed v nogi
    10. \n' + + '
    11. Povezava do blagovne znamke v nogi
    12. \n' + + '
    13. Ročaj za spreminjanje velikosti urejevalnika v nogi
    14. \n' + + '
    \n' + + '\n' + + '

    Če razdelek uporabniškega vmesnika ni prisoten, je preskočen.

    \n' + + '\n' + + '

    Če ima noga fokus za krmarjenje s tipkovnico in ni vidne stranske vrstice, s pritiskom na shift + tabulatorko\n' + + ' fokus premaknete na prvo skupino orodne vrstice, ne zadnjo.

    \n' + + '\n' + + '

    Krmarjenje v razdelkih uporabniškega vmesnika

    \n' + + '\n' + + '

    Če se želite premakniti z enega elementa uporabniškega vmesnika na naslednjega, pritisnite ustrezno puščično tipko.

    \n' + + '\n' + + '

    Leva in desna puščična tipka

    \n' + + '\n' + + '
      \n' + + '
    • omogočata premikanje med meniji v menijski vrstici.
    • \n' + + '
    • odpreta podmeni v meniju.
    • \n' + + '
    • omogočata premikanje med gumbi v skupini orodne vrstice.
    • \n' + + '
    • omogočata premikanje med elementi na poti do elementov noge.
    • \n' + + '
    \n' + + '\n' + + '

    Spodnja in zgornja puščična tipka

    \n' + + '\n' + + '
      \n' + + '
    • omogočata premikanje med elementi menija.
    • \n' + + '
    • omogočata premikanje med elementi v pojavnem meniju orodne vrstice.
    • \n' + + '
    \n' + + '\n' + + '

    Puščične tipke omogočajo kroženje znotraj razdelka uporabniškega vmesnika, na katerem je fokus.

    \n' + + '\n' + + '

    Če želite zapreti odprt meni, podmeni ali pojavni meni, pritisnite tipko Esc.

    \n' + + '\n' + + '

    Če je trenutni fokus na »vrhu« določenega razdelka uporabniškega vmesnika, s pritiskom tipke Esc zaprete\n' + + ' tudi celotno krmarjenje s tipkovnico.

    \n' + + '\n' + + '

    Izvajanje menijskega elementa ali gumba orodne vrstice

    \n' + + '\n' + + '

    Ko je označen želeni menijski element ali orodja vrstica, pritisnite vračalko, Enter\n' + + ' ali preslednico, da izvedete element.

    \n' + + '\n' + + '

    Krmarjenje po pogovornih oknih brez zavihkov

    \n' + + '\n' + + '

    Ko odprete pogovorno okno brez zavihkov, ima fokus prva interaktivna komponenta.

    \n' + + '\n' + + '

    Med interaktivnimi komponentami pogovornega okna se premikate s pritiskom tabulatorke ali kombinacije tipke shift + tabulatorke.

    \n' + + '\n' + + '

    Krmarjenje po pogovornih oknih z zavihki

    \n' + + '\n' + + '

    Ko odprete pogovorno okno z zavihki, ima fokus prvi gumb v meniju zavihka.

    \n' + + '\n' + + '

    Med interaktivnimi komponentami tega zavihka pogovornega okna se premikate s pritiskom tabulatorke ali\n' + + ' kombinacije tipke shift + tabulatorke.

    \n' + + '\n' + + '

    Na drug zavihek pogovornega okna preklopite tako, da fokus prestavite na meni zavihka in nato pritisnete ustrezno puščično\n' + + ' tipko, da se pomaknete med razpoložljivimi zavihki.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js new file mode 100644 index 000000000..c30f2f253 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE', +'

    Påbörja tangentbordsnavigering

    \n' + + '\n' + + '
    \n' + + '
    Fokusera på menyraden
    \n' + + '
    Windows eller Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Fokusera på verktygsraden
    \n' + + '
    Windows eller Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Fokusera på verktygsraden
    \n' + + '
    Windows eller Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Fokusera aviseringen
    \n' + + '
    Windows eller Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Fokusera på en snabbverktygsrad
    \n' + + '
    Windows, Linux eller macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Navigeringen börjar vid det första gränssnittsobjektet, vilket är markerat eller understruket om det gäller det första objektet i\n' + + ' sidfotens elementsökväg.

    \n' + + '\n' + + '

    Navigera mellan UI-avsnitt

    \n' + + '\n' + + '

    Flytta från ett UI-avsnitt till nästa genom att trycka på Tabb.

    \n' + + '\n' + + '

    Flytta från ett UI-avsnitt till det föregående genom att trycka på Skift+Tabb.

    \n' + + '\n' + + '

    Tabb-ordningen för dessa UI-avsnitt är:

    \n' + + '\n' + + '
      \n' + + '
    1. Menyrad
    2. \n' + + '
    3. Varje verktygsradsgrupp
    4. \n' + + '
    5. Sidoruta
    6. \n' + + '
    7. Elementsökväg i sidfoten
    8. \n' + + '
    9. Växlingsknapp för ordantal i sidfoten
    10. \n' + + '
    11. Varumärkeslänk i sidfoten
    12. \n' + + '
    13. Storlekshandtag för redigeraren i sidfoten
    14. \n' + + '
    \n' + + '\n' + + '

    Om ett UI-avsnitt inte finns hoppas det över.

    \n' + + '\n' + + '

    Om sidfoten har fokus på tangentbordsnavigering, och det inte finns någon synlig sidoruta, flyttas fokus till den första verktygsradsgruppen\n' + + ' när du trycker på Skift+Tabb, inte till den sista.

    \n' + + '\n' + + '

    Navigera i UI-avsnitt

    \n' + + '\n' + + '

    Flytta från ett UI-element till nästa genom att trycka på motsvarande piltangent.

    \n' + + '\n' + + '

    Vänsterpil och högerpil

    \n' + + '\n' + + '
      \n' + + '
    • flytta mellan menyer på menyraden.
    • \n' + + '
    • öppna en undermeny på en meny.
    • \n' + + '
    • flytta mellan knappar i en verktygsradgrupp.
    • \n' + + '
    • flytta mellan objekt i sidfotens elementsökväg.
    • \n' + + '
    \n' + + '\n' + + '

    Nedpil och uppil

    \n' + + '\n' + + '
      \n' + + '
    • flytta mellan menyalternativ på en meny.
    • \n' + + '
    • flytta mellan alternativ på en popup-meny på verktygsraden.
    • \n' + + '
    \n' + + '\n' + + '

    Piltangenterna cirkulerar inom det fokuserade UI-avsnittet.

    \n' + + '\n' + + '

    Tryck på Esc-tangenten om du vill stänga en öppen meny, undermeny eller popup-meny.

    \n' + + '\n' + + '

    Om det aktuella fokuset är högst upp i ett UI-avsnitt avlutas även tangentbordsnavigeringen helt när\n' + + ' du trycker på Esc-tangenten.

    \n' + + '\n' + + '

    Köra ett menyalternativ eller en verktygfältsknapp

    \n' + + '\n' + + '

    När menyalternativet eller verktygsradsknappen är markerad trycker du på Retur, Enter\n' + + ' eller blanksteg för att köra alternativet.

    \n' + + '\n' + + '

    Navigera i dialogrutor utan flikar

    \n' + + '\n' + + '

    I dialogrutor utan flikar är den första interaktiva komponenten i fokus när dialogrutan öppnas.

    \n' + + '\n' + + '

    Navigera mellan interaktiva dialogkomponenter genom att trycka på Tabb eller Skift+Tabb.

    \n' + + '\n' + + '

    Navigera i dialogrutor med flikar

    \n' + + '\n' + + '

    I dialogrutor utan flikar är den första knappen på flikmenyn i fokus när dialogrutan öppnas.

    \n' + + '\n' + + '

    Navigera mellan interaktiva komponenter på dialogrutefliken genom att trycka på Tabb eller\n' + + ' Skift+Tabb.

    \n' + + '\n' + + '

    Växla till en annan dialogruta genom att fokusera på flikmenyn och sedan trycka på motsvarande piltangent\n' + + ' för att cirkulera mellan de tillgängliga flikarna.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js new file mode 100644 index 000000000..562fe7a79 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH', +'

    เริ่มต้นการนำทางด้วยแป้นพิมพ์

    \n' + + '\n' + + '
    \n' + + '
    โฟกัสที่แถบเมนู
    \n' + + '
    Windows หรือ Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    โฟกัสที่แถบเครื่องมือ
    \n' + + '
    Windows หรือ Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    โฟกัสที่ส่วนท้าย
    \n' + + '
    Windows หรือ Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    โฟกัสไปที่การแจ้งเตือน
    \n' + + '
    Windows หรือ Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    โฟกัสที่แถบเครื่องมือตามบริบท
    \n' + + '
    Windows, Linux หรือ macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    การนำทางจะเริ่มที่รายการ UI แรก ซึ่งจะมีการไฮไลต์หรือขีดเส้นใต้ไว้ในกรณีที่รายการแรกอยู่ใน\n' + + ' พาธองค์ประกอบส่วนท้าย

    \n' + + '\n' + + '

    การนำทางระหว่างส่วนต่างๆ ของ UI

    \n' + + '\n' + + '

    ในการย้ายจากส่วน UI หนึ่งไปยังส่วนถัดไป ให้กด Tab

    \n' + + '\n' + + '

    ในการย้ายจากส่วน UI หนึ่งไปยังส่วนก่อนหน้า ให้กด Shift+Tab

    \n' + + '\n' + + '

    ลำดับแท็บของส่วนต่างๆ ของ UI คือ:

    \n' + + '\n' + + '
      \n' + + '
    1. แถบเมนู
    2. \n' + + '
    3. แต่ละกลุ่มแถบเครื่องมือ
    4. \n' + + '
    5. แถบข้าง
    6. \n' + + '
    7. พาธองค์ประกอบในส่วนท้าย
    8. \n' + + '
    9. ปุ่มสลับเปิด/ปิดจำนวนคำในส่วนท้าย
    10. \n' + + '
    11. ลิงก์ชื่อแบรนด์ในส่วนท้าย
    12. \n' + + '
    13. จุดจับปรับขนาดของตัวแก้ไขในส่วนท้าย
    14. \n' + + '
    \n' + + '\n' + + '

    หากส่วน UI ไม่ปรากฏ แสดงว่าถูกข้ามไป

    \n' + + '\n' + + '

    หากส่วนท้ายมีการโฟกัสการนำทางแป้นพิมพ์และไม่มีแถบข้างปรากฏ การกด Shift+Tab\n' + + ' จะย้ายการโฟกัสไปที่กลุ่มแถบเครื่องมือแรก ไม่ใช่สุดท้าย

    \n' + + '\n' + + '

    การนำทางภายในส่วนต่างๆ ของ UI

    \n' + + '\n' + + '

    ในการย้ายจากองค์ประกอบ UI หนึ่งไปยังองค์ประกอบส่วนถัดไป ให้กดปุ่มลูกศรที่เหมาะสม

    \n' + + '\n' + + '

    ปุ่มลูกศรซ้ายและขวา

    \n' + + '\n' + + '
      \n' + + '
    • ย้ายไปมาระหว่างเมนูต่างๆ ในแถบเมนู
    • \n' + + '
    • เปิดเมนูย่อยในเมนู
    • \n' + + '
    • ย้ายไปมาระหว่างปุ่มต่างๆ ในกลุ่มแถบเครื่องมือ
    • \n' + + '
    • ย้ายไปมาระหว่างรายการต่างๆ ในพาธองค์ประกอบของส่วนท้าย
    • \n' + + '
    \n' + + '\n' + + '

    ปุ่มลูกศรลงและขึ้น

    \n' + + '\n' + + '
      \n' + + '
    • ย้ายไปมาระหว่างรายการเมนูต่างๆ ในเมนู
    • \n' + + '
    • ย้ายไปมาระหว่างรายการต่างๆ ในเมนูป๊อบอัพแถบเครื่องมือ
    • \n' + + '
    \n' + + '\n' + + '

    ปุ่มลูกศรจะเลื่อนไปมาภายในส่วน UI ที่โฟกัส

    \n' + + '\n' + + '

    ในการปิดเมนูที่เปิดอยู่ เมนูย่อยที่เปิดอยู่ หรือเมนูป๊อบอัพที่เปิดอยู่ ให้กดปุ่ม Esc

    \n' + + '\n' + + '

    หากโฟกัสปัจจุบันอยู่ที่ ‘ด้านบนสุด’ ของส่วน UI เฉพาะ การกดปุ่ม Esc จะทำให้ออกจาก\n' + + ' การนำทางด้วยแป้นพิมพ์ทั้งหมดเช่นกัน

    \n' + + '\n' + + '

    การดำเนินการรายการเมนูหรือปุ่มในแถบเครื่องมือ

    \n' + + '\n' + + '

    เมื่อไฮไลต์รายการเมนูหรือปุ่มในแถบเครื่องมือที่ต้องการ ให้กด Return, Enter\n' + + ' หรือ Space bar เพื่อดำเนินการรายการดังกล่าว

    \n' + + '\n' + + '

    การนำทางสำหรับกล่องโต้ตอบที่ไม่อยู่ในแท็บ

    \n' + + '\n' + + '

    ในกล่องโต้ตอบที่ไม่อยู่ในแท็บ จะโฟกัสที่ส่วนประกอบเชิงโต้ตอบแรกเมื่อกล่องโต้ตอบเปิด

    \n' + + '\n' + + '

    นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของกล่องโต้ตอบ โดยการกด Tab หรือ Shift+Tab

    \n' + + '\n' + + '

    การนำทางสำหรับกล่องโต้ตอบที่อยู่ในแท็บ

    \n' + + '\n' + + '

    ในกล่องโต้ตอบที่อยู่ในแท็บ จะโฟกัสที่ปุ่มแรกในเมนูแท็บเมื่อกล่องโต้ตอบเปิด

    \n' + + '\n' + + '

    นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของแท็บกล่องโต้ตอบนี้โดยการกด Tab หรือ\n' + + ' Shift+Tab

    \n' + + '\n' + + '

    สลับไปยังแท็บกล่องโต้ตอบอื่นโดยการเลือกโฟกัสที่เมนูแท็บ แล้วกดปุ่มลูกศรที่เหมาะสม\n' + + ' เพื่อเลือกแท็บที่ใช้ได้

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/tr.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/tr.js new file mode 100644 index 000000000..37f39b0fc --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/tr.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr', +'

    Klavyeyle gezintiyi başlatma

    \n' + + '\n' + + '
    \n' + + '
    Menü çubuğuna odaklan
    \n' + + '
    Windows veya Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Araç çubuğuna odaklan
    \n' + + '
    Windows veya Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Alt bilgiye odaklan
    \n' + + '
    Windows veya Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Bildirime odakla
    \n' + + '
    Windows veya Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Bağlamsal araç çubuğuna odaklan
    \n' + + '
    Windows, Linux veya macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Gezinti ilk kullanıcı arabirimi öğesinden başlar, bu öğe vurgulanır ya da ilk öğe, Alt bilgi elemanı\n' + + ' yolundaysa altı çizilir.

    \n' + + '\n' + + '

    Kullanıcı arabirimi bölümleri arasında gezinme

    \n' + + '\n' + + '

    Sonraki kullanıcı arabirimi bölümüne gitmek için Sekme tuşuna basın.

    \n' + + '\n' + + '

    Önceki kullanıcı arabirimi bölümüne gitmek için Shift+Sekme tuşlarına basın.

    \n' + + '\n' + + '

    Bu kullanıcı arabirimi bölümlerinin Sekme sırası:

    \n' + + '\n' + + '
      \n' + + '
    1. Menü çubuğu
    2. \n' + + '
    3. Her araç çubuğu grubu
    4. \n' + + '
    5. Kenar çubuğu
    6. \n' + + '
    7. Alt bilgide öğe yolu
    8. \n' + + '
    9. Alt bilgide sözcük sayısı geçiş düğmesi
    10. \n' + + '
    11. Alt bilgide marka bağlantısı
    12. \n' + + '
    13. Alt bilgide düzenleyiciyi yeniden boyutlandırma tutamacı
    14. \n' + + '
    \n' + + '\n' + + '

    Kullanıcı arabirimi bölümü yoksa atlanır.

    \n' + + '\n' + + '

    Alt bilgide klavyeyle gezinti odağı yoksa ve görünür bir kenar çubuğu mevcut değilse Shift+Sekme tuşlarına basıldığında\n' + + ' odak son araç çubuğu yerine ilk araç çubuğu grubuna taşınır.

    \n' + + '\n' + + '

    Kullanıcı arabirimi bölümleri içinde gezinme

    \n' + + '\n' + + '

    Sonraki kullanıcı arabirimi elemanına gitmek için uygun Ok tuşuna basın.

    \n' + + '\n' + + '

    Sol ve Sağ ok tuşları

    \n' + + '\n' + + '
      \n' + + '
    • menü çubuğundaki menüler arasında hareket eder.
    • \n' + + '
    • menüde bir alt menü açar.
    • \n' + + '
    • araç çubuğu grubundaki düğmeler arasında hareket eder.
    • \n' + + '
    • alt bilginin öğe yolundaki öğeler arasında hareket eder.
    • \n' + + '
    \n' + + '\n' + + '

    Aşağı ve Yukarı ok tuşları

    \n' + + '\n' + + '
      \n' + + '
    • menüdeki menü öğeleri arasında hareket eder.
    • \n' + + '
    • araç çubuğu açılır menüsündeki öğeler arasında hareket eder.
    • \n' + + '
    \n' + + '\n' + + '

    Ok tuşları, odaklanılan kullanıcı arabirimi bölümü içinde döngüsel olarak hareket eder.

    \n' + + '\n' + + '

    Açık bir menüyü, açık bir alt menüyü veya açık bir açılır menüyü kapatmak için Esc tuşuna basın.

    \n' + + '\n' + + '

    Geçerli odak belirli bir kullanıcı arabirimi bölümünün "üst" kısmındaysa Esc tuşuna basıldığında\n' + + ' klavyeyle gezintiden de tamamen çıkılır.

    \n' + + '\n' + + '

    Menü öğesini veya araç çubuğu düğmesini yürütme

    \n' + + '\n' + + '

    İstediğiniz menü öğesi veya araç çubuğu düğmesi vurgulandığında Return, Enter\n' + + ' veya Ara çubuğu tuşuna basın.

    \n' + + '\n' + + '

    Sekme bulunmayan iletişim kutularında gezinme

    \n' + + '\n' + + '

    Sekme bulunmayan iletişim kutularında, iletişim kutusu açıldığında ilk etkileşimli bileşene odaklanılır.

    \n' + + '\n' + + '

    Etkileşimli iletişim kutusu bileşenleri arasında gezinmek için Sekme veya Shift+ Sekme tuşlarına basın.

    \n' + + '\n' + + '

    Sekmeli iletişim kutularında gezinme

    \n' + + '\n' + + '

    Sekmeli iletişim kutularında, iletişim kutusu açıldığında sekme menüsündeki ilk düğmeye odaklanılır.

    \n' + + '\n' + + '

    Bu iletişim kutusu sekmesinin etkileşimli bileşenleri arasında gezinmek için Sekme veya\n' + + ' Shift+Sekme tuşlarına basın.

    \n' + + '\n' + + '

    Mevcut sekmeler arasında geçiş yapmak için sekme menüsüne odaklanıp uygun Ok tuşuna basarak\n' + + ' başka bir iletişim kutusu sekmesine geçiş yapın.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/uk.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/uk.js new file mode 100644 index 000000000..028d4a4c8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/uk.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk', +'

    Початок роботи з навігацією за допомогою клавіатури

    \n' + + '\n' + + '
    \n' + + '
    Фокус на рядок меню
    \n' + + '
    Windows або Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Фокус на панелі інструментів
    \n' + + '
    Windows або Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Фокус на розділі "Нижній колонтитул"
    \n' + + '
    Windows або Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Фокус на сповіщення
    \n' + + '
    Windows або Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Фокус на контекстній панелі інструментів
    \n' + + '
    Windows, Linux або macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Навігація почнеться з першого елемента інтерфейсу користувача, який буде виділено або підкреслено в разі, якщо перший елемент знаходиться в\n' + + ' шляху до елемента "Нижній колонтитул".

    \n' + + '\n' + + '

    Навігація між розділами інтерфейсу користувача

    \n' + + '\n' + + '

    Щоб перейти з одного розділу інтерфейсу користувача до наступного розділу, натисніть клавішу Tab.

    \n' + + '\n' + + '

    Щоб перейти з одного розділу інтерфейсу користувача до попереднього розділу, натисніть сполучення клавіш Shift+Tab.

    \n' + + '\n' + + '

    Порядок Вкладок цих розділів інтерфейсу користувача такий:

    \n' + + '\n' + + '
      \n' + + '
    1. Рядок меню
    2. \n' + + '
    3. Кожна група панелей інструментів
    4. \n' + + '
    5. Бічна панель
    6. \n' + + '
    7. Шлях до елементів у розділі "Нижній колонтитул"
    8. \n' + + '
    9. Кнопка перемикача "Кількість слів" у розділі "Нижній колонтитул"
    10. \n' + + '
    11. Посилання на брендинг у розділі "Нижній колонтитул"
    12. \n' + + '
    13. Маркер змінення розміру в розділі "Нижній колонтитул"
    14. \n' + + '
    \n' + + '\n' + + '

    Якщо розділ інтерфейсу користувача відсутній, він пропускається.

    \n' + + '\n' + + '

    Якщо фокус навігації клавіатури знаходиться на розділі "Нижній колонтитул", але користувач не бачить видиму бічну панель, натисніть Shift+Tab,\n' + + ' щоб перемістити фокус на першу групу панелі інструментів, а не на останню.

    \n' + + '\n' + + '

    Навігація в межах розділів інтерфейсу користувача

    \n' + + '\n' + + '

    Щоб перейти з одного елементу інтерфейсу користувача до наступного, натисніть відповідну клавішу зі стрілкою.

    \n' + + '\n' + + '

    Клавіші зі стрілками Ліворуч і Праворуч

    \n' + + '\n' + + '
      \n' + + '
    • переміщують між меню в рядку меню.
    • \n' + + '
    • відкривають вкладене меню в меню.
    • \n' + + '
    • переміщують користувача між кнопками в групі панелі інструментів.
    • \n' + + '
    • переміщують між елементами в шляху до елементів у розділі "Нижній колонтитул".
    • \n' + + '
    \n' + + '\n' + + '

    Клавіші зі стрілками Вниз і Вгору

    \n' + + '\n' + + '
      \n' + + '
    • переміщують між елементами меню в меню.
    • \n' + + '
    • переміщують між елементами в спливаючому меню панелі інструментів.
    • \n' + + '
    \n' + + '\n' + + '

    Клавіші зі стрілками переміщують фокус циклічно в межах розділу інтерфейсу користувача, на якому знаходиться фокус.

    \n' + + '\n' + + '

    Щоб закрити відкрите меню, відкрите вкладене меню або відкрите спливаюче меню, натисніть клавішу Esc.

    \n' + + '\n' + + '

    Якщо поточний фокус знаходиться на верхньому рівні певного розділу інтерфейсу користувача, натискання клавіші Esc також виконує вихід\n' + + ' з навігації за допомогою клавіатури повністю.

    \n' + + '\n' + + '

    Виконання елементу меню або кнопки панелі інструментів

    \n' + + '\n' + + '

    Коли потрібний елемент меню або кнопку панелі інструментів виділено, натисніть клавіші Return, Enter,\n' + + ' або Пробіл, щоб виконати цей елемент.

    \n' + + '\n' + + '

    Навігація по діалоговим вікнам без вкладок

    \n' + + '\n' + + '

    У діалогових вікнах без вкладок перший інтерактивний компонент приймає фокус, коли відкривається діалогове вікно.

    \n' + + '\n' + + '

    Переходьте між інтерактивними компонентами діалогового вікна, натискаючи клавіші Tab або Shift+Tab.

    \n' + + '\n' + + '

    Навігація по діалоговим вікнам з вкладками

    \n' + + '\n' + + '

    У діалогових вікнах із вкладками перша кнопка в меню вкладки приймає фокус, коли відкривається діалогове вікно.

    \n' + + '\n' + + '

    Переходьте між інтерактивними компонентами цієї вкладки діалогового вікна, натискаючи клавіші Tab або\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Щоб перейти на іншу вкладку діалогового вікна, перемістіть фокус на меню вкладки, а потім натисніть відповідну клавішу зі стрілкою,\n' + + ' щоб циклічно переходити по доступним вкладкам.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/vi.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/vi.js new file mode 100644 index 000000000..d8eda11bc --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/vi.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi', +'

    Bắt đầu điều hướng bàn phím

    \n' + + '\n' + + '
    \n' + + '
    Tập trung vào thanh menu
    \n' + + '
    Windows hoặc Linux: Alt+F9
    \n' + + '
    macOS: ⌥F9
    \n' + + '
    Tập trung vào thanh công cụ
    \n' + + '
    Windows hoặc Linux: Alt+F10
    \n' + + '
    macOS: ⌥F10
    \n' + + '
    Tập trung vào chân trang
    \n' + + '
    Windows hoặc Linux: Alt+F11
    \n' + + '
    macOS: ⌥F11
    \n' + + '
    Tập trung vào thông báo
    \n' + + '
    Windows hoặc Linux: Alt+F12
    \n' + + '
    macOS: ⌥F12
    \n' + + '
    Tập trung vào thanh công cụ ngữ cảnh
    \n' + + '
    Windows, Linux hoặc macOS: Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    Điều hướng sẽ bắt đầu từ mục UI đầu tiên. Mục này sẽ được tô sáng hoặc có gạch dưới (nếu là mục đầu tiên trong\n' + + ' đường dẫn phần tử Chân trang).

    \n' + + '\n' + + '

    Di chuyển qua lại giữa các phần UI

    \n' + + '\n' + + '

    Để di chuyển từ một phần UI sang phần tiếp theo, ấn Tab.

    \n' + + '\n' + + '

    Để di chuyển từ một phần UI về phần trước đó, ấn Shift+Tab.

    \n' + + '\n' + + '

    Thứ tự Tab của các phần UI này như sau:

    \n' + + '\n' + + '
      \n' + + '
    1. Thanh menu
    2. \n' + + '
    3. Từng nhóm thanh công cụ
    4. \n' + + '
    5. Thanh bên
    6. \n' + + '
    7. Đường dẫn phần tử trong chân trang
    8. \n' + + '
    9. Nút chuyển đổi đếm chữ ở chân trang
    10. \n' + + '
    11. Liên kết thương hiệu ở chân trang
    12. \n' + + '
    13. Núm điều tác chỉnh kích cỡ trình soạn thảo ở chân trang
    14. \n' + + '
    \n' + + '\n' + + '

    Nếu người dùng không thấy một phần UI, thì có nghĩa phần đó bị bỏ qua.

    \n' + + '\n' + + '

    Nếu ở chân trang có tính năng tập trung điều hướng bàn phím, mà không có thanh bên nào hiện hữu, thao tác ấn Shift+Tab\n' + + ' sẽ chuyển hướng tập trung vào nhóm thanh công cụ đầu tiên, không phải cuối cùng.

    \n' + + '\n' + + '

    Di chuyển qua lại trong các phần UI

    \n' + + '\n' + + '

    Để di chuyển từ một phần tử UI sang phần tiếp theo, ấn phím Mũi tên tương ứng cho phù hợp.

    \n' + + '\n' + + '

    Các phím mũi tên TráiPhải

    \n' + + '\n' + + '
      \n' + + '
    • di chuyển giữa các menu trong thanh menu.
    • \n' + + '
    • mở menu phụ trong một menu.
    • \n' + + '
    • di chuyển giữa các nút trong nhóm thanh công cụ.
    • \n' + + '
    • di chuyển giữa các mục trong đường dẫn phần tử của chân trang.
    • \n' + + '
    \n' + + '\n' + + '

    Các phím mũi tên Hướng xuốngHướng lên

    \n' + + '\n' + + '
      \n' + + '
    • di chuyển giữa các mục menu trong menu.
    • \n' + + '
    • di chuyển giữa các mục trong menu thanh công cụ dạng bật lên.
    • \n' + + '
    \n' + + '\n' + + '

    Các phím mũi tên xoay vòng trong một phần UI tập trung.

    \n' + + '\n' + + '

    Để đóng một menu mở, một menu phụ đang mở, hoặc một menu dạng bật lên đang mở, hãy ấn phím Esc.

    \n' + + '\n' + + '

    Nếu trọng tâm hiện tại là ở phần “đầu” của một phần UI cụ thể, thao tác ấn phím Esc cũng sẽ thoát\n' + + ' toàn bộ phần điều hướng bàn phím.

    \n' + + '\n' + + '

    Thực hiện chức năng của một mục menu hoặc nút thanh công cụ

    \n' + + '\n' + + '

    Khi mục menu hoặc nút thanh công cụ muốn dùng được tô sáng, hãy ấn Return, Enter,\n' + + ' hoặc Phím cách để thực hiện chức năng mục đó.

    \n' + + '\n' + + '

    Điều hướng giữa các hộp thoại không có nhiều tab

    \n' + + '\n' + + '

    Trong các hộp thoại không có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào thành phần tương tác đầu tiên.

    \n' + + '\n' + + '

    Di chuyển giữa các thành phần hộp thoại tương tác bằng cách ấn Tab hoặc Shift+Tab.

    \n' + + '\n' + + '

    Điều hướng giữa các hộp thoại có nhiều tab

    \n' + + '\n' + + '

    Trong các hộp thoại có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào nút đầu tiên trong menu tab.

    \n' + + '\n' + + '

    Di chuyển giữa các thành phần tương tác của tab hộp thoại này bằng cách ấn Tab hoặc\n' + + ' Shift+Tab.

    \n' + + '\n' + + '

    Chuyển sang một tab hộp thoại khác bằng cách chuyển trọng tâm vào menu tab, rồi ấn phím Mũi tên phù hợp\n' + + ' để xoay vòng các tab hiện có.

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js new file mode 100644 index 000000000..f7e73d1fb --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js @@ -0,0 +1,87 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN', +'

    开始键盘导航

    \n' + + '\n' + + '
    \n' + + '
    使菜单栏处于焦点
    \n' + + '
    Windows 或 Linux:Alt+F9
    \n' + + '
    macOS:⌥F9
    \n' + + '
    使工具栏处于焦点
    \n' + + '
    Windows 或 Linux:Alt+F10
    \n' + + '
    macOS:⌥F10
    \n' + + '
    使页脚处于焦点
    \n' + + '
    Windows 或 Linux:Alt+F11
    \n' + + '
    macOS:⌥F11
    \n' + + '
    使通知处于焦点
    \n' + + '
    Windows 或 Linux:Alt+F12
    \n' + + '
    macOS:⌥F12
    \n' + + '
    使上下文工具栏处于焦点
    \n' + + '
    Windows、Linux 或 macOS:Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    导航将在第一个 UI 项上开始,其中突出显示该项,或者对于页脚元素路径中的第一项,将为其添加下划线。

    \n' + + '\n' + + '

    在 UI 部分之间导航

    \n' + + '\n' + + '

    要从一个 UI 部分移至下一个,请按 Tab

    \n' + + '\n' + + '

    要从一个 UI 部分移至上一个,请按 Shift+Tab

    \n' + + '\n' + + '

    这些 UI 部分的 Tab 顺序为:

    \n' + + '\n' + + '
      \n' + + '
    1. 菜单栏
    2. \n' + + '
    3. 每个工具栏组
    4. \n' + + '
    5. 边栏
    6. \n' + + '
    7. 页脚中的元素路径
    8. \n' + + '
    9. 页脚中的字数切换按钮
    10. \n' + + '
    11. 页脚中的品牌链接
    12. \n' + + '
    13. 页脚中的编辑器调整大小图柄
    14. \n' + + '
    \n' + + '\n' + + '

    如果不存在某个 UI 部分,则跳过它。

    \n' + + '\n' + + '

    如果键盘导航焦点在页脚,并且没有可见的边栏,则按 Shift+Tab 将焦点移至第一个工具栏组而非最后一个。

    \n' + + '\n' + + '

    在 UI 部分内导航

    \n' + + '\n' + + '

    要从一个 UI 元素移至下一个,请按相应的箭头键。

    \n' + + '\n' + + '

    箭头键

    \n' + + '\n' + + '
      \n' + + '
    • 在菜单栏中的菜单之间移动。
    • \n' + + '
    • 打开菜单中的子菜单。
    • \n' + + '
    • 在工具栏组中的按钮之间移动。
    • \n' + + '
    • 在页脚的元素路径中的各项之间移动。
    • \n' + + '
    \n' + + '\n' + + '

    箭头键

    \n' + + '\n' + + '
      \n' + + '
    • 在菜单中的菜单项之间移动。
    • \n' + + '
    • 在工具栏弹出菜单中的各项之间移动。
    • \n' + + '
    \n' + + '\n' + + '

    箭头键在具有焦点的 UI 部分内循环。

    \n' + + '\n' + + '

    要关闭打开的菜单、打开的子菜单或打开的弹出菜单,请按 Esc 键。

    \n' + + '\n' + + '

    如果当前的焦点在特定 UI 部分的“顶部”,则按 Esc 键还将完全退出键盘导航。

    \n' + + '\n' + + '

    执行菜单项或工具栏按钮

    \n' + + '\n' + + '

    当突出显示所需的菜单项或工具栏按钮时,按 ReturnEnter空格以执行该项。

    \n' + + '\n' + + '

    在非标签页式对话框中导航

    \n' + + '\n' + + '

    在非标签页式对话框中,当对话框打开时,第一个交互组件获得焦点。

    \n' + + '\n' + + '

    通过按 TabShift+Tab,在交互对话框组件之间导航。

    \n' + + '\n' + + '

    在标签页式对话框中导航

    \n' + + '\n' + + '

    在标签页式对话框中,当对话框打开时,标签页菜单中的第一个按钮获得焦点。

    \n' + + '\n' + + '

    通过按 TabShift+Tab,在此对话框的交互组件之间导航。

    \n' + + '\n' + + '

    通过将焦点移至另一对话框标签页的菜单,然后按相应的箭头键以在可用的标签页间循环,从而切换到该对话框标签页。

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js new file mode 100644 index 000000000..5912770f4 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js @@ -0,0 +1,93 @@ +tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW', +'

    開始鍵盤瀏覽

    \n' + + '\n' + + '
    \n' + + '
    跳至功能表列
    \n' + + '
    Windows 或 Linux:Alt+F9
    \n' + + '
    macOS:⌥F9
    \n' + + '
    跳至工具列
    \n' + + '
    Windows 或 Linux:Alt+F10
    \n' + + '
    macOS:⌥F10
    \n' + + '
    跳至頁尾
    \n' + + '
    Windows 或 Linux:Alt+F11
    \n' + + '
    macOS:⌥F11
    \n' + + '
    跳至通知
    \n' + + '
    Windows 或 Linux:Alt+F12
    \n' + + '
    macOS:⌥F12
    \n' + + '
    跳至關聯式工具列
    \n' + + '
    Windows、Linux 或 macOS:Ctrl+F9
    \n' + + '
    \n' + + '\n' + + '

    瀏覽會從第一個 UI 項目開始,該項目會反白顯示,但如果是「頁尾」元素路徑的第一項,\n' + + ' 則加底線。

    \n' + + '\n' + + '

    在 UI 區段之間瀏覽

    \n' + + '\n' + + '

    從 UI 區段移至下一個,請按 Tab

    \n' + + '\n' + + '

    從 UI 區段移回上一個,請按 Shift+Tab

    \n' + + '\n' + + '

    這些 UI 區段的 Tab 順序如下:

    \n' + + '\n' + + '
      \n' + + '
    1. 功能表列
    2. \n' + + '
    3. 各個工具列群組
    4. \n' + + '
    5. 側邊欄
    6. \n' + + '
    7. 頁尾中的元素路徑
    8. \n' + + '
    9. 頁尾中字數切換按鈕
    10. \n' + + '
    11. 頁尾中的品牌連結
    12. \n' + + '
    13. 頁尾中編輯器調整大小控點
    14. \n' + + '
    \n' + + '\n' + + '

    如果 UI 區段未顯示,表示已略過該區段。

    \n' + + '\n' + + '

    如果鍵盤瀏覽跳至頁尾,但沒有顯示側邊欄,則按下 Shift+Tab\n' + + ' 會跳至第一個工具列群組,而不是最後一個。

    \n' + + '\n' + + '

    在 UI 區段之內瀏覽

    \n' + + '\n' + + '

    在兩個 UI 元素之間移動,請按適當的方向鍵。

    \n' + + '\n' + + '

    向左向右方向鍵

    \n' + + '\n' + + '
      \n' + + '
    • 在功能表列中的功能表之間移動。
    • \n' + + '
    • 開啟功能表中的子功能表。
    • \n' + + '
    • 在工具列群組中的按鈕之間移動。
    • \n' + + '
    • 在頁尾的元素路徑中項目之間移動。
    • \n' + + '
    \n' + + '\n' + + '

    向下向上方向鍵

    \n' + + '\n' + + '
      \n' + + '
    • 在功能表中的功能表項目之間移動。
    • \n' + + '
    • 在工具列快顯功能表中的項目之間移動。
    • \n' + + '
    \n' + + '\n' + + '

    方向鍵會在所跳至 UI 區段之內循環。

    \n' + + '\n' + + '

    若要關閉已開啟的功能表、已開啟的子功能表,或已開啟的快顯功能表,請按 Esc 鍵。

    \n' + + '\n' + + '

    如果目前已跳至特定 UI 區段的「頂端」,則按 Esc 鍵也會結束\n' + + ' 整個鍵盤瀏覽。

    \n' + + '\n' + + '

    執行功能表列項目或工具列按鈕

    \n' + + '\n' + + '

    當想要的功能表項目或工具列按鈕已反白顯示時,按 ReturnEnter、\n' + + ' 或空白鍵即可執行該項目。

    \n' + + '\n' + + '

    瀏覽非索引標籤式對話方塊

    \n' + + '\n' + + '

    在非索引標籤式對話方塊中,開啟對話方塊時會跳至第一個互動元件。

    \n' + + '\n' + + '

    TabShift+Tab 即可在互動式對話方塊元件之間瀏覽。

    \n' + + '\n' + + '

    瀏覽索引標籤式對話方塊

    \n' + + '\n' + + '

    在索引標籤式對話方塊中,開啟對話方塊時會跳至索引標籤式功能表中的第一個按鈕。

    \n' + + '\n' + + '

    若要在此對話方塊的互動式元件之間瀏覽,請按 Tab 或\n' + + ' Shift+Tab

    \n' + + '\n' + + '

    先跳至索引標籤式功能表,然後按適當的方向鍵,即可切換至另一個對話方塊索引標籤,\n' + + ' 以循環瀏覽可用的索引標籤。

    \n'); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/help/plugin.min.js b/apps/web-ele/public/tinymce/plugins/help/plugin.min.js new file mode 100644 index 000000000..acddac235 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/help/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const n=e=>{const n=(new Date).getTime(),a=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return t++,e+"_"+a+t+String(n)},a=e=>t=>t.options.get(e),r=a("help_tabs"),o=a("forced_plugins"),i=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=a=e,(r=String).prototype.isPrototypeOf(n)||(null===(o=a.constructor)||void 0===o?void 0:o.name)===r.name)?"string":t;var n,a,r,o})(e);const s=e=>undefined===e;const c=e=>"function"==typeof e,l=()=>false;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?m.none():m.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const u=Array.prototype.slice,p=Array.prototype.indexOf,y=(e,t)=>{const n=e.length,a=new Array(n);for(let r=0;r{const n=[];for(let a=0,r=e.length;a{const n=u.call(e,0);return n.sort(t),n},g=Object.keys,k=Object.hasOwnProperty,v=(e,t)=>k.call(e,t);var b=tinymce.util.Tools.resolve("tinymce.Resource"),f=tinymce.util.Tools.resolve("tinymce.util.I18n");const A=(e,t)=>b.load(`tinymce.html-i18n.help-keynav.${t}`,`${e}/js/i18n/keynav/${t}.js`),w=e=>A(e,f.getCode()).catch((()=>A(e,"en")));var C=tinymce.util.Tools.resolve("tinymce.Env");const S=e=>{const t=C.os.isMacOS()||C.os.isiOS(),n=t?{alt:"⌥",ctrl:"⌃",shift:"⇧",meta:"⌘",access:"⌃⌥"}:{meta:"Ctrl ",access:"Shift + Alt "},a=e.split("+"),r=y(a,(e=>{const t=e.toLowerCase().trim();return v(n,t)?n[t]:e}));return t?r.join("").replace(/\s/,""):r.join("+")},M=[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Heading 1"},{shortcuts:["Access + 2"],action:"Heading 2"},{shortcuts:["Access + 3"],action:"Heading 3"},{shortcuts:["Access + 4"],action:"Heading 4"},{shortcuts:["Access + 5"],action:"Heading 5"},{shortcuts:["Access + 6"],action:"Heading 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Alt + F12"],action:"Focus to notification"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}],_=()=>({name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:y(M,(e=>{const t=y(e.shortcuts,S).join(" or ");return[e.action,t]}))}]}),x=y([{key:"accordion",name:"Accordion"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"image",name:"Image"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"advlist",name:"List Styles"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"pagebreak",name:"Page Break"},{key:"preview",name:"Preview"},{key:"quickbars",name:"Quick Toolbars"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"table",name:"Table"},{key:"textcolor",name:"Text Color"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"a11ychecker",name:"Accessibility Checker",type:"premium"},{key:"typography",name:"Advanced Typography",type:"premium",slug:"advanced-typography"},{key:"ai",name:"AI Assistant",type:"premium"},{key:"casechange",name:"Case Change",type:"premium"},{key:"checklist",name:"Checklist",type:"premium"},{key:"advcode",name:"Enhanced Code Editor",type:"premium"},{key:"mediaembed",name:"Enhanced Media Embed",type:"premium",slug:"introduction-to-mediaembed"},{key:"advtable",name:"Enhanced Tables",type:"premium"},{key:"exportpdf",name:"Export to PDF",type:"premium"},{key:"exportword",name:"Export to Word",type:"premium"},{key:"footnotes",name:"Footnotes",type:"premium"},{key:"formatpainter",name:"Format Painter",type:"premium"},{key:"editimage",name:"Image Editing",type:"premium"},{key:"uploadcare",name:"Image Optimizer Powered by Uploadcare",type:"premium"},{key:"importword",name:"Import from Word",type:"premium"},{key:"inlinecss",name:"Inline CSS",type:"premium",slug:"inline-css"},{key:"linkchecker",name:"Link Checker",type:"premium"},{key:"math",name:"Math",type:"premium"},{key:"markdown",name:"Markdown",type:"premium"},{key:"mentions",name:"Mentions",type:"premium"},{key:"mergetags",name:"Merge Tags",type:"premium"},{key:"pageembed",name:"Page Embed",type:"premium"},{key:"permanentpen",name:"Permanent Pen",type:"premium"},{key:"powerpaste",name:"PowerPaste",type:"premium",slug:"introduction-to-powerpaste"},{key:"revisionhistory",name:"Revision History",type:"premium"},{key:"tinymcespellchecker",name:"Spell Checker",type:"premium",slug:"introduction-to-tiny-spellchecker"},{key:"autocorrect",name:"Spelling Autocorrect",type:"premium"},{key:"tableofcontents",name:"Table of Contents",type:"premium"},{key:"advtemplate",name:"Templates",type:"premium",slug:"advanced-templates"},{key:"tinycomments",name:"Tiny Comments",type:"premium",slug:"introduction-to-tiny-comments"},{key:"tinydrive",name:"Tiny Drive",type:"premium",slug:"tinydrive-introduction"}],(e=>({...e,type:e.type||"opensource",slug:e.slug||e.key}))),T=e=>{const t=e=>`${e.name}`,n=(e,n)=>{return(a=x,r=e=>e.key===n,((e,t,n)=>{for(let a=0,r=e.length;a((e,n)=>{const a=e.plugins[n].getMetadata;if(c(a)){const e=a();return{name:e.name,html:t(e)}}return{name:n,html:n}})(e,n)),(e=>{const n="premium"===e.type?`${e.name}*`:e.name;return{name:n,html:t({name:n,url:`https://www.tiny.cloud/docs/tinymce/7/${e.slug}/`})}}));var a,r},a=e=>{const t=(e=>{const t=g(e.plugins),n=o(e),a=s(n)?["onboarding"]:n.concat(["onboarding"]);return h(t,(e=>!(((e,t)=>p.call(e,t))(a,e)>-1)))})(e),a=d(y(t,(t=>n(e,t))),((e,t)=>e.name.localeCompare(t.name))),r=y(a,(e=>"
  • "+e.html+"
  • ")),i=r.length,c=r.join("");return"

    "+f.translate(["Plugins installed ({0}):",i])+"

      "+c+"
    "},r={type:"htmlpanel",presets:"document",html:[(e=>null==e?"":"
    "+a(e)+"
    ")(e),(()=>{const e=h(x,(({type:e})=>"premium"===e)),t=d(y(e,(e=>e.name)),((e,t)=>e.localeCompare(t))),n=y(t,(e=>`
  • ${e}
  • `)).join("");return"

    "+f.translate("Premium plugins:")+"

    "})()].join("")};return{name:"plugins",title:"Plugins",items:[r]}};var O=tinymce.util.Tools.resolve("tinymce.EditorManager");const P=(e,t,a)=>()=>{(async(e,t,a)=>{const o=_(),s=await(async e=>({name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:await w(e)}]}))(a),c=T(e),l=(()=>{var e,t;const n='TinyMCE '+(e=O.majorVersion,t=O.minorVersion,(0===e.indexOf("@")?"X.X.X":e+"."+t)+"");return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+f.translate(["You are using {0}",n])+"

    ",presets:"document"}]}})(),u={[o.name]:o,[s.name]:s,[c.name]:c,[l.name]:l,...t.get()};return m.from(r(e)).fold((()=>(e=>{const t=g(e),n=t.indexOf("versions");return-1!==n&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t}})(u)),(e=>((e,t)=>{const a={},r=y(e,(e=>{var r;if(i(e))return v(t,e)&&(a[e]=t[e]),e;{const t=null!==(r=e.name)&&void 0!==r?r:n("tab-name");return a[t]=e,t}}));return{tabs:a,names:r}})(e,u)))})(e,t,a).then((({tabs:t,names:n})=>{const a={type:"tabpanel",tabs:(e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t{return v(n=t,a=e)?m.from(n[a]):m.none();var n,a})))};e.windowManager.open({title:"Help",size:"medium",body:a,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})}))};e.add("help",((e,t)=>{const a=(()=>{let e={};return{get:()=>e,set:t=>{e=t}}})(),r=(e=>({addTab:t=>{var a;const r=null!==(a=t.name)&&void 0!==a?a:n("tab-name"),o=e.get();o[r]=t,e.set(o)}}))(a);(e=>{(0,e.options.register)("help_tabs",{processor:"array"})})(e);const o=P(e,a,t);return((e,t)=>{e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:t,context:"any"}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:t,context:"any"})})(e,o),((e,t)=>{e.addCommand("mceHelp",t)})(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),((e,t)=>{e.on("init",(()=>{w(t)}))})(e,t),r}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/image/plugin.min.js b/apps/web-ele/public/tinymce/plugins/image/plugin.min.js new file mode 100644 index 000000000..948015897 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/image/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=Object.getPrototypeOf,a=(e,t,a)=>{var i;return!!a(e,t.prototype)||(null===(i=e.constructor)||void 0===i?void 0:i.name)===t.name},i=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&a(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":t})(t)===e,s=e=>t=>typeof t===e,r=i("string"),o=i("object"),n=e=>((e,i)=>o(e)&&a(e,i,((e,a)=>t(e)===a)))(e,Object),l=i("array"),c=e=>null===e;const m=s("boolean"),d=e=>!(e=>null==e)(e),g=s("function"),u=s("number"),p=()=>{};class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const b=Object.keys,v=Object.hasOwnProperty,y=(e,t)=>v.call(e,t),f=Array.prototype.push,w=e=>{const t=[];for(let a=0,i=e.length;a{((e,t,a)=>{if(!(r(a)||m(a)||u(a)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",a,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,a+"")})(e.dom,t,a)},D=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},_=D;var C=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),I=tinymce.util.Tools.resolve("tinymce.util.URI");const U=e=>e.length>0,S=e=>t=>t.options.get(e),x=S("image_dimensions"),N=S("image_advtab"),T=S("image_uploadtab"),E=S("image_prepend_url"),L=S("image_class_list"),O=S("image_description"),j=S("image_title"),M=S("image_caption"),R=S("image_list"),k=S("a11y_advanced_options"),z=S("automatic_uploads"),B=(e,t)=>Math.max(parseInt(e,10),parseInt(t,10)),P=e=>(e&&(e=e.replace(/px$/,"")),e),F=e=>(e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e),H=e=>"IMG"===e.nodeName&&(e.hasAttribute("data-mce-object")||e.hasAttribute("data-mce-placeholder")),G=(e,t)=>{const a=e.options.get;return I.isDomSafe(t,"img",{allow_html_data_urls:a("allow_html_data_urls"),allow_script_urls:a("allow_script_urls"),allow_svg_data_urls:a("allow_svg_data_urls")})},W=C.DOM,$=e=>e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?P(e.style.marginLeft):"",V=e=>e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?P(e.style.marginTop):"",K=e=>e.style.borderWidth?P(e.style.borderWidth):"",Z=(e,t)=>{var a;return e.hasAttribute(t)&&null!==(a=e.getAttribute(t))&&void 0!==a?a:""},q=e=>null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName,J=(e,t,a)=>{""===a||null===a?e.removeAttribute(t):e.setAttribute(t,a)},Q=(e,t)=>{const a=e.getAttribute("style"),i=t(null!==a?a:"");i.length>0?(e.setAttribute("style",i),e.setAttribute("data-mce-style",i)):e.removeAttribute("style")},X=(e,t)=>(e,a,i)=>{const s=e.style;s[a]?(s[a]=F(i),Q(e,t)):J(e,a,i)},Y=(e,t)=>e.style[t]?P(e.style[t]):Z(e,t),ee=(e,t)=>{const a=F(t);e.style.marginLeft=a,e.style.marginRight=a},te=(e,t)=>{const a=F(t);e.style.marginTop=a,e.style.marginBottom=a},ae=(e,t)=>{const a=F(t);e.style.borderWidth=a},ie=(e,t)=>{e.style.borderStyle=t},se=e=>{var t;return null!==(t=e.style.borderStyle)&&void 0!==t?t:""},re=e=>d(e)&&"FIGURE"===e.nodeName,oe=e=>0===W.getAttrib(e,"alt").length&&"presentation"===W.getAttrib(e,"role"),ne=e=>oe(e)?"":Z(e,"alt"),le=(e,t)=>{var a;const i=document.createElement("img");return J(i,"style",t.style),($(i)||""!==t.hspace)&&ee(i,t.hspace),(V(i)||""!==t.vspace)&&te(i,t.vspace),(K(i)||""!==t.border)&&ae(i,t.border),(se(i)||""!==t.borderStyle)&&ie(i,t.borderStyle),e(null!==(a=i.getAttribute("style"))&&void 0!==a?a:"")},ce=(e,t)=>({src:Z(t,"src"),alt:ne(t),title:Z(t,"title"),width:Y(t,"width"),height:Y(t,"height"),class:Z(t,"class"),style:e(Z(t,"style")),caption:q(t),hspace:$(t),vspace:V(t),border:K(t),borderStyle:se(t),isDecorative:oe(t)}),me=(e,t,a,i,s)=>{a[i]!==t[i]&&s(e,i,String(a[i]))},de=(e,t,a)=>{if(a){W.setAttrib(e,"role","presentation");const t=_(e);A(t,"alt","")}else{if(c(t)){_(e).dom.removeAttribute("alt")}else{const a=_(e);A(a,"alt",t)}"presentation"===W.getAttrib(e,"role")&&W.setAttrib(e,"role","")}},ge=(e,t)=>(a,i,s)=>{e(a,s),Q(a,t)},ue=(e,t,a)=>{const i=ce(e,a);me(a,i,t,"caption",((e,t,a)=>(e=>{q(e)?(e=>{const t=e.parentNode;d(t)&&(W.insertAfter(e,t),W.remove(t))})(e):(e=>{const t=W.create("figure",{class:"image"});W.insertAfter(t,e),t.appendChild(e),t.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),t.contentEditable="false"})(e)})(e))),me(a,i,t,"src",J),me(a,i,t,"title",J),me(a,i,t,"width",X(0,e)),me(a,i,t,"height",X(0,e)),me(a,i,t,"class",J),me(a,i,t,"style",ge(((e,t)=>J(e,"style",t)),e)),me(a,i,t,"hspace",ge(ee,e)),me(a,i,t,"vspace",ge(te,e)),me(a,i,t,"border",ge(ae,e)),me(a,i,t,"borderStyle",ge(ie,e)),((e,t,a)=>{a.alt===t.alt&&a.isDecorative===t.isDecorative||de(e,a.alt,a.isDecorative)})(a,i,t)},pe=(e,t)=>{const a=(e=>{if(e.margin){const t=String(e.margin).split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e})(e.dom.styles.parse(t)),i=e.dom.styles.parse(e.dom.styles.serialize(a));return e.dom.styles.serialize(i)},he=e=>{const t=e.selection.getNode(),a=e.dom.getParent(t,"figure.image");return a?e.dom.select("img",a)[0]:t&&("IMG"!==t.nodeName||H(t))?null:t},be=(e,t)=>{var a;const i=e.dom,s=(t=>{const a={};var i;return((e,t,a,i)=>{((e,t)=>{const a=b(e);for(let i=0,s=a.length;i{(t(e,s)?a:i)(e,s)}))})(t,((t,a)=>!e.schema.isValidChild(a,"figure")),(i=a,(e,t)=>{i[t]=e}),p),a})(e.schema.getTextBlockElements()),r=i.getParent(t.parentNode,(e=>{return t=s,a=e.nodeName,y(t,a)&&void 0!==t[a]&&null!==t[a];var t,a}),e.getBody());return r&&null!==(a=i.split(r,t))&&void 0!==a?a:t},ve=(e,t)=>{const a=((t,a)=>{const i=document.createElement("img");if(ue((t=>pe(e,t)),{...a,caption:!1},i),de(i,a.alt,a.isDecorative),a.caption){const e=W.create("figure",{class:"image"});return e.appendChild(i),e.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),e.contentEditable="false",e}return i})(0,t);e.dom.setAttrib(a,"data-mce-id","__mcenew"),e.focus(),e.selection.setContent(a.outerHTML);const i=e.dom.select('*[data-mce-id="__mcenew"]')[0];if(e.dom.setAttrib(i,"data-mce-id",null),re(i)){const t=be(e,i);e.selection.select(t)}else e.selection.select(i)},ye=(e,t)=>{const a=he(e);if(a){const i={...ce((t=>pe(e,t)),a),...t},s=((e,t)=>{const a=t.src;return{...t,src:G(e,a)?a:""}})(e,i);i.src?((e,t)=>{const a=he(e);if(a)if(ue((t=>pe(e,t)),t,a),((e,t)=>{e.dom.setAttrib(t,"src",t.getAttribute("src"))})(e,a),re(a.parentNode)){e.dom.setStyle(a,"float","");const t=a.parentNode;be(e,t),e.selection.select(a.parentNode)}else e.selection.select(a),((e,t,a)=>{const i=()=>{a.onload=a.onerror=null,e.selection&&(e.selection.select(a),e.nodeChanged())};a.onload=()=>{t.width||t.height||!x(e)||e.dom.setAttribs(a,{width:String(a.clientWidth),height:String(a.clientHeight)}),i()},a.onerror=i})(e,t,a)})(e,s):((e,t)=>{if(t){const a=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(a),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}})(e,a)}else t.src&&ve(e,{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1,...t})},fe=(we=(e,t)=>n(e)&&n(t)?fe(e,t):t,(...e)=>{if(0===e.length)throw new Error("Can't merge zero objects");const t={};for(let a=0;ar(e.value)?e.value:"",Ce=(e,t)=>{const a=[];return De.each(e,(e=>{const i=(e=>r(e.text)?e.text:r(e.title)?e.title:"")(e);if(void 0!==e.menu){const s=Ce(e.menu,t);a.push({text:i,items:s})}else{const s=t(e);a.push({text:i,value:s})}})),a},Ie=(e=_e)=>t=>t?h.from(t).map((t=>Ce(t,e))):h.none(),Ue=(e,t)=>(e=>{for(let i=0;iy(e,"items"))(a=e[i])?Ue(a.items,t):a.value===t?h.some(a):h.none();if(s.isSome())return s}var a;return h.none()})(e),Se=Ie,xe=(e,t)=>e.bind((e=>Ue(e,t))),Ne=e=>{const t=Se((t=>e.convertURL(t.value||t.url||"","src"))),a=new Promise((a=>{((e,t)=>{const a=R(e);r(a)?fetch(a).then((e=>{e.ok&&e.json().then(t)})):g(a)?a(t):t(a)})(e,(e=>{a(t(e).map((e=>w([[{text:"None",value:""}],e]))))}))})),i=(A=L(e),Ie(_e)(A)),s=N(e),o=T(e),n=(e=>U(e.options.get("images_upload_url")))(e),l=(e=>d(e.options.get("images_upload_handler")))(e),c=(e=>{const t=he(e);return t?ce((t=>pe(e,t)),t):{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1}})(e),m=O(e),u=j(e),p=x(e),b=M(e),v=k(e),y=z(e),f=h.some(E(e)).filter((e=>r(e)&&e.length>0));var A;return a.then((e=>({image:c,imageList:e,classList:i,hasAdvTab:s,hasUploadTab:o,hasUploadUrl:n,hasUploadHandler:l,hasDescription:m,hasImageTitle:u,hasDimensions:p,hasImageCaption:b,prependURL:f,hasAccessibilityOptions:v,automaticUploads:y})))},Te=e=>{const t=e.imageList.map((e=>({name:"images",type:"listbox",label:"Image list",items:e}))),a={name:"alt",type:"input",label:"Alternative description",enabled:!(e.hasAccessibilityOptions&&e.image.isDecorative)},i=e.classList.map((e=>({name:"classes",type:"listbox",label:"Class",items:e})));return w([[{name:"src",type:"urlinput",filetype:"image",label:"Source",picker_text:"Browse files"}],t.toArray(),e.hasAccessibilityOptions&&e.hasDescription?[{type:"label",label:"Accessibility",items:[{name:"isDecorative",type:"checkbox",label:"Image is decorative"}]}]:[],e.hasDescription?[a]:[],e.hasImageTitle?[{name:"title",type:"input",label:"Image title"}]:[],e.hasDimensions?[{name:"dimensions",type:"sizeinput"}]:[],[{...(s=e.classList.isSome()&&e.hasImageCaption,s?{type:"grid",columns:2}:{type:"panel"}),items:w([i.toArray(),e.hasImageCaption?[{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[]])}]]);var s},Ee=e=>({title:"General",name:"general",items:Te(e)}),Le=Te,Oe=e=>({src:{value:e.src,meta:{}},images:e.src,alt:e.alt,title:e.title,dimensions:{width:e.width,height:e.height},classes:e.class,caption:e.caption,style:e.style,vspace:e.vspace,border:e.border,hspace:e.hspace,borderstyle:e.borderStyle,fileinput:[],isDecorative:e.isDecorative}),je=(e,t)=>({src:e.src.value,alt:null!==e.alt&&0!==e.alt.length||!t?e.alt:null,title:e.title,width:e.dimensions.width,height:e.dimensions.height,class:e.classes,style:e.style,caption:e.caption,hspace:e.hspace,vspace:e.vspace,border:e.border,borderStyle:e.borderstyle,isDecorative:e.isDecorative}),Me=(e,t,a,i)=>{((e,t)=>{const a=t.getData();((e,t)=>/^(?:[a-zA-Z]+:)?\/\//.test(t)?h.none():e.prependURL.bind((e=>t.substring(0,e.length)!==e?h.some(e+t):h.none())))(e,a.src.value).each((e=>{t.setData({src:{value:e,meta:a.src.meta}})}))})(t,i),((e,t)=>{const a=t.getData(),i=a.src.meta;if(void 0!==i){const s=fe({},a);((e,t,a)=>{e.hasDescription&&r(a.alt)&&(t.alt=a.alt),e.hasAccessibilityOptions&&(t.isDecorative=a.isDecorative||t.isDecorative||!1),e.hasImageTitle&&r(a.title)&&(t.title=a.title),e.hasDimensions&&(r(a.width)&&(t.dimensions.width=a.width),r(a.height)&&(t.dimensions.height=a.height)),r(a.class)&&xe(e.classList,a.class).each((e=>{t.classes=e.value})),e.hasImageCaption&&m(a.caption)&&(t.caption=a.caption),e.hasAdvTab&&(r(a.style)&&(t.style=a.style),r(a.vspace)&&(t.vspace=a.vspace),r(a.border)&&(t.border=a.border),r(a.hspace)&&(t.hspace=a.hspace),r(a.borderstyle)&&(t.borderstyle=a.borderstyle))})(e,s,i),t.setData(s)}})(t,i),((e,t,a,i)=>{const s=i.getData(),r=s.src.value,o=s.src.meta||{};o.width||o.height||!t.hasDimensions||(U(r)?e.imageSize(r).then((e=>{a.open&&i.setData({dimensions:e})})).catch((e=>console.error(e))):i.setData({dimensions:{width:"",height:""}}))})(e,t,a,i),((e,t,a)=>{const i=a.getData(),s=xe(e.imageList,i.src.value);t.prevImage=s,a.setData({images:s.map((e=>e.value)).getOr("")})})(t,a,i)},Re=(e,t,a,i)=>{const s=i.getData();var r;i.block("Uploading image"),(r=s.fileinput,(e=>0{i.unblock()}),(s=>{const r=URL.createObjectURL(s),o=()=>{i.unblock(),URL.revokeObjectURL(r)},n=s=>{i.setData({src:{value:s,meta:{}}}),i.showTab("general"),Me(e,t,a,i),i.focus("src")};var l;(l=s,new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{var e;t(null===(e=a.error)||void 0===e?void 0:e.message)},a.readAsDataURL(l)}))).then((a=>{const l=e.createBlobCache(s,r,a);t.automaticUploads?e.uploadImage(l).then((e=>{n(e.url),o()})).catch((t=>{o(),e.alertErr(t,(()=>{i.focus("fileinput")}))})):(e.addToBlobCache(l),n(l.blobUri()),i.unblock())}))}))},ke=(e,t,a)=>(i,s)=>{"src"===s.name?Me(e,t,a,i):"images"===s.name?((e,t,a,i)=>{const s=i.getData(),r=xe(t.imageList,s.images);r.each((e=>{const t=""===s.alt||a.prevImage.map((e=>e.text===s.alt)).getOr(!1);t?""===e.value?i.setData({src:e,alt:a.prevAlt}):i.setData({src:e,alt:e.text}):i.setData({src:e})})),a.prevImage=r,Me(e,t,a,i)})(e,t,a,i):"alt"===s.name?a.prevAlt=i.getData().alt:"fileinput"===s.name?Re(e,t,a,i):"isDecorative"===s.name&&i.setEnabled("alt",!i.getData().isDecorative)},ze=e=>()=>{e.open=!1},Be=e=>e.hasAdvTab||e.hasUploadUrl||e.hasUploadHandler?{type:"tabpanel",tabs:w([[Ee(e)],e.hasAdvTab?[{title:"Advanced",name:"advanced",items:[{type:"grid",columns:2,items:[{type:"input",label:"Vertical space",name:"vspace",inputMode:"numeric"},{type:"input",label:"Horizontal space",name:"hspace",inputMode:"numeric"},{type:"input",label:"Border width",name:"border",inputMode:"numeric"},{type:"listbox",name:"borderstyle",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]}]:[],e.hasUploadTab&&(e.hasUploadUrl||e.hasUploadHandler)?[{title:"Upload",name:"upload",items:[{type:"dropzone",name:"fileinput"}]}]:[]])}:{type:"panel",items:Le(e)},Pe=(e,t,a)=>i=>{const s=fe(Oe(t.image),i.getData()),r={...s,style:le(a.normalizeCss,je(s,!1))};e.execCommand("mceUpdateImage",!1,je(r,t.hasAccessibilityOptions)),e.editorUpload.uploadImagesAuto(),i.close()},Fe=e=>t=>G(e,t)?(e=>new Promise((t=>{const a=document.createElement("img"),i=e=>{a.parentNode&&a.parentNode.removeChild(a),t(e)};a.addEventListener("load",(()=>{const e={width:B(a.width,a.clientWidth),height:B(a.height,a.clientHeight)};i(Promise.resolve(e))})),a.addEventListener("error",(()=>{i(Promise.reject(`Failed to get image dimensions for: ${e}`))}));const s=a.style;s.visibility="hidden",s.position="fixed",s.bottom=s.left="0px",s.width=s.height="auto",document.body.appendChild(a),a.src=e})))(e.documentBaseURI.toAbsolute(t)).then((e=>({width:String(e.width),height:String(e.height)}))):Promise.resolve({width:"",height:""}),He=e=>(t,a,i)=>{var s;return e.editorUpload.blobCache.create({blob:t,blobUri:a,name:null===(s=t.name)||void 0===s?void 0:s.replace(/\.[^\.]+$/,""),filename:t.name,base64:i.split(",")[1]})},Ge=e=>t=>{e.editorUpload.blobCache.add(t)},We=e=>(t,a)=>{e.windowManager.alert(t,a)},$e=e=>t=>pe(e,t),Ve=e=>t=>e.dom.parseStyle(t),Ke=e=>(t,a)=>e.dom.serializeStyle(t,a),Ze=e=>t=>Ae(e).upload([t],!1).then((e=>{var t;return 0===e.length?Promise.reject("Failed to upload image"):!1===e[0].status?Promise.reject(null===(t=e[0].error)||void 0===t?void 0:t.message):e[0]})),qe=e=>{const t={imageSize:Fe(e),addToBlobCache:Ge(e),createBlobCache:He(e),alertErr:We(e),normalizeCss:$e(e),parseStyle:Ve(e),serializeStyle:Ke(e),uploadImage:Ze(e)};return{open:()=>{Ne(e).then((a=>{const i=(e=>({prevImage:xe(e.imageList,e.image.src),prevAlt:e.image.alt,open:!0}))(a);return{title:"Insert/Edit Image",size:"normal",body:Be(a),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:Oe(a.image),onSubmit:Pe(e,a,t),onChange:ke(t,a,i),onClose:ze(i)}})).then(e.windowManager.open)}}},Je=e=>{const t=e.attr("class");return d(t)&&/\bimage\b/.test(t)},Qe=e=>t=>{let a=t.length;const i=t=>{t.attr("contenteditable",e?"true":null)};for(;a--;){const s=t[a];Je(s)&&(s.attr("contenteditable",e?"false":null),De.each(s.getAll("figcaption"),i))}},Xe=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("image",(e=>{(e=>{const t=e.options.register;t("image_dimensions",{processor:"boolean",default:!0}),t("image_advtab",{processor:"boolean",default:!1}),t("image_uploadtab",{processor:"boolean",default:!0}),t("image_prepend_url",{processor:"string",default:""}),t("image_class_list",{processor:"object[]"}),t("image_description",{processor:"boolean",default:!0}),t("image_title",{processor:"boolean",default:!1}),t("image_caption",{processor:"boolean",default:!1}),t("image_list",{processor:e=>{const t=!1===e||r(e)||((e,t)=>{if(l(e)){for(let a=0,i=e.length;a{e.on("PreInit",(()=>{e.parser.addNodeFilter("figure",Qe(!0)),e.serializer.addNodeFilter("figure",Qe(!1))}))})(e),(e=>{e.ui.registry.addToggleButton("image",{icon:"image",tooltip:"Insert/edit image",onAction:qe(e).open,onSetup:t=>{t.setActive(d(he(e)));const a=e.selection.selectorChangedWithUnbind("img:not([data-mce-object]):not([data-mce-placeholder]),figure.image",t.setActive).unbind,i=Xe(e)(t);return()=>{a(),i()}}}),e.ui.registry.addMenuItem("image",{icon:"image",text:"Image...",onAction:qe(e).open,onSetup:Xe(e)}),e.ui.registry.addContextMenu("image",{update:t=>e.selection.isEditable()&&(re(t)||"IMG"===t.nodeName&&!H(t))?["image"]:[]})})(e),(e=>{e.addCommand("mceImage",qe(e).open),e.addCommand("mceUpdateImage",((t,a)=>{e.undoManager.transact((()=>ye(e,a)))}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/importcss/plugin.min.js b/apps/web-ele/public/tinymce/plugins/importcss/plugin.min.js new file mode 100644 index 000000000..b1b1a5e54 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/importcss/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(s=r=e,(o=String).prototype.isPrototypeOf(s)||(null===(n=r.constructor)||void 0===n?void 0:n.name)===o.name)?"string":t;var s,r,o,n})(t)===e,s=t("string"),r=t("object"),o=t("array"),n=e=>"function"==typeof e;var c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Tools");const p=e=>t=>t.options.get(e),u=p("importcss_merge_classes"),m=p("importcss_exclusive"),f=p("importcss_selector_converter"),y=p("importcss_selector_filter"),d=p("importcss_groups"),h=p("importcss_append"),g=p("importcss_file_filter"),_=p("skin"),v=p("skin_url"),b=Array.prototype.push,x=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/,T=e=>s(e)?t=>-1!==t.indexOf(e):e instanceof RegExp?t=>e.test(t):e,S=(e,t)=>{let s={};const r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(!r)return;const o=r[1],n=r[2].substr(1).split(".").join(" "),c=a.makeMap("a,img");return r[1]?(s={title:t},e.schema.getTextBlockElements()[o]?s.block=o:e.schema.getBlockElements()[o]||c[o.toLowerCase()]?s.selector=o:s.inline=o):r[2]&&(s={inline:"span",title:t.substr(1),classes:n}),u(e)?s.classes=n:s.attributes={class:n},s},k=(e,t)=>null===t||m(e),M=e=>{e.on("init",(()=>{const t=(()=>{const e=[],t=[],s={};return{addItemToGroup:(e,r)=>{s[e]?s[e].push(r):(t.push(e),s[e]=[r])},addItem:t=>{e.push(t)},toFormats:()=>{return(r=t,n=e=>{const t=s[e];return 0===t.length?[]:[{title:e,items:t}]},(e=>{const t=[];for(let s=0,r=e.length;s{const s=e.length,r=new Array(s);for(let o=0;oa.map(e,(e=>a.extend({},e,{original:e,selectors:{},filter:T(e.filter)}))))(d(e)),u=(t,s)=>{if(((e,t,s,r)=>!(k(e,s)?t in r:t in s.selectors))(e,t,s,r)){((e,t,s,r)=>{k(e,s)?r[t]=!0:s.selectors[t]=!0})(e,t,s,r);const o=((e,t,s,r)=>{let o;const n=f(e);return o=r&&r.selector_converter?r.selector_converter:n||(()=>S(e,s)),o.call(t,s,r)})(e,e.plugins.importcss,t,s);if(o){const t=o.name||c.DOM.uniqueId();return e.formatter.register(t,o),{title:o.title,format:t}}}return null};a.each(((e,t,r)=>{const o=[],n={},c=(t,n)=>{let p,u=t.href;if(u=(e=>{const t=l.cacheSuffix;return s(e)&&(e=e.replace("?"+t,"").replace("&"+t,"")),e})(u),u&&(!r||r(u,n))&&!((e,t)=>{const s=_(e);if(s){const r=v(e),o=r?e.documentBaseURI.toAbsolute(r):i.baseURL+"/skins/ui/"+s,n=i.baseURL+"/skins/content/",c=e.editorManager.suffix;return t===o+"/content"+(e.inline?".inline":"")+`${c}.css`||-1!==t.indexOf(n)}return!1})(e,u)){a.each(t.imports,(e=>{c(e,!0)}));try{p=t.cssRules||t.rules}catch(e){}a.each(p,(e=>{e.styleSheet&&e.styleSheet?c(e.styleSheet,!0):e.selectorText&&a.each(e.selectorText.split(","),(e=>{o.push(a.trim(e))}))}))}};a.each(e.contentCSS,(e=>{n[e]=!0})),r||(r=(e,t)=>t||n[e]);try{a.each(t.styleSheets,(e=>{c(e)}))}catch(e){}return o})(e,e.getDoc(),T(g(e))),(e=>{if(!x.test(e)&&(!n||n(e))){const s=((e,t)=>a.grep(e,(e=>!e.filter||e.filter(t))))(p,e);if(s.length>0)a.each(s,(s=>{const r=u(e,s);r&&t.addItemToGroup(s.title,r)}));else{const s=u(e,null);s&&t.addItem(s)}}}));const m=t.toFormats();e.dispatch("addStyleModifications",{items:m,replace:!h(e)})}))};e.add("importcss",(e=>((e=>{const t=e.options.register,o=e=>s(e)||n(e)||r(e);t("importcss_merge_classes",{processor:"boolean",default:!0}),t("importcss_exclusive",{processor:"boolean",default:!0}),t("importcss_selector_converter",{processor:"function"}),t("importcss_selector_filter",{processor:o}),t("importcss_file_filter",{processor:o}),t("importcss_groups",{processor:"object[]"}),t("importcss_append",{processor:"boolean",default:!1})})(e),M(e),(e=>({convertSelectorToFormat:t=>S(e,t)}))(e))))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/insertdatetime/plugin.min.js b/apps/web-ele/public/tinymce/plugins/insertdatetime/plugin.min.js new file mode 100644 index 000000000..8a053822a --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/insertdatetime/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),a=t("insertdatetime_dateformat"),n=t("insertdatetime_timeformat"),r=t("insertdatetime_formats"),s=t("insertdatetime_element"),i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),c=(e,t)=>{if((e=""+e).length(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",c(a.getMonth()+1,2))).replace("%d",c(a.getDate(),2))).replace("%H",""+c(a.getHours(),2))).replace("%M",""+c(a.getMinutes(),2))).replace("%S",""+c(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(m[a.getMonth()]))).replace("%b",""+e.translate(l[a.getMonth()]))).replace("%A",""+e.translate(o[a.getDay()]))).replace("%a",""+e.translate(i[a.getDay()]))).replace("%%","%"),u=(e,t)=>{if(s(e)&&e.selection.isEditable()){const a=d(e,t);let n;n=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d");const r=e.dom.getParent(e.selection.getStart(),"time");r?((e,t,a,n)=>{const r=e.dom.create("time",{datetime:a},n);e.dom.replace(r,t),e.selection.select(r,!0),e.selection.collapse(!1)})(e,r,n,a):e.insertContent('")}else e.insertContent(d(e,t))};var p=tinymce.util.Tools.resolve("tinymce.util.Tools");const g=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("insertdatetime",(e=>{(e=>{const t=e.options.register;t("insertdatetime_dateformat",{processor:"string",default:e.translate("%Y-%m-%d")}),t("insertdatetime_timeformat",{processor:"string",default:e.translate("%H:%M:%S")}),t("insertdatetime_formats",{processor:"string[]",default:["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"]}),t("insertdatetime_element",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mceInsertDate",((t,n)=>{u(e,null!=n?n:a(e))})),e.addCommand("mceInsertTime",((t,a)=>{u(e,null!=a?a:n(e))}))})(e),(e=>{const t=r(e),a=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})((e=>{const t=r(e);return t.length>0?t[0]:n(e)})(e)),s=t=>e.execCommand("mceInsertDate",!1,t);e.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:e=>e===a.get(),fetch:a=>{a(p.map(t,(t=>({type:"choiceitem",text:d(e,t),value:t}))))},onAction:e=>{s(a.get())},onItemAction:(e,t)=>{a.set(t),s(t)},onSetup:g(e)});const i=e=>()=>{a.set(e),s(e)};e.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:()=>p.map(t,(t=>({type:"menuitem",text:d(e,t),onAction:i(t)}))),onSetup:g(e)})})(e)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/link/plugin.min.js b/apps/web-ele/public/tinymce/plugins/link/plugin.min.js new file mode 100644 index 000000000..d8c40c77d --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/link/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(l=o.constructor)||void 0===l?void 0:l.name)===r.name)?"string":t;var n,o,r,l})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),l=t("array"),s=e=>null===e;const i=n("boolean"),a=e=>!(e=>null==e)(e),c=n("function"),u=(e,t)=>{if(l(e)){for(let n=0,o=e.length;n{},d=(e,t)=>e===t;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return a(e)?m.some(e):m.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const h=Array.prototype.indexOf,p=Array.prototype.push,f=e=>{const t=[];for(let n=0,o=e.length;n{for(let n=0;ne.exists((e=>n(e,t))),b=e=>{const t=[],n=e=>{t.push(e)};for(let t=0;te?m.some(t):m.none(),y=e=>t=>t.options.get(e),_=y("link_assume_external_targets"),w=y("link_context_toolbar"),C=y("link_list"),O=y("link_default_target"),S=y("link_default_protocol"),A=y("link_target_list"),N=y("link_rel_list"),E=y("link_class_list"),R=y("link_title"),T=y("allow_unsafe_link_target"),L=y("link_quicklink"),P=y("link_attributes_postprocess"),M=Object.keys,D=Object.hasOwnProperty,B=(e,t)=>D.call(e,t);var I=tinymce.util.Tools.resolve("tinymce.util.URI"),K=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),j=tinymce.util.Tools.resolve("tinymce.util.Tools");const U=e=>a(e)&&"a"===e.nodeName.toLowerCase(),q=e=>U(e)&&!!$(e),F=(e,t)=>{if(e.collapsed)return[];{const n=e.cloneContents(),o=n.firstChild,r=new K(o,n),l=[];let s=o;do{t(s)&&l.push(s)}while(s=r.next());return l}},V=e=>/^\w+:/i.test(e),$=e=>{var t,n;return null!==(n=null!==(t=e.getAttribute("data-mce-href"))&&void 0!==t?t:e.getAttribute("href"))&&void 0!==n?n:""},z=(e,t)=>{const n=["noopener"],o=e?e.split(/\s+/):[],r=e=>e.filter((e=>-1===j.inArray(n,e))),l=t?(e=>(e=r(e)).length>0?e.concat(n):n)(o):r(o);return l.length>0?(e=>j.trim(e.sort().join(" ")))(l):""},G=(e,t)=>(t=t||W(e.selection.getRng())[0]||e.selection.getNode(),Z(t)?m.from(e.dom.select("a[href]",t)[0]):m.from(e.dom.getParent(t,"a[href]"))),H=(e,t)=>G(e,t).isSome(),J=(e,t)=>t.fold((()=>e.getContent({format:"text"})),(e=>e.innerText||e.textContent||"")).replace(/\uFEFF/g,""),W=e=>F(e,q),Q=e=>j.grep(e,q),X=e=>Q(e).length>0,Y=e=>{const t=e.schema.getTextInlineElements();if(G(e).exists((e=>e.hasAttribute("data-mce-block"))))return!1;const n=e.selection.getRng();return!!n.collapsed||0===F(n,(e=>1===e.nodeType&&!U(e)&&!B(t,e.nodeName.toLowerCase()))).length},Z=e=>a(e)&&"FIGURE"===e.nodeName&&/\bimage\b/i.test(e.className),ee=(e,t,n)=>{const o=e.selection.getNode(),r=G(e,o),l=((e,t)=>{const n={...t};if(0===N(e).length&&!T(e)){const e=z(n.rel,"_blank"===n.target);n.rel=e||null}return m.from(n.target).isNone()&&!1===A(e)&&(n.target=O(e)),n.href=((e,t)=>"http"!==t&&"https"!==t||V(e)?e:t+"://"+e)(n.href,_(e)),n})(e,(e=>{return t=["title","rel","class","target"],n=(t,n)=>(e[n].each((e=>{t[n]=e.length>0?e:null})),t),o={href:e.href},((e,t)=>{for(let n=0,o=e.length;n{o=n(o,e)})),o;var t,n,o})(n)),s=P(e);a(s)&&s(l),e.undoManager.transact((()=>{n.href===t.href&&t.attach(),r.fold((()=>{((e,t,n,o)=>{const r=e.dom;Z(t)?le(r,t,o):n.fold((()=>{e.execCommand("mceInsertLink",!1,o);const t=e.selection.getEnd(),n=r.createRng();n.setStartAfter(t),n.setEndAfter(t),e.selection.setRng(n)}),(t=>{e.insertContent(r.createHTML("a",o,r.encode(t)))}))})(e,o,n.text,l)}),(t=>{e.focus(),((e,t,n,o)=>{n.each((e=>{B(t,"innerText")?t.innerText=e:t.textContent=e})),e.dom.setAttribs(t,o);const r=e.dom.createRng();r.setStartAfter(t),r.setEndAfter(t),e.selection.setRng(r)})(e,t,n.text,l)}))}))},te=e=>{const{class:t,href:n,rel:o,target:r,text:l,title:i}=e;return(e=>{const t={};var n;return((e,t,n,o)=>{((e,t)=>{const n=M(e);for(let o=0,r=n.length;o{(t(e,r)?n:o)(e,r)}))})(e,((e,t)=>!1===s(e)),(n=t,(e,t)=>{n[t]=e}),g),t})({class:t.getOrNull(),href:n,rel:o.getOrNull(),target:r.getOrNull(),text:l.getOrNull(),title:i.getOrNull()})},ne=(e,t,n)=>{const o=((e,t)=>{const n=e.options.get,o={allow_html_data_urls:n("allow_html_data_urls"),allow_script_urls:n("allow_script_urls"),allow_svg_data_urls:n("allow_svg_data_urls")},r=t.href;return{...t,href:I.isDomSafe(r,"a",o)?r:""}})(e,n);e.hasPlugin("rtc",!0)?e.execCommand("createlink",!1,te(o)):ee(e,t,o)},oe=e=>{e.hasPlugin("rtc",!0)?e.execCommand("unlink"):(e=>{e.undoManager.transact((()=>{const t=e.selection.getNode();Z(t)?re(e,t):(e=>{const t=e.dom,n=e.selection,o=n.getBookmark(),r=n.getRng().cloneRange(),l=t.getParent(r.startContainer,"a[href]",e.getBody()),s=t.getParent(r.endContainer,"a[href]",e.getBody());l&&r.setStartBefore(l),s&&r.setEndAfter(s),n.setRng(r),e.execCommand("unlink"),n.moveToBookmark(o)})(e),e.focus()}))})(e)},re=(e,t)=>{var n;const o=e.dom.select("img",t)[0];if(o){const r=e.dom.getParents(o,"a[href]",t)[0];r&&(null===(n=r.parentNode)||void 0===n||n.insertBefore(o,r),e.dom.remove(r))}},le=(e,t,n)=>{var o;const r=e.select("img",t)[0];if(r){const t=e.create("a",n);null===(o=r.parentNode)||void 0===o||o.insertBefore(t,r),t.appendChild(r)}},se=e=>o(e.value)?e.value:"",ie=(e,t)=>{const n=[];return j.each(e,(e=>{const r=(e=>o(e.text)?e.text:o(e.title)?e.title:"")(e);if(void 0!==e.menu){const o=ie(e.menu,t);n.push({text:r,items:o})}else{const o=t(e);n.push({text:r,value:o})}})),n},ae=(e=se)=>t=>m.from(t).map((t=>ie(t,e))),ce=e=>ae(se)(e),ue=ae,ge=(e,t)=>n=>({name:e,type:"listbox",label:t,items:n}),de=se,me=(e,t)=>k(t,(t=>(e=>{return B(t=e,n="items")&&void 0!==t[n]&&null!==t[n];var t,n})(t)?me(e,t.items):x(t.value===e,t))),he=(e,t)=>{const n={text:e.text,title:e.title},o=(e,o)=>{const r=(l=t,s=o,"link"===s?l.link:"anchor"===s?l.anchor:m.none()).getOr([]);var l,s;return((e,t,n,o)=>{const r=o[t],l=e.length>0;return void 0!==r?me(r,n).map((t=>({url:{value:t.value,meta:{text:l?e:t.text,attach:g}},text:l?e:t.text}))):m.none()})(n.text,o,r,e)};return{onChange:(e,t)=>{const r=t.name;return"url"===r?(e=>{const t=(o=e.url,x(n.text.length<=0,m.from(null===(r=o.meta)||void 0===r?void 0:r.text).getOr(o.value)));var o,r;const l=(e=>{var t;return x(n.title.length<=0,m.from(null===(t=e.meta)||void 0===t?void 0:t.title).getOr(""))})(e.url);return t.isSome()||l.isSome()?m.some({...t.map((e=>({text:e}))).getOr({}),...l.map((e=>({title:e}))).getOr({})}):m.none()})(e()):((e,t)=>h.call(e,t))(["anchor","link"],r)>-1?o(e(),r):"text"===r||"title"===r?(n[r]=e()[r],m.none()):m.none()}}};var pe=tinymce.util.Tools.resolve("tinymce.util.Delay");const fe=e=>{const t=e.href;return t.indexOf("@")>0&&-1===t.indexOf("/")&&-1===t.indexOf("mailto:")?m.some({message:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",preprocess:e=>({...e,href:"mailto:"+t})}):m.none()},ke=(e,t)=>n=>{const o=n.href;return 1===e&&!V(o)||0===e&&/^\s*www(\.|\d\.)/i.test(o)?m.some({message:`The URL you entered seems to be an external link. Do you want to add the required ${t}:// prefix?`,preprocess:e=>({...e,href:t+"://"+o})}):m.none()},ve=e=>{const t=e.dom.select("a:not([href])"),n=f(((e,t)=>{const n=e.length,o=new Array(n);for(let r=0;r{const t=e.name||e.id;return t?[{text:t,value:"#"+t}]:[]})));return n.length>0?m.some([{text:"None",value:""}].concat(n)):m.none()},be=e=>{const t=E(e);return t.length>0?ce(t):m.none()},xe=e=>{try{return m.some(JSON.parse(e))}catch(e){return m.none()}},ye=(e,t)=>{const n=N(e);if(n.length>0){const o=v(t,"_blank"),r=e=>z(de(e),o);return(!1===T(e)?ue(r):ce)(n)}return m.none()},_e=[{text:"Current window",value:""},{text:"New window",value:"_blank"}],we=e=>{const t=A(e);return l(t)?ce(t).orThunk((()=>m.some(_e))):!1===t?m.none():m.some(_e)},Ce=(e,t,n)=>{const o=e.getAttrib(t,n);return null!==o&&o.length>0?m.some(o):m.none()},Oe=(e,t)=>(e=>{const t=t=>e.convertURL(t.value||t.url||"","href"),n=C(e);return new Promise((e=>{o(n)?fetch(n).then((e=>e.ok?e.text().then(xe):Promise.reject())).then(e,(()=>e(m.none()))):c(n)?n((t=>e(m.some(t)))):e(m.from(n))})).then((e=>e.bind(ue(t)).map((e=>e.length>0?[{text:"None",value:""}].concat(e):e))))})(e).then((n=>{const o=((e,t)=>{const n=e.dom,o=Y(e)?m.some(J(e.selection,t)):m.none(),r=t.bind((e=>m.from(n.getAttrib(e,"href")))),l=t.bind((e=>m.from(n.getAttrib(e,"target")))),s=t.bind((e=>Ce(n,e,"rel"))),i=t.bind((e=>Ce(n,e,"class")));return{url:r,text:o,title:t.bind((e=>Ce(n,e,"title"))),target:l,rel:s,linkClass:i}})(e,t);return{anchor:o,catalogs:{targets:we(e),rels:ye(e,o.target),classes:be(e),anchor:ve(e),link:n},optNode:t,flags:{titleEnabled:R(e)}}})),Se=e=>{const t=(e=>{const t=G(e);return Oe(e,t)})(e);t.then((t=>{const n=((e,t)=>n=>{const o=n.getData();if(!o.url.value)return oe(e),void n.close();const r=e=>m.from(o[e]).filter((n=>!v(t.anchor[e],n))),l={href:o.url.value,text:r("text"),target:r("target"),rel:r("rel"),class:r("linkClass"),title:r("title")},s={href:o.url.value,attach:void 0!==o.url.meta&&o.url.meta.attach?o.url.meta.attach:g};((e,t)=>k([fe,ke(_(e),S(e))],(e=>e(t))).fold((()=>Promise.resolve(t)),(n=>new Promise((o=>{((e,t,n)=>{const o=e.selection.getRng();pe.setEditorTimeout(e,(()=>{e.windowManager.confirm(t,(t=>{e.selection.setRng(o),n(t)}))}))})(e,n.message,(e=>{o(e?n.preprocess(t):t)}))})))))(e,l).then((t=>{ne(e,s,t)})),n.close()})(e,t);return((e,t,n)=>{const o=e.anchor.text.map((()=>({name:"text",type:"input",label:"Text to display"}))).toArray(),r=e.flags.titleEnabled?[{name:"title",type:"input",label:"Title"}]:[],l=((e,t)=>{const n=e.anchor,o=n.url.getOr("");return{url:{value:o,meta:{original:{value:o}}},text:n.text.getOr(""),title:n.title.getOr(""),anchor:o,link:o,rel:n.rel.getOr(""),target:n.target.or(t).getOr(""),linkClass:n.linkClass.getOr("")}})(e,m.from(O(n))),s=e.catalogs,i=he(l,s);return{title:"Insert/Edit Link",size:"normal",body:{type:"panel",items:f([[{name:"url",type:"urlinput",filetype:"file",label:"URL",picker_text:"Browse links"}],o,r,b([s.anchor.map(ge("anchor","Anchors")),s.rels.map(ge("rel","Rel")),s.targets.map(ge("target","Open link in...")),s.link.map(ge("link","Link list")),s.classes.map(ge("linkClass","Class"))])])},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:l,onChange:(e,{name:t})=>{i.onChange(e.getData,{name:t}).each((t=>{e.setData(t)}))},onSubmit:t}})(t,n,e)})).then((t=>{e.windowManager.open(t)}))};var Ae=tinymce.util.Tools.resolve("tinymce.util.VK");const Ne=(e,t)=>{if(t){const o=$(t);if(/^#/.test(o)){const t=e.dom.select(`${o},[name="${n=o,((e,t)=>((e,t)=>""===t||e.length>=t.length&&e.substr(0,0+t.length)===t)(e,t))(n,"#")?(e=>e.substring(1))(n):n}"]`);t.length&&e.selection.scrollIntoView(t[0],!0)}else(e=>{const t=document.createElement("a");t.target="_blank",t.href=e,t.rel="noreferrer noopener";const n=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window});document.dispatchEvent(n),((e,t)=>{document.body.appendChild(e),e.dispatchEvent(t),document.body.removeChild(e)})(t,n)})(t.href)}var n},Ee=(e,t)=>{const n=Q(e.dom.getParents(t));return x(1===n.length,n[0])},Re=e=>e.selection.isCollapsed()||(e=>{const t=e.selection.getRng(),n=t.startContainer;return q(n)&&t.startContainer===t.endContainer&&1===e.dom.select("img",n).length})(e)?Ee(e,e.selection.getStart()):(e=>{const t=W(e.selection.getRng());return x(t.length>0,t[0]).or(Ee(e,e.selection.getNode()))})(e),Te=e=>()=>{e.execCommand("mceLink",!1,{dialog:!0})},Le=(e,t)=>(e.on("NodeChange",t),()=>e.off("NodeChange",t)),Pe=e=>t=>{const n=()=>{t.setActive(!e.mode.isReadOnly()&&H(e,e.selection.getNode())),t.setEnabled(e.selection.isEditable())};return n(),Le(e,n)},Me=e=>t=>{const n=()=>{t.setEnabled(e.selection.isEditable())};return n(),Le(e,n)},De=e=>t=>{const n=e.dom.getParents(e.selection.getStart()),o=n=>{t.setEnabled((t=>{return X(t)||(n=e.selection.getRng(),W(n).length>0);var n})(n)&&e.selection.isEditable())};return o(n),Le(e,(e=>o(e.parents)))},Be=e=>{const t=(e=>{const t=(()=>{const e=(e=>{const t=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})(m.none()),n=()=>t.get().each(e);return{clear:()=>{n(),t.set(m.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{n(),t.set(m.some(e))}}})(g);return{...e,on:t=>e.get().each(t)}})(),n=()=>t.get().or(Re(e));return e.on("contextmenu",(n=>{Ee(e,n.target).each(t.set)})),e.on("SelectionChange",(()=>{t.isSet()||Re(e).each(t.set)})),e.on("click",(n=>{t.clear();const o=Q(e.dom.getParents(n.target));1===o.length&&Ae.metaKeyPressed(n)&&(n.preventDefault(),Ne(e,o[0]))})),e.on("keydown",(o=>{t.clear(),!o.isDefaultPrevented()&&13===o.keyCode&&(e=>!0===e.altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey)(o)&&n().each((t=>{o.preventDefault(),Ne(e,t)}))})),{gotoSelectedLink:()=>n().each((t=>Ne(e,t)))}})(e);((e,t)=>{e.ui.registry.addToggleButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Meta+K",onAction:Te(e),onSetup:Pe(e)}),e.ui.registry.addButton("openlink",{icon:"new-tab",tooltip:"Open link",onAction:t.gotoSelectedLink,onSetup:De(e)}),e.ui.registry.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onAction:()=>oe(e),onSetup:De(e)})})(e,t),((e,t)=>{e.ui.registry.addMenuItem("openlink",{text:"Open link",icon:"new-tab",onAction:t.gotoSelectedLink,onSetup:De(e)}),e.ui.registry.addMenuItem("link",{icon:"link",text:"Link...",shortcut:"Meta+K",onAction:Te(e),onSetup:Me(e)}),e.ui.registry.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onAction:()=>oe(e),onSetup:De(e)})})(e,t),(e=>{e.ui.registry.addContextMenu("link",{update:t=>e.dom.isEditable(t)?X(e.dom.getParents(t,"a"))?"link unlink openlink":"link":""})})(e),((e,t)=>{const n=t=>{const n=e.selection.getNode();return t.setEnabled(H(e,n)&&e.selection.isEditable()),g};e.ui.registry.addContextForm("quicklink",{launch:{type:"contextformtogglebutton",icon:"link",tooltip:"Link",onSetup:Pe(e)},label:"Link",predicate:t=>w(e)&&H(e,t),initValue:()=>G(e).fold((()=>""),$),commands:[{type:"contextformtogglebutton",icon:"link",tooltip:"Link",primary:!0,onSetup:t=>{const n=e.selection.getNode();return t.setActive(H(e,n)),Pe(e)(t)},onAction:t=>{const n=t.getValue(),o=(t=>{const n=G(e),o=Y(e);if(n.isNone()&&o){const o=J(e.selection,n);return x(0===o.length,t)}return m.none()})(n);ne(e,{href:n,attach:g},{href:n,text:o,title:m.none(),rel:m.none(),target:m.from(O(e)),class:m.none()}),(e=>{e.selection.collapse(!1)})(e),t.hide()}},{type:"contextformbutton",icon:"unlink",tooltip:"Remove link",onSetup:n,onAction:t=>{oe(e),t.hide()}},{type:"contextformbutton",icon:"new-tab",tooltip:"Open link",onSetup:n,onAction:e=>{t.gotoSelectedLink(),e.hide()}}]})})(e,t)};e.add("link",(e=>{(e=>{const t=e.options.register;t("link_assume_external_targets",{processor:e=>{const t=o(e)||i(e);return t?!0===e?{value:1,valid:t}:"http"===e||"https"===e?{value:e,valid:t}:{value:0,valid:t}:{valid:!1,message:"Must be a string or a boolean."}},default:!1}),t("link_context_toolbar",{processor:"boolean",default:!1}),t("link_list",{processor:e=>o(e)||c(e)||u(e,r)}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"}),t("link_target_list",{processor:e=>i(e)||u(e,r),default:!0}),t("link_rel_list",{processor:"object[]",default:[]}),t("link_class_list",{processor:"object[]",default:[]}),t("link_title",{processor:"boolean",default:!0}),t("allow_unsafe_link_target",{processor:"boolean",default:!1}),t("link_quicklink",{processor:"boolean",default:!1}),t("link_attributes_postprocess",{processor:"function"})})(e),(e=>{e.addCommand("mceLink",((t,n)=>{!0!==(null==n?void 0:n.dialog)&&L(e)?e.dispatch("contexttoolbar-show",{toolbarKey:"quicklink"}):Se(e)}))})(e),Be(e),(e=>{e.addShortcut("Meta+K","",(()=>{e.execCommand("mceLink")}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/lists/plugin.min.js b/apps/web-ele/public/tinymce/plugins/lists/plugin.min.js new file mode 100644 index 000000000..ba49b0bd8 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/lists/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var n,o,r,s})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),s=t("array"),i=n("boolean"),l=e=>!(e=>null==e)(e),a=n("function"),d=n("number"),c=()=>{},m=e=>()=>e,u=(e,t)=>e===t,p=e=>t=>!e(t),g=m(!1);class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return l(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const f=Array.prototype.slice,y=Array.prototype.indexOf,v=Array.prototype.push,C=(e,t)=>{return n=e,o=t,y.call(n,o)>-1;var n,o},b=(e,t)=>{for(let n=0,o=e.length;n{const n=e.length,o=new Array(n);for(let r=0;r{for(let n=0,o=e.length;n{const n=[];for(let o=0,r=e.length;o(S(e,((e,o)=>{n=t(n,e,o)})),n),A=(e,t,n)=>{for(let o=0,r=e.length;oA(e,t,g),x=(e,t)=>(e=>{const t=[];for(let n=0,o=e.length;n{const t=f.call(e,0);return t.reverse(),t},E=(e,t)=>t>=0&&tE(e,0),D=e=>E(e,e.length-1),B=(e,t)=>{const n=[],o=a(t)?e=>b(n,(n=>t(n,e))):e=>C(n,e);for(let t=0,r=e.length;te.exists((e=>n(e,t))),P=(e,t,n)=>e.isSome()&&t.isSome()?h.some(n(e.getOrDie(),t.getOrDie())):h.none(),I=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},R=(e,t)=>{const n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||n.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return I(n.childNodes[0])},U=(e,t)=>{const n=(t||document).createElement(e);return I(n)},$=I,_=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},H=(e,t)=>e.dom===t.dom,F=_,V="undefined"!=typeof window?window:Function("return this;")(),j=(e,t)=>((e,t)=>{let n=null!=t?t:V;for(let t=0;t{const t=j("ownerDocument.defaultView",e);return r(e)&&((e=>((e,t)=>{const n=((e,t)=>j(e,t))(e,t);if(null==n)throw new Error(e+" not available on this browser");return n})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(K(e).constructor.name))},Q=e=>e.dom.nodeName.toLowerCase(),W=e=>e.dom.nodeType,q=e=>t=>W(t)===e,Z=e=>G(e)&&z(e.dom),G=q(1),J=q(3),X=q(11),Y=e=>t=>G(t)&&Q(t)===e,ee=e=>h.from(e.dom.parentNode).map($),te=e=>N(e.dom.childNodes,$),ne=(e,t)=>{const n=e.dom.childNodes;return h.from(n[t]).map($)},oe=e=>ne(e,0),re=e=>ne(e,e.dom.childNodes.length-1),se=e=>$(e.dom.host),ie=e=>{const t=J(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return(e=>{const t=(e=>$(e.dom.getRootNode()))(e);return X(n=t)&&l(n.dom.host)?h.some(t):h.none();var n})($(t)).fold((()=>n.body.contains(t)),(o=ie,r=se,e=>o(r(e))));var o,r};var le=(e,t,n,o,r)=>e(n,o)?h.some(n):a(r)&&r(n)?h.none():t(n,o,r);const ae=(e,t,n)=>{let o=e.dom;const r=a(n)?n:g;for(;o.parentNode;){o=o.parentNode;const e=$(o);if(t(e))return h.some(e);if(r(e))break}return h.none()},de=(e,t,n)=>le(((e,t)=>t(e)),ae,e,t,n),ce=(e,t,n)=>ae(e,(e=>_(e,t)),n),me=(e,t)=>{ee(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},ue=(e,t)=>{e.dom.appendChild(t.dom)},pe=(e,t)=>{S(t,(t=>{ue(e,t)}))},ge=e=>{e.dom.textContent="",S(te(e),(e=>{he(e)}))},he=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)};var fe=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),ye=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),ve=tinymce.util.Tools.resolve("tinymce.util.VK");const Ce=e=>N(e,$),be=Object.keys,Ne=(e,t)=>{const n=be(e);for(let o=0,r=n.length;o{const n=e.dom;Ne(t,((e,t)=>{((e,t,n)=>{if(!(o(n)||i(n)||d(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(n,t,e)}))},Le=e=>O(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),Oe=e=>(e=>$(e.dom.cloneNode(!0)))(e),Ae=(e,t)=>{const n=((e,t)=>{const n=U(t),o=Le(e);return Se(n,o),n})(e,t);var o,r;r=n,(e=>h.from(e.dom.nextSibling).map($))(o=e).fold((()=>{ee(o).each((e=>{ue(e,r)}))}),(e=>{me(e,r)}));const s=te(e);return pe(n,s),he(e),n};var Te=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),xe=tinymce.util.Tools.resolve("tinymce.util.Tools");const ke=e=>t=>l(t)&&t.nodeName.toLowerCase()===e,Ee=e=>t=>l(t)&&e.test(t.nodeName),we=e=>l(e)&&3===e.nodeType,De=e=>l(e)&&1===e.nodeType,Be=Ee(/^(OL|UL|DL)$/),Me=Ee(/^(OL|UL)$/),Pe=ke("ol"),Ie=Ee(/^(LI|DT|DD)$/),Re=Ee(/^(DT|DD)$/),Ue=Ee(/^(TH|TD)$/),$e=ke("br"),_e=(e,t)=>l(t)&&t.nodeName in e.schema.getTextBlockElements(),He=(e,t)=>l(e)&&e.nodeName in t,Fe=(e,t)=>l(t)&&t.nodeName in e.schema.getVoidElements(),Ve=(e,t,n)=>{const o=e.isEmpty(t);return!(n&&e.select("span[data-mce-type=bookmark]",t).length>0)&&o},je=(e,t)=>e.isChildOf(t,e.getRoot()),Ke=e=>t=>t.options.get(e),ze=Ke("lists_indent_on_tab"),Qe=Ke("forced_root_block"),We=Ke("forced_root_block_attrs"),qe=(e,t,n={})=>{const o=e.dom,r=e.schema.getBlockElements(),s=o.createFragment(),i=Qe(e),l=We(e);let a,d,c=!1;for(d=o.create(i,{...l,...n.style?{style:n.style}:{}}),He(t.firstChild,r)||s.appendChild(d);a=t.firstChild;){const e=a.nodeName;c||"SPAN"===e&&"bookmark"===a.getAttribute("data-mce-type")||(c=!0),He(a,r)?(s.appendChild(a),d=null):(d||(d=o.create(i,l),s.appendChild(d)),d.appendChild(a))}return!c&&d&&d.appendChild(o.create("br",{"data-mce-bogus":"1"})),s},Ze=Te.DOM,Ge=Y("dd"),Je=Y("dt"),Xe=(e,t)=>{var n;Ge(t)?Ae(t,"dt"):Je(t)&&(n=t,h.from(n.dom.parentElement).map($)).each((n=>((e,t,n)=>{const o=Ze.select('span[data-mce-type="bookmark"]',t),r=qe(e,n),s=Ze.createRng();s.setStartAfter(n),s.setEndAfter(t);const i=s.extractContents();for(let t=i.firstChild;t;t=t.firstChild)if("LI"===t.nodeName&&e.dom.isEmpty(t)){Ze.remove(t);break}e.dom.isEmpty(i)||Ze.insertAfter(i,t),Ze.insertAfter(r,t);const l=n.parentElement;l&&Ve(e.dom,l)&&(e=>{const t=e.parentNode;t&&xe.each(o,(e=>{t.insertBefore(e,n.parentNode)})),Ze.remove(e)})(l),Ze.remove(n),Ve(e.dom,t)&&Ze.remove(t)})(e,n.dom,t.dom)))},Ye=e=>{Je(e)&&Ae(e,"dd")},et=(e,t)=>{if(we(e))return{container:e,offset:t};const n=fe.getNode(e,t);return we(n)?{container:n,offset:t>=e.childNodes.length?n.data.length:0}:n.previousSibling&&we(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&we(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:e,offset:t}},tt=e=>{const t=e.cloneRange(),n=et(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);const o=et(e.endContainer,e.endOffset);return t.setEnd(o.container,o.offset),t},nt=["OL","UL","DL"],ot=nt.join(","),rt=(e,t)=>{const n=t||e.selection.getStart(!0);return e.dom.getParent(n,ot,lt(e,n))},st=e=>{const t=e.selection.getSelectedBlocks();return L(((e,t)=>{const n=xe.map(t,(t=>e.dom.getParent(t,"li,dd,dt",lt(e,t))||t));return B(n)})(e,t),Ie)},it=(e,t)=>{const n=e.dom.getParents(t,"TD,TH");return n.length>0?n[0]:e.getBody()},lt=(e,t)=>{const n=e.dom.getParents(t,e.dom.isBlock),o=T(n,(t=>{return(t=>t.nodeName.toLowerCase()!==Qe(e))(t)&&(n=e.schema,!Be(o=t)&&!Ie(o)&&b(nt,(e=>n.isValidChild(o.nodeName,e))));var n,o}));return o.getOr(e.getBody())},at=(e,t)=>{const n=e.dom.getParents(t,"ol,ul",lt(e,t));return D(n)},dt=(e,t)=>{const n=N(t,(t=>at(e,t).getOr(t)));return B(n)},ct=e=>/\btox\-/.test(e.className),mt=(e,t)=>A(e,Be,Ue).exists((e=>e.nodeName===t&&!ct(e))),ut=(e,t)=>null!==t&&!e.dom.isEditable(t),pt=(e,t)=>{const n=e.dom.getParent(t,"ol,ul,dl");return ut(e,n)||!e.selection.isEditable()},gt=(e,t)=>{const n=e.selection.getNode();return t({parents:e.dom.getParents(n),element:n}),e.on("NodeChange",t),()=>e.off("NodeChange",t)},ht=(e,t)=>{const n=(t||document).createDocumentFragment();return S(e,(e=>{n.appendChild(e.dom)})),$(n)},ft=(e,t,n)=>e.dispatch("ListMutation",{action:t,element:n}),yt=(vt=/^\s+|\s+$/g,e=>e.replace(vt,""));var vt;const Ct=(e,t,n)=>{((e,t,n)=>{if(!o(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);(e=>void 0!==e.style&&a(e.style.getPropertyValue))(e)&&e.style.setProperty(t,n)})(e.dom,t,n)},bt=e=>F(e,"OL,UL"),Nt=e=>oe(e).exists(bt),St=e=>"listAttributes"in e,Lt=e=>"isComment"in e,Ot=e=>e.depth>0,At=e=>e.isSelected,Tt=e=>{const t=te(e),n=re(e).exists(bt)?t.slice(0,-1):t;return N(n,Oe)},xt=(e,t)=>{ue(e.item,t.list)},kt=(e,t)=>{const n={list:U(t,e),item:U("li",e)};return ue(n.list,n.item),n},Et=(e,t,n)=>{const o=t.slice(0,n.depth);return D(o).each((t=>{if(St(n)){const o=((e,t,n)=>{const o=U("li",e);return Se(o,t),pe(o,n),o})(e,n.itemAttributes,n.content);((e,t)=>{ue(e.list,t),e.item=t})(t,o),((e,t)=>{Q(e.list)!==t.listType&&(e.list=Ae(e.list,t.listType)),Se(e.list,t.listAttributes)})(t,n)}else if((e=>"isFragment"in e)(n))pe(t.item,n.content);else{const e=R(`\x3c!--${n.content}--\x3e`);ue(t.list,e)}})),o},wt=(e,t)=>{let n=h.none();const o=O(t,((t,o,r)=>Lt(o)?0===r?(n=h.some(o),t):Et(e,t,o):o.depth>t.length?((e,t,n)=>{const o=((e,t,n)=>{const o=[];for(let r=0;r{for(let t=1;t{for(let t=0;t{St(t)&&(Se(e.list,t.listAttributes),Se(e.item,t.itemAttributes)),pe(e.item,t.content)}))})(o,n),r=o,P(D(t),w(r),xt),t.concat(o)})(e,t,o):Et(e,t,o)),[]);return n.each((e=>{const t=R(`\x3c!--${e.content}--\x3e`);w(o).each((e=>{((e,t)=>{oe(e).fold((()=>{ue(e,t)}),(n=>{e.dom.insertBefore(t.dom,n.dom)}))})(e.list,t)}))})),w(o).map((e=>e.list))},Dt=e=>(S(e,((t,n)=>{((e,t)=>{const n=e[t].depth,o=e=>e.depth===n&&!e.dirty,r=e=>e.depthA(e.slice(t+1),o,r)))})(e,n).fold((()=>{t.dirty&&St(t)&&(e=>{e.listAttributes=((e,t)=>{const n={};var o;return((e,t,n,o)=>{Ne(e,((e,r)=>{(t(e,r)?n:o)(e,r)}))})(e,t,(o=n,(e,t)=>{o[t]=e}),c),n})(e.listAttributes,((e,t)=>"start"!==t))})(t)}),(e=>{return o=e,void(St(n=t)&&St(o)&&(n.listType=o.listType,n.listAttributes={...o.listAttributes}));var n,o}))})),e),Bt=(e,t,n,o)=>{var r,s;if(8===W(s=o)||"#comment"===Q(s))return[{depth:e+1,content:null!==(r=o.dom.nodeValue)&&void 0!==r?r:"",dirty:!1,isSelected:!1,isComment:!0}];t.each((e=>{H(e.start,o)&&n.set(!0)}));const i=((e,t,n)=>ee(e).filter(G).map((o=>({depth:t,dirty:!1,isSelected:n,content:Tt(e),itemAttributes:Le(e),listAttributes:Le(o),listType:Q(o),isInPreviousLi:!1}))))(o,e,n.get());t.each((e=>{H(e.end,o)&&n.set(!1)}));const l=re(o).filter(bt).map((o=>Pt(e,t,n,o))).getOr([]);return i.toArray().concat(l)},Mt=(e,t,n,o)=>oe(o).filter(bt).fold((()=>Bt(e,t,n,o)),(r=>{const s=O(te(o),((o,s,i)=>{if(0===i)return o;if(F(s,"LI"))return o.concat(Bt(e,t,n,s));{const t={isFragment:!0,depth:e,content:[s],isSelected:!1,dirty:!1,parentListType:Q(r)};return o.concat(t)}}),[]);return Pt(e,t,n,r).concat(s)})),Pt=(e,t,n,o)=>x(te(o),(o=>(bt(o)?Pt:Mt)(e+1,t,n,o))),It=(e,t,n)=>{const o=((e,t)=>{const n=(()=>{let e=!1;return{get:()=>e,set:t=>{e=t}}})();return N(e,(e=>({sourceList:e,entries:Pt(0,t,n,e)})))})(t,(e=>{const t=N(st(e),$);return P(T(t,p(Nt)),T(k(t),p(Nt)),((e,t)=>({start:e,end:t})))})(e));S(o,(t=>{((e,t)=>{S(L(e,At),(e=>((e,t)=>{switch(e){case"Indent":t.depth++;break;case"Outdent":t.depth--;break;case"Flatten":t.depth=0}t.dirty=!0})(t,e)))})(t.entries,n);const o=((e,t)=>x(((e,t)=>{if(0===e.length)return[];{let n=t(e[0]);const o=[];let r=[];for(let s=0,i=e.length;sw(t).exists(Ot)?((e,t)=>{const n=Dt(t);return wt(e.contentDocument,n).toArray()})(e,t):((e,t)=>{const n=Dt(t);return N(n,(t=>{const n=Lt(t)?ht([R(`\x3c!--${t.content}--\x3e`)]):ht(t.content),o=St(t)?t.itemAttributes:{};return $(qe(e,n.dom,o))}))})(e,t))))(e,t.entries);var r;S(o,(t=>{ft(e,"Indent"===n?"IndentList":"OutdentList",t.dom)})),r=t.sourceList,S(o,(e=>{me(r,e)})),he(t.sourceList)}))},Rt=(e,t)=>{const n=Ce((e=>{const t=(e=>{const t=at(e,e.selection.getStart()),n=L(e.selection.getSelectedBlocks(),Me);return t.toArray().concat(n)})(e),n=(e=>{const t=e.selection.getStart();return e.dom.getParents(t,"ol,ul",lt(e,t))})(e);return T(n,(e=>{return t=$(e),ee(t).exists((e=>Ie(e.dom)&&oe(e).exists((e=>!Be(e.dom)))&&re(e).exists((e=>!Be(e.dom)))));var t})).fold((()=>dt(e,t)),(e=>[e]))})(e)),o=Ce((e=>L(st(e),Re))(e));let r=!1;if(n.length||o.length){const s=e.selection.getBookmark();It(e,n,t),((e,t,n)=>{S(n,"Indent"===t?Ye:t=>Xe(e,t))})(e,t,o),e.selection.moveToBookmark(s),e.selection.setRng(tt(e.selection.getRng())),e.nodeChanged(),r=!0}return r},Ut=(e,t)=>!(e=>{const t=rt(e);return ut(e,t)||!e.selection.isEditable()})(e)&&Rt(e,t),$t=e=>Ut(e,"Indent"),_t=e=>Ut(e,"Outdent"),Ht=e=>Ut(e,"Flatten"),Ft=e=>"\ufeff"===e;var Vt=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager");const jt=Te.DOM,Kt=e=>{const t={},n=n=>{let o=e[n?"startContainer":"endContainer"],r=e[n?"startOffset":"endOffset"];if(De(o)){const e=jt.create("span",{"data-mce-type":"bookmark"});o.hasChildNodes()?(r=Math.min(r,o.childNodes.length-1),n?o.insertBefore(e,o.childNodes[r]):jt.insertAfter(e,o.childNodes[r])):o.appendChild(e),o=e,r=0}t[n?"startContainer":"endContainer"]=o,t[n?"startOffset":"endOffset"]=r};return n(!0),e.collapsed||n(),t},zt=e=>{const t=t=>{let n=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"];if(n){if(De(n)&&n.parentNode){const e=n;o=(e=>{var t;let n=null===(t=e.parentNode)||void 0===t?void 0:t.firstChild,o=0;for(;n;){if(n===e)return o;De(n)&&"bookmark"===n.getAttribute("data-mce-type")||o++,n=n.nextSibling}return-1})(n),n=n.parentNode,jt.remove(e),!n.hasChildNodes()&&jt.isBlock(n)&&n.appendChild(jt.create("br"))}e[t?"startContainer":"endContainer"]=n,e[t?"startOffset":"endOffset"]=o}};t(!0),t();const n=jt.createRng();return n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),tt(n)},Qt=e=>{switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}},Wt=(e,t)=>{xe.each(t,((t,n)=>{e.setAttribute(n,t)}))},qt=(e,t,n)=>{((e,t,n)=>{const o=n["list-style-type"]?n["list-style-type"]:null;e.setStyle(t,"list-style-type",o)})(e,t,n),((e,t,n)=>{Wt(t,n["list-attributes"]),xe.each(e.select("li",t),(e=>{Wt(e,n["list-item-attributes"])}))})(e,t,n)},Zt=(e,t)=>l(t)&&!He(t,e.schema.getBlockElements()),Gt=(e,t,n,o)=>{let r=t[n?"startContainer":"endContainer"];const s=t[n?"startOffset":"endOffset"];De(r)&&(r=r.childNodes[Math.min(s,r.childNodes.length-1)]||r),!n&&$e(r.nextSibling)&&(r=r.nextSibling);const i=(t,n)=>{var r;const s=new ye(t,(t=>{for(;!e.dom.isBlock(t)&&t.parentNode&&o!==t;)t=t.parentNode;return t})(t)),i=n?"next":"prev";let l;for(;l=s[i]();)if(!Fe(e,l)&&!Ft(l.textContent)&&0!==(null===(r=l.textContent)||void 0===r?void 0:r.length))return h.some(l);return h.none()};if(n&&we(r))if(Ft(r.textContent))r=i(r,!1).getOr(r);else for(null!==r.parentNode&&Zt(e,r.parentNode)&&(r=r.parentNode);null!==r.previousSibling&&(Zt(e,r.previousSibling)||we(r.previousSibling));)r=r.previousSibling;if(!n&&we(r))if(Ft(r.textContent))r=i(r,!0).getOr(r);else for(null!==r.parentNode&&Zt(e,r.parentNode)&&(r=r.parentNode);null!==r.nextSibling&&(Zt(e,r.nextSibling)||we(r.nextSibling));)r=r.nextSibling;for(;r.parentNode!==o;){const t=r.parentNode;if(_e(e,r))return r;if(/^(TD|TH)$/.test(t.nodeName))return r;r=t}return r},Jt=(e,t,n)=>{const o=e.selection.getRng();let r="LI";const s=lt(e,((e,t)=>{const n=e.selection.getStart(!0),o=Gt(e,t,!0,e.getBody());return r=$(o),s=$(t.commonAncestorContainer),i=r,l=function(e,...t){return(...n)=>{const o=t.concat(n);return e.apply(null,o)}}(H,s),ae(i,l,void 0).isSome()?t.commonAncestorContainer:n;var r,s,i,l})(e,o)),i=e.dom;if("false"===i.getContentEditable(e.selection.getNode()))return;"DL"===(t=t.toUpperCase())&&(r="DT");const l=Kt(o),a=L(((e,t,n)=>{const o=[],r=e.dom,s=Gt(e,t,!0,n),i=Gt(e,t,!1,n);let l;const a=[];for(let e=s;e&&(a.push(e),e!==i);e=e.nextSibling);return xe.each(a,(t=>{var s;if(_e(e,t))return o.push(t),void(l=null);if(r.isBlock(t)||$e(t))return $e(t)&&r.remove(t),void(l=null);const i=t.nextSibling;Vt.isBookmarkNode(t)&&(Be(i)||_e(e,i)||!i&&t.parentNode===n)?l=null:(l||(l=r.create("p"),null===(s=t.parentNode)||void 0===s||s.insertBefore(l,t),o.push(l)),l.appendChild(t))})),o})(e,o,s),e.dom.isEditable);xe.each(a,(o=>{let s;const l=o.previousSibling,a=o.parentNode;Ie(a)||(l&&Be(l)&&l.nodeName===t&&((e,t,n)=>{const o=e.getStyle(t,"list-style-type");let r=n?n["list-style-type"]:"";return r=null===r?"":r,o===r})(i,l,n)?(s=l,o=i.rename(o,r),l.appendChild(o)):(s=i.create(t),a.insertBefore(s,o),s.appendChild(o),o=i.rename(o,r)),((e,t)=>{xe.each(["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],(n=>e.setStyle(t,n,"")))})(i,o),qt(i,s,n),Yt(e.dom,s))})),e.selection.setRng(zt(l))},Xt=(e,t,n)=>{return((e,t)=>Be(e)&&e.nodeName===(null==t?void 0:t.nodeName))(t,n)&&((e,t,n)=>e.getStyle(t,"list-style-type",!0)===e.getStyle(n,"list-style-type",!0))(e,t,n)&&(o=n,t.className===o.className);var o},Yt=(e,t)=>{let n,o=t.nextSibling;if(Xt(e,t,o)){const r=o;for(;n=r.firstChild;)t.appendChild(n);e.remove(r)}if(o=t.previousSibling,Xt(e,t,o)){const r=o;for(;n=r.lastChild;)t.insertBefore(n,t.firstChild);e.remove(r)}},en=(e,t,n,o)=>{if(t.nodeName!==n){const r=e.dom.rename(t,n);qt(e.dom,r,o),ft(e,Qt(n),r)}else qt(e.dom,t,o),ft(e,Qt(n),t)},tn=(e,t,n,o)=>{if(t.classList.forEach(((e,n,o)=>{e.startsWith("tox-")&&(o.remove(e),0===o.length&&t.removeAttribute("class"))})),t.nodeName!==n){const r=e.dom.rename(t,n);qt(e.dom,r,o),ft(e,Qt(n),r)}else qt(e.dom,t,o),ft(e,Qt(n),t)},nn=e=>"list-style-type"in e,on=(e,t,n)=>{const o=rt(e);if(pt(e,o))return;const s=(e=>{const t=rt(e),n=e.selection.getSelectedBlocks();return((e,t)=>l(e)&&1===t.length&&t[0]===e)(t,n)?(e=>L(e.querySelectorAll(ot),Be))(t):L(n,(e=>Be(e)&&t!==e))})(e),i=r(n)?n:{};s.length>0?((e,t,n,o,r)=>{const s=Be(t);if(!s||t.nodeName!==o||nn(r)||ct(t)){Jt(e,o,r);const i=Kt(e.selection.getRng()),l=s?[t,...n]:n,a=s&&ct(t)?tn:en;xe.each(l,(t=>{a(e,t,o,r)})),e.selection.setRng(zt(i))}else Ht(e)})(e,o,s,t,i):((e,t,n,o)=>{if(t!==e.getBody())if(t)if(t.nodeName!==n||nn(o)||ct(t)){const r=Kt(e.selection.getRng());ct(t)&&t.classList.forEach(((e,n,o)=>{e.startsWith("tox-")&&(o.remove(e),0===o.length&&t.removeAttribute("class"))})),qt(e.dom,t,o);const s=e.dom.rename(t,n);Yt(e.dom,s),e.selection.setRng(zt(r)),Jt(e,n,o),ft(e,Qt(n),s)}else Ht(e);else Jt(e,n,o),ft(e,Qt(n),t)})(e,o,t,i)},rn=Te.DOM,sn=(e,t)=>{const n=xe.grep(e.select("ol,ul",t));xe.each(n,(t=>{((e,t)=>{const n=t.parentElement;if(n&&"LI"===n.nodeName&&n.firstChild===t){const o=n.previousSibling;o&&"LI"===o.nodeName?(o.appendChild(t),Ve(e,n)&&rn.remove(n)):rn.setStyle(n,"listStyleType","none")}if(Be(n)){const e=n.previousSibling;e&&"LI"===e.nodeName&&e.appendChild(t)}})(e,t)}))},ln=(e,t,n,o)=>{let r=t.startContainer;const s=t.startOffset;if(we(r)&&(n?s0))return r;const i=e.schema.getNonEmptyElements();De(r)&&(r=fe.getNode(r,s));const l=new ye(r,o);n&&((e,t)=>!!$e(t)&&e.isBlock(t.nextSibling)&&!$e(t.previousSibling))(e.dom,r)&&l.next();const a=n?l.next.bind(l):l.prev2.bind(l);for(;r=a();){if("LI"===r.nodeName&&!r.hasChildNodes())return r;if(i[r.nodeName])return r;if(we(r)&&r.data.length>0)return r}return null},an=(e,t)=>{const n=t.childNodes;return 1===n.length&&!Be(n[0])&&e.isBlock(n[0])},dn=e=>h.from(e).map($).filter(Z).exists((e=>((e,t=!1)=>{return ie(e)?e.dom.isContentEditable:(n=e,le(((e,t)=>_(e,t)),ce,n,"[contenteditable]",void 0)).fold(m(t),(e=>"true"===(e=>e.dom.contentEditable)(e)));var n})(e)&&!C(["details"],Q(e)))),cn=(e,t,n)=>{let o;const r=an(e,n)?n.firstChild:n;if(((e,t)=>{an(e,t)&&dn(t.firstChild)&&e.remove(t.firstChild,!0)})(e,t),!Ve(e,t,!0))for(;o=t.firstChild;)r.appendChild(o)},mn=(e,t,n)=>{let o;const r=t.parentNode;if(!je(e,t)||!je(e,n))return;Be(n.lastChild)&&(o=n.lastChild),r===n.lastChild&&$e(r.previousSibling)&&e.remove(r.previousSibling);const s=n.lastChild;s&&$e(s)&&t.hasChildNodes()&&e.remove(s),Ve(e,n,!0)&&ge($(n)),cn(e,t,n),o&&n.appendChild(o);const i=((e,t)=>{const n=e.dom,o=t.dom;return n!==o&&n.contains(o)})($(n),$(t))?e.getParents(t,Be,n):[];e.remove(t),S(i,(t=>{Ve(e,t)&&t!==e.getRoot()&&e.remove(t)}))},un=(e,t)=>{const n=e.dom,o=e.selection,r=o.getStart(),s=it(e,r),i=n.getParent(o.getStart(),"LI",s);if(i){const r=i.parentElement;if(r===e.getBody()&&Ve(n,r))return!0;const l=tt(o.getRng()),a=n.getParent(ln(e,l,t,s),"LI",s),d=a&&(t?n.isChildOf(i,a):n.isChildOf(a,i));if(a&&a!==i&&!d)return e.undoManager.transact((()=>{var n,o;t?((e,t,n,o)=>{const r=e.dom;if(r.isEmpty(o))((e,t,n)=>{ge($(n)),mn(e.dom,t,n),e.selection.setCursorLocation(n,0)})(e,n,o);else{const s=Kt(t);mn(r,n,o),e.selection.setRng(zt(s))}})(e,l,a,i):(null===(o=(n=i).parentNode)||void 0===o?void 0:o.firstChild)===n?_t(e):((e,t,n,o)=>{const r=Kt(t);mn(e.dom,n,o);const s=zt(r);e.selection.setRng(s)})(e,l,i,a)})),!0;if(d&&!t&&a!==i){const t=l.commonAncestorContainer.parentElement;return!(!t||n.isChildOf(a,t)||(e.undoManager.transact((()=>{const o=Kt(l);cn(n,t,a),t.remove();const r=zt(o);e.selection.setRng(r)})),0))}if(!a&&!t&&0===l.startOffset&&0===l.endOffset)return e.undoManager.transact((()=>{Ht(e)})),!0}return!1},pn=e=>{const t=e.selection.getStart(),n=it(e,t);return e.dom.getParent(t,"LI,DT,DD",n)||st(e).length>0},gn=(e,t)=>{const n=e.selection;return!pt(e,n.getNode())&&(n.isCollapsed()?((e,t)=>un(e,t)||((e,t)=>{const n=e.dom,o=e.selection.getStart(),r=it(e,o),s=n.getParent(o,n.isBlock,r);if(s&&n.isEmpty(s,void 0,{checkRootAsContent:!0})){const o=tt(e.selection.getRng()),i=ln(e,o,t,r),l=n.getParent(i,"LI",r);if(i&&l){const a=e=>C(["td","th","caption"],Q(e)),d=e=>e.dom===r;return!!((e,t,n=u)=>P(e,t,n).getOr(e.isNone()&&t.isNone()))(de($(l),a,d),de($(o.startContainer),a,d),H)&&(e.undoManager.transact((()=>{const o=l.parentNode;((e,t,n)=>{const o=e.getParent(t.parentNode,e.isBlock,n);e.remove(t),o&&e.isEmpty(o)&&e.remove(o)})(n,s,r),Yt(n,o),e.selection.select(i,!0),e.selection.collapse(t)})),!0)}}return!1})(e,t))(e,t):(e=>!!pn(e)&&(e.undoManager.transact((()=>{let t=!0;const n=()=>t=!1;e.on("input",n),e.execCommand("Delete"),e.off("input",n),t&&e.dispatch("input"),sn(e.dom,e.getBody())})),!0))(e))},hn=e=>{const t=k(yt(e).split("")),n=N(t,((e,t)=>{const n=e.toUpperCase().charCodeAt(0)-"A".charCodeAt(0)+1;return Math.pow(26,t)*n}));return O(n,((e,t)=>e+t),0)},fn=e=>{if(--e<0)return"";{const t=e%26,n=Math.floor(e/26);return fn(n)+String.fromCharCode("A".charCodeAt(0)+t)}},yn=e=>{const t=parseInt(e.start,10);return M(e.listStyleType,"upper-alpha")?fn(t):M(e.listStyleType,"lower-alpha")?fn(t).toLowerCase():e.start},vn=(e,t)=>()=>{const n=rt(e);return l(n)&&n.nodeName===t},Cn=e=>{e.addCommand("mceListProps",(()=>{(e=>{const t=rt(e);Pe(t)&&!pt(e,t)&&e.windowManager.open({title:"List Properties",body:{type:"panel",items:[{type:"input",name:"start",label:"Start list at number",inputMode:"numeric"}]},initialData:{start:yn({start:e.dom.getAttrib(t,"start","1"),listStyleType:h.from(e.dom.getStyle(t,"list-style-type"))})},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:t=>{(e=>{switch((e=>/^[0-9]+$/.test(e)?2:/^[A-Z]+$/.test(e)?0:/^[a-z]+$/.test(e)?1:e.length>0?4:3)(e)){case 2:return h.some({listStyleType:h.none(),start:e});case 0:return h.some({listStyleType:h.some("upper-alpha"),start:hn(e).toString()});case 1:return h.some({listStyleType:h.some("lower-alpha"),start:hn(e).toString()});case 3:return h.some({listStyleType:h.none(),start:""});case 4:return h.none()}})(t.getData().start).each((t=>{e.execCommand("mceListUpdate",!1,{attrs:{start:"1"===t.start?"":t.start},styles:{"list-style-type":t.listStyleType.getOr("")}})})),t.close()}})})(e)}))};var bn=tinymce.util.Tools.resolve("tinymce.html.Node");const Nn=e=>3===e.type,Sn=e=>0===e.length,Ln=e=>{const t=(t,n)=>{const o=bn.create("li");S(t,(e=>o.append(e))),n?e.insert(o,n,!0):e.append(o)},n=O(e.children(),((e,n)=>Nn(n)?[...e,n]:Sn(e)||Nn(n)?e:(t(e,n),[])),[]);Sn(n)||t(n)},On=(e,t)=>n=>(n.setEnabled(e.selection.isEditable()),gt(e,(o=>{n.setActive(mt(o.parents,t)),n.setEnabled(!pt(e,o.element)&&e.selection.isEditable())}))),An=(e,t)=>n=>gt(e,(o=>n.setEnabled(mt(o.parents,t)&&!pt(e,o.element))));e.add("lists",(e=>((e=>{(0,e.options.register)("lists_indent_on_tab",{processor:"boolean",default:!0})})(e),(e=>{e.on("PreInit",(()=>{const{parser:t}=e;t.addNodeFilter("ul,ol",(e=>S(e,Ln)))}))})(e),e.hasPlugin("rtc",!0)?Cn(e):((e=>{ze(e)&&(e=>{e.on("keydown",(t=>{t.keyCode!==ve.TAB||ve.metaKeyPressed(t)||e.undoManager.transact((()=>{(t.shiftKey?_t(e):$t(e))&&t.preventDefault()}))}))})(e),(e=>{e.on("ExecCommand",(t=>{const n=t.command.toLowerCase();"delete"!==n&&"forwarddelete"!==n||!pn(e)||sn(e.dom,e.getBody())})),e.on("keydown",(t=>{t.keyCode===ve.BACKSPACE?gn(e,!1)&&t.preventDefault():t.keyCode===ve.DELETE&&gn(e,!0)&&t.preventDefault()}))})(e)})(e),(e=>{e.on("BeforeExecCommand",(t=>{const n=t.command.toLowerCase();"indent"===n?$t(e):"outdent"===n&&_t(e)})),e.addCommand("InsertUnorderedList",((t,n)=>{on(e,"UL",n)})),e.addCommand("InsertOrderedList",((t,n)=>{on(e,"OL",n)})),e.addCommand("InsertDefinitionList",((t,n)=>{on(e,"DL",n)})),e.addCommand("RemoveList",(()=>{Ht(e)})),Cn(e),e.addCommand("mceListUpdate",((t,n)=>{r(n)&&((e,t)=>{const n=rt(e);null===n||pt(e,n)||e.undoManager.transact((()=>{r(t.styles)&&e.dom.setStyles(n,t.styles),r(t.attrs)&&Ne(t.attrs,((t,o)=>e.dom.setAttrib(n,o,t)))}))})(e,n)})),e.addQueryStateHandler("InsertUnorderedList",vn(e,"UL")),e.addQueryStateHandler("InsertOrderedList",vn(e,"OL")),e.addQueryStateHandler("InsertDefinitionList",vn(e,"DL"))})(e)),(e=>{const t=t=>()=>e.execCommand(t);e.hasPlugin("advlist")||(e.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:t("InsertOrderedList"),onSetup:On(e,"OL")}),e.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:t("InsertUnorderedList"),onSetup:On(e,"UL")}))})(e),(e=>{const t={text:"List properties...",icon:"ordered-list",onAction:()=>e.execCommand("mceListProps"),onSetup:An(e,"OL")};e.ui.registry.addMenuItem("listprops",t),e.ui.registry.addContextMenu("lists",{update:t=>{const n=rt(e,t);return Pe(n)?["listprops"]:[]}})})(e),(e=>({backspaceDelete:t=>{gn(e,t)}}))(e))))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/media/plugin.min.js b/apps/web-ele/public/tinymce/plugins/media/plugin.min.js new file mode 100644 index 000000000..5a3107660 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/media/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=o=e,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":t;var r,o,a,s})(t)===e,r=t("string"),o=t("object"),a=t("array"),s=e=>!(e=>null==e)(e);class i{constructor(e,t){this.tag=e,this.value=t}static some(e){return new i(!0,e)}static none(){return i.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?i.some(e(this.value)):i.none()}bind(e){return this.tag?e(this.value):i.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:i.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?i.some(e):i.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}i.singletonNone=new i(!1);const n=Array.prototype.push,l=(e,t)=>{for(let r=0,o=e.length;r{const t=[];for(let r=0,o=e.length;rh(e,t)?i.from(e[t]):i.none(),h=(e,t)=>u.call(e,t),p=e=>t=>t.options.get(e),g=p("audio_template_callback"),b=p("video_template_callback"),w=p("iframe_template_callback"),v=p("media_live_embeds"),f=p("media_filter_html"),y=p("media_url_resolver"),x=p("media_alt_source"),_=p("media_poster"),k=p("media_dimensions");var j=tinymce.util.Tools.resolve("tinymce.util.Tools"),O=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),A=tinymce.util.Tools.resolve("tinymce.html.DomParser");const S=O.DOM,$=e=>e.replace(/px$/,""),C=e=>{const t=e.attr("style"),r=t?S.parseStyle(t):{};return{type:"ephox-embed-iri",source:e.attr("data-ephox-embed-iri"),altsource:"",poster:"",width:d(r,"max-width").map($).getOr(""),height:d(r,"max-height").map($).getOr("")}},T=(e,t)=>{let r={};for(let o=A({validate:!1,forced_root_block:!1},t).parse(e);o;o=o.walk())if(1===o.type){const e=o.name;if(o.attr("data-ephox-embed-iri")){r=C(o);break}r.source||"param"!==e||(r.source=o.attr("movie")),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(r.type||(r.type=e),r=j.extend(o.attributes.map,r)),"source"===e&&(r.source?r.altsource||(r.altsource=o.attr("src")):r.source=o.attr("src")),"img"!==e||r.poster||(r.poster=o.attr("src"))}return r.source=r.source||r.src||"",r.altsource=r.altsource||"",r.poster=r.poster||"",r},z=e=>{var t;const r=null!==(t=e.toLowerCase().split(".").pop())&&void 0!==t?t:"";return d({mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"},r).getOr("")};var D=tinymce.util.Tools.resolve("tinymce.html.Node"),F=tinymce.util.Tools.resolve("tinymce.html.Serializer");const M=(e,t={})=>A({forced_root_block:!1,validate:!1,allow_conditional_comments:!0,...t},e),N=O.DOM,P=e=>/^[0-9.]+$/.test(e)?e+"px":e,R=(e,t)=>{const r=t.attr("style"),o=r?N.parseStyle(r):{};s(e.width)&&(o["max-width"]=P(e.width)),s(e.height)&&(o["max-height"]=P(e.height)),t.attr("style",N.serializeStyle(o))},E=["source","altsource"],U=(e,t,r,o)=>{let a=0,s=0;const i=M(o);i.addNodeFilter("source",(e=>a=e.length));const n=i.parse(e);for(let e=n;e;e=e.walk())if(1===e.type){const o=e.name;if(e.attr("data-ephox-embed-iri")){R(t,e);break}switch(o){case"video":case"object":case"embed":case"img":case"iframe":void 0!==t.height&&void 0!==t.width&&(e.attr("width",t.width),e.attr("height",t.height))}if(r)switch(o){case"video":e.attr("poster",t.poster),e.attr("src",null);for(let r=a;r<2;r++)if(t[E[r]]){const o=new D("source",1);o.attr("src",t[E[r]]),o.attr("type",t[E[r]+"mime"]||null),e.append(o)}break;case"iframe":e.attr("src",t.source);break;case"object":const r=e.getAll("img").length>0;if(t.poster&&!r){e.attr("src",t.poster);const r=new D("img",1);r.attr("src",t.poster),r.attr("width",t.width),r.attr("height",t.height),e.append(r)}break;case"source":if(s<2&&(e.attr("src",t[E[s]]),e.attr("type",t[E[s]+"mime"]||null),!t[E[s]])){e.remove();continue}s++;break;case"img":t.poster||e.remove()}}return F({},o).serialize(n)},L=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?h=$3&title=0&byline=0",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?title=0&byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=(e,t)=>{const r=(e=>{const t=e.match(/^(https?:\/\/|www\.)(.+)$/i);return t&&t.length>1?"www."===t[1]?"https://":t[1]:"https://"})(t),o=e.regex.exec(t);let a=r+e.url;if(s(o))for(let e=0;eo[e]?o[e]:""));return a.replace(/\?$/,"")},B=e=>{const t=L.filter((t=>t.regex.test(e)));return t.length>0?j.extend({},t[0],{url:I(t[0],e)}):null},G=(e,t)=>{var r;const o=j.extend({},t);if(!o.source&&(j.extend(o,T(null!==(r=o.embed)&&void 0!==r?r:"",e.schema)),!o.source))return"";o.altsource||(o.altsource=""),o.poster||(o.poster=""),o.source=e.convertURL(o.source,"source"),o.altsource=e.convertURL(o.altsource,"source"),o.sourcemime=z(o.source),o.altsourcemime=z(o.altsource),o.poster=e.convertURL(o.poster,"poster");const a=B(o.source);if(a&&(o.source=a.url,o.type=a.type,o.allowfullscreen=a.allowFullscreen,o.width=o.width||String(a.w),o.height=o.height||String(a.h)),o.embed)return U(o.embed,o,!0,e.schema);{const t=g(e),r=b(e),a=w(e);return o.width=o.width||"300",o.height=o.height||"150",j.each(o,((t,r)=>{o[r]=e.dom.encode(""+t)})),"iframe"===o.type?((e,t)=>{if(t)return t(e);{const t=e.allowfullscreen?' allowFullscreen="1"':"";return'"}})(o,a):"application/x-shockwave-flash"===o.sourcemime?(e=>{let t='';return e.poster&&(t+=''),t+="",t})(o):-1!==o.sourcemime.indexOf("audio")?((e,t)=>t?t(e):'")(o,t):((e,t)=>t?t(e):'")(o,r)}},W=e=>e.hasAttribute("data-mce-object")||e.hasAttribute("data-ephox-embed-iri"),q={},H=e=>t=>G(e,t),J=(e,t)=>{const r=y(e);return r?((e,t,r)=>new Promise(((o,a)=>{const s=r=>(r.html&&(q[e.source]=r),o({url:e.source,html:r.html?r.html:t(e)}));q[e.source]?s(q[e.source]):r({url:e.source}).then(s).catch(a)})))(t,H(e),r):((e,t)=>Promise.resolve({html:t(e),url:e.source}))(t,H(e))},K=(e,t)=>{const r={};return d(e,"dimensions").each((e=>{l(["width","height"],(o=>{d(t,o).orThunk((()=>d(e,o))).each((e=>r[o]=e))}))})),r},Q=(e,t)=>{const r=t&&"dimensions"!==t?((e,t)=>d(t,e).bind((e=>d(e,"meta"))))(t,e).getOr({}):{},a=((e,t,r)=>a=>{const s=()=>d(e,a),n=()=>d(t,a),l=e=>d(e,"value").bind((e=>e.length>0?i.some(e):i.none()));return{[a]:(a===r?s().bind((e=>o(e)?l(e).orThunk(n):n().orThunk((()=>i.from(e))))):n().orThunk((()=>s().bind((e=>o(e)?l(e):i.from(e)))))).getOr("")}})(e,r,t);return{...a("source"),...a("altsource"),...a("poster"),...a("embed"),...K(e,r)}},V=e=>{const t={...e,source:{value:d(e,"source").getOr("")},altsource:{value:d(e,"altsource").getOr("")},poster:{value:d(e,"poster").getOr("")}};return l(["width","height"],(r=>{d(e,r).each((e=>{const o=t.dimensions||{};o[r]=e,t.dimensions=o}))})),t},X=e=>t=>{const r=t&&t.msg?"Media embed handler error: "+t.msg:"Media embed handler threw unknown error.";e.notificationManager.open({type:"error",text:r})},Y=(e,t)=>o=>{if(r(o.url)&&o.url.trim().length>0){const r=o.html,a={...T(r,t.schema),source:o.url,embed:r};e.setData(V(a))}},Z=(e,t)=>{const r=e.dom.select("*[data-mce-object]");e.insertContent(t),((e,t)=>{const r=e.dom.select("*[data-mce-object]");for(let e=0;e=0;o--)t[e]===r[o]&&r.splice(o,1);e.selection.select(r[0])})(e,r),e.nodeChanged()},ee=(e,t)=>s(t)&&"ephox-embed-iri"===t&&s(B(e)),te=(e,t)=>((e,t)=>e.width!==t.width||e.height!==t.height)(e,t)&&ee(t.source,e.type),re=e=>{const t=(e=>{const t=e.selection.getNode(),r=W(t)?e.serializer.serialize(t,{selection:!0}):"",o=T(r,e.schema),a=(()=>{if(ee(o.source,o.type)){const r=e.dom.getRect(t);return{width:r.w.toString().replace(/px$/,""),height:r.h.toString().replace(/px$/,"")}}return{}})();return{embed:r,...o,...a}})(e),r=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})(t),o=V(t),a=k(e)?[{type:"sizeinput",name:"dimensions",label:"Constrain proportions",constrain:!0}]:[],s={title:"General",name:"general",items:c([[{name:"source",type:"urlinput",filetype:"media",label:"Source",picker_text:"Browse files"}],a])},i=[];x(e)&&i.push({name:"altsource",type:"urlinput",filetype:"media",label:"Alternative source URL"}),_(e)&&i.push({name:"poster",type:"urlinput",filetype:"image",label:"Media poster (Image URL)"});const n={title:"Advanced",name:"advanced",items:i},l=[s,{title:"Embed",items:[{type:"textarea",name:"embed",label:"Paste your embed code below:"}]}];i.length>0&&l.push(n);const m={type:"tabpanel",tabs:l},u=e.windowManager.open({title:"Insert/Edit Media",size:"normal",body:m,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:t=>{const o=Q(t.getData());((e,t,r)=>{var o,a;t.embed=te(e,t)&&k(r)?G(r,{...t,embed:""}):U(null!==(o=t.embed)&&void 0!==o?o:"",t,!1,r.schema),t.embed&&(e.source===t.source||(a=t.source,h(q,a)))?Z(r,t.embed):J(r,t).then((e=>{Z(r,e.html)})).catch(X(r))})(r.get(),o,e),t.close()},onChange:(t,o)=>{switch(o.name){case"source":((t,r)=>{const o=Q(r.getData(),"source");t.source!==o.source&&(Y(u,e)({url:o.source,html:""}),J(e,o).then(Y(u,e)).catch(X(e)))})(r.get(),t);break;case"embed":(t=>{var r;const o=Q(t.getData()),a=T(null!==(r=o.embed)&&void 0!==r?r:"",e.schema);t.setData(V(a))})(t);break;case"dimensions":case"altsource":case"poster":((t,r,o)=>{const a=Q(t.getData(),r),s=te(o,a)&&k(e)?{...a,embed:""}:a,i=G(e,s);t.setData(V({...s,embed:i}))})(t,o.name,r.get())}r.set(Q(t.getData()))},initialData:o})};var oe=tinymce.util.Tools.resolve("tinymce.Env");const ae=e=>{const t=e.name;return"iframe"===t||"video"===t||"audio"===t},se=(e,t,r,o=null)=>{const a=e.attr(r);return s(a)?a:h(t,r)?null:o},ie=(e,t,r)=>{const o="img"===t.name||"video"===e.name,a=o?"300":null,s="audio"===e.name?"30":"150",i=o?s:null;t.attr({width:se(e,r,"width",a),height:se(e,r,"height",i)})},ne=(e,t)=>{const r=t.name,o=new D("img",1);return ce(e,t,o),ie(t,o,{}),o.attr({style:t.attr("style"),src:oe.transparentSrc,"data-mce-object":r,class:"mce-object mce-object-"+r}),o},le=(e,t)=>{var r;const o=t.name,a=new D("span",1);a.attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,class:"mce-preview-object mce-object-"+o}),ce(e,t,a);const i=e.dom.parseStyle(null!==(r=t.attr("style"))&&void 0!==r?r:""),n=new D(o,1);if(ie(t,n,i),n.attr({src:t.attr("src"),style:t.attr("style"),class:t.attr("class")}),"iframe"===o)n.attr({allowfullscreen:t.attr("allowfullscreen"),frameborder:"0",sandbox:t.attr("sandbox"),referrerpolicy:t.attr("referrerpolicy")});else{l(["controls","crossorigin","currentTime","loop","muted","poster","preload"],(e=>{n.attr(e,t.attr(e))}));const r=a.attr("data-mce-html");s(r)&&((e,t,r,o)=>{const a=M(e.schema).parse(o,{context:t});for(;a.firstChild;)r.append(a.firstChild)})(e,o,n,unescape(r))}const c=new D("span",1);return c.attr("class","mce-shim"),a.append(n),a.append(c),a},ce=(e,t,r)=>{var o;const a=null!==(o=t.attributes)&&void 0!==o?o:[];let s=a.length;for(;s--;){const t=a[s].name;let o=a[s].value;"width"===t||"height"===t||"style"===t||(n="data-mce-",(i=t).length>=9&&i.substr(0,9)===n)||("data"!==t&&"src"!==t||(o=e.convertURL(o,t)),r.attr("data-mce-p-"+t,o))}var i,n;const c=F({inner:!0},e.schema),m=new D("div",1);l(t.children(),(e=>m.append(e)));const u=c.serialize(m);u&&(r.attr("data-mce-html",escape(u)),r.empty())},me=e=>{const t=e.attr("class");return r(t)&&/\btiny-pageembed\b/.test(t)},ue=e=>{let t=e;for(;t=t.parent;)if(t.attr("data-ephox-embed-iri")||me(t))return!0;return!1},de=(e,t,r)=>{const o=(0,e.options.get)("xss_sanitization"),a=f(e);return M(e.schema,{sanitize:o,validate:a}).parse(r,{context:t})},he=e=>t=>{const r=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",r),r(),()=>{e.off("NodeChange",r)}};e.add("media",(e=>((e=>{const t=e.options.register;t("audio_template_callback",{processor:"function"}),t("video_template_callback",{processor:"function"}),t("iframe_template_callback",{processor:"function"}),t("media_live_embeds",{processor:"boolean",default:!0}),t("media_filter_html",{processor:"boolean",default:!0}),t("media_url_resolver",{processor:"function"}),t("media_alt_source",{processor:"boolean",default:!0}),t("media_poster",{processor:"boolean",default:!0}),t("media_dimensions",{processor:"boolean",default:!0})})(e),(e=>{e.addCommand("mceMedia",(()=>{re(e)}))})(e),(e=>{const t=()=>e.execCommand("mceMedia");e.ui.registry.addToggleButton("media",{tooltip:"Insert/edit media",icon:"embed",onAction:t,onSetup:t=>{const r=e.selection;t.setActive(W(r.getNode()));const o=r.selectorChangedWithUnbind("img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]",t.setActive).unbind,a=he(e)(t);return()=>{o(),a()}}}),e.ui.registry.addMenuItem("media",{icon:"embed",text:"Media...",onAction:t,onSetup:he(e)})})(e),(e=>{e.on("ResolveName",(e=>{let t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}))})(e),(e=>{e.on("PreInit",(()=>{const{schema:t,serializer:r,parser:o}=e,a=t.getBoolAttrs();l("webkitallowfullscreen mozallowfullscreen".split(" "),(e=>{a[e]={}})),((e,t)=>{const r=m(e);for(let o=0,a=r.length;o{const o=t.getElementRule(r);o&&l(e,(e=>{o.attributes[e]={},o.attributesOrder.push(e)}))})),o.addNodeFilter("iframe,video,audio,object,embed",(e=>t=>{let r,o=t.length;for(;o--;)r=t[o],r.parent&&(r.parent.attr("data-mce-object")||(ae(r)&&v(e)?ue(r)||r.replace(le(e,r)):ue(r)||r.replace(ne(e,r))))})(e)),r.addAttributeFilter("data-mce-object",((t,r)=>{var o;let a=t.length;for(;a--;){const s=t[a];if(!s.parent)continue;const i=s.attr(r),n=new D(i,1);if("audio"!==i){const e=s.attr("class");e&&-1!==e.indexOf("mce-preview-object")&&s.firstChild?n.attr({width:s.firstChild.attr("width"),height:s.firstChild.attr("height")}):n.attr({width:s.attr("width"),height:s.attr("height")})}n.attr({style:s.attr("style")});const c=null!==(o=s.attributes)&&void 0!==o?o:[];let m=c.length;for(;m--;){const e=c[m].name;0===e.indexOf("data-mce-p-")&&n.attr(e.substr(11),c[m].value)}const u=s.attr("data-mce-html");if(u){const t=de(e,i,unescape(u));l(t.children(),(e=>n.append(e)))}s.replace(n)}}))})),e.on("SetContent",(()=>{const t=e.dom;l(t.select("span.mce-preview-object"),(e=>{0===t.select("span.mce-shim",e).length&&t.add(e,"span",{class:"mce-shim"})}))}))})(e),(e=>{e.on("mousedown",(t=>{const r=e.dom.getParent(t.target,".mce-preview-object");r&&"2"===e.dom.getAttrib(r,"data-mce-selected")&&t.stopImmediatePropagation()})),e.on("click keyup touchend",(()=>{const t=e.selection.getNode();t&&e.dom.hasClass(t,"mce-preview-object")&&e.dom.getAttrib(t,"data-mce-selected")&&t.setAttribute("data-mce-selected","2")})),e.on("ObjectResized",(t=>{const r=t.target;if(r.getAttribute("data-mce-object")){let o=r.getAttribute("data-mce-html");o&&(o=unescape(o),r.setAttribute("data-mce-html",escape(U(o,{width:String(t.width),height:String(t.height)},!1,e.schema))))}}))})(e),(e=>({showDialog:()=>{re(e)}}))(e))))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/nonbreaking/plugin.min.js b/apps/web-ele/public/tinymce/plugins/nonbreaking/plugin.min.js new file mode 100644 index 000000000..048e6d758 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/nonbreaking/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=n=>e=>typeof e===n,o=e("boolean"),a=e("number"),t=n=>e=>e.options.get(n),i=t("nonbreaking_force_tab"),s=t("nonbreaking_wrap"),r=(n,e)=>{let o="";for(let a=0;a{const o=s(n)||n.plugins.visualchars?`${r(" ",e)}`:r(" ",e);n.undoManager.transact((()=>n.insertContent(o)))};var l=tinymce.util.Tools.resolve("tinymce.util.VK");const u=n=>e=>{const o=()=>{e.setEnabled(n.selection.isEditable())};return n.on("NodeChange",o),o(),()=>{n.off("NodeChange",o)}};n.add("nonbreaking",(n=>{(n=>{const e=n.options.register;e("nonbreaking_force_tab",{processor:n=>o(n)?{value:n?3:0,valid:!0}:a(n)?{value:n,valid:!0}:{valid:!1,message:"Must be a boolean or number."},default:!1}),e("nonbreaking_wrap",{processor:"boolean",default:!0})})(n),(n=>{n.addCommand("mceNonBreaking",(()=>{c(n,1)}))})(n),(n=>{const e=()=>n.execCommand("mceNonBreaking");n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:e,onSetup:u(n)}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:e,onSetup:u(n)})})(n),(n=>{const e=i(n);e>0&&n.on("keydown",(o=>{if(o.keyCode===l.TAB&&!o.isDefaultPrevented()){if(o.shiftKey)return;o.preventDefault(),o.stopImmediatePropagation(),c(n,e)}}))})(n)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/pagebreak/plugin.min.js b/apps/web-ele/public/tinymce/plugins/pagebreak/plugin.min.js new file mode 100644 index 000000000..b49834234 --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/pagebreak/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env");const t=e=>a=>a.options.get(e),n=t("pagebreak_separator"),o=t("pagebreak_split_block"),r="mce-pagebreak",s=e=>{const t=``;return e?`

    ${t}

    `:t},c=e=>a=>{const t=()=>{a.setEnabled(e.selection.isEditable())};return e.on("NodeChange",t),t(),()=>{e.off("NodeChange",t)}};e.add("pagebreak",(e=>{(e=>{const a=e.options.register;a("pagebreak_separator",{processor:"string",default:"\x3c!-- pagebreak --\x3e"}),a("pagebreak_split_block",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mcePageBreak",(()=>{e.insertContent(s(o(e)))}))})(e),(e=>{const a=()=>e.execCommand("mcePageBreak");e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:a,onSetup:c(e)}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:a,onSetup:c(e)})})(e),(e=>{const a=n(e),t=()=>o(e),c=new RegExp(a.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,(e=>"\\"+e)),"gi");e.on("BeforeSetContent",(e=>{e.content=e.content.replace(c,s(t()))})),e.on("PreInit",(()=>{e.serializer.addNodeFilter("img",(n=>{let o,s,c=n.length;for(;c--;)if(o=n[c],s=o.attr("class"),s&&-1!==s.indexOf(r)){const n=o.parent;if(n&&e.schema.getBlockElements()[n.name]&&t()){n.type=3,n.value=a,n.raw=!0,o.remove();continue}o.type=3,o.value=a,o.raw=!0}}))}))})(e),(e=>{e.on("ResolveName",(a=>{"IMG"===a.target.nodeName&&e.dom.hasClass(a.target,r)&&(a.name="pagebreak")}))})(e)}))}(); \ No newline at end of file diff --git a/apps/web-ele/public/tinymce/plugins/preview/plugin.min.js b/apps/web-ele/public/tinymce/plugins/preview/plugin.min.js new file mode 100644 index 000000000..41e98916e --- /dev/null +++ b/apps/web-ele/public/tinymce/plugins/preview/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 7.8.0 (TBD) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>undefined===e;class r{constructor(e,t){this.tag=e,this.value=t}static some(e){return new r(!0,e)}static none(){return r.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?r.some(e(this.value)):r.none()}bind(e){return this.tag?e(this.value):r.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:r.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?r.none():r.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}r.singletonNone=new r(!1);const n=e=>()=>e,s=n(!1),i=(e,t)=>((e,t,n)=>{for(let s=0,i=e.length;sa(0,0),a=(e,t)=>({major:e,minor:t}),c={nu:a,detect:(e,t)=>{const r=String(t).toLowerCase();return 0===e.length?o():((e,t)=>{const r=((e,t)=>{for(let r=0;rNumber(t.replace(r,"$"+e));return a(n(1),n(2))})(e,r)},unknown:o},u=(e,t)=>{const r=String(t).toLowerCase();return i(e,(e=>e.search(r)))},d=(e,r,n=0,s)=>{const i=e.indexOf(r,n);return-1!==i&&(!!t(s)||i+r.length<=s)},l=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,h=e=>t=>d(t,e),m=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>d(e,"edge/")&&d(e,"chrome")&&d(e,"safari")&&d(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,l],search:e=>d(e,"chrome")&&!d(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>d(e,"msie")||d(e,"trident")},{name:"Opera",versionRegexes:[l,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:h("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:h("firefox")},{name:"Safari",versionRegexes:[l,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(d(e,"safari")||d(e,"mobile/"))&&d(e,"applewebkit")}],v=[{name:"Windows",search:h("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>d(e,"iphone")||d(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:h("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:h("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:h("linux"),versionRegexes:[]},{name:"Solaris",search:h("sunos"),versionRegexes:[]},{name:"FreeBSD",search:h("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:h("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],g={browsers:n(m),oses:n(v)},p="Edge",w="Chromium",f="Opera",x="Firefox",S="Safari",y=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isEdge:n(p),isChromium:n(w),isIE:n("IE"),isOpera:n(f),isFirefox:n(x),isSafari:n(S)}},b=()=>y({current:void 0,version:c.unknown()}),O=y,R=(n(p),n(w),n("IE"),n(f),n(x),n(S),"Windows"),C="Android",A="Linux",k="macOS",D="Solaris",E="FreeBSD",I="ChromeOS",P=e=>{const t=e.current,r=e.version,n=e=>()=>t===e;return{current:t,version:r,isWindows:n(R),isiOS:n("iOS"),isAndroid:n(C),isMacOS:n(k),isLinux:n(A),isSolaris:n(D),isFreeBSD:n(E),isChromeOS:n(I)}},T=()=>P({current:void 0,version:c.unknown()}),_=P,B=(n(R),n("iOS"),n(C),n(A),n(k),n(D),n(E),n(I),(e,t,s)=>{const o=g.browsers(),a=g.oses(),d=t.bind((e=>((e,t)=>((e,t)=>{for(let r=0;r{const r=t.brand.toLowerCase();return i(e,(e=>{var t;return r===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:c.nu(parseInt(t.version,10),0)})))})))(o,e))).orThunk((()=>((e,t)=>u(e,t).map((e=>{const r=c.detect(e.versionRegexes,t);return{current:e.name,version:r}})))(o,e))).fold(b,O),l=((e,t)=>u(e,t).map((e=>{const r=c.detect(e.versionRegexes,t);return{current:e.name,version:r}})))(a,e).fold(T,_),h=((e,t,r,s)=>{const i=e.isiOS()&&!0===/ipad/i.test(r),o=e.isiOS()&&!i,a=e.isiOS()||e.isAndroid(),c=a||s("(pointer:coarse)"),u=i||!o&&a&&s("(min-device-width:768px)"),d=o||a&&!u,l=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(r),h=!d&&!u&&!l;return{isiPad:n(i),isiPhone:n(o),isTablet:n(u),isPhone:n(d),isTouch:n(c),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:n(l),isDesktop:n(h)}})(l,d,e,s);return{browser:d,os:l,deviceType:h}}),L=e=>window.matchMedia(e).matches;let N=(e=>{let t,r=!1;return(...n)=>(r||(r=!0,t=e.apply(null,n)),t)})((()=>B(window.navigator.userAgent,r.from(window.navigator.userAgentData),L)));const F=()=>N();var M=tinymce.util.Tools.resolve("tinymce.util.Tools");const $=e=>t=>t.options.get(e),W=$("content_style"),U=$("content_css_cors"),K=$("body_class"),j=$("body_id"),V=e=>{const t=(e=>{var t;let r="";const n=e.dom.encode,s=null!==(t=W(e))&&void 0!==t?t:"";r+=``;const i=U(e)?' crossorigin="anonymous"':"";M.each(e.contentCSS,(t=>{r+='"})),s&&(r+='");const o=j(e),a=K(e),c=e.getBody().dir,u=c?' dir="'+n(c)+'"':"";return""+r+'"+e.getContent()+(()=>{const e=F().os.isMacOS()||F().os.isiOS();return` + + diff --git a/apps/web-ele/src/components/cropper/index.ts b/apps/web-ele/src/components/cropper/index.ts new file mode 100644 index 000000000..43fd89ff3 --- /dev/null +++ b/apps/web-ele/src/components/cropper/index.ts @@ -0,0 +1,3 @@ +export { default as CropperAvatar } from './cropper-avatar.vue'; +export { default as CropperImage } from './cropper.vue'; +export type { CropperType } from './typing'; diff --git a/apps/web-ele/src/components/cropper/typing.ts b/apps/web-ele/src/components/cropper/typing.ts new file mode 100644 index 000000000..f9ba238fd --- /dev/null +++ b/apps/web-ele/src/components/cropper/typing.ts @@ -0,0 +1,68 @@ +import type Cropper from 'cropperjs'; +import type { ButtonProps } from 'element-plus'; + +import type { CSSProperties } from 'vue'; + +export interface apiFunParams { + file: Blob; + filename: string; + name: string; +} + +export interface CropendResult { + imgBase64: string; + imgInfo: Cropper.Data; +} + +export interface CropperProps { + src?: string; + alt?: string; + circled?: boolean; + realTimePreview?: boolean; + height?: number | string; + crossorigin?: '' | 'anonymous' | 'use-credentials' | undefined; + imageStyle?: CSSProperties; + options?: Cropper.Options; +} + +export interface CropperAvatarProps { + width?: number | string; + value?: string; + showBtn?: boolean; + btnProps?: ButtonProps; + btnText?: string; + uploadApi?: (params: apiFunParams) => Promise; + size?: number; +} + +export interface CropperModalProps { + circled?: boolean; + uploadApi?: (params: apiFunParams) => Promise; + src?: string; + size?: number; +} + +export const defaultOptions: Cropper.Options = { + aspectRatio: 1, + zoomable: true, + zoomOnTouch: true, + zoomOnWheel: true, + cropBoxMovable: true, + cropBoxResizable: true, + toggleDragModeOnDblclick: true, + autoCrop: true, + background: true, + highlight: true, + center: true, + responsive: true, + restore: true, + checkCrossOrigin: true, + checkOrientation: true, + scalable: true, + modal: true, + guides: true, + movable: true, + rotatable: true, +}; + +export type { Cropper as CropperType }; diff --git a/apps/web-ele/src/components/description/index.ts b/apps/web-ele/src/components/description/index.ts new file mode 100644 index 000000000..a707c4865 --- /dev/null +++ b/apps/web-ele/src/components/description/index.ts @@ -0,0 +1,3 @@ +export { default as Description } from './description.vue'; +export * from './typing'; +export { useDescription } from './use-description'; diff --git a/apps/web-ele/src/components/dict-tag/index.ts b/apps/web-ele/src/components/dict-tag/index.ts new file mode 100644 index 000000000..881265a39 --- /dev/null +++ b/apps/web-ele/src/components/dict-tag/index.ts @@ -0,0 +1 @@ +export { default as DictTag } from './dict-tag.vue'; diff --git a/apps/web-ele/src/components/form-create/rules/index.ts b/apps/web-ele/src/components/form-create/rules/index.ts new file mode 100644 index 000000000..db306da35 --- /dev/null +++ b/apps/web-ele/src/components/form-create/rules/index.ts @@ -0,0 +1,6 @@ +export { useDictSelectRule } from './use-dict-select'; +export { useEditorRule } from './use-editor-rule'; +export { useSelectRule } from './use-select-rule'; +export { useUploadFileRule } from './use-upload-file-rule'; +export { useUploadImageRule } from './use-upload-image-rule'; +export { useUploadImagesRule } from './use-upload-images-rule'; diff --git a/apps/web-ele/src/components/table-action/index.ts b/apps/web-ele/src/components/table-action/index.ts new file mode 100644 index 000000000..672c0a533 --- /dev/null +++ b/apps/web-ele/src/components/table-action/index.ts @@ -0,0 +1,4 @@ +export * from './icons'; + +export { default as TableAction } from './table-action.vue'; +export * from './typing'; diff --git a/apps/web-ele/src/components/table-action/typing.ts b/apps/web-ele/src/components/table-action/typing.ts new file mode 100644 index 000000000..7d41b1a23 --- /dev/null +++ b/apps/web-ele/src/components/table-action/typing.ts @@ -0,0 +1,36 @@ +import type { ButtonProps } from 'element-plus'; + +export type ButtonType = + | 'danger' + | 'default' + | 'info' + | 'primary' + | 'success' + | 'text' + | 'warning'; + +export interface PopConfirm { + title: string; + okText?: string; + cancelText?: string; + confirm: () => void; + cancel?: () => void; + icon?: string; + disabled?: boolean; +} + +export interface ActionItem extends Partial { + onClick?: () => void; + type?: ButtonType; + label?: string; + color?: 'error' | 'success' | 'warning'; + icon?: string; + popConfirm?: PopConfirm; + disabled?: boolean; + divider?: boolean; + // 权限编码控制是否显示 + auth?: string[]; + // 业务控制是否显示 + ifShow?: ((action: ActionItem) => boolean) | boolean; + tooltip?: string | { [key: string]: any; content?: string }; +} diff --git a/apps/web-ele/src/components/tinymce/helper.ts b/apps/web-ele/src/components/tinymce/helper.ts new file mode 100644 index 000000000..1f98dda46 --- /dev/null +++ b/apps/web-ele/src/components/tinymce/helper.ts @@ -0,0 +1,85 @@ +const validEvents = new Set([ + 'onActivate', + 'onAddUndo', + 'onBeforeAddUndo', + 'onBeforeExecCommand', + 'onBeforeGetContent', + 'onBeforePaste', + 'onBeforeRenderUI', + 'onBeforeSetContent', + 'onBlur', + 'onChange', + 'onClearUndos', + 'onClick', + 'onContextMenu', + 'onCopy', + 'onCut', + 'onDblclick', + 'onDeactivate', + 'onDirty', + 'onDrag', + 'onDragDrop', + 'onDragEnd', + 'onDragGesture', + 'onDragOver', + 'onDrop', + 'onExecCommand', + 'onFocus', + 'onFocusIn', + 'onFocusOut', + 'onGetContent', + 'onHide', + 'onInit', + 'onKeyDown', + 'onKeyPress', + 'onKeyUp', + 'onLoadContent', + 'onMouseDown', + 'onMouseEnter', + 'onMouseLeave', + 'onMouseMove', + 'onMouseOut', + 'onMouseOver', + 'onMouseUp', + 'onNodeChange', + 'onObjectResized', + 'onObjectResizeStart', + 'onObjectSelected', + 'onPaste', + 'onPostProcess', + 'onPostRender', + 'onPreProcess', + 'onProgressState', + 'onRedo', + 'onRemove', + 'onReset', + 'onSaveContent', + 'onSelectionChange', + 'onSetAttrib', + 'onSetContent', + 'onShow', + 'onSubmit', + 'onUndo', + 'onVisualAid', +]); + +const isValidKey = (key: string) => validEvents.has(key); + +export const bindHandlers = ( + initEvent: Event, + listeners: any, + editor: any, +): void => { + Object.keys(listeners) + .filter((element) => isValidKey(element)) + .forEach((key: string) => { + const handler = listeners[key]; + if (typeof handler === 'function') { + if (key === 'onInit') { + handler(initEvent, editor); + } else { + editor.on(key.slice(2), (e: any) => handler(e, editor)); + } + } + }); +}; diff --git a/apps/web-ele/src/components/tinymce/index.ts b/apps/web-ele/src/components/tinymce/index.ts new file mode 100644 index 000000000..c277d781d --- /dev/null +++ b/apps/web-ele/src/components/tinymce/index.ts @@ -0,0 +1 @@ +export { default as Tinymce } from './editor.vue'; diff --git a/apps/web-ele/src/components/tinymce/tinymce.ts b/apps/web-ele/src/components/tinymce/tinymce.ts new file mode 100644 index 000000000..45a867b61 --- /dev/null +++ b/apps/web-ele/src/components/tinymce/tinymce.ts @@ -0,0 +1,17 @@ +// Any plugins you want to setting has to be imported +// Detail plugins list see https://www.tiny.cloud/docs/plugins/ +// Custom builds see https://www.tiny.cloud/download/custom-builds/ +// colorpicker/contextmenu/textcolor plugin is now built in to the core editor, please remove it from your editor configuration + +export const plugins = + 'preview importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help emoticons accordion'; + +// 和 vben2.0 不同,从 https://www.tiny.cloud/ 拷贝 Vue 部分,然后去掉 importword exportword exportpdf | math 部分,并额外增加最后一行(来自 vben2.0 差异的部分) +export const toolbar = + 'undo redo | accordion accordionremove | \\\n' + + ' blocks fontfamily fontsize | bold italic underline strikethrough | \\\n' + + ' align numlist bullist | link image | table media | \\\n' + + ' lineheight outdent indent | forecolor backcolor removeformat | \\\n' + + ' charmap emoticons | code fullscreen preview | save print | \\\n' + + ' pagebreak anchor codesample | ltr rtl | \\\n' + + ' hr searchreplace alignleft aligncenter alignright blockquote subscript superscript'; diff --git a/apps/web-ele/src/components/upload/index.ts b/apps/web-ele/src/components/upload/index.ts new file mode 100644 index 000000000..14e57fede --- /dev/null +++ b/apps/web-ele/src/components/upload/index.ts @@ -0,0 +1,3 @@ +export { default as FileUpload } from './file-upload.vue'; +export { default as ImageUpload } from './image-upload.vue'; +export { default as InputUpload } from './input-upload.vue'; diff --git a/apps/web-ele/src/layouts/index.ts b/apps/web-ele/src/layouts/index.ts new file mode 100644 index 000000000..a43207805 --- /dev/null +++ b/apps/web-ele/src/layouts/index.ts @@ -0,0 +1,6 @@ +const BasicLayout = () => import('./basic.vue'); +const AuthPageLayout = () => import('./auth.vue'); + +const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); + +export { AuthPageLayout, BasicLayout, IFrameView }; diff --git a/apps/web-ele/src/locales/README.md b/apps/web-ele/src/locales/README.md new file mode 100644 index 000000000..7b451032e --- /dev/null +++ b/apps/web-ele/src/locales/README.md @@ -0,0 +1,3 @@ +# locale + +每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。 diff --git a/apps/web-ele/src/locales/index.ts b/apps/web-ele/src/locales/index.ts new file mode 100644 index 000000000..57b87dfdf --- /dev/null +++ b/apps/web-ele/src/locales/index.ts @@ -0,0 +1,102 @@ +import type { Language } from 'element-plus/es/locale'; + +import type { App } from 'vue'; + +import type { LocaleSetupOptions, SupportedLanguagesType } from '@vben/locales'; + +import { ref } from 'vue'; + +import { + $t, + setupI18n as coreSetup, + loadLocalesMapFromDir, +} from '@vben/locales'; +import { preferences } from '@vben/preferences'; + +import dayjs from 'dayjs'; +import enLocale from 'element-plus/es/locale/lang/en'; +import defaultLocale from 'element-plus/es/locale/lang/zh-cn'; + +const elementLocale = ref(defaultLocale); + +const modules = import.meta.glob('./langs/**/*.json'); + +const localesMap = loadLocalesMapFromDir( + /\.\/langs\/([^/]+)\/(.*)\.json$/, + modules, +); +/** + * 加载应用特有的语言包 + * 这里也可以改造为从服务端获取翻译数据 + * @param lang + */ +async function loadMessages(lang: SupportedLanguagesType) { + const [appLocaleMessages] = await Promise.all([ + localesMap[lang]?.(), + loadThirdPartyMessage(lang), + ]); + return appLocaleMessages?.default; +} + +/** + * 加载第三方组件库的语言包 + * @param lang + */ +async function loadThirdPartyMessage(lang: SupportedLanguagesType) { + await Promise.all([loadElementLocale(lang), loadDayjsLocale(lang)]); +} + +/** + * 加载dayjs的语言包 + * @param lang + */ +async function loadDayjsLocale(lang: SupportedLanguagesType) { + let locale; + switch (lang) { + case 'en-US': { + locale = await import('dayjs/locale/en'); + break; + } + case 'zh-CN': { + locale = await import('dayjs/locale/zh-cn'); + break; + } + // 默认使用英语 + default: { + locale = await import('dayjs/locale/en'); + } + } + if (locale) { + dayjs.locale(locale); + } else { + console.error(`Failed to load dayjs locale for ${lang}`); + } +} + +/** + * 加载element-plus的语言包 + * @param lang + */ +async function loadElementLocale(lang: SupportedLanguagesType) { + switch (lang) { + case 'en-US': { + elementLocale.value = enLocale; + break; + } + case 'zh-CN': { + elementLocale.value = defaultLocale; + break; + } + } +} + +async function setupI18n(app: App, options: LocaleSetupOptions = {}) { + await coreSetup(app, { + defaultLocale: preferences.app.locale, + loadMessages, + missingWarn: !import.meta.env.PROD, + ...options, + }); +} + +export { $t, elementLocale, setupI18n }; diff --git a/apps/web-ele/src/locales/langs/en-US/utils.json b/apps/web-ele/src/locales/langs/en-US/utils.json new file mode 100644 index 000000000..b9206eff9 --- /dev/null +++ b/apps/web-ele/src/locales/langs/en-US/utils.json @@ -0,0 +1,14 @@ +{ + "rangePicker": { + "today": "Today", + "last7Days": "Last 7 Days", + "last30Days": "Last 30 Days", + "yesterday": "Yesterday", + "thisWeek": "This Week", + "thisMonth": "This Month", + "lastWeek": "Last Week", + "lastMonth": "Last Month", + "beginTime": "Begin Time", + "endTime": "End Time" + } +} diff --git a/apps/web-ele/src/locales/langs/zh-CN/utils.json b/apps/web-ele/src/locales/langs/zh-CN/utils.json new file mode 100644 index 000000000..d26f1f2cf --- /dev/null +++ b/apps/web-ele/src/locales/langs/zh-CN/utils.json @@ -0,0 +1,14 @@ +{ + "rangePicker": { + "today": "今天", + "last7Days": "最近 7 天", + "last30Days": "最近 30 天", + "yesterday": "昨天", + "thisWeek": "本周", + "thisMonth": "本月", + "lastWeek": "上周", + "lastMonth": "上月", + "beginTime": "开始时间", + "endTime": "结束时间" + } +} diff --git a/apps/web-ele/src/main.ts b/apps/web-ele/src/main.ts new file mode 100644 index 000000000..5d728a02a --- /dev/null +++ b/apps/web-ele/src/main.ts @@ -0,0 +1,31 @@ +import { initPreferences } from '@vben/preferences'; +import { unmountGlobalLoading } from '@vben/utils'; + +import { overridesPreferences } from './preferences'; + +/** + * 应用初始化完成之后再进行页面加载渲染 + */ +async function initApplication() { + // name用于指定项目唯一标识 + // 用于区分不同项目的偏好设置以及存储数据的key前缀以及其他一些需要隔离的数据 + const env = import.meta.env.PROD ? 'prod' : 'dev'; + const appVersion = import.meta.env.VITE_APP_VERSION; + const namespace = `${import.meta.env.VITE_APP_NAMESPACE}-${appVersion}-${env}`; + + // app偏好设置初始化 + await initPreferences({ + namespace, + overrides: overridesPreferences, + }); + + // 启动应用并挂载 + // vue应用主要逻辑及视图 + const { bootstrap } = await import('./bootstrap'); + await bootstrap(namespace); + + // 移除并销毁loading + unmountGlobalLoading(); +} + +initApplication(); diff --git a/apps/web-ele/src/plugins/form-create/index.ts b/apps/web-ele/src/plugins/form-create/index.ts new file mode 100644 index 000000000..f4578b4f2 --- /dev/null +++ b/apps/web-ele/src/plugins/form-create/index.ts @@ -0,0 +1,103 @@ +import type { App, Component } from 'vue'; + +import FcDesigner from '@form-create/designer'; +import formCreate from '@form-create/element-ui'; +import install from '@form-create/element-ui/auto-import'; +// 👇使用 form-create 需额外全局引入 element plus 组件 +import { + ElAlert, + ElAside, + ElBadge, + ElCard, + ElCollapse, + ElCollapseItem, + ElContainer, + ElDivider, + ElDropdown, + ElDropdownItem, + ElDropdownMenu, + ElFooter, + ElHeader, + ElMain, + ElMenu, + ElMenuItem, + ElMessage, + ElPopconfirm, + ElTable, + ElTableColumn, + ElTabPane, + ElTabs, + ElTag, + ElText, + ElTransfer, +} from 'element-plus'; + +// ======================= 自定义组件 ======================= +import { useApiSelect } from '#/components/form-create'; +import DictSelect from '#/components/form-create/components/dict-select.vue'; +import { useImagesUpload } from '#/components/form-create/components/use-images-upload'; +import { Tinymce } from '#/components/tinymce'; +import { FileUpload, ImageUpload } from '#/components/upload'; + +const UserSelect = useApiSelect({ + name: 'UserSelect', + labelField: 'nickname', + valueField: 'id', + url: '/system/user/simple-list', +}); +const DeptSelect = useApiSelect({ + name: 'DeptSelect', + labelField: 'name', + valueField: 'id', + url: '/system/dept/simple-list', +}); +const ApiSelect = useApiSelect({ + name: 'ApiSelect', +}); +const ImagesUpload = useImagesUpload(); + +const components = [ + ImageUpload, + ImagesUpload, + FileUpload, + Tinymce, + DictSelect, + UserSelect, + DeptSelect, + ApiSelect, + ElAlert, + ElTransfer, + ElAside, + ElContainer, + ElDivider, + ElHeader, + ElMain, + ElPopconfirm, + ElTable, + ElTableColumn, + ElTabPane, + ElTabs, + ElDropdown, + ElDropdownMenu, + ElDropdownItem, + ElBadge, + ElTag, + ElText, + ElMenu, + ElMenuItem, + ElFooter, + ElMessage, + ElCollapse, + ElCollapseItem, + ElCard, +]; + +// 参考 http://www.form-create.com/v3/element-ui/auto-import.html 文档 +export const setupFormCreate = (app: App) => { + components.forEach((component) => { + app.component(component.name as string, component as Component); + }); + formCreate.use(install); + app.use(formCreate); + app.use(FcDesigner); +}; diff --git a/apps/web-ele/src/preferences.ts b/apps/web-ele/src/preferences.ts new file mode 100644 index 000000000..73eb135cb --- /dev/null +++ b/apps/web-ele/src/preferences.ts @@ -0,0 +1,25 @@ +import { defineOverridesPreferences } from '@vben/preferences'; + +/** + * @description 项目配置文件 + * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置 + * !!! 更改配置后请清空缓存,否则可能不生效 + */ +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + /** 后端路由模式 */ + accessMode: 'backend', + name: import.meta.env.VITE_APP_TITLE, + enableRefreshToken: true, + }, + footer: { + /** 默认关闭 footer 页脚,因为有一定遮挡 */ + enable: false, + fixed: false, + }, + copyright: { + companyName: import.meta.env.VITE_APP_TITLE, + companySiteLink: 'https://gitee.com/yudaocode/yudao-ui-admin-vben', + }, +}); diff --git a/apps/web-ele/src/router/access.ts b/apps/web-ele/src/router/access.ts new file mode 100644 index 000000000..c4b161a5d --- /dev/null +++ b/apps/web-ele/src/router/access.ts @@ -0,0 +1,41 @@ +import type { + AppRouteRecordRaw, + ComponentRecordType, + GenerateMenuAndRoutesOptions, +} from '@vben/types'; + +import { generateAccessible } from '@vben/access'; +import { preferences } from '@vben/preferences'; +import { useAccessStore } from '@vben/stores'; +import { convertServerMenuToRouteRecordStringComponent } from '@vben/utils'; + +import { BasicLayout, IFrameView } from '#/layouts'; + +const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue'); + +async function generateAccess(options: GenerateMenuAndRoutesOptions) { + const pageMap: ComponentRecordType = import.meta.glob('../views/**/*.vue'); + const accessStore = useAccessStore(); + + const layoutMap: ComponentRecordType = { + BasicLayout, + IFrameView, + }; + + return await generateAccessible(preferences.app.accessMode, { + ...options, + fetchMenuListAsync: async () => { + // 由于 yudao 通过 accessStore 读取,所以不在进行 message.loading 提示 + // 补充说明:accessStore.accessMenus 一开始是 AppRouteRecordRaw 类型(后端加载),后面被赋值成 MenuRecordRaw 类型(前端转换) + const accessMenus = accessStore.accessMenus as AppRouteRecordRaw[]; + return convertServerMenuToRouteRecordStringComponent(accessMenus); + }, + // 可以指定没有权限跳转403页面 + forbiddenComponent, + // 如果 route.meta.menuVisibleWithForbidden = true + layoutMap, + pageMap, + }); +} + +export { generateAccess }; diff --git a/apps/web-ele/src/router/index.ts b/apps/web-ele/src/router/index.ts new file mode 100644 index 000000000..5acec55ea --- /dev/null +++ b/apps/web-ele/src/router/index.ts @@ -0,0 +1,40 @@ +import { + createRouter, + createWebHashHistory, + createWebHistory, +} from 'vue-router'; + +import { resetStaticRoutes } from '@vben/utils'; + +import { createRouterGuard } from './guard'; +import { routes } from './routes'; +import { setupBaiduTongJi } from './tongji'; + +/** + * @zh_CN 创建vue-router实例 + */ +const router = createRouter({ + history: + import.meta.env.VITE_ROUTER_HISTORY === 'hash' + ? createWebHashHistory(import.meta.env.VITE_BASE) + : createWebHistory(import.meta.env.VITE_BASE), + // 应该添加到路由的初始路由列表。 + routes, + scrollBehavior: (to, _from, savedPosition) => { + if (savedPosition) { + return savedPosition; + } + return to.hash ? { behavior: 'smooth', el: to.hash } : { left: 0, top: 0 }; + }, + // 是否应该禁止尾部斜杠。 + // strict: true, +}); + +const resetRoutes = () => resetStaticRoutes(router, routes); + +// 创建路由守卫 +createRouterGuard(router); +// 设置百度统计 +setupBaiduTongJi(router); + +export { resetRoutes, router }; diff --git a/apps/web-ele/src/router/routes/core.ts b/apps/web-ele/src/router/routes/core.ts new file mode 100644 index 000000000..22fd0017c --- /dev/null +++ b/apps/web-ele/src/router/routes/core.ts @@ -0,0 +1,114 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { LOGIN_PATH } from '@vben/constants'; +import { preferences } from '@vben/preferences'; + +import { $t } from '#/locales'; + +const BasicLayout = () => import('#/layouts/basic.vue'); +const AuthPageLayout = () => import('#/layouts/auth.vue'); +/** 全局404页面 */ +const fallbackNotFoundRoute: RouteRecordRaw = { + component: () => import('#/views/_core/fallback/not-found.vue'), + meta: { + hideInBreadcrumb: true, + hideInMenu: true, + hideInTab: true, + title: '404', + }, + name: 'FallbackNotFound', + path: '/:path(.*)*', +}; + +/** 基本路由,这些路由是必须存在的 */ +const coreRoutes: RouteRecordRaw[] = [ + /** + * 根路由 + * 使用基础布局,作为所有页面的父级容器,子级就不必配置BasicLayout。 + * 此路由必须存在,且不应修改 + */ + { + component: BasicLayout, + meta: { + hideInBreadcrumb: true, + title: 'Root', + }, + name: 'Root', + path: '/', + redirect: preferences.app.defaultHomePath, + children: [], + }, + { + component: AuthPageLayout, + meta: { + hideInTab: true, + title: 'Authentication', + }, + name: 'Authentication', + path: '/auth', + redirect: LOGIN_PATH, + children: [ + { + name: 'Login', + path: 'login', + component: () => import('#/views/_core/authentication/login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + { + name: 'CodeLogin', + path: 'code-login', + component: () => import('#/views/_core/authentication/code-login.vue'), + meta: { + title: $t('page.auth.codeLogin'), + }, + }, + { + name: 'QrCodeLogin', + path: 'qrcode-login', + component: () => + import('#/views/_core/authentication/qrcode-login.vue'), + meta: { + title: $t('page.auth.qrcodeLogin'), + }, + }, + { + name: 'ForgetPassword', + path: 'forget-password', + component: () => + import('#/views/_core/authentication/forget-password.vue'), + meta: { + title: $t('page.auth.forgetPassword'), + }, + }, + { + name: 'Register', + path: 'register', + component: () => import('#/views/_core/authentication/register.vue'), + meta: { + title: $t('page.auth.register'), + }, + }, + { + name: 'SocialLogin', + path: 'social-login', + component: () => + import('#/views/_core/authentication/social-login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + { + name: 'SSOLogin', + path: 'sso-login', + component: () => import('#/views/_core/authentication/sso-login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + ], + }, +]; + +export { coreRoutes, fallbackNotFoundRoute }; diff --git a/apps/web-ele/src/router/routes/index.ts b/apps/web-ele/src/router/routes/index.ts new file mode 100644 index 000000000..738f9d3d9 --- /dev/null +++ b/apps/web-ele/src/router/routes/index.ts @@ -0,0 +1,47 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { mergeRouteModules, traverseTreeValues } from '@vben/utils'; + +import { coreRoutes, fallbackNotFoundRoute } from './core'; + +const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', { + eager: true, +}); + +// 有需要可以自行打开注释,并创建文件夹 +// const externalRouteFiles = import.meta.glob('./external/**/*.ts', { eager: true }); +// const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true }); + +/** 动态路由 */ +const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles); + +/** 外部路由列表,访问这些页面可以不需要Layout,可能用于内嵌在别的系统(不会显示在菜单中) */ +// const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles); +// const staticRoutes: RouteRecordRaw[] = mergeRouteModules(staticRouteFiles); +const staticRoutes: RouteRecordRaw[] = []; +const externalRoutes: RouteRecordRaw[] = []; + +/** 路由列表,由基本路由、外部路由和404兜底路由组成 + * 无需走权限验证(会一直显示在菜单中) */ +const routes: RouteRecordRaw[] = [ + ...coreRoutes, + ...externalRoutes, + fallbackNotFoundRoute, +]; + +/** 基本路由列表,这些路由不需要进入权限拦截 */ +const coreRouteNames = traverseTreeValues(coreRoutes, (route) => route.name); + +/** 有权限校验的路由列表,包含动态路由和静态路由 */ +const accessRoutes = [...dynamicRoutes, ...staticRoutes]; + +// add by 芋艿:from https://github.com/vbenjs/vue-vben-admin/blob/main/playground/src/router/routes/index.ts#L38-L45 +const componentKeys: string[] = Object.keys( + import.meta.glob('../../views/**/*.vue'), +) + .filter((item) => !item.includes('/modules/')) + .map((v) => { + const path = v.replace('../../views/', '/'); + return path.endsWith('.vue') ? path.slice(0, -4) : path; + }); +export { accessRoutes, componentKeys, coreRouteNames, routes }; diff --git a/apps/web-ele/src/router/routes/modules/dashboard.ts b/apps/web-ele/src/router/routes/modules/dashboard.ts new file mode 100644 index 000000000..2cccc8115 --- /dev/null +++ b/apps/web-ele/src/router/routes/modules/dashboard.ts @@ -0,0 +1,48 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { $t } from '#/locales'; + +const routes: RouteRecordRaw[] = [ + { + meta: { + icon: 'lucide:layout-dashboard', + order: -1, + title: $t('page.dashboard.title'), + }, + name: 'Dashboard', + path: '/dashboard', + children: [ + { + name: 'Workspace', + path: '/workspace', + component: () => import('#/views/dashboard/workspace/index.vue'), + meta: { + icon: 'carbon:workspace', + title: $t('page.dashboard.workspace'), + }, + }, + { + name: 'Analytics', + path: '/analytics', + component: () => import('#/views/dashboard/analytics/index.vue'), + meta: { + affixTab: true, + icon: 'lucide:area-chart', + title: $t('page.dashboard.analytics'), + }, + }, + ], + }, + { + name: 'Profile', + path: '/profile', + component: () => import('#/views/_core/profile/index.vue'), + meta: { + icon: 'ant-design:profile-outlined', + title: $t('ui.widgets.profile'), + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-ele/src/router/routes/modules/pay.ts b/apps/web-ele/src/router/routes/modules/pay.ts new file mode 100644 index 000000000..f7711fcdf --- /dev/null +++ b/apps/web-ele/src/router/routes/modules/pay.ts @@ -0,0 +1,16 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/pay/cashier', + component: () => import('#/views/pay/cashier/index.vue'), + name: 'PayCashier', + meta: { + title: '收银台', + icon: 'lucide:badge-japanese-yen', + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-ele/src/router/routes/modules/system.ts b/apps/web-ele/src/router/routes/modules/system.ts new file mode 100644 index 000000000..47e6b1682 --- /dev/null +++ b/apps/web-ele/src/router/routes/modules/system.ts @@ -0,0 +1,16 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/system/notify-message', + component: () => import('#/views/system/notify/my/index.vue'), + name: 'MyNotifyMessage', + meta: { + title: '我的站内信', + icon: 'ant-design:message-filled', + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-ele/src/router/tongji.ts b/apps/web-ele/src/router/tongji.ts new file mode 100644 index 000000000..0aa3715a4 --- /dev/null +++ b/apps/web-ele/src/router/tongji.ts @@ -0,0 +1,30 @@ +import type { Router } from 'vue-router'; + +declare global { + interface Window { + _hmt: any[]; + } +} + +const HM_ID = import.meta.env.VITE_APP_BAIDU_CODE; + +/** + * 设置百度统计 + * @param router + */ +function setupBaiduTongJi(router: Router) { + // 如果没有配置百度统计的 ID,则不进行设置 + if (!HM_ID) { + return; + } + + // _hmt:用于 router push + window._hmt = window._hmt || []; + + router.afterEach((to) => { + // 添加到 _hmt 中 + window._hmt.push(['_trackPageview', to.fullPath]); + }); +} + +export { setupBaiduTongJi }; diff --git a/apps/web-ele/src/store/auth.ts b/apps/web-ele/src/store/auth.ts new file mode 100644 index 000000000..74cd5a913 --- /dev/null +++ b/apps/web-ele/src/store/auth.ts @@ -0,0 +1,157 @@ +import type { AuthPermissionInfo, Recordable, UserInfo } from '@vben/types'; + +import type { AuthApi } from '#/api'; + +import { ref } from 'vue'; +import { useRouter } from 'vue-router'; + +import { LOGIN_PATH } from '@vben/constants'; +import { preferences } from '@vben/preferences'; +import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores'; + +import { ElNotification } from 'element-plus'; +import { defineStore } from 'pinia'; + +import { + getAuthPermissionInfoApi, + loginApi, + logoutApi, + register, + smsLogin, + socialLogin, +} from '#/api'; +import { $t } from '#/locales'; + +export const useAuthStore = defineStore('auth', () => { + const accessStore = useAccessStore(); + const userStore = useUserStore(); + const router = useRouter(); + + const loginLoading = ref(false); + + /** + * 异步处理登录操作 + * Asynchronously handle the login process + * @param type 登录类型 + * @param params 登录表单数据 + * @param onSuccess 登录成功后的回调函数 + */ + async function authLogin( + type: 'mobile' | 'register' | 'social' | 'username', + params: Recordable, + onSuccess?: () => Promise | void, + ) { + // 异步处理用户登录操作并获取 accessToken + let userInfo: null | UserInfo = null; + try { + let loginResult: AuthApi.LoginResult; + loginLoading.value = true; + switch (type) { + case 'mobile': { + loginResult = await smsLogin(params as AuthApi.SmsLoginParams); + break; + } + case 'register': { + loginResult = await register(params as AuthApi.RegisterParams); + break; + } + case 'social': { + loginResult = await socialLogin(params as AuthApi.SocialLoginParams); + break; + } + default: { + loginResult = await loginApi(params); + } + } + const { accessToken, refreshToken } = loginResult; + + // 如果成功获取到 accessToken + if (accessToken) { + accessStore.setAccessToken(accessToken); + accessStore.setRefreshToken(refreshToken); + + // 获取用户信息并存储到 userStore、accessStore 中 + // TODO @芋艿:清理掉 accessCodes 相关的逻辑 + // const [fetchUserInfoResult, accessCodes] = await Promise.all([ + // fetchUserInfo(), + // // getAccessCodesApi(), + // ]); + const fetchUserInfoResult = await fetchUserInfo(); + + userInfo = fetchUserInfoResult.user; + + if (accessStore.loginExpired) { + accessStore.setLoginExpired(false); + } else { + onSuccess + ? await onSuccess?.() + : await router.push( + userInfo.homePath || preferences.app.defaultHomePath, + ); + } + + if (userInfo?.nickname) { + ElNotification.success({ + message: `${$t('authentication.loginSuccessDesc')}:${userInfo?.nickname}`, + duration: 3, + title: $t('authentication.loginSuccess'), + }); + } + } + } finally { + loginLoading.value = false; + } + + return { + userInfo, + }; + } + + async function logout(redirect: boolean = true) { + try { + const accessToken = accessStore.accessToken as string; + if (accessToken) { + await logoutApi(accessToken); + } + } catch { + // 不做任何处理 + } + resetAllStores(); + accessStore.setLoginExpired(false); + + // 回登录页带上当前路由地址 + await router.replace({ + path: LOGIN_PATH, + query: redirect + ? { + redirect: encodeURIComponent(router.currentRoute.value.fullPath), + } + : {}, + }); + } + + async function fetchUserInfo() { + // 加载 + const authPermissionInfo: AuthPermissionInfo | null = + await getAuthPermissionInfoApi(); + // userStore + userStore.setUserInfo(authPermissionInfo.user); + userStore.setUserRoles(authPermissionInfo.roles); + // accessStore + accessStore.setAccessMenus(authPermissionInfo.menus); + accessStore.setAccessCodes(authPermissionInfo.permissions); + return authPermissionInfo; + } + + function $reset() { + loginLoading.value = false; + } + + return { + $reset, + authLogin, + fetchUserInfo, + loginLoading, + logout, + }; +}); diff --git a/apps/web-ele/src/views/_core/README.md b/apps/web-ele/src/views/_core/README.md new file mode 100644 index 000000000..8248afe6c --- /dev/null +++ b/apps/web-ele/src/views/_core/README.md @@ -0,0 +1,3 @@ +# \_core + +此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。 diff --git a/apps/web-ele/src/views/_core/about/index.vue b/apps/web-ele/src/views/_core/about/index.vue new file mode 100644 index 000000000..0ee524335 --- /dev/null +++ b/apps/web-ele/src/views/_core/about/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-ele/src/views/_core/authentication/code-login.vue b/apps/web-ele/src/views/_core/authentication/code-login.vue new file mode 100644 index 000000000..62b6ef2a1 --- /dev/null +++ b/apps/web-ele/src/views/_core/authentication/code-login.vue @@ -0,0 +1,173 @@ + + + diff --git a/apps/web-ele/src/views/_core/authentication/forget-password.vue b/apps/web-ele/src/views/_core/authentication/forget-password.vue new file mode 100644 index 000000000..ab1614408 --- /dev/null +++ b/apps/web-ele/src/views/_core/authentication/forget-password.vue @@ -0,0 +1,216 @@ + + + diff --git a/apps/web-ele/src/views/_core/authentication/login.vue b/apps/web-ele/src/views/_core/authentication/login.vue new file mode 100644 index 000000000..aa1db4c53 --- /dev/null +++ b/apps/web-ele/src/views/_core/authentication/login.vue @@ -0,0 +1,192 @@ + + + diff --git a/apps/web-ele/src/views/_core/authentication/qrcode-login.vue b/apps/web-ele/src/views/_core/authentication/qrcode-login.vue new file mode 100644 index 000000000..23f5f2dad --- /dev/null +++ b/apps/web-ele/src/views/_core/authentication/qrcode-login.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/web-ele/src/views/_core/authentication/register.vue b/apps/web-ele/src/views/_core/authentication/register.vue new file mode 100644 index 000000000..734f4c27d --- /dev/null +++ b/apps/web-ele/src/views/_core/authentication/register.vue @@ -0,0 +1,221 @@ + + + diff --git a/apps/web-ele/src/views/_core/authentication/social-login.vue b/apps/web-ele/src/views/_core/authentication/social-login.vue new file mode 100644 index 000000000..1052a9a18 --- /dev/null +++ b/apps/web-ele/src/views/_core/authentication/social-login.vue @@ -0,0 +1,210 @@ + + + diff --git a/apps/web-ele/src/views/_core/fallback/coming-soon.vue b/apps/web-ele/src/views/_core/fallback/coming-soon.vue new file mode 100644 index 000000000..f394930f2 --- /dev/null +++ b/apps/web-ele/src/views/_core/fallback/coming-soon.vue @@ -0,0 +1,7 @@ + + + diff --git a/apps/web-ele/src/views/_core/fallback/forbidden.vue b/apps/web-ele/src/views/_core/fallback/forbidden.vue new file mode 100644 index 000000000..8ea65fedb --- /dev/null +++ b/apps/web-ele/src/views/_core/fallback/forbidden.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-ele/src/views/_core/fallback/internal-error.vue b/apps/web-ele/src/views/_core/fallback/internal-error.vue new file mode 100644 index 000000000..819a47d5e --- /dev/null +++ b/apps/web-ele/src/views/_core/fallback/internal-error.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-ele/src/views/_core/fallback/not-found.vue b/apps/web-ele/src/views/_core/fallback/not-found.vue new file mode 100644 index 000000000..4d178e9cb --- /dev/null +++ b/apps/web-ele/src/views/_core/fallback/not-found.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-ele/src/views/_core/fallback/offline.vue b/apps/web-ele/src/views/_core/fallback/offline.vue new file mode 100644 index 000000000..5de4a88de --- /dev/null +++ b/apps/web-ele/src/views/_core/fallback/offline.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-ele/src/views/_core/profile/index.vue b/apps/web-ele/src/views/_core/profile/index.vue new file mode 100644 index 000000000..98b7b3f36 --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/index.vue @@ -0,0 +1,65 @@ + + + diff --git a/apps/web-ele/src/views/_core/profile/modules/profile-user.vue b/apps/web-ele/src/views/_core/profile/modules/profile-user.vue new file mode 100644 index 000000000..675bb131c --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/modules/profile-user.vue @@ -0,0 +1,145 @@ + + + diff --git a/apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue b/apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue new file mode 100644 index 000000000..e4e43978e --- /dev/null +++ b/apps/web-ele/src/views/_core/profile/modules/reset-pwd.vue @@ -0,0 +1,106 @@ + + + diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-trends.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-trends.vue new file mode 100644 index 000000000..f1f0b232a --- /dev/null +++ b/apps/web-ele/src/views/dashboard/analytics/analytics-trends.vue @@ -0,0 +1,98 @@ + + + diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-data.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-data.vue new file mode 100644 index 000000000..190fb41f4 --- /dev/null +++ b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-data.vue @@ -0,0 +1,82 @@ + + + diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits-source.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-source.vue new file mode 100644 index 000000000..0915c7af7 --- /dev/null +++ b/apps/web-ele/src/views/dashboard/analytics/analytics-visits-source.vue @@ -0,0 +1,65 @@ + + + diff --git a/apps/web-ele/src/views/dashboard/analytics/analytics-visits.vue b/apps/web-ele/src/views/dashboard/analytics/analytics-visits.vue new file mode 100644 index 000000000..7e0f10133 --- /dev/null +++ b/apps/web-ele/src/views/dashboard/analytics/analytics-visits.vue @@ -0,0 +1,55 @@ + + + diff --git a/apps/web-ele/src/views/dashboard/analytics/index.vue b/apps/web-ele/src/views/dashboard/analytics/index.vue new file mode 100644 index 000000000..5e3d6d285 --- /dev/null +++ b/apps/web-ele/src/views/dashboard/analytics/index.vue @@ -0,0 +1,90 @@ + + + diff --git a/apps/web-ele/src/views/infra/codegen/modules/basic-info.vue b/apps/web-ele/src/views/infra/codegen/modules/basic-info.vue new file mode 100644 index 000000000..00c49911b --- /dev/null +++ b/apps/web-ele/src/views/infra/codegen/modules/basic-info.vue @@ -0,0 +1,45 @@ + + diff --git a/apps/web-ele/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue b/apps/web-ele/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue new file mode 100644 index 000000000..3e2854608 --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/demo03/inner/modules/demo03-grade-form.vue @@ -0,0 +1,51 @@ + + + diff --git a/apps/web-ele/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue b/apps/web-ele/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue new file mode 100644 index 000000000..5d5f396bf --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/demo03/normal/modules/demo03-grade-form.vue @@ -0,0 +1,51 @@ + + + diff --git a/apps/web-ele/src/views/infra/demo/general/demo02/modules/form.vue b/apps/web-ele/src/views/infra/demo/general/demo02/modules/form.vue new file mode 100644 index 000000000..e7743ec72 --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/general/demo02/modules/form.vue @@ -0,0 +1,138 @@ + + + diff --git a/apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-course-form.vue b/apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-course-form.vue new file mode 100644 index 000000000..dbabbae53 --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-course-form.vue @@ -0,0 +1,114 @@ + + + diff --git a/apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-grade-form.vue b/apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-grade-form.vue new file mode 100644 index 000000000..62c5a787b --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/general/demo03/erp/modules/demo03-grade-form.vue @@ -0,0 +1,114 @@ + + + diff --git a/apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-course-form.vue b/apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-course-form.vue new file mode 100644 index 000000000..06cea78e3 --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-course-form.vue @@ -0,0 +1,95 @@ + + + diff --git a/apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue b/apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue new file mode 100644 index 000000000..c399fc3a1 --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/general/demo03/inner/modules/demo03-grade-form.vue @@ -0,0 +1,67 @@ + + + diff --git a/apps/web-ele/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue b/apps/web-ele/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue new file mode 100644 index 000000000..9357c6874 --- /dev/null +++ b/apps/web-ele/src/views/infra/demo/general/demo03/normal/modules/demo03-grade-form.vue @@ -0,0 +1,67 @@ + + + diff --git a/apps/web-ele/src/views/mall/promotion/bargain/record/index.vue b/apps/web-ele/src/views/mall/promotion/bargain/record/index.vue new file mode 100644 index 000000000..fee556aec --- /dev/null +++ b/apps/web-ele/src/views/mall/promotion/bargain/record/index.vue @@ -0,0 +1,84 @@ + + + diff --git a/apps/web-ele/src/views/mall/promotion/bargain/record/modules/list.vue b/apps/web-ele/src/views/mall/promotion/bargain/record/modules/list.vue new file mode 100644 index 000000000..49223d5d6 --- /dev/null +++ b/apps/web-ele/src/views/mall/promotion/bargain/record/modules/list.vue @@ -0,0 +1,67 @@ + + + diff --git a/apps/web-ele/src/views/mall/promotion/combination/record/index.vue b/apps/web-ele/src/views/mall/promotion/combination/record/index.vue new file mode 100644 index 000000000..24b4a3edf --- /dev/null +++ b/apps/web-ele/src/views/mall/promotion/combination/record/index.vue @@ -0,0 +1,82 @@ + + + diff --git a/apps/web-ele/src/views/mall/promotion/combination/record/modules/list.vue b/apps/web-ele/src/views/mall/promotion/combination/record/modules/list.vue new file mode 100644 index 000000000..459cd34d3 --- /dev/null +++ b/apps/web-ele/src/views/mall/promotion/combination/record/modules/list.vue @@ -0,0 +1,63 @@ + + + diff --git a/apps/web-ele/src/views/mall/promotion/seckill/activity/formatter.ts b/apps/web-ele/src/views/mall/promotion/seckill/activity/formatter.ts new file mode 100644 index 000000000..db1bce54d --- /dev/null +++ b/apps/web-ele/src/views/mall/promotion/seckill/activity/formatter.ts @@ -0,0 +1,34 @@ +import { formatDate } from '@vben/utils'; + +// 全局变量,用于存储配置列表 +let configList: any[] = []; + +/** 设置配置列表 */ +export function setConfigList(list: any[]) { + configList = list; +} + +/** 格式化配置名称 */ +export function formatConfigNames(configId: number): string { + const config = configList.find((item) => item.id === configId); + return config === null || config === undefined + ? '' + : `${config.name}[${config.startTime} ~ ${config.endTime}]`; +} + +/** 格式化秒杀价格 */ +export function formatSeckillPrice(products: any[]): string { + if (!products || products.length === 0) { + return '¥0.00'; + } + const seckillPrice = Math.min(...products.map((item) => item.seckillPrice)); + return `¥${(seckillPrice / 100).toFixed(2)}`; +} + +/** 格式化活动时间范围 */ +export function formatTimeRange( + startTime: Date | string, + endTime: Date | string, +): string { + return `${formatDate(startTime, 'YYYY-MM-DD')} ~ ${formatDate(endTime, 'YYYY-MM-DD')}`; +} diff --git a/apps/web-ele/src/views/system/area/modules/form.vue b/apps/web-ele/src/views/system/area/modules/form.vue new file mode 100644 index 000000000..5bce43cfb --- /dev/null +++ b/apps/web-ele/src/views/system/area/modules/form.vue @@ -0,0 +1,50 @@ + + + diff --git a/apps/web-ele/src/views/system/sms/template/modules/form.vue b/apps/web-ele/src/views/system/sms/template/modules/form.vue new file mode 100644 index 000000000..25aea86a3 --- /dev/null +++ b/apps/web-ele/src/views/system/sms/template/modules/form.vue @@ -0,0 +1,89 @@ + + + diff --git a/apps/web-ele/src/views/system/user/modules/reset-password-form.vue b/apps/web-ele/src/views/system/user/modules/reset-password-form.vue new file mode 100644 index 000000000..bd6ef27f2 --- /dev/null +++ b/apps/web-ele/src/views/system/user/modules/reset-password-form.vue @@ -0,0 +1,66 @@ + + + diff --git a/apps/web-ele/tailwind.config.mjs b/apps/web-ele/tailwind.config.mjs new file mode 100644 index 000000000..f17f556fa --- /dev/null +++ b/apps/web-ele/tailwind.config.mjs @@ -0,0 +1 @@ +export { default } from '@vben/tailwind-config'; diff --git a/apps/web-ele/tsconfig.json b/apps/web-ele/tsconfig.json new file mode 100644 index 000000000..02c287fe6 --- /dev/null +++ b/apps/web-ele/tsconfig.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/web-app.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "#/*": ["./src/*"] + } + }, + "references": [{ "path": "./tsconfig.node.json" }], + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/apps/web-ele/tsconfig.node.json b/apps/web-ele/tsconfig.node.json new file mode 100644 index 000000000..c2f0d86cc --- /dev/null +++ b/apps/web-ele/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/node.json", + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "noEmit": false + }, + "include": ["vite.config.mts"] +} diff --git a/apps/web-ele/vite.config.mts b/apps/web-ele/vite.config.mts new file mode 100644 index 000000000..8a36bcb78 --- /dev/null +++ b/apps/web-ele/vite.config.mts @@ -0,0 +1,27 @@ +import { defineConfig } from '@vben/vite-config'; + +import ElementPlus from 'unplugin-element-plus/vite'; + +export default defineConfig(async () => { + return { + application: {}, + vite: { + plugins: [ + ElementPlus({ + format: 'esm', + }), + ], + server: { + proxy: { + '/admin-api': { + changeOrigin: true, + rewrite: (path) => path.replace(/^\/admin-api/, ''), + // mock代理目标地址 + target: 'http://localhost:48080/admin-api', + ws: true, + }, + }, + }, + }, + }; +}); diff --git a/apps/web-naive/.env.analyze b/apps/web-naive/.env.analyze new file mode 100644 index 000000000..ffafa8dd5 --- /dev/null +++ b/apps/web-naive/.env.analyze @@ -0,0 +1,7 @@ +# public path +VITE_BASE=/ + +# Basic interface address SPA +VITE_GLOB_API_URL=/api + +VITE_VISUALIZER=true diff --git a/apps/web-naive/.env.development b/apps/web-naive/.env.development new file mode 100644 index 000000000..0cc341046 --- /dev/null +++ b/apps/web-naive/.env.development @@ -0,0 +1,21 @@ +# 端口号 +VITE_PORT=5888 + +VITE_BASE=/ + +# 请求路径 +VITE_BASE_URL=http://127.0.0.1:48080 +# 接口地址 +VITE_GLOB_API_URL=/admin-api +# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 +VITE_UPLOAD_TYPE=server +# 是否打开 devtools,true 为打开,false 为关闭 +VITE_DEVTOOLS=false + +# 是否注入全局loading +VITE_INJECT_APP_LOADING=true + +# 默认登录用户名 +VITE_APP_DEFAULT_USERNAME=admin +# 默认登录密码 +VITE_APP_DEFAULT_PASSWORD=admin123 diff --git a/apps/web-naive/.env.production b/apps/web-naive/.env.production new file mode 100644 index 000000000..910fd64cc --- /dev/null +++ b/apps/web-naive/.env.production @@ -0,0 +1,23 @@ +VITE_BASE=/ + +# 请求路径 +VITE_BASE_URL=http://127.0.0.1:48080 +# 接口地址 +VITE_GLOB_API_URL=http://127.0.0.1:48080/admin-api +# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 +VITE_UPLOAD_TYPE=server + +# 是否开启压缩,可以设置为 none, brotli, gzip +VITE_COMPRESS=none + +# 是否开启 PWA +VITE_PWA=false + +# vue-router 的模式 +VITE_ROUTER_HISTORY=hash + +# 是否注入全局loading +VITE_INJECT_APP_LOADING=true + +# 打包后是否生成dist.zip +VITE_ARCHIVER=true diff --git a/apps/web-naive/index.html b/apps/web-naive/index.html new file mode 100644 index 000000000..7ea638418 --- /dev/null +++ b/apps/web-naive/index.html @@ -0,0 +1,35 @@ + + + + + + + + + + + + <%= VITE_APP_TITLE %> + + + + +
    + + + diff --git a/apps/web-naive/postcss.config.mjs b/apps/web-naive/postcss.config.mjs new file mode 100644 index 000000000..3d8070455 --- /dev/null +++ b/apps/web-naive/postcss.config.mjs @@ -0,0 +1 @@ +export { default } from '@vben/tailwind-config/postcss'; diff --git a/apps/web-naive/public/favicon.ico b/apps/web-naive/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..fcf9818e2cf855039b272bdbfbb202d3ff3fa159 GIT binary patch literal 5430 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 ({ + themeOverrides: preferences.theme.mode === 'light' ? lightTheme : darkTheme, +})); + +const themeProviderProps = computed(() => ({ + theme: preferences.theme.mode === 'light' ? lightTheme : darkTheme, +})); + +export const { dialog, loadingBar, message, modal, notification } = + createDiscreteApi( + ['message', 'dialog', 'notification', 'loadingBar', 'modal'], + { + configProviderProps: themeProviderProps, + loadingBarProviderProps: themeOverridesProviderProps, + messageProviderProps: themeOverridesProviderProps, + notificationProviderProps: themeOverridesProviderProps, + }, + ); diff --git a/apps/web-naive/src/api/core/index.ts b/apps/web-naive/src/api/core/index.ts new file mode 100644 index 000000000..269586ee8 --- /dev/null +++ b/apps/web-naive/src/api/core/index.ts @@ -0,0 +1 @@ +export * from './auth'; diff --git a/apps/web-naive/src/api/index.ts b/apps/web-naive/src/api/index.ts new file mode 100644 index 000000000..4b0e04137 --- /dev/null +++ b/apps/web-naive/src/api/index.ts @@ -0,0 +1 @@ +export * from './core'; diff --git a/apps/web-naive/src/api/infra/api-access-log/index.ts b/apps/web-naive/src/api/infra/api-access-log/index.ts new file mode 100644 index 000000000..656e38084 --- /dev/null +++ b/apps/web-naive/src/api/infra/api-access-log/index.ts @@ -0,0 +1,44 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace InfraApiAccessLogApi { + /** API 访问日志信息 */ + export interface ApiAccessLog { + id: number; + traceId: string; + userId: number; + userType: number; + applicationName: string; + requestMethod: string; + requestParams: string; + responseBody: string; + requestUrl: string; + userIp: string; + userAgent: string; + operateModule: string; + operateName: string; + operateType: number; + beginTime: string; + endTime: string; + duration: number; + resultCode: number; + resultMsg: string; + createTime: string; + } +} + +/** 查询 API 访问日志列表 */ +export function getApiAccessLogPage(params: PageParam) { + return requestClient.get>( + '/infra/api-access-log/page', + { params }, + ); +} + +/** 导出 API 访问日志 */ +export function exportApiAccessLog(params: any) { + return requestClient.download('/infra/api-access-log/export-excel', { + params, + }); +} diff --git a/apps/web-naive/src/api/infra/api-error-log/index.ts b/apps/web-naive/src/api/infra/api-error-log/index.ts new file mode 100644 index 000000000..863f73e9b --- /dev/null +++ b/apps/web-naive/src/api/infra/api-error-log/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace InfraApiErrorLogApi { + /** API 错误日志信息 */ + export interface ApiErrorLog { + id: number; + traceId: string; + userId: number; + userType: number; + applicationName: string; + requestMethod: string; + requestParams: string; + requestUrl: string; + userIp: string; + userAgent: string; + exceptionTime: string; + exceptionName: string; + exceptionMessage: string; + exceptionRootCauseMessage: string; + exceptionStackTrace: string; + exceptionClassName: string; + exceptionFileName: string; + exceptionMethodName: string; + exceptionLineNumber: number; + processUserId: number; + processStatus: number; + processTime: string; + resultCode: number; + createTime: string; + } +} + +/** 查询 API 错误日志列表 */ +export function getApiErrorLogPage(params: PageParam) { + return requestClient.get>( + '/infra/api-error-log/page', + { params }, + ); +} + +/** 更新 API 错误日志的处理状态 */ +export function updateApiErrorLogStatus(id: number, processStatus: number) { + return requestClient.put( + `/infra/api-error-log/update-status?id=${id}&processStatus=${processStatus}`, + ); +} + +/** 导出 API 错误日志 */ +export function exportApiErrorLog(params: any) { + return requestClient.download('/infra/api-error-log/export-excel', { + params, + }); +} diff --git a/apps/web-naive/src/api/infra/job-log/index.ts b/apps/web-naive/src/api/infra/job-log/index.ts new file mode 100644 index 000000000..e115b9df7 --- /dev/null +++ b/apps/web-naive/src/api/infra/job-log/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace InfraJobLogApi { + /** 任务日志信息 */ + export interface JobLog { + id?: number; + jobId: number; + handlerName: string; + handlerParam: string; + cronExpression: string; + executeIndex: string; + beginTime: Date; + endTime: Date; + duration: string; + status: number; + createTime?: string; + result: string; + } +} + +/** 查询任务日志列表 */ +export function getJobLogPage(params: PageParam) { + return requestClient.get>( + '/infra/job-log/page', + { params }, + ); +} + +/** 查询任务日志详情 */ +export function getJobLog(id: number) { + return requestClient.get( + `/infra/job-log/get?id=${id}`, + ); +} + +/** 导出定时任务日志 */ +export function exportJobLog(params: any) { + return requestClient.download('/infra/job-log/export-excel', { params }); +} diff --git a/apps/web-naive/src/api/infra/redis/index.ts b/apps/web-naive/src/api/infra/redis/index.ts new file mode 100644 index 000000000..cb8179da5 --- /dev/null +++ b/apps/web-naive/src/api/infra/redis/index.ts @@ -0,0 +1,190 @@ +import { requestClient } from '#/api/request'; + +export namespace InfraRedisApi { + /** Redis 信息 */ + export interface RedisInfo { + io_threaded_reads_processed: string; + tracking_clients: string; + uptime_in_seconds: string; + cluster_connections: string; + current_cow_size: string; + maxmemory_human: string; + aof_last_cow_size: string; + master_replid2: string; + mem_replication_backlog: string; + aof_rewrite_scheduled: string; + total_net_input_bytes: string; + rss_overhead_ratio: string; + hz: string; + current_cow_size_age: string; + redis_build_id: string; + errorstat_BUSYGROUP: string; + aof_last_bgrewrite_status: string; + multiplexing_api: string; + client_recent_max_output_buffer: string; + allocator_resident: string; + mem_fragmentation_bytes: string; + aof_current_size: string; + repl_backlog_first_byte_offset: string; + tracking_total_prefixes: string; + redis_mode: string; + redis_git_dirty: string; + aof_delayed_fsync: string; + allocator_rss_bytes: string; + repl_backlog_histlen: string; + io_threads_active: string; + rss_overhead_bytes: string; + total_system_memory: string; + loading: string; + evicted_keys: string; + maxclients: string; + cluster_enabled: string; + redis_version: string; + repl_backlog_active: string; + mem_aof_buffer: string; + allocator_frag_bytes: string; + io_threaded_writes_processed: string; + instantaneous_ops_per_sec: string; + used_memory_human: string; + total_error_replies: string; + role: string; + maxmemory: string; + used_memory_lua: string; + rdb_current_bgsave_time_sec: string; + used_memory_startup: string; + used_cpu_sys_main_thread: string; + lazyfree_pending_objects: string; + aof_pending_bio_fsync: string; + used_memory_dataset_perc: string; + allocator_frag_ratio: string; + arch_bits: string; + used_cpu_user_main_thread: string; + mem_clients_normal: string; + expired_time_cap_reached_count: string; + unexpected_error_replies: string; + mem_fragmentation_ratio: string; + aof_last_rewrite_time_sec: string; + master_replid: string; + aof_rewrite_in_progress: string; + lru_clock: string; + maxmemory_policy: string; + run_id: string; + latest_fork_usec: string; + tracking_total_items: string; + total_commands_processed: string; + expired_keys: string; + errorstat_ERR: string; + used_memory: string; + module_fork_in_progress: string; + errorstat_WRONGPASS: string; + aof_buffer_length: string; + dump_payload_sanitizations: string; + mem_clients_slaves: string; + keyspace_misses: string; + server_time_usec: string; + executable: string; + lazyfreed_objects: string; + db0: string; + used_memory_peak_human: string; + keyspace_hits: string; + rdb_last_cow_size: string; + aof_pending_rewrite: string; + used_memory_overhead: string; + active_defrag_hits: string; + tcp_port: string; + uptime_in_days: string; + used_memory_peak_perc: string; + current_save_keys_processed: string; + blocked_clients: string; + total_reads_processed: string; + expire_cycle_cpu_milliseconds: string; + sync_partial_err: string; + used_memory_scripts_human: string; + aof_current_rewrite_time_sec: string; + aof_enabled: string; + process_supervised: string; + master_repl_offset: string; + used_memory_dataset: string; + used_cpu_user: string; + rdb_last_bgsave_status: string; + tracking_total_keys: string; + atomicvar_api: string; + allocator_rss_ratio: string; + client_recent_max_input_buffer: string; + clients_in_timeout_table: string; + aof_last_write_status: string; + mem_allocator: string; + used_memory_scripts: string; + used_memory_peak: string; + process_id: string; + master_failover_state: string; + errorstat_NOAUTH: string; + used_cpu_sys: string; + repl_backlog_size: string; + connected_slaves: string; + current_save_keys_total: string; + gcc_version: string; + total_system_memory_human: string; + sync_full: string; + connected_clients: string; + module_fork_last_cow_size: string; + total_writes_processed: string; + allocator_active: string; + total_net_output_bytes: string; + pubsub_channels: string; + current_fork_perc: string; + active_defrag_key_hits: string; + rdb_changes_since_last_save: string; + instantaneous_input_kbps: string; + used_memory_rss_human: string; + configured_hz: string; + expired_stale_perc: string; + active_defrag_misses: string; + used_cpu_sys_children: string; + number_of_cached_scripts: string; + sync_partial_ok: string; + used_memory_lua_human: string; + rdb_last_save_time: string; + pubsub_patterns: string; + slave_expires_tracked_keys: string; + redis_git_sha1: string; + used_memory_rss: string; + rdb_last_bgsave_time_sec: string; + os: string; + mem_not_counted_for_evict: string; + active_defrag_running: string; + rejected_connections: string; + aof_rewrite_buffer_length: string; + total_forks: string; + active_defrag_key_misses: string; + allocator_allocated: string; + aof_base_size: string; + instantaneous_output_kbps: string; + second_repl_offset: string; + rdb_bgsave_in_progress: string; + used_cpu_user_children: string; + total_connections_received: string; + migrate_cached_sockets: string; + } + + /** Redis 命令统计 */ + export interface RedisCommandStats { + command: string; + calls: number; + usec: number; + } + + /** Redis 监控信息 */ + export interface RedisMonitorInfo { + info: RedisInfo; + dbSize: number; + commandStats: RedisCommandStats[]; + } +} + +/** 获取 Redis 监控信息 */ +export function getRedisMonitorInfo() { + return requestClient.get( + '/infra/redis/get-monitor-info', + ); +} diff --git a/apps/web-naive/src/api/system/area/index.ts b/apps/web-naive/src/api/system/area/index.ts new file mode 100644 index 000000000..8d3361da5 --- /dev/null +++ b/apps/web-naive/src/api/system/area/index.ts @@ -0,0 +1,24 @@ +import { requestClient } from '#/api/request'; + +export namespace SystemAreaApi { + /** 地区信息 */ + export interface Area { + id?: number; + name: string; + code: string; + parentId?: number; + sort?: number; + status?: number; + createTime?: Date; + } +} + +/** 获得地区树 */ +export function getAreaTree() { + return requestClient.get('/system/area/tree'); +} + +/** 获得 IP 对应的地区名 */ +export function getAreaByIp(ip: string) { + return requestClient.get(`/system/area/get-by-ip?ip=${ip}`); +} diff --git a/apps/web-naive/src/api/system/login-log/index.ts b/apps/web-naive/src/api/system/login-log/index.ts new file mode 100644 index 000000000..4be20d9ed --- /dev/null +++ b/apps/web-naive/src/api/system/login-log/index.ts @@ -0,0 +1,33 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace SystemLoginLogApi { + /** 登录日志信息 */ + export interface LoginLog { + id: number; + logType: number; + traceId: number; + userId: number; + userType: number; + username: string; + result: number; + status: number; + userIp: string; + userAgent: string; + createTime: string; + } +} + +/** 查询登录日志列表 */ +export function getLoginLogPage(params: PageParam) { + return requestClient.get>( + '/system/login-log/page', + { params }, + ); +} + +/** 导出登录日志 */ +export function exportLoginLog(params: any) { + return requestClient.download('/system/login-log/export-excel', { params }); +} diff --git a/apps/web-naive/src/api/system/notify/message/index.ts b/apps/web-naive/src/api/system/notify/message/index.ts new file mode 100644 index 000000000..a8a4e8968 --- /dev/null +++ b/apps/web-naive/src/api/system/notify/message/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace SystemNotifyMessageApi { + /** 站内信消息信息 */ + export interface NotifyMessage { + id: number; + userId: number; + userType: number; + templateId: number; + templateCode: string; + templateNickname: string; + templateContent: string; + templateType: number; + templateParams: string; + readStatus: boolean; + readTime: Date; + createTime: Date; + } +} + +/** 查询站内信消息列表 */ +export function getNotifyMessagePage(params: PageParam) { + return requestClient.get>( + '/system/notify-message/page', + { params }, + ); +} + +/** 获得我的站内信分页 */ +export function getMyNotifyMessagePage(params: PageParam) { + return requestClient.get>( + '/system/notify-message/my-page', + { params }, + ); +} + +/** 批量标记已读 */ +export function updateNotifyMessageRead(ids: number[]) { + return requestClient.put( + '/system/notify-message/update-read', + {}, + { + params: { ids }, + }, + ); +} + +/** 标记所有站内信为已读 */ +export function updateAllNotifyMessageRead() { + return requestClient.put('/system/notify-message/update-all-read'); +} + +/** 获取当前用户的最新站内信列表 */ +export function getUnreadNotifyMessageList() { + return requestClient.get( + '/system/notify-message/get-unread-list', + ); +} + +/** 获得当前用户的未读站内信数量 */ +export function getUnreadNotifyMessageCount() { + return requestClient.get('/system/notify-message/get-unread-count'); +} diff --git a/apps/web-naive/src/api/system/oauth2/open/index.ts b/apps/web-naive/src/api/system/oauth2/open/index.ts new file mode 100644 index 000000000..16d9c7e62 --- /dev/null +++ b/apps/web-naive/src/api/system/oauth2/open/index.ts @@ -0,0 +1,58 @@ +import { requestClient } from '#/api/request'; + +/** OAuth2.0 授权信息响应 */ +export namespace SystemOAuth2ClientApi { + /** 授权信息 */ + export interface AuthorizeInfoRespVO { + client: { + logo: string; + name: string; + }; + scopes: { + key: string; + value: boolean; + }[]; + } +} + +/** 获得授权信息 */ +export function getAuthorize(clientId: string) { + return requestClient.get( + `/system/oauth2/authorize?clientId=${clientId}`, + ); +} + +/** 发起授权 */ +export function authorize( + responseType: string, + clientId: string, + redirectUri: string, + state: string, + autoApprove: boolean, + checkedScopes: string[], + uncheckedScopes: string[], +) { + // 构建 scopes + const scopes: Record = {}; + for (const scope of checkedScopes) { + scopes[scope] = true; + } + for (const scope of uncheckedScopes) { + scopes[scope] = false; + } + + // 发起请求 + return requestClient.post('/system/oauth2/authorize', null, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + params: { + response_type: responseType, + client_id: clientId, + redirect_uri: redirectUri, + state, + auto_approve: autoApprove, + scope: JSON.stringify(scopes), + }, + }); +} diff --git a/apps/web-naive/src/api/system/oauth2/token/index.ts b/apps/web-naive/src/api/system/oauth2/token/index.ts new file mode 100644 index 000000000..bd3697915 --- /dev/null +++ b/apps/web-naive/src/api/system/oauth2/token/index.ts @@ -0,0 +1,34 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace SystemOAuth2TokenApi { + /** OAuth2.0 令牌信息 */ + export interface OAuth2Token { + id?: number; + accessToken: string; + refreshToken: string; + userId: number; + userType: number; + clientId: string; + createTime?: Date; + expiresTime?: Date; + } +} + +/** 查询 OAuth2.0 令牌列表 */ +export function getOAuth2TokenPage(params: PageParam) { + return requestClient.get>( + '/system/oauth2-token/page', + { + params, + }, + ); +} + +/** 删除 OAuth2.0 令牌 */ +export function deleteOAuth2Token(accessToken: string) { + return requestClient.delete( + `/system/oauth2-token/delete?accessToken=${accessToken}`, + ); +} diff --git a/apps/web-naive/src/api/system/operate-log/index.ts b/apps/web-naive/src/api/system/operate-log/index.ts new file mode 100644 index 000000000..8b84a260e --- /dev/null +++ b/apps/web-naive/src/api/system/operate-log/index.ts @@ -0,0 +1,39 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace SystemOperateLogApi { + /** 操作日志信息 */ + export interface OperateLog { + id: number; + traceId: string; + userType: number; + userId: number; + userName: string; + type: string; + subType: string; + bizId: number; + action: string; + extra: string; + requestMethod: string; + requestUrl: string; + userIp: string; + userAgent: string; + creator: string; + creatorName: string; + createTime: string; + } +} + +/** 查询操作日志列表 */ +export function getOperateLogPage(params: PageParam) { + return requestClient.get>( + '/system/operate-log/page', + { params }, + ); +} + +/** 导出操作日志 */ +export function exportOperateLog(params: any) { + return requestClient.download('/system/operate-log/export-excel', { params }); +} diff --git a/apps/web-naive/src/api/system/permission/index.ts b/apps/web-naive/src/api/system/permission/index.ts new file mode 100644 index 000000000..9039d9a05 --- /dev/null +++ b/apps/web-naive/src/api/system/permission/index.ts @@ -0,0 +1,57 @@ +import { requestClient } from '#/api/request'; + +export namespace SystemPermissionApi { + /** 分配用户角色请求 */ + export interface AssignUserRoleReqVO { + userId: number; + roleIds: number[]; + } + + /** 分配角色菜单请求 */ + export interface AssignRoleMenuReqVO { + roleId: number; + menuIds: number[]; + } + + /** 分配角色数据权限请求 */ + export interface AssignRoleDataScopeReqVO { + roleId: number; + dataScope: number; + dataScopeDeptIds: number[]; + } +} + +/** 查询角色拥有的菜单权限 */ +export async function getRoleMenuList(roleId: number) { + return requestClient.get( + `/system/permission/list-role-menus?roleId=${roleId}`, + ); +} + +/** 赋予角色菜单权限 */ +export async function assignRoleMenu( + data: SystemPermissionApi.AssignRoleMenuReqVO, +) { + return requestClient.post('/system/permission/assign-role-menu', data); +} + +/** 赋予角色数据权限 */ +export async function assignRoleDataScope( + data: SystemPermissionApi.AssignRoleDataScopeReqVO, +) { + return requestClient.post('/system/permission/assign-role-data-scope', data); +} + +/** 查询用户拥有的角色数组 */ +export async function getUserRoleList(userId: number) { + return requestClient.get( + `/system/permission/list-user-roles?userId=${userId}`, + ); +} + +/** 赋予用户角色 */ +export async function assignUserRole( + data: SystemPermissionApi.AssignUserRoleReqVO, +) { + return requestClient.post('/system/permission/assign-user-role', data); +} diff --git a/apps/web-naive/src/api/system/sms/log/index.ts b/apps/web-naive/src/api/system/sms/log/index.ts new file mode 100644 index 000000000..8344f9932 --- /dev/null +++ b/apps/web-naive/src/api/system/sms/log/index.ts @@ -0,0 +1,45 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace SystemSmsLogApi { + /** 短信日志信息 */ + export interface SmsLog { + id?: number; + channelId?: number; + channelCode: string; + templateId?: number; + templateCode: string; + templateType?: number; + templateContent: string; + templateParams?: Record; + apiTemplateId: string; + mobile: string; + userId?: number; + userType?: number; + sendStatus?: number; + sendTime?: string; + apiSendCode: string; + apiSendMsg: string; + apiRequestId: string; + apiSerialNo: string; + receiveStatus?: number; + receiveTime?: string; + apiReceiveCode: string; + apiReceiveMsg: string; + createTime: string; + } +} + +/** 查询短信日志列表 */ +export function getSmsLogPage(params: PageParam) { + return requestClient.get>( + '/system/sms-log/page', + { params }, + ); +} + +/** 导出短信日志 */ +export function exportSmsLog(params: any) { + return requestClient.download('/system/sms-log/export-excel', { params }); +} diff --git a/apps/web-naive/src/api/system/social/user/index.ts b/apps/web-naive/src/api/system/social/user/index.ts new file mode 100644 index 000000000..b91f15064 --- /dev/null +++ b/apps/web-naive/src/api/system/social/user/index.ts @@ -0,0 +1,66 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace SystemSocialUserApi { + /** 社交用户信息 */ + export interface SocialUser { + id?: number; + type: number; + openid: string; + token: string; + rawTokenInfo: string; + nickname: string; + avatar: string; + rawUserInfo: string; + code: string; + state: string; + createTime?: Date; + updateTime?: Date; + } + + /** 社交绑定请求 */ + export interface SocialUserBindReqVO { + type: number; + code: string; + state: string; + } + + /** 取消社交绑定请求 */ + export interface SocialUserUnbindReqVO { + type: number; + openid: string; + } +} + +/** 查询社交用户列表 */ +export function getSocialUserPage(params: PageParam) { + return requestClient.get>( + '/system/social-user/page', + { params }, + ); +} + +/** 查询社交用户详情 */ +export function getSocialUser(id: number) { + return requestClient.get( + `/system/social-user/get?id=${id}`, + ); +} + +/** 社交绑定,使用 code 授权码 */ +export function socialBind(data: SystemSocialUserApi.SocialUserBindReqVO) { + return requestClient.post('/system/social-user/bind', data); +} + +/** 取消社交绑定 */ +export function socialUnbind(data: SystemSocialUserApi.SocialUserUnbindReqVO) { + return requestClient.delete('/system/social-user/unbind', { data }); +} + +/** 获得绑定社交用户列表 */ +export function getBindSocialUserList() { + return requestClient.get( + '/system/social-user/get-bind-list', + ); +} diff --git a/apps/web-naive/src/api/system/user/profile/index.ts b/apps/web-naive/src/api/system/user/profile/index.ts new file mode 100644 index 000000000..97898e71a --- /dev/null +++ b/apps/web-naive/src/api/system/user/profile/index.ts @@ -0,0 +1,56 @@ +import { requestClient } from '#/api/request'; + +export namespace SystemUserProfileApi { + /** 用户个人中心信息 */ + export interface UserProfileRespVO { + id: number; + username: string; + nickname: string; + email?: string; + mobile?: string; + sex?: number; + avatar?: string; + loginIp: string; + loginDate: string; + createTime: string; + roles: any[]; + dept: any; + posts: any[]; + } + + /** 更新密码请求 */ + export interface UpdatePasswordReqVO { + oldPassword: string; + newPassword: string; + } + + /** 更新个人信息请求 */ + export interface UpdateProfileReqVO { + nickname?: string; + email?: string; + mobile?: string; + sex?: number; + avatar?: string; + } +} + +/** 获取登录用户信息 */ +export function getUserProfile() { + return requestClient.get( + '/system/user/profile/get', + ); +} + +/** 修改用户个人信息 */ +export function updateUserProfile( + data: SystemUserProfileApi.UpdateProfileReqVO, +) { + return requestClient.put('/system/user/profile/update', data); +} + +/** 修改用户个人密码 */ +export function updateUserPassword( + data: SystemUserProfileApi.UpdatePasswordReqVO, +) { + return requestClient.put('/system/user/profile/update-password', data); +} diff --git a/apps/web-naive/src/app.vue b/apps/web-naive/src/app.vue new file mode 100644 index 000000000..23983c55c --- /dev/null +++ b/apps/web-naive/src/app.vue @@ -0,0 +1,56 @@ + + + diff --git a/apps/web-naive/src/bootstrap.ts b/apps/web-naive/src/bootstrap.ts new file mode 100644 index 000000000..df0b2cbb8 --- /dev/null +++ b/apps/web-naive/src/bootstrap.ts @@ -0,0 +1,76 @@ +import { createApp, watchEffect } from 'vue'; + +import { registerAccessDirective } from '@vben/access'; +import { registerLoadingDirective } from '@vben/common-ui'; +import { preferences } from '@vben/preferences'; +import { initStores } from '@vben/stores'; +import '@vben/styles'; +import '@vben/styles/naive'; + +import { useTitle } from '@vueuse/core'; + +import { $t, setupI18n } from '#/locales'; + +import { initComponentAdapter } from './adapter/component'; +import { initSetupVbenForm } from './adapter/form'; +import App from './app.vue'; +import { router } from './router'; + +async function bootstrap(namespace: string) { + // 初始化组件适配器 + await initComponentAdapter(); + + // 初始化表单组件 + await initSetupVbenForm(); + + // // 设置弹窗的默认配置 + // setDefaultModalProps({ + // fullscreenButton: false, + // }); + // // 设置抽屉的默认配置 + // setDefaultDrawerProps({ + // // zIndex: 2000, + // }); + + const app = createApp(App); + + // 注册v-loading指令 + registerLoadingDirective(app, { + loading: 'loading', // 在这里可以自定义指令名称,也可以明确提供false表示不注册这个指令 + spinning: 'spinning', + }); + + // 国际化 i18n 配置 + await setupI18n(app); + + // 配置 pinia-tore + await initStores(app, { namespace }); + + // 安装权限指令 + registerAccessDirective(app); + + // 初始化 tippy + const { initTippy } = await import('@vben/common-ui/es/tippy'); + initTippy(app); + + // 配置路由及路由守卫 + app.use(router); + + // 配置Motion插件 + const { MotionPlugin } = await import('@vben/plugins/motion'); + app.use(MotionPlugin); + + // 动态更新标题 + watchEffect(() => { + if (preferences.app.dynamicTitle) { + const routeTitle = router.currentRoute.value.meta?.title; + const pageTitle = + (routeTitle ? `${$t(routeTitle)} - ` : '') + preferences.app.name; + useTitle(pageTitle); + } + }); + + app.mount('#app'); +} + +export { bootstrap }; diff --git a/apps/web-naive/src/components/dict-tag/index.ts b/apps/web-naive/src/components/dict-tag/index.ts new file mode 100644 index 000000000..881265a39 --- /dev/null +++ b/apps/web-naive/src/components/dict-tag/index.ts @@ -0,0 +1 @@ +export { default as DictTag } from './dict-tag.vue'; diff --git a/apps/web-naive/src/layouts/index.ts b/apps/web-naive/src/layouts/index.ts new file mode 100644 index 000000000..a43207805 --- /dev/null +++ b/apps/web-naive/src/layouts/index.ts @@ -0,0 +1,6 @@ +const BasicLayout = () => import('./basic.vue'); +const AuthPageLayout = () => import('./auth.vue'); + +const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView); + +export { AuthPageLayout, BasicLayout, IFrameView }; diff --git a/apps/web-naive/src/locales/README.md b/apps/web-naive/src/locales/README.md new file mode 100644 index 000000000..7b451032e --- /dev/null +++ b/apps/web-naive/src/locales/README.md @@ -0,0 +1,3 @@ +# locale + +每个app使用的国际化可能不同,这里用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换,以及app本身的国际化文件。 diff --git a/apps/web-naive/src/locales/langs/en-US/utils.json b/apps/web-naive/src/locales/langs/en-US/utils.json new file mode 100644 index 000000000..b9206eff9 --- /dev/null +++ b/apps/web-naive/src/locales/langs/en-US/utils.json @@ -0,0 +1,14 @@ +{ + "rangePicker": { + "today": "Today", + "last7Days": "Last 7 Days", + "last30Days": "Last 30 Days", + "yesterday": "Yesterday", + "thisWeek": "This Week", + "thisMonth": "This Month", + "lastWeek": "Last Week", + "lastMonth": "Last Month", + "beginTime": "Begin Time", + "endTime": "End Time" + } +} diff --git a/apps/web-naive/src/locales/langs/zh-CN/utils.json b/apps/web-naive/src/locales/langs/zh-CN/utils.json new file mode 100644 index 000000000..d26f1f2cf --- /dev/null +++ b/apps/web-naive/src/locales/langs/zh-CN/utils.json @@ -0,0 +1,14 @@ +{ + "rangePicker": { + "today": "今天", + "last7Days": "最近 7 天", + "last30Days": "最近 30 天", + "yesterday": "昨天", + "thisWeek": "本周", + "thisMonth": "本月", + "lastWeek": "上周", + "lastMonth": "上月", + "beginTime": "开始时间", + "endTime": "结束时间" + } +} diff --git a/apps/web-naive/src/main.ts b/apps/web-naive/src/main.ts new file mode 100644 index 000000000..5d728a02a --- /dev/null +++ b/apps/web-naive/src/main.ts @@ -0,0 +1,31 @@ +import { initPreferences } from '@vben/preferences'; +import { unmountGlobalLoading } from '@vben/utils'; + +import { overridesPreferences } from './preferences'; + +/** + * 应用初始化完成之后再进行页面加载渲染 + */ +async function initApplication() { + // name用于指定项目唯一标识 + // 用于区分不同项目的偏好设置以及存储数据的key前缀以及其他一些需要隔离的数据 + const env = import.meta.env.PROD ? 'prod' : 'dev'; + const appVersion = import.meta.env.VITE_APP_VERSION; + const namespace = `${import.meta.env.VITE_APP_NAMESPACE}-${appVersion}-${env}`; + + // app偏好设置初始化 + await initPreferences({ + namespace, + overrides: overridesPreferences, + }); + + // 启动应用并挂载 + // vue应用主要逻辑及视图 + const { bootstrap } = await import('./bootstrap'); + await bootstrap(namespace); + + // 移除并销毁loading + unmountGlobalLoading(); +} + +initApplication(); diff --git a/apps/web-naive/src/preferences.ts b/apps/web-naive/src/preferences.ts new file mode 100644 index 000000000..73eb135cb --- /dev/null +++ b/apps/web-naive/src/preferences.ts @@ -0,0 +1,25 @@ +import { defineOverridesPreferences } from '@vben/preferences'; + +/** + * @description 项目配置文件 + * 只需要覆盖项目中的一部分配置,不需要的配置不用覆盖,会自动使用默认配置 + * !!! 更改配置后请清空缓存,否则可能不生效 + */ +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + /** 后端路由模式 */ + accessMode: 'backend', + name: import.meta.env.VITE_APP_TITLE, + enableRefreshToken: true, + }, + footer: { + /** 默认关闭 footer 页脚,因为有一定遮挡 */ + enable: false, + fixed: false, + }, + copyright: { + companyName: import.meta.env.VITE_APP_TITLE, + companySiteLink: 'https://gitee.com/yudaocode/yudao-ui-admin-vben', + }, +}); diff --git a/apps/web-naive/src/router/access.ts b/apps/web-naive/src/router/access.ts new file mode 100644 index 000000000..c4b161a5d --- /dev/null +++ b/apps/web-naive/src/router/access.ts @@ -0,0 +1,41 @@ +import type { + AppRouteRecordRaw, + ComponentRecordType, + GenerateMenuAndRoutesOptions, +} from '@vben/types'; + +import { generateAccessible } from '@vben/access'; +import { preferences } from '@vben/preferences'; +import { useAccessStore } from '@vben/stores'; +import { convertServerMenuToRouteRecordStringComponent } from '@vben/utils'; + +import { BasicLayout, IFrameView } from '#/layouts'; + +const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue'); + +async function generateAccess(options: GenerateMenuAndRoutesOptions) { + const pageMap: ComponentRecordType = import.meta.glob('../views/**/*.vue'); + const accessStore = useAccessStore(); + + const layoutMap: ComponentRecordType = { + BasicLayout, + IFrameView, + }; + + return await generateAccessible(preferences.app.accessMode, { + ...options, + fetchMenuListAsync: async () => { + // 由于 yudao 通过 accessStore 读取,所以不在进行 message.loading 提示 + // 补充说明:accessStore.accessMenus 一开始是 AppRouteRecordRaw 类型(后端加载),后面被赋值成 MenuRecordRaw 类型(前端转换) + const accessMenus = accessStore.accessMenus as AppRouteRecordRaw[]; + return convertServerMenuToRouteRecordStringComponent(accessMenus); + }, + // 可以指定没有权限跳转403页面 + forbiddenComponent, + // 如果 route.meta.menuVisibleWithForbidden = true + layoutMap, + pageMap, + }); +} + +export { generateAccess }; diff --git a/apps/web-naive/src/router/index.ts b/apps/web-naive/src/router/index.ts new file mode 100644 index 000000000..5acec55ea --- /dev/null +++ b/apps/web-naive/src/router/index.ts @@ -0,0 +1,40 @@ +import { + createRouter, + createWebHashHistory, + createWebHistory, +} from 'vue-router'; + +import { resetStaticRoutes } from '@vben/utils'; + +import { createRouterGuard } from './guard'; +import { routes } from './routes'; +import { setupBaiduTongJi } from './tongji'; + +/** + * @zh_CN 创建vue-router实例 + */ +const router = createRouter({ + history: + import.meta.env.VITE_ROUTER_HISTORY === 'hash' + ? createWebHashHistory(import.meta.env.VITE_BASE) + : createWebHistory(import.meta.env.VITE_BASE), + // 应该添加到路由的初始路由列表。 + routes, + scrollBehavior: (to, _from, savedPosition) => { + if (savedPosition) { + return savedPosition; + } + return to.hash ? { behavior: 'smooth', el: to.hash } : { left: 0, top: 0 }; + }, + // 是否应该禁止尾部斜杠。 + // strict: true, +}); + +const resetRoutes = () => resetStaticRoutes(router, routes); + +// 创建路由守卫 +createRouterGuard(router); +// 设置百度统计 +setupBaiduTongJi(router); + +export { resetRoutes, router }; diff --git a/apps/web-naive/src/router/routes/core.ts b/apps/web-naive/src/router/routes/core.ts new file mode 100644 index 000000000..22fd0017c --- /dev/null +++ b/apps/web-naive/src/router/routes/core.ts @@ -0,0 +1,114 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { LOGIN_PATH } from '@vben/constants'; +import { preferences } from '@vben/preferences'; + +import { $t } from '#/locales'; + +const BasicLayout = () => import('#/layouts/basic.vue'); +const AuthPageLayout = () => import('#/layouts/auth.vue'); +/** 全局404页面 */ +const fallbackNotFoundRoute: RouteRecordRaw = { + component: () => import('#/views/_core/fallback/not-found.vue'), + meta: { + hideInBreadcrumb: true, + hideInMenu: true, + hideInTab: true, + title: '404', + }, + name: 'FallbackNotFound', + path: '/:path(.*)*', +}; + +/** 基本路由,这些路由是必须存在的 */ +const coreRoutes: RouteRecordRaw[] = [ + /** + * 根路由 + * 使用基础布局,作为所有页面的父级容器,子级就不必配置BasicLayout。 + * 此路由必须存在,且不应修改 + */ + { + component: BasicLayout, + meta: { + hideInBreadcrumb: true, + title: 'Root', + }, + name: 'Root', + path: '/', + redirect: preferences.app.defaultHomePath, + children: [], + }, + { + component: AuthPageLayout, + meta: { + hideInTab: true, + title: 'Authentication', + }, + name: 'Authentication', + path: '/auth', + redirect: LOGIN_PATH, + children: [ + { + name: 'Login', + path: 'login', + component: () => import('#/views/_core/authentication/login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + { + name: 'CodeLogin', + path: 'code-login', + component: () => import('#/views/_core/authentication/code-login.vue'), + meta: { + title: $t('page.auth.codeLogin'), + }, + }, + { + name: 'QrCodeLogin', + path: 'qrcode-login', + component: () => + import('#/views/_core/authentication/qrcode-login.vue'), + meta: { + title: $t('page.auth.qrcodeLogin'), + }, + }, + { + name: 'ForgetPassword', + path: 'forget-password', + component: () => + import('#/views/_core/authentication/forget-password.vue'), + meta: { + title: $t('page.auth.forgetPassword'), + }, + }, + { + name: 'Register', + path: 'register', + component: () => import('#/views/_core/authentication/register.vue'), + meta: { + title: $t('page.auth.register'), + }, + }, + { + name: 'SocialLogin', + path: 'social-login', + component: () => + import('#/views/_core/authentication/social-login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + { + name: 'SSOLogin', + path: 'sso-login', + component: () => import('#/views/_core/authentication/sso-login.vue'), + meta: { + title: $t('page.auth.login'), + }, + }, + ], + }, +]; + +export { coreRoutes, fallbackNotFoundRoute }; diff --git a/apps/web-naive/src/router/routes/index.ts b/apps/web-naive/src/router/routes/index.ts new file mode 100644 index 000000000..738f9d3d9 --- /dev/null +++ b/apps/web-naive/src/router/routes/index.ts @@ -0,0 +1,47 @@ +import type { RouteRecordRaw } from 'vue-router'; + +import { mergeRouteModules, traverseTreeValues } from '@vben/utils'; + +import { coreRoutes, fallbackNotFoundRoute } from './core'; + +const dynamicRouteFiles = import.meta.glob('./modules/**/*.ts', { + eager: true, +}); + +// 有需要可以自行打开注释,并创建文件夹 +// const externalRouteFiles = import.meta.glob('./external/**/*.ts', { eager: true }); +// const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true }); + +/** 动态路由 */ +const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles); + +/** 外部路由列表,访问这些页面可以不需要Layout,可能用于内嵌在别的系统(不会显示在菜单中) */ +// const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles); +// const staticRoutes: RouteRecordRaw[] = mergeRouteModules(staticRouteFiles); +const staticRoutes: RouteRecordRaw[] = []; +const externalRoutes: RouteRecordRaw[] = []; + +/** 路由列表,由基本路由、外部路由和404兜底路由组成 + * 无需走权限验证(会一直显示在菜单中) */ +const routes: RouteRecordRaw[] = [ + ...coreRoutes, + ...externalRoutes, + fallbackNotFoundRoute, +]; + +/** 基本路由列表,这些路由不需要进入权限拦截 */ +const coreRouteNames = traverseTreeValues(coreRoutes, (route) => route.name); + +/** 有权限校验的路由列表,包含动态路由和静态路由 */ +const accessRoutes = [...dynamicRoutes, ...staticRoutes]; + +// add by 芋艿:from https://github.com/vbenjs/vue-vben-admin/blob/main/playground/src/router/routes/index.ts#L38-L45 +const componentKeys: string[] = Object.keys( + import.meta.glob('../../views/**/*.vue'), +) + .filter((item) => !item.includes('/modules/')) + .map((v) => { + const path = v.replace('../../views/', '/'); + return path.endsWith('.vue') ? path.slice(0, -4) : path; + }); +export { accessRoutes, componentKeys, coreRouteNames, routes }; diff --git a/apps/web-naive/src/router/routes/modules/system.ts b/apps/web-naive/src/router/routes/modules/system.ts new file mode 100644 index 000000000..47e6b1682 --- /dev/null +++ b/apps/web-naive/src/router/routes/modules/system.ts @@ -0,0 +1,16 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/system/notify-message', + component: () => import('#/views/system/notify/my/index.vue'), + name: 'MyNotifyMessage', + meta: { + title: '我的站内信', + icon: 'ant-design:message-filled', + hideInMenu: true, + }, + }, +]; + +export default routes; diff --git a/apps/web-naive/src/router/tongji.ts b/apps/web-naive/src/router/tongji.ts new file mode 100644 index 000000000..0aa3715a4 --- /dev/null +++ b/apps/web-naive/src/router/tongji.ts @@ -0,0 +1,30 @@ +import type { Router } from 'vue-router'; + +declare global { + interface Window { + _hmt: any[]; + } +} + +const HM_ID = import.meta.env.VITE_APP_BAIDU_CODE; + +/** + * 设置百度统计 + * @param router + */ +function setupBaiduTongJi(router: Router) { + // 如果没有配置百度统计的 ID,则不进行设置 + if (!HM_ID) { + return; + } + + // _hmt:用于 router push + window._hmt = window._hmt || []; + + router.afterEach((to) => { + // 添加到 _hmt 中 + window._hmt.push(['_trackPageview', to.fullPath]); + }); +} + +export { setupBaiduTongJi }; diff --git a/apps/web-naive/src/views/_core/README.md b/apps/web-naive/src/views/_core/README.md new file mode 100644 index 000000000..8248afe6c --- /dev/null +++ b/apps/web-naive/src/views/_core/README.md @@ -0,0 +1,3 @@ +# \_core + +此目录包含应用程序正常运行所需的基本视图。这些视图是应用程序布局中使用的视图。 diff --git a/apps/web-naive/src/views/_core/about/index.vue b/apps/web-naive/src/views/_core/about/index.vue new file mode 100644 index 000000000..0ee524335 --- /dev/null +++ b/apps/web-naive/src/views/_core/about/index.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-naive/src/views/_core/authentication/code-login.vue b/apps/web-naive/src/views/_core/authentication/code-login.vue new file mode 100644 index 000000000..b8c55d84e --- /dev/null +++ b/apps/web-naive/src/views/_core/authentication/code-login.vue @@ -0,0 +1,172 @@ + + + diff --git a/apps/web-naive/src/views/_core/authentication/forget-password.vue b/apps/web-naive/src/views/_core/authentication/forget-password.vue new file mode 100644 index 000000000..e66c899ed --- /dev/null +++ b/apps/web-naive/src/views/_core/authentication/forget-password.vue @@ -0,0 +1,215 @@ + + + diff --git a/apps/web-naive/src/views/_core/authentication/login.vue b/apps/web-naive/src/views/_core/authentication/login.vue new file mode 100644 index 000000000..aa1db4c53 --- /dev/null +++ b/apps/web-naive/src/views/_core/authentication/login.vue @@ -0,0 +1,192 @@ + + + diff --git a/apps/web-naive/src/views/_core/authentication/qrcode-login.vue b/apps/web-naive/src/views/_core/authentication/qrcode-login.vue new file mode 100644 index 000000000..23f5f2dad --- /dev/null +++ b/apps/web-naive/src/views/_core/authentication/qrcode-login.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/web-naive/src/views/_core/authentication/register.vue b/apps/web-naive/src/views/_core/authentication/register.vue new file mode 100644 index 000000000..734f4c27d --- /dev/null +++ b/apps/web-naive/src/views/_core/authentication/register.vue @@ -0,0 +1,221 @@ + + + diff --git a/apps/web-naive/src/views/_core/authentication/social-login.vue b/apps/web-naive/src/views/_core/authentication/social-login.vue new file mode 100644 index 000000000..1052a9a18 --- /dev/null +++ b/apps/web-naive/src/views/_core/authentication/social-login.vue @@ -0,0 +1,210 @@ + + + diff --git a/apps/web-naive/src/views/_core/authentication/sso-login.vue b/apps/web-naive/src/views/_core/authentication/sso-login.vue new file mode 100644 index 000000000..1bc7ad9b1 --- /dev/null +++ b/apps/web-naive/src/views/_core/authentication/sso-login.vue @@ -0,0 +1,221 @@ + + + diff --git a/apps/web-naive/src/views/_core/fallback/coming-soon.vue b/apps/web-naive/src/views/_core/fallback/coming-soon.vue new file mode 100644 index 000000000..f394930f2 --- /dev/null +++ b/apps/web-naive/src/views/_core/fallback/coming-soon.vue @@ -0,0 +1,7 @@ + + + diff --git a/apps/web-naive/src/views/_core/fallback/forbidden.vue b/apps/web-naive/src/views/_core/fallback/forbidden.vue new file mode 100644 index 000000000..8ea65fedb --- /dev/null +++ b/apps/web-naive/src/views/_core/fallback/forbidden.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-naive/src/views/_core/fallback/internal-error.vue b/apps/web-naive/src/views/_core/fallback/internal-error.vue new file mode 100644 index 000000000..819a47d5e --- /dev/null +++ b/apps/web-naive/src/views/_core/fallback/internal-error.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-naive/src/views/_core/fallback/not-found.vue b/apps/web-naive/src/views/_core/fallback/not-found.vue new file mode 100644 index 000000000..4d178e9cb --- /dev/null +++ b/apps/web-naive/src/views/_core/fallback/not-found.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-naive/src/views/_core/fallback/offline.vue b/apps/web-naive/src/views/_core/fallback/offline.vue new file mode 100644 index 000000000..5de4a88de --- /dev/null +++ b/apps/web-naive/src/views/_core/fallback/offline.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-trends.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-trends.vue new file mode 100644 index 000000000..f1f0b232a --- /dev/null +++ b/apps/web-naive/src/views/dashboard/analytics/analytics-trends.vue @@ -0,0 +1,98 @@ + + + diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-data.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-data.vue new file mode 100644 index 000000000..190fb41f4 --- /dev/null +++ b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-data.vue @@ -0,0 +1,82 @@ + + + diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits-source.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-source.vue new file mode 100644 index 000000000..0915c7af7 --- /dev/null +++ b/apps/web-naive/src/views/dashboard/analytics/analytics-visits-source.vue @@ -0,0 +1,65 @@ + + + diff --git a/apps/web-naive/src/views/dashboard/analytics/analytics-visits.vue b/apps/web-naive/src/views/dashboard/analytics/analytics-visits.vue new file mode 100644 index 000000000..7e0f10133 --- /dev/null +++ b/apps/web-naive/src/views/dashboard/analytics/analytics-visits.vue @@ -0,0 +1,55 @@ + + + diff --git a/apps/web-naive/src/views/dashboard/analytics/index.vue b/apps/web-naive/src/views/dashboard/analytics/index.vue new file mode 100644 index 000000000..5e3d6d285 --- /dev/null +++ b/apps/web-naive/src/views/dashboard/analytics/index.vue @@ -0,0 +1,90 @@ + + + diff --git a/apps/web-naive/src/views/dashboard/workspace/index.vue b/apps/web-naive/src/views/dashboard/workspace/index.vue new file mode 100644 index 000000000..b95d61381 --- /dev/null +++ b/apps/web-naive/src/views/dashboard/workspace/index.vue @@ -0,0 +1,266 @@ + + + diff --git a/apps/web-naive/src/views/infra/codegen/modules/basic-info.vue b/apps/web-naive/src/views/infra/codegen/modules/basic-info.vue new file mode 100644 index 000000000..00c49911b --- /dev/null +++ b/apps/web-naive/src/views/infra/codegen/modules/basic-info.vue @@ -0,0 +1,45 @@ + + diff --git a/apps/web-naive/src/views/system/area/modules/form.vue b/apps/web-naive/src/views/system/area/modules/form.vue new file mode 100644 index 000000000..b8fa1565c --- /dev/null +++ b/apps/web-naive/src/views/system/area/modules/form.vue @@ -0,0 +1,49 @@ + + + diff --git a/apps/web-naive/src/views/system/sms/template/modules/form.vue b/apps/web-naive/src/views/system/sms/template/modules/form.vue new file mode 100644 index 000000000..f7e5ac7f3 --- /dev/null +++ b/apps/web-naive/src/views/system/sms/template/modules/form.vue @@ -0,0 +1,88 @@ + + + diff --git a/apps/web-naive/src/views/system/user/modules/reset-password-form.vue b/apps/web-naive/src/views/system/user/modules/reset-password-form.vue new file mode 100644 index 000000000..1f04b5af7 --- /dev/null +++ b/apps/web-naive/src/views/system/user/modules/reset-password-form.vue @@ -0,0 +1,65 @@ + + + diff --git a/apps/web-naive/tailwind.config.mjs b/apps/web-naive/tailwind.config.mjs new file mode 100644 index 000000000..f17f556fa --- /dev/null +++ b/apps/web-naive/tailwind.config.mjs @@ -0,0 +1 @@ +export { default } from '@vben/tailwind-config'; diff --git a/apps/web-naive/tsconfig.json b/apps/web-naive/tsconfig.json new file mode 100644 index 000000000..02c287fe6 --- /dev/null +++ b/apps/web-naive/tsconfig.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/web-app.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "#/*": ["./src/*"] + } + }, + "references": [{ "path": "./tsconfig.node.json" }], + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/apps/web-naive/tsconfig.node.json b/apps/web-naive/tsconfig.node.json new file mode 100644 index 000000000..c2f0d86cc --- /dev/null +++ b/apps/web-naive/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/node.json", + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "noEmit": false + }, + "include": ["vite.config.mts"] +} diff --git a/apps/web-naive/vite.config.mts b/apps/web-naive/vite.config.mts new file mode 100644 index 000000000..71ae65bb5 --- /dev/null +++ b/apps/web-naive/vite.config.mts @@ -0,0 +1,20 @@ +import { defineConfig } from '@vben/vite-config'; + +export default defineConfig(async () => { + return { + application: {}, + vite: { + server: { + proxy: { + '/admin-api': { + changeOrigin: true, + rewrite: (path) => path.replace(/^\/admin-api/, ''), + // mock代理目标地址 + target: 'http://localhost:48080/admin-api', + ws: true, + }, + }, + }, + }, + }; +}); diff --git a/docs/.vitepress/components/index.ts b/docs/.vitepress/components/index.ts new file mode 100644 index 000000000..9430871e6 --- /dev/null +++ b/docs/.vitepress/components/index.ts @@ -0,0 +1 @@ +export { default as DemoPreview } from './demo-preview.vue'; diff --git a/docs/.vitepress/config/en.mts b/docs/.vitepress/config/en.mts new file mode 100644 index 000000000..a74a7e5fb --- /dev/null +++ b/docs/.vitepress/config/en.mts @@ -0,0 +1,231 @@ +import type { DefaultTheme } from 'vitepress'; + +import { defineConfig } from 'vitepress'; + +import { version } from '../../../package.json'; + +export const en = defineConfig({ + description: 'Vben Admin & Enterprise level management system framework', + lang: 'en-US', + themeConfig: { + darkModeSwitchLabel: 'Theme', + darkModeSwitchTitle: 'Switch to Dark Mode', + docFooter: { + next: 'Next Page', + prev: 'Previous Page', + }, + editLink: { + pattern: + 'https://github.com/vbenjs/vue-vben-admin/edit/main/docs/src/:path', + text: 'Edit this page on GitHub', + }, + footer: { + copyright: `Copyright © 2020-${new Date().getFullYear()} Vben`, + message: 'Released under the MIT License.', + }, + langMenuLabel: 'Language', + lastUpdated: { + formatOptions: { + dateStyle: 'short', + timeStyle: 'medium', + }, + text: 'Last updated on', + }, + lightModeSwitchTitle: 'Switch to Light Mode', + nav: nav(), + outline: { + label: 'Navigate', + }, + returnToTopLabel: 'Back to top', + sidebar: { + '/en/commercial/': { + base: '/en/commercial/', + items: sidebarCommercial(), + }, + '/en/guide/': { base: '/en/guide/', items: sidebarGuide() }, + }, + }, +}); + +function sidebarGuide(): DefaultTheme.SidebarItem[] { + return [ + { + collapsed: false, + text: 'Introduction', + items: [ + { + link: 'introduction/vben', + text: 'About Vben Admin', + }, + { + link: 'introduction/why', + text: 'Why Choose Us?', + }, + { link: 'introduction/quick-start', text: 'Quick Start' }, + { link: 'introduction/thin', text: 'Lite Version' }, + ], + }, + { + text: 'Basics', + items: [ + { link: 'essentials/concept', text: 'Basic Concepts' }, + { link: 'essentials/development', text: 'Local Development' }, + { link: 'essentials/route', text: 'Routing and Menu' }, + { link: 'essentials/settings', text: 'Configuration' }, + { link: 'essentials/icons', text: 'Icons' }, + { link: 'essentials/styles', text: 'Styles' }, + { link: 'essentials/external-module', text: 'External Modules' }, + { link: 'essentials/build', text: 'Build and Deployment' }, + { link: 'essentials/server', text: 'Server Interaction and Data Mock' }, + ], + }, + { + text: 'Advanced', + items: [ + { link: 'in-depth/login', text: 'Login' }, + { link: 'in-depth/theme', text: 'Theme' }, + { link: 'in-depth/access', text: 'Access Control' }, + { link: 'in-depth/locale', text: 'Internationalization' }, + { link: 'in-depth/features', text: 'Common Features' }, + { link: 'in-depth/check-updates', text: 'Check Updates' }, + { link: 'in-depth/loading', text: 'Global Loading' }, + { link: 'in-depth/ui-framework', text: 'UI Framework Switching' }, + ], + }, + { + text: 'Engineering', + items: [ + { link: 'project/standard', text: 'Standards' }, + { link: 'project/cli', text: 'CLI' }, + { link: 'project/dir', text: 'Directory Explanation' }, + { link: 'project/test', text: 'Unit Testing' }, + { link: 'project/tailwindcss', text: 'Tailwind CSS' }, + { link: 'project/changeset', text: 'Changeset' }, + { link: 'project/vite', text: 'Vite Config' }, + ], + }, + { + text: 'Others', + items: [ + { link: 'other/project-update', text: 'Project Update' }, + { link: 'other/remove-code', text: 'Remove Code' }, + { link: 'other/faq', text: 'FAQ' }, + ], + }, + ]; +} + +function sidebarCommercial(): DefaultTheme.SidebarItem[] { + return [ + { + link: 'community', + text: 'Community', + }, + { + link: 'technical-support', + text: 'Technical-support', + }, + { + link: 'customized', + text: 'Customized', + }, + ]; +} + +function nav(): DefaultTheme.NavItem[] { + return [ + { + activeMatch: '^/en/(guide|components)/', + text: 'Doc', + items: [ + { + activeMatch: '^/en/guide/', + link: '/en/guide/introduction/vben', + text: 'Guide', + }, + // { + // activeMatch: '^/en/components/', + // link: '/en/components/introduction', + // text: 'Components', + // }, + { + text: 'Historical Versions', + items: [ + { + link: 'https://doc.vvbin.cn', + text: '2.x Version Documentation', + }, + ], + }, + ], + }, + { + text: 'Demo', + items: [ + { + text: 'Vben Admin', + items: [ + { + link: 'https://www.vben.pro', + text: 'Demo Version', + }, + { + link: 'https://ant.vben.pro', + text: 'Ant Design Vue Version', + }, + { + link: 'https://naive.vben.pro', + text: 'Naive Version', + }, + { + link: 'https://ele.vben.pro', + text: 'Element Plus Version', + }, + ], + }, + { + text: 'Others', + items: [ + { + link: 'https://vben.vvbin.cn', + text: 'Vben Admin 2.x', + }, + ], + }, + ], + }, + { + text: version, + items: [ + { + link: 'https://github.com/vbenjs/vue-vben-admin/releases', + text: 'Changelog', + }, + { + link: 'https://github.com/orgs/vbenjs/projects/5', + text: 'Roadmap', + }, + { + link: 'https://github.com/vbenjs/vue-vben-admin/blob/main/.github/contributing.md', + text: 'Contribution', + }, + ], + }, + { + link: '/commercial/technical-support', + text: '🦄 Tech Support', + }, + { + link: '/sponsor/personal', + text: '✨ Sponsor', + }, + { + link: '/commercial/community', + text: '👨‍👦‍👦 Community', + }, + // { + // link: '/friend-links/', + // text: '🤝 Friend Links', + // }, + ]; +} diff --git a/docs/.vitepress/config/index.mts b/docs/.vitepress/config/index.mts new file mode 100644 index 000000000..6b8cb81d8 --- /dev/null +++ b/docs/.vitepress/config/index.mts @@ -0,0 +1,25 @@ +import { withPwa } from '@vite-pwa/vitepress'; +import { defineConfigWithTheme } from 'vitepress'; + +import { en } from './en.mts'; +import { shared } from './shared.mts'; +import { zh } from './zh.mts'; + +export default withPwa( + defineConfigWithTheme({ + ...shared, + locales: { + en: { + label: 'English', + lang: 'en', + link: '/en/', + ...en, + }, + root: { + label: '简体中文', + lang: 'zh-CN', + ...zh, + }, + }, + }), +); diff --git a/docs/.vitepress/config/shared.mts b/docs/.vitepress/config/shared.mts new file mode 100644 index 000000000..c48cc6097 --- /dev/null +++ b/docs/.vitepress/config/shared.mts @@ -0,0 +1,172 @@ +import type { PwaOptions } from '@vite-pwa/vitepress'; +import type { HeadConfig } from 'vitepress'; + +import { resolve } from 'node:path'; + +import { + viteArchiverPlugin, + viteVxeTableImportsPlugin, +} from '@vben/vite-config'; + +import { + GitChangelog, + GitChangelogMarkdownSection, +} from '@nolebase/vitepress-plugin-git-changelog/vite'; +import tailwind from 'tailwindcss'; +import { defineConfig, postcssIsolateStyles } from 'vitepress'; +import { + groupIconMdPlugin, + groupIconVitePlugin, +} from 'vitepress-plugin-group-icons'; + +import { demoPreviewPlugin } from './plugins/demo-preview'; +import { search as zhSearch } from './zh.mts'; + +export const shared = defineConfig({ + appearance: 'dark', + head: head(), + markdown: { + preConfig(md) { + md.use(demoPreviewPlugin); + md.use(groupIconMdPlugin); + }, + }, + pwa: pwa(), + srcDir: 'src', + themeConfig: { + i18nRouting: true, + logo: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp', + search: { + options: { + locales: { + ...zhSearch, + }, + }, + provider: 'local', + }, + siteTitle: 'Vben Admin', + socialLinks: [ + { icon: 'github', link: 'https://github.com/vbenjs/vue-vben-admin' }, + ], + }, + title: 'Vben Admin', + vite: { + build: { + chunkSizeWarningLimit: Infinity, + minify: 'terser', + }, + css: { + postcss: { + plugins: [ + tailwind(), + postcssIsolateStyles({ includeFiles: [/vp-doc\.css/] }), + ], + }, + preprocessorOptions: { + scss: { + api: 'modern', + }, + }, + }, + json: { + stringify: true, + }, + plugins: [ + GitChangelog({ + mapAuthors: [ + { + mapByNameAliases: ['Vben'], + name: 'vben', + username: 'anncwb', + }, + { + name: 'vince', + username: 'vince292007', + }, + { + name: 'Li Kui', + username: 'likui628', + }, + ], + repoURL: () => 'https://github.com/vbenjs/vue-vben-admin', + }), + GitChangelogMarkdownSection(), + viteArchiverPlugin({ outputDir: '.vitepress' }), + groupIconVitePlugin(), + await viteVxeTableImportsPlugin(), + ], + server: { + fs: { + allow: ['../..'], + }, + host: true, + port: 6173, + }, + + ssr: { + external: ['@vue/repl'], + }, + }, +}); + +function head(): HeadConfig[] { + return [ + ['meta', { content: 'Vbenjs Team', name: 'author' }], + [ + 'meta', + { + content: 'vben, vitejs, vite, shacdn-ui, vue', + name: 'keywords', + }, + ], + ['link', { href: '/favicon.ico', rel: 'icon', type: 'image/svg+xml' }], + [ + 'meta', + { + content: + 'width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no', + name: 'viewport', + }, + ], + ['meta', { content: 'vben admin docs', name: 'keywords' }], + ['link', { href: '/favicon.ico', rel: 'icon' }], + // [ + // 'script', + // { + // src: 'https://cdn.tailwindcss.com', + // }, + // ], + ]; +} + +function pwa(): PwaOptions { + return { + includeManifestIcons: false, + manifest: { + description: + 'Vben Admin is a modern admin dashboard template based on Vue 3. ', + icons: [ + { + sizes: '192x192', + src: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/pwa-icon-192.png', + type: 'image/png', + }, + { + sizes: '512x512', + src: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/pwa-icon-512.png', + type: 'image/png', + }, + ], + id: '/', + name: 'Vben Admin Doc', + short_name: 'vben_admin_doc', + theme_color: '#ffffff', + }, + outDir: resolve(process.cwd(), '.vitepress/dist'), + registerType: 'autoUpdate', + workbox: { + globPatterns: ['**/*.{css,js,html,svg,png,ico,txt,woff2}'], + maximumFileSizeToCacheInBytes: 5 * 1024 * 1024, + }, + }; +} diff --git a/docs/.vitepress/config/zh.mts b/docs/.vitepress/config/zh.mts new file mode 100644 index 000000000..2c3753deb --- /dev/null +++ b/docs/.vitepress/config/zh.mts @@ -0,0 +1,358 @@ +import type { DefaultTheme } from 'vitepress'; + +import { defineConfig } from 'vitepress'; + +import { version } from '../../../package.json'; + +export const zh = defineConfig({ + description: 'Vben Admin & 企业级管理系统框架', + lang: 'zh-Hans', + themeConfig: { + darkModeSwitchLabel: '主题', + darkModeSwitchTitle: '切换到深色模式', + docFooter: { + next: '下一页', + prev: '上一页', + }, + editLink: { + pattern: + 'https://github.com/vbenjs/vue-vben-admin/edit/main/docs/src/:path', + text: '在 GitHub 上编辑此页面', + }, + footer: { + copyright: `Copyright © 2020-${new Date().getFullYear()} Vben`, + message: '基于 MIT 许可发布.', + }, + langMenuLabel: '多语言', + lastUpdated: { + formatOptions: { + dateStyle: 'short', + timeStyle: 'medium', + }, + text: '最后更新于', + }, + lightModeSwitchTitle: '切换到浅色模式', + nav: nav(), + + outline: { + label: '页面导航', + }, + returnToTopLabel: '回到顶部', + + sidebar: { + '/commercial/': { base: '/commercial/', items: sidebarCommercial() }, + '/components/': { base: '/components/', items: sidebarComponents() }, + '/guide/': { base: '/guide/', items: sidebarGuide() }, + }, + sidebarMenuLabel: '菜单', + }, +}); + +function sidebarGuide(): DefaultTheme.SidebarItem[] { + return [ + { + collapsed: false, + text: '简介', + items: [ + { + link: 'introduction/vben', + text: '关于 Vben Admin', + }, + { + link: 'introduction/why', + text: '为什么选择我们?', + }, + { link: 'introduction/quick-start', text: '快速开始' }, + { link: 'introduction/thin', text: '精简版本' }, + { + base: '/', + link: 'components/introduction', + text: '组件文档', + }, + ], + }, + { + text: '基础', + items: [ + { link: 'essentials/concept', text: '基础概念' }, + { link: 'essentials/development', text: '本地开发' }, + { link: 'essentials/route', text: '路由和菜单' }, + { link: 'essentials/settings', text: '配置' }, + { link: 'essentials/icons', text: '图标' }, + { link: 'essentials/styles', text: '样式' }, + { link: 'essentials/external-module', text: '外部模块' }, + { link: 'essentials/build', text: '构建与部署' }, + { link: 'essentials/server', text: '服务端交互与数据Mock' }, + ], + }, + { + text: '深入', + items: [ + { link: 'in-depth/login', text: '登录' }, + // { link: 'in-depth/layout', text: '布局' }, + { link: 'in-depth/theme', text: '主题' }, + { link: 'in-depth/access', text: '权限' }, + { link: 'in-depth/locale', text: '国际化' }, + { link: 'in-depth/features', text: '常用功能' }, + { link: 'in-depth/check-updates', text: '检查更新' }, + { link: 'in-depth/loading', text: '全局loading' }, + { link: 'in-depth/ui-framework', text: '组件库切换' }, + ], + }, + { + text: '工程', + items: [ + { link: 'project/standard', text: '规范' }, + { link: 'project/cli', text: 'CLI' }, + { link: 'project/dir', text: '目录说明' }, + { link: 'project/test', text: '单元测试' }, + { link: 'project/tailwindcss', text: 'Tailwind CSS' }, + { link: 'project/changeset', text: 'Changeset' }, + { link: 'project/vite', text: 'Vite Config' }, + ], + }, + { + text: '其他', + items: [ + { link: 'other/project-update', text: '项目更新' }, + { link: 'other/remove-code', text: '移除代码' }, + { link: 'other/faq', text: '常见问题' }, + ], + }, + ]; +} + +function sidebarCommercial(): DefaultTheme.SidebarItem[] { + return [ + { + link: 'community', + text: '交流群', + }, + { + link: 'technical-support', + text: '技术支持', + }, + { + link: 'customized', + text: '定制开发', + }, + ]; +} + +function sidebarComponents(): DefaultTheme.SidebarItem[] { + return [ + { + text: '组件', + items: [ + { + link: 'introduction', + text: '介绍', + }, + ], + }, + { + collapsed: false, + text: '布局组件', + items: [ + { + link: 'layout-ui/page', + text: 'Page 页面', + }, + ], + }, + { + collapsed: false, + text: '通用组件', + items: [ + { + link: 'common-ui/vben-api-component', + text: 'ApiComponent Api组件包装器', + }, + { + link: 'common-ui/vben-alert', + text: 'Alert 轻量提示框', + }, + { + link: 'common-ui/vben-modal', + text: 'Modal 模态框', + }, + { + link: 'common-ui/vben-drawer', + text: 'Drawer 抽屉', + }, + { + link: 'common-ui/vben-form', + text: 'Form 表单', + }, + { + link: 'common-ui/vben-vxe-table', + text: 'Vxe Table 表格', + }, + { + link: 'common-ui/vben-count-to-animator', + text: 'CountToAnimator 数字动画', + }, + { + link: 'common-ui/vben-ellipsis-text', + text: 'EllipsisText 省略文本', + }, + ], + }, + ]; +} + +function nav(): DefaultTheme.NavItem[] { + return [ + { + activeMatch: '^/(guide|components)/', + text: '文档', + items: [ + { + activeMatch: '^/guide/', + link: '/guide/introduction/vben', + text: '指南', + }, + { + activeMatch: '^/components/', + link: '/components/introduction', + text: '组件', + }, + { + text: '历史版本', + items: [ + { + link: 'https://doc.vvbin.cn', + text: '2.x版本文档', + }, + ], + }, + ], + }, + { + text: '演示', + items: [ + { + text: 'Vben Admin', + items: [ + { + link: 'https://www.vben.pro', + text: '演示版本', + }, + { + link: 'https://ant.vben.pro', + text: 'Ant Design Vue 版本', + }, + { + link: 'https://naive.vben.pro', + text: 'Naive 版本', + }, + { + link: 'https://ele.vben.pro', + text: 'Element Plus版本', + }, + ], + }, + { + text: '其他', + items: [ + { + link: 'https://vben.vvbin.cn', + text: 'Vben Admin 2.x', + }, + ], + }, + ], + }, + { + text: version, + items: [ + { + link: 'https://github.com/vbenjs/vue-vben-admin/releases', + text: '更新日志', + }, + { + link: 'https://github.com/orgs/vbenjs/projects/5', + text: '路线图', + }, + { + link: 'https://github.com/vbenjs/vue-vben-admin/blob/main/.github/contributing.md', + text: '贡献', + }, + ], + }, + { + link: '/commercial/technical-support', + text: '🦄 技术支持', + }, + { + link: '/sponsor/personal', + text: '✨ 赞助', + }, + { + link: '/commercial/community', + text: '👨‍👦‍👦 交流群', + // items: [ + // { + // link: 'https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&appChannel=share&inviteCode=22ySzj7pKiw&businessType=9&from=246610&biz=ka&mainSourceId=share&subSourceId=others&jumpsource=shorturl#/pc', + // text: 'QQ频道', + // }, + // { + // link: 'https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=mjZmlhgVzzUxvdxllB6C1vHpX8O8QRL0&authKey=DBdFbBwERmfaKY95JvRWqLCJIRGJAmKyZbrpzZ41EKDMZ5SR6MfbjOBaaNRN73fr&noverify=0&group_code=4286109', + // text: 'QQ群', + // }, + // { + // link: 'https://discord.gg/VU62jTecad', + // text: 'Discord', + // }, + // ], + }, + // { + // link: '/friend-links/', + // text: '🤝 友情链接', + // }, + ]; +} + +export const search: DefaultTheme.AlgoliaSearchOptions['locales'] = { + root: { + placeholder: '搜索文档', + translations: { + button: { + buttonAriaLabel: '搜索文档', + buttonText: '搜索文档', + }, + modal: { + errorScreen: { + helpText: '你可能需要检查你的网络连接', + titleText: '无法获取结果', + }, + footer: { + closeText: '关闭', + navigateText: '切换', + searchByText: '搜索提供者', + selectText: '选择', + }, + noResultsScreen: { + noResultsText: '无法找到相关结果', + reportMissingResultsLinkText: '点击反馈', + reportMissingResultsText: '你认为该查询应该有结果?', + suggestedQueryText: '你可以尝试查询', + }, + searchBox: { + cancelButtonAriaLabel: '取消', + cancelButtonText: '取消', + resetButtonAriaLabel: '清除查询条件', + resetButtonTitle: '清除查询条件', + }, + startScreen: { + favoriteSearchesTitle: '收藏', + noRecentSearchesText: '没有搜索历史', + recentSearchesTitle: '搜索历史', + removeFavoriteSearchButtonTitle: '从收藏中移除', + removeRecentSearchButtonTitle: '从搜索历史中移除', + saveRecentSearchButtonTitle: '保存至搜索历史', + }, + }, + }, + }, +}; diff --git a/docs/.vitepress/theme/components/site-layout.vue b/docs/.vitepress/theme/components/site-layout.vue new file mode 100644 index 000000000..96427d055 --- /dev/null +++ b/docs/.vitepress/theme/components/site-layout.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/docs/.vitepress/theme/components/vben-contributors.vue b/docs/.vitepress/theme/components/vben-contributors.vue new file mode 100644 index 000000000..9b887d925 --- /dev/null +++ b/docs/.vitepress/theme/components/vben-contributors.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts new file mode 100644 index 000000000..7d4d3dc2d --- /dev/null +++ b/docs/.vitepress/theme/index.ts @@ -0,0 +1,29 @@ +// https://vitepress.dev/guide/custom-theme +import type { EnhanceAppContext, Theme } from 'vitepress'; + +import { NolebaseGitChangelogPlugin } from '@nolebase/vitepress-plugin-git-changelog/client'; +import DefaultTheme from 'vitepress/theme'; + +import { DemoPreview } from '../components'; +import SiteLayout from './components/site-layout.vue'; +import VbenContributors from './components/vben-contributors.vue'; +import { initHmPlugin } from './plugins/hm'; + +import './styles'; + +import 'virtual:group-icons.css'; +import '@nolebase/vitepress-plugin-git-changelog/client/style.css'; + +export default { + async enhanceApp(ctx: EnhanceAppContext) { + const { app } = ctx; + app.component('VbenContributors', VbenContributors); + app.component('DemoPreview', DemoPreview); + app.use(NolebaseGitChangelogPlugin); + + // 百度统计 + initHmPlugin(); + }, + extends: DefaultTheme, + Layout: SiteLayout, +} satisfies Theme; diff --git a/docs/.vitepress/theme/plugins/hm.ts b/docs/.vitepress/theme/plugins/hm.ts new file mode 100644 index 000000000..5e0a93182 --- /dev/null +++ b/docs/.vitepress/theme/plugins/hm.ts @@ -0,0 +1,28 @@ +import { inBrowser } from 'vitepress'; + +const SITE_ID = '2e443a834727c065877c01d89921545e'; + +declare global { + interface Window { + _hmt: any; + } +} + +function registerAnalytics() { + window._hmt = window._hmt || []; + const script = document.createElement('script'); + script.innerHTML = `var _hmt = _hmt || []; + (function() { + var hm = document.createElement("script"); + hm.src = "https://hm.baidu.com/hm.js?${SITE_ID}"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); + })()`; + document.querySelector('head')?.append(script); +} + +export function initHmPlugin() { + if (inBrowser && import.meta.env.PROD) { + registerAnalytics(); + } +} diff --git a/docs/.vitepress/theme/styles/base.css b/docs/.vitepress/theme/styles/base.css new file mode 100644 index 000000000..8eb423afa --- /dev/null +++ b/docs/.vitepress/theme/styles/base.css @@ -0,0 +1,22 @@ +html.dark { + color-scheme: dark; +} + +.dark .VPContent { + /* background-color: #14161a; */ +} + +.form-valid-error p { + margin: 0; +} + +/* 顶部导航栏选中项样式 */ +.VPNavBarMenuLink, +.VPNavBarMenuGroup { + border-bottom: 1px solid transparent; +} + +.VPNavBarMenuLink.active, +.VPNavBarMenuGroup.active { + border-bottom-color: var(--vp-c-brand-1); +} diff --git a/docs/.vitepress/theme/styles/index.ts b/docs/.vitepress/theme/styles/index.ts new file mode 100644 index 000000000..566e63f8c --- /dev/null +++ b/docs/.vitepress/theme/styles/index.ts @@ -0,0 +1,4 @@ +import '@vben/styles'; + +import './variables.css'; +import './base.css'; diff --git a/docs/.vitepress/theme/styles/variables.css b/docs/.vitepress/theme/styles/variables.css new file mode 100644 index 000000000..124bb0c45 --- /dev/null +++ b/docs/.vitepress/theme/styles/variables.css @@ -0,0 +1,132 @@ +/** + * Customize default theme styling by overriding CSS variables: + * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css + */ + +/** + * Colors + * + * Each colors have exact same color scale system with 3 levels of solid + * colors with different brightness, and 1 soft color. + * + * - `XXX-1`: The most solid color used mainly for colored text. It must + * satisfy the contrast ratio against when used on top of `XXX-soft`. + * + * - `XXX-2`: The color used mainly for hover state of the button. + * + * - `XXX-3`: The color for solid background, such as bg color of the button. + * It must satisfy the contrast ratio with pure white (#ffffff) text on + * top of it. + * + * - `XXX-soft`: The color used for subtle background such as custom container + * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors + * on top of it. + * + * The soft color must be semi transparent alpha channel. This is crucial + * because it allows adding multiple "soft" colors on top of each other + * to create a accent, such as when having inline code block inside + * custom containers. + * + * - `default`: The color used purely for subtle indication without any + * special meanings attched to it such as bg color for menu hover state. + * + * - `brand`: Used for primary brand colors, such as link text, button with + * brand theme, etc. + * + * - `tip`: Used to indicate useful information. The default theme uses the + * brand color for this by default. + * + * - `warning`: Used to indicate warning to the users. Used in custom + * container, badges, etc. + * + * - `danger`: Used to show error, or dangerous message to the users. Used + * in custom container, badges, etc. + * -------------------------------------------------------------------------- */ + +:root { + /* --vp-c-indigo-1: #4f69fd; */ + --vp-c-default-1: var(--vp-c-gray-1); + --vp-c-default-2: var(--vp-c-gray-2); + --vp-c-default-3: var(--vp-c-gray-3); + --vp-c-default-soft: var(--vp-c-gray-soft); + --vp-c-brand-1: var(--vp-c-indigo-1); + --vp-c-brand-2: var(--vp-c-indigo-2); + --vp-c-brand-3: var(--vp-c-indigo-3); + --vp-c-brand-soft: var(--vp-c-indigo-soft); + --vp-c-tip-1: var(--vp-c-brand-1); + --vp-c-tip-2: var(--vp-c-brand-2); + --vp-c-tip-3: var(--vp-c-brand-3); + --vp-c-tip-soft: var(--vp-c-brand-soft); + --vp-c-warning-1: var(--vp-c-yellow-1); + --vp-c-warning-2: var(--vp-c-yellow-2); + --vp-c-warning-3: var(--vp-c-yellow-3); + --vp-c-warning-soft: var(--vp-c-yellow-soft); + --vp-c-danger-1: var(--vp-c-red-1); + --vp-c-danger-2: var(--vp-c-red-2); + --vp-c-danger-3: var(--vp-c-red-3); + --vp-c-danger-soft: var(--vp-c-red-soft); + + /** + * Component: Button + * -------------------------------------------------------------------------- */ + + --vp-button-brand-border: transparent; + --vp-button-brand-text: var(--vp-c-white); + --vp-button-brand-bg: var(--vp-c-brand-3); + --vp-button-brand-hover-border: transparent; + --vp-button-brand-hover-text: var(--vp-c-white); + --vp-button-brand-hover-bg: var(--vp-c-brand-2); + --vp-button-brand-active-border: transparent; + --vp-button-brand-active-text: var(--vp-c-white); + --vp-button-brand-active-bg: var(--vp-c-brand-1); + + /** + * Component: Home + * -------------------------------------------------------------------------- */ + + --vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: linear-gradient( + 120deg, + var(--vp-c-indigo-1) 30%, + #18cefe + ); + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + #18cefe 50%, + #c279ed 50% + ); + --vp-home-hero-image-filter: blur(44px); + + /** + * Component: Custom Block + * -------------------------------------------------------------------------- */ + --vp-custom-block-tip-border: transparent; + --vp-custom-block-tip-text: var(--vp-c-text-1); + --vp-custom-block-tip-bg: var(--vp-c-brand-soft); + --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); + + /** + * modal zIndex + */ + --popup-z-index: 1000; +} + +@media (min-width: 640px) { + :root { + --vp-home-hero-image-filter: blur(56px); + } +} + +@media (min-width: 960px) { + :root { + --vp-home-hero-image-filter: blur(68px); + } +} + +/** + * Component: Algolia + * -------------------------------------------------------------------------- */ + +.DocSearch { + --docsearch-primary-color: var(--vp-c-brand-1) !important; +} diff --git a/docs/src/_env/adapter/component.ts b/docs/src/_env/adapter/component.ts new file mode 100644 index 000000000..ec3d0196c --- /dev/null +++ b/docs/src/_env/adapter/component.ts @@ -0,0 +1,128 @@ +/** + * 通用组件共同的使用的基础组件,原先放在 adapter/form 内部,限制了使用范围,这里提取出来,方便其他地方使用 + * 可用于 vben-form、vben-modal、vben-drawer 等组件使用, + */ + +import type { Component, SetupContext } from 'vue'; + +import type { BaseFormComponentType } from '@vben/common-ui'; + +import { h } from 'vue'; + +import { globalShareState } from '@vben/common-ui'; +import { $t } from '@vben/locales'; + +import { + AutoComplete, + Button, + Checkbox, + CheckboxGroup, + DatePicker, + Divider, + Input, + InputNumber, + InputPassword, + Mentions, + notification, + Radio, + RadioGroup, + RangePicker, + Rate, + Select, + Space, + Switch, + Textarea, + TimePicker, + TreeSelect, + Upload, +} from 'ant-design-vue'; + +const withDefaultPlaceholder = ( + component: T, + type: 'input' | 'select', +) => { + return (props: any, { attrs, slots }: Omit) => { + const placeholder = props?.placeholder || $t(`ui.placeholder.${type}`); + return h(component, { ...props, ...attrs, placeholder }, slots); + }; +}; + +// 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明 +export type ComponentType = + | 'AutoComplete' + | 'Checkbox' + | 'CheckboxGroup' + | 'DatePicker' + | 'DefaultButton' + | 'Divider' + | 'Input' + | 'InputNumber' + | 'InputPassword' + | 'Mentions' + | 'PrimaryButton' + | 'Radio' + | 'RadioGroup' + | 'RangePicker' + | 'Rate' + | 'Select' + | 'Space' + | 'Switch' + | 'Textarea' + | 'TimePicker' + | 'TreeSelect' + | 'Upload' + | BaseFormComponentType; + +async function initComponentAdapter() { + const components: Partial> = { + // 如果你的组件体积比较大,可以使用异步加载 + // Button: () => + // import('xxx').then((res) => res.Button), + + AutoComplete, + Checkbox, + CheckboxGroup, + DatePicker, + // 自定义默认按钮 + DefaultButton: (props, { attrs, slots }) => { + return h(Button, { ...props, attrs, type: 'default' }, slots); + }, + Divider, + Input: withDefaultPlaceholder(Input, 'input'), + InputNumber: withDefaultPlaceholder(InputNumber, 'input'), + InputPassword: withDefaultPlaceholder(InputPassword, 'input'), + Mentions: withDefaultPlaceholder(Mentions, 'input'), + // 自定义主要按钮 + PrimaryButton: (props, { attrs, slots }) => { + return h(Button, { ...props, attrs, type: 'primary' }, slots); + }, + Radio, + RadioGroup, + RangePicker, + Rate, + Select: withDefaultPlaceholder(Select, 'select'), + Space, + Switch, + Textarea: withDefaultPlaceholder(Textarea, 'input'), + TimePicker, + TreeSelect: withDefaultPlaceholder(TreeSelect, 'select'), + Upload, + }; + + // 将组件注册到全局共享状态中 + globalShareState.setComponents(components); + + // 定义全局共享状态中的消息提示 + globalShareState.defineMessage({ + // 复制成功消息提示 + copyPreferencesSuccess: (title, content) => { + notification.success({ + description: content, + message: title, + placement: 'bottomRight', + }); + }, + }); +} + +export { initComponentAdapter }; diff --git a/docs/src/_env/adapter/form.ts b/docs/src/_env/adapter/form.ts new file mode 100644 index 000000000..d8b51c254 --- /dev/null +++ b/docs/src/_env/adapter/form.ts @@ -0,0 +1,47 @@ +import type { + VbenFormSchema as FormSchema, + VbenFormProps, +} from '@vben/common-ui'; + +import type { ComponentType } from './component'; + +import { setupVbenForm, useVbenForm as useForm, z } from '@vben/common-ui'; +import { $t } from '@vben/locales'; + +import { initComponentAdapter } from './component'; + +initComponentAdapter(); +setupVbenForm({ + config: { + baseModelPropName: 'value', + // naive-ui组件的空值为null,不能是undefined,否则重置表单时不生效 + emptyStateValue: null, + modelPropNameMap: { + Checkbox: 'checked', + Radio: 'checked', + Switch: 'checked', + Upload: 'fileList', + }, + }, + defineRules: { + required: (value, _params, ctx) => { + if (value === undefined || value === null || value.length === 0) { + return $t('ui.formRules.required', [ctx.label]); + } + return true; + }, + selectRequired: (value, _params, ctx) => { + if (value === undefined || value === null) { + return $t('ui.formRules.selectRequired', [ctx.label]); + } + return true; + }, + }, +}); + +const useVbenForm = useForm; + +export { useVbenForm, z }; + +export type VbenFormSchema = FormSchema; +export type { VbenFormProps }; diff --git a/docs/src/_env/adapter/vxe-table.ts b/docs/src/_env/adapter/vxe-table.ts new file mode 100644 index 000000000..bab7f3d38 --- /dev/null +++ b/docs/src/_env/adapter/vxe-table.ts @@ -0,0 +1,70 @@ +import { h } from 'vue'; + +import { setupVbenVxeTable, useVbenVxeGrid } from '@vben/plugins/vxe-table'; + +import { Button, Image } from 'ant-design-vue'; + +import { useVbenForm } from './form'; + +if (!import.meta.env.SSR) { + setupVbenVxeTable({ + configVxeTable: (vxeUI) => { + vxeUI.setConfig({ + grid: { + align: 'center', + border: false, + columnConfig: { + resizable: true, + }, + + formConfig: { + // 全局禁用vxe-table的表单配置,使用formOptions + enabled: false, + }, + minHeight: 180, + proxyConfig: { + autoLoad: true, + response: { + result: 'items', + total: 'total', + list: 'items', + }, + showActiveMsg: true, + showResponseMsg: false, + }, + round: true, + showOverflow: true, + size: 'small', + }, + }); + + // 表格配置项可以用 cellRender: { name: 'CellImage' }, + vxeUI.renderer.add('CellImage', { + renderTableDefault(_renderOpts, params) { + const { column, row } = params; + return h(Image, { src: row[column.field] }); + }, + }); + + // 表格配置项可以用 cellRender: { name: 'CellLink' }, + vxeUI.renderer.add('CellLink', { + renderTableDefault(renderOpts) { + const { props } = renderOpts; + return h( + Button, + { size: 'small', type: 'link' }, + { default: () => props?.text }, + ); + }, + }); + + // 这里可以自行扩展 vxe-table 的全局配置,比如自定义格式化 + // vxeUI.formats.add + }, + useVbenForm, + }); +} + +export { useVbenVxeGrid }; + +export type * from '@vben/plugins/vxe-table'; diff --git a/docs/src/_env/node/adapter/form.ts b/docs/src/_env/node/adapter/form.ts new file mode 100644 index 000000000..a206c0d8b --- /dev/null +++ b/docs/src/_env/node/adapter/form.ts @@ -0,0 +1,4 @@ +export const useVbenForm = () => {}; +export const z = {}; +export type VbenFormSchema = any; +export type VbenFormProps = any; diff --git a/docs/src/_env/node/adapter/vxe-table.ts b/docs/src/_env/node/adapter/vxe-table.ts new file mode 100644 index 000000000..5ec409fb2 --- /dev/null +++ b/docs/src/_env/node/adapter/vxe-table.ts @@ -0,0 +1,3 @@ +export type * from '@vben/plugins/vxe-table'; + +export const useVbenVxeGrid = () => {}; diff --git a/docs/src/commercial/community.md b/docs/src/commercial/community.md new file mode 100644 index 000000000..60d9f2543 --- /dev/null +++ b/docs/src/commercial/community.md @@ -0,0 +1,30 @@ +# 社区交流 + +社区交流群主要是为了方便大家交流,提问,解答问题,分享经验等。偏自助方式,如果你有问题,可以通过以下方式加入社区交流群: + +- [QQ频道](https://pd.qq.com/s/16p8lvvob):推荐!!!主要提供问题解答,分享经验等。 +- QQ群:[大群](https://qm.qq.com/q/MEmHoCLbG0),[1群](https://qm.qq.com/q/YacMHPYAMu)、[2群](https://qm.qq.com/q/ajVKZvFICk)、[3群](https://qm.qq.com/q/36zdwThP2E),[4群](https://qm.qq.com/q/sCzSlm3504),[5群](https://qm.qq.com/q/ya9XrtbS6s),主要的使用者交流群。 +- [Discord](https://discord.com/invite/VU62jTecad): 主要提供问题解答,分享经验等。 + +::: tip + +免费QQ群人数上限200,将会不定期清理。推荐加入QQ频道进行交流 + +::: + +## 微信群 + +作者主要通过微信群提供帮助,如果你有问题,可以通过以下方式加入微信群。 + +通过微信联系作者,注明加群来意: + +::: tip + +因为微信群人数有限制,加微信群要求: + +- 通过[赞助](../sponsor/personal.md)任意金额。 +- 发送赞助`截图`,备注`加入微信群`即可。 + +::: + + diff --git a/docs/src/commercial/customized.md b/docs/src/commercial/customized.md new file mode 100644 index 000000000..1f0bcecaf --- /dev/null +++ b/docs/src/commercial/customized.md @@ -0,0 +1,12 @@ +# 定制开发 + +我们提供基于 Vben Admin 的技术支持服务及定制开发,基本需求我们都可以满足。 + +详细需求可添加作者了解,并注明来意: + +- 通过邮箱联系开发者: [ann.vben@gmail.com](mailto:ann.vben@gmail.com) +- 通过微信联系开发者: + + + +我们会在第一时间回复您,定制费用根据需求而定。 diff --git a/docs/src/commercial/technical-support.md b/docs/src/commercial/technical-support.md new file mode 100644 index 000000000..ded9bf2db --- /dev/null +++ b/docs/src/commercial/technical-support.md @@ -0,0 +1,8 @@ +# 技术支持 + +## 问题反馈 + +在使用项目的过程中,如果遇到问题,你可以先详细阅读本文档,未找到解决方案时,可以通过以下方式获取技术支持: + +- 通过 [GitHub Issues](https://github.com/vbenjs/vue-vben-admin/issues) +- 通过 [GitHub Discussions](https://github.com/vbenjs/vue-vben-admin/discussions) diff --git a/docs/src/components/common-ui/vben-api-component.md b/docs/src/components/common-ui/vben-api-component.md new file mode 100644 index 000000000..2c84e56b5 --- /dev/null +++ b/docs/src/components/common-ui/vben-api-component.md @@ -0,0 +1,173 @@ +--- +outline: deep +--- + +# Vben ApiComponent Api组件包装器 + +框架提供的API“包装器”,它一般不独立使用,主要用于包装其它组件,为目标组件提供自动获取远程数据的能力,但仍然保持了目标组件的原始用法。 + +::: info 写在前面 + +我们在各个应用的组件适配器中,使用ApiComponent包装了Select、TreeSelect组件,使得这些组件可以自动获取远程数据并生成选项。其它类似的组件(比如Cascader)如有需要也可以参考示例代码自行进行包装。 + +::: + +## 基础用法 + +通过 `component` 传入其它组件的定义,并配置相关的其它属性(主要是一些名称映射)。包装组件将通过`api`获取数据(`beforerFetch`、`afterFetch`将分别在`api`运行前、运行后被调用),使用`resultField`从中提取数组,使用`valueField`、`labelField`等来从数据中提取value和label(如果提供了`childrenField`,会将其作为树形结构递归处理每一级数据),之后将处理好的数据通过`optionsPropName`指定的属性传递给目标组件。 + +::: details 包装级联选择器,点击下拉时开始加载远程数据 + +```vue + + +``` + +::: + +## 并发和缓存 + +有些场景下可能需要使用多个ApiComponent,它们使用了相同的远程数据源(例如用在可编辑的表格中)。如果直接将请求后端接口的函数传递给api属性,则每一个实例都会访问一次接口,这会造成资源浪费,是完全没有必要的。Tanstack Query提供了并发控制、缓存、重试等诸多特性,我们可以将接口请求函数用useQuery包装一下再传递给ApiComponent,这样的话无论页面有多少个使用相同数据源的ApiComponent实例,都只会发起一次远程请求。演示效果请参考 [Playground vue-query](https://www.vben.pro/#/demos/features/vue-query),具体代码请查看项目文件[concurrency-caching](https://github.com/vbenjs/vue-vben-admin/blob/main/playground/src/views/demos/features/vue-query/concurrency-caching.vue) + +## API + +### Props + +| 属性名 | 描述 | 类型 | 默认值 | 版本要求 | +| --- | --- | --- | --- | --- | +| modelValue(v-model) | 当前值 | `any` | - | - | +| component | 欲包装的组件(以下称为目标组件) | `Component` | - | - | +| numberToString | 是否将value从数字转为string | `boolean` | `false` | - | +| api | 获取数据的函数 | `(arg?: any) => Promise>` | - | - | +| params | 传递给api的参数 | `Record` | - | - | +| resultField | 从api返回的结果中提取options数组的字段名 | `string` | - | - | +| labelField | label字段名 | `string` | `label` | - | +| childrenField | 子级数据字段名,需要层级数据的组件可用 | `string` | `` | - | +| valueField | value字段名 | `string` | `value` | - | +| optionsPropName | 目标组件接收options数据的属性名称 | `string` | `options` | - | +| modelPropName | 目标组件的双向绑定属性名,默认为modelValue。部分组件可能为value | `string` | `modelValue` | - | +| immediate | 是否立即调用api | `boolean` | `true` | - | +| alwaysLoad | 每次`visibleEvent`事件发生时都重新请求数据 | `boolean` | `false` | - | +| beforeFetch | 在api请求之前的回调函数 | `AnyPromiseFunction` | - | - | +| afterFetch | 在api请求之后的回调函数 | `AnyPromiseFunction` | - | - | +| options | 直接传入选项数据,也作为api返回空数据时的后备数据 | `OptionsItem[]` | - | - | +| visibleEvent | 触发重新请求数据的事件名 | `string` | - | - | +| loadingSlot | 目标组件的插槽名称,用来显示一个"加载中"的图标 | `string` | - | - | +| autoSelect | 自动设置选项 | `'first' \| 'last' \| 'one'\| ((item: OptionsItem[]) => OptionsItem) \| false` | `false` | >5.5.4 | + +#### autoSelect 自动设置选项 + +如果当前值为undefined,在选项数据成功加载之后,自动从备选项中选择一个作为当前值。默认值为`false`,即不自动选择选项。注意:该属性不应用于多选组件。可选值有: + +- `"first"`:自动选择第一个选项 +- `"last"`:自动选择最后一个选项 +- `"one"`:有且仅有一个选项时,自动选择它 +- `自定义函数`:自定义选择逻辑,函数的参数为options,返回值为选择的选项 +- `false`:不自动选择选项 + +### Methods + +| 方法 | 描述 | 类型 | 版本要求 | +| --- | --- | --- | --- | +| getComponentRef | 获取被包装的组件的实例 | ()=>T | >5.5.4 | +| updateParam | 设置接口请求参数(将与params属性合并) | (newParams: Record)=>void | >5.5.4 | +| getOptions | 获取已加载的选项数据 | ()=>OptionsItem[] | >5.5.4 | +| getValue | 获取当前值 | ()=>any | >5.5.4 | diff --git a/docs/src/components/common-ui/vben-count-to-animator.md b/docs/src/components/common-ui/vben-count-to-animator.md new file mode 100644 index 000000000..5f3ec1881 --- /dev/null +++ b/docs/src/components/common-ui/vben-count-to-animator.md @@ -0,0 +1,59 @@ +--- +outline: deep +--- + +# Vben CountToAnimator 数字动画 + +框架提供的数字动画组件,支持数字动画效果。 + +> 如果文档内没有参数说明,可以尝试在在线示例内寻找 + +::: info 写在前面 + +如果你觉得现有组件的封装不够理想,或者不完全符合你的需求,大可以直接使用原生组件,亦或亲手封装一个适合的组件。框架提供的组件并非束缚,使用与否,完全取决于你的需求与自由。 + +::: + +## 基础用法 + +通过 `start-val` 和 `end-val`设置数字动画的开始值和结束值, 持续时间`3000`ms。 + + + +## 自定义前缀及分隔符 + +通过 `prefix` 和 `separator` 设置数字动画的前缀和分隔符。 + + + +### Props + +| 属性名 | 描述 | 类型 | 默认值 | +| ---------- | -------------- | --------- | -------- | +| startVal | 起始值 | `number` | `0` | +| endVal | 结束值 | `number` | `2021` | +| duration | 动画持续时间 | `number` | `1500` | +| autoplay | 自动执行 | `boolean` | `true` | +| prefix | 前缀 | `string` | - | +| suffix | 后缀 | `string` | - | +| separator | 分隔符 | `string` | `,` | +| color | 字体颜色 | `string` | - | +| useEasing | 是否开启动画 | `boolean` | `true` | +| transition | 动画效果 | `string` | `linear` | +| decimals | 保留小数点位数 | `number` | `0` | + +### Events + +| 事件名 | 描述 | 类型 | +| -------------- | -------------- | -------------- | +| started | 动画已开始 | `()=>void` | +| finished | 动画已结束 | `()=>void` | +| ~~onStarted~~ | ~~动画已开始~~ | ~~`()=>void`~~ | +| ~~onFinished~~ | ~~动画已结束~~ | ~~`()=>void`~~ | + +### Methods + +| 方法名 | 描述 | 类型 | +| ------ | ------------ | ---------- | +| start | 开始执行动画 | `()=>void` | +| reset | 重置 | `()=>void` | diff --git a/docs/src/components/common-ui/vben-drawer.md b/docs/src/components/common-ui/vben-drawer.md new file mode 100644 index 000000000..3a28cce79 --- /dev/null +++ b/docs/src/components/common-ui/vben-drawer.md @@ -0,0 +1,156 @@ +--- +outline: deep +--- + +# Vben Drawer 抽屉 + +框架提供的抽屉组件,支持`自动高度`、`loading`等功能。 + +> 如果文档内没有参数说明,可以尝试在在线示例内寻找 + +::: info 写在前面 + +如果你觉得现有组件的封装不够理想,或者不完全符合你的需求,大可以直接使用原生组件,亦或亲手封装一个适合的组件。框架提供的组件并非束缚,使用与否,完全取决于你的需求与自由。 + +::: + +::: tip README + +下方示例代码中的,存在一些国际化、主题色未适配问题,这些问题只在文档内会出现,实际使用并不会有这些问题,可忽略,不必纠结。 + +::: + +## 基础用法 + +使用 `useVbenDrawer` 创建最基础的抽屉。 + + + +## 组件抽离 + +Drawer 内的内容一般业务中,会比较复杂,所以我们可以将 drawer 内的内容抽离出来,也方便复用。通过 `connectedComponent` 参数,可以将内外组件进行连接,而不用其他任何操作。 + + + +## 自动计算高度 + +弹窗会自动计算内容高度,超过一定高度会出现滚动条,同时结合 `loading` 效果以及使用 `prepend-footer` 插槽。 + + + +## 使用 Api + +通过 `drawerApi` 可以调用 drawer 的方法以及使用 `setState` 更新 drawer 的状态。 + + + +## 数据共享 + +如果你使用了 `connectedComponent` 参数,那么内外组件会共享数据,比如一些表单回填等操作。可以用 `drawerApi` 来获取数据和设置数据,配合 `onOpenChange`,可以满足大部分的需求。 + + + +::: info 注意 + +- `VbenDrawer` 组件对于参数的处理优先级是 `slot` > `props` > `state`(通过api更新的状态以及useVbenDrawer参数)。如果你已经传入了 `slot` 或者 `props`,那么 `setState` 将不会生效,这种情况下你可以通过 `slot` 或者 `props` 来更新状态。 +- 如果你使用到了 `connectedComponent` 参数,那么会存在 2 个`useVbenDrawer`, 此时,如果同时设置了相同的参数,那么以内部为准(也就是没有设置 connectedComponent 的代码)。比如 同时设置了 `onConfirm`,那么以内部的 `onConfirm` 为准。`onOpenChange`事件除外,内外都会触发。 +- 使用了`connectedComponent`参数时,可以配置`destroyOnClose`属性来决定当关闭弹窗时,是否要销毁`connectedComponent`组件(重新创建`connectedComponent`组件,这将会把其内部所有的变量、状态、数据等恢复到初始状态。)。 +- 如果抽屉的默认行为不符合你的预期,可以在`src\bootstrap.ts`中修改`setDefaultDrawerProps`的参数来设置默认的属性,如默认隐藏全屏按钮,修改默认ZIndex等。 + +::: + +## API + +```ts +// Drawer 为弹窗组件 +// drawerApi 为弹窗的方法 +const [Drawer, drawerApi] = useVbenDrawer({ + // 属性 + // 事件 +}); +``` + +### Props + +所有属性都可以传入 `useVbenDrawer` 的第一个参数中。 + +| 属性名 | 描述 | 类型 | 默认值 | +| --- | --- | --- | --- | +| appendToMain | 是否挂载到内容区域(默认挂载到body) | `boolean` | `false` | +| connectedComponent | 连接另一个Drawer组件 | `Component` | - | +| destroyOnClose | 关闭时销毁 | `boolean` | `false` | +| title | 标题 | `string\|slot` | - | +| titleTooltip | 标题提示信息 | `string\|slot` | - | +| description | 描述信息 | `string\|slot` | - | +| isOpen | 弹窗打开状态 | `boolean` | `false` | +| loading | 弹窗加载状态 | `boolean` | `false` | +| closable | 显示关闭按钮 | `boolean` | `true` | +| closeIconPlacement | 关闭按钮位置 | `'left'\|'right'` | `right` | +| modal | 显示遮罩 | `boolean` | `true` | +| header | 显示header | `boolean` | `true` | +| footer | 显示footer | `boolean\|slot` | `true` | +| confirmLoading | 确认按钮loading状态 | `boolean` | `false` | +| closeOnClickModal | 点击遮罩关闭弹窗 | `boolean` | `true` | +| closeOnPressEscape | esc 关闭弹窗 | `boolean` | `true` | +| confirmText | 确认按钮文本 | `string\|slot` | `确认` | +| cancelText | 取消按钮文本 | `string\|slot` | `取消` | +| placement | 抽屉弹出位置 | `'left'\|'right'\|'top'\|'bottom'` | `right` | +| showCancelButton | 显示取消按钮 | `boolean` | `true` | +| showConfirmButton | 显示确认按钮 | `boolean` | `true` | +| class | modal的class,宽度通过这个配置 | `string` | - | +| contentClass | modal内容区域的class | `string` | - | +| footerClass | modal底部区域的class | `string` | - | +| headerClass | modal顶部区域的class | `string` | - | +| zIndex | 抽屉的ZIndex层级 | `number` | `1000` | +| overlayBlur | 遮罩模糊度 | `number` | - | + +::: info appendToMain + +`appendToMain`可以指定将抽屉挂载到内容区域,打开抽屉时,内容区域以外的部分(标签栏、导航菜单等等)不会被遮挡。默认情况下,抽屉会挂载到body上。但是:挂载到内容区域时,作为页面根容器的`Page`组件,需要设置`auto-content-height`属性,以便抽屉能够正确计算高度。 + +::: + +### Event + +以下事件,只有在 `useVbenDrawer({onCancel:()=>{}})` 中传入才会生效。 + +| 事件名 | 描述 | 类型 | 版本限制 | +| --- | --- | --- | --- | +| onBeforeClose | 关闭前触发,返回 `false`则禁止关闭 | `()=>boolean` | --- | +| onCancel | 点击取消按钮触发 | `()=>void` | --- | +| onClosed | 关闭动画播放完毕时触发 | `()=>void` | >5.5.2 | +| onConfirm | 点击确认按钮触发 | `()=>void` | --- | +| onOpenChange | 关闭或者打开弹窗时触发 | `(isOpen:boolean)=>void` | --- | +| onOpened | 打开动画播放完毕时触发 | `()=>void` | >5.5.2 | + +### Slots + +除了上面的属性类型包含`slot`,还可以通过插槽来自定义弹窗的内容。 + +| 插槽名 | 描述 | +| -------------- | -------------------------------------------------- | +| default | 默认插槽 - 弹窗内容 | +| prepend-footer | 取消按钮左侧 | +| center-footer | 取消按钮和确认按钮中间(不使用 footer 插槽时有效) | +| append-footer | 确认按钮右侧 | +| close-icon | 关闭按钮图标 | +| extra | 额外内容(标题右侧) | + +### drawerApi + +| 方法 | 描述 | 类型 | 版本限制 | +| --- | --- | --- | --- | +| setState | 动态设置弹窗状态属性 | `(((prev: ModalState) => Partial)\| Partial)=>drawerApi` | +| open | 打开弹窗 | `()=>void` | --- | +| close | 关闭弹窗 | `()=>void` | --- | +| setData | 设置共享数据 | `(data:T)=>drawerApi` | --- | +| getData | 获取共享数据 | `()=>T` | --- | +| useStore | 获取可响应式状态 | - | --- | +| lock | 将抽屉标记为提交中,锁定当前状态 | `(isLock:boolean)=>drawerApi` | >5.5.3 | +| unlock | lock方法的反操作,解除抽屉的锁定状态,也是lock(false)的别名 | `()=>drawerApi` | >5.5.3 | + +::: info lock + +`lock`方法用于锁定抽屉的状态,一般用于提交数据的过程中防止用户重复提交或者抽屉被意外关闭、表单数据被改变等等。当处于锁定状态时,抽屉的确认按钮会变为loading状态,同时禁用取消按钮和关闭按钮、禁止ESC或者点击遮罩等方式关闭抽屉、开启抽屉的spinner动画以遮挡弹窗内容。调用`close`方法关闭处于锁定状态的抽屉时,会自动解锁。要主动解除这种状态,可以调用`unlock`方法或者再次调用lock方法并传入false参数。 + +::: diff --git a/docs/src/components/common-ui/vben-ellipsis-text.md b/docs/src/components/common-ui/vben-ellipsis-text.md new file mode 100644 index 000000000..ce6c0334a --- /dev/null +++ b/docs/src/components/common-ui/vben-ellipsis-text.md @@ -0,0 +1,64 @@ +--- +outline: deep +--- + +# Vben EllipsisText 省略文本 + +框架提供的文本展示组件,可配置超长省略、tooltip提示、展开收起等功能。 + +> 如果文档内没有参数说明,可以尝试在在线示例内寻找 + +## 基础用法 + +通过默认插槽设置文本内容,`maxWidth`属性设置最大宽度。 + + + +## 可折叠的文本块 + +通过`line`设置折叠后的行数,`expand`属性设置是否支持展开收起。 + + + +## 自定义提示浮层 + +通过名为`tooltip`的插槽定制提示信息。 + + + +## 自动显示 tooltip + +通过`tooltip-when-ellipsis`设置,仅在文本长度超出导致省略号出现时才触发 tooltip。 + + + +## API + +### Props + +| 属性名 | 描述 | 类型 | 默认值 | +| --- | --- | --- | --- | +| expand | 支持点击展开或收起 | `boolean` | `false` | +| line | 文本最大行数 | `number` | `1` | +| maxWidth | 文本区域最大宽度 | `number \| string` | `'100%'` | +| placement | 提示浮层的位置 | `'bottom'\|'left'\|'right'\|'top'` | `'top'` | +| tooltip | 启用文本提示 | `boolean` | `true` | +| tooltipWhenEllipsis | 内容超出,自动启用文本提示 | `boolean` | `false` | +| ellipsisThreshold | 设置 tooltipWhenEllipsis 后才生效,文本截断检测的像素差异阈值,越大则判断越严格,如果碰见异常情况可以自己设置阈值 | `number` | `3` | +| tooltipBackgroundColor | 提示文本的背景颜色 | `string` | - | +| tooltipColor | 提示文本的颜色 | `string` | - | +| tooltipFontSize | 提示文本的大小 | `string` | - | +| tooltipMaxWidth | 提示浮层的最大宽度。如不设置则保持与文本宽度一致 | `number` | - | +| tooltipOverlayStyle | 提示框内容区域样式 | `CSSProperties` | `{ textAlign: 'justify' }` | + +### Events + +| 事件名 | 描述 | 类型 | +| ------------ | ------------ | -------------------------- | +| expandChange | 展开状态改变 | `(isExpand:boolean)=>void` | + +### Slots + +| 插槽名 | 描述 | +| ------- | -------------------------------- | +| tooltip | 启用文本提示时,用来定制提示内容 | diff --git a/docs/src/components/common-ui/vben-vxe-table.md b/docs/src/components/common-ui/vben-vxe-table.md new file mode 100644 index 000000000..344ecae11 --- /dev/null +++ b/docs/src/components/common-ui/vben-vxe-table.md @@ -0,0 +1,276 @@ +--- +outline: deep +--- + +# Vben Vxe Table 表格 + +框架提供的Table 列表组件基于 [vxe-table](https://vxetable.cn/v4/#/grid/api?apiKey=grid),结合`Vben Form 表单`进行了二次封装。 + +其中,表头的 **表单搜索** 部分采用了`Vben Form表单`,表格主体部分使用了`vxe-grid`组件,支持表格的分页、排序、筛选等功能。 + +> 如果文档内没有参数说明,可以尝试在在线示例或者在 [vxe-grid 官方API 文档](https://vxetable.cn/v4/#/grid/api?apiKey=grid) 内寻找 + +::: info 写在前面 + +如果你觉得现有组件的封装不够理想,或者不完全符合你的需求,大可以直接使用原生组件,亦或亲手封装一个适合的组件。框架提供的组件并非束缚,使用与否,完全取决于你的需求与自由。 + +::: + +## 适配器 + +表格底层使用 [vxe-table](https://vxetable.cn/#/start/install) 进行实现,所以你可以使用 `vxe-table` 的所有功能。对于不同的 UI 框架,我们提供了适配器,以便更好的适配不同的 UI 框架。 + +### 适配器说明 + +每个应用都可以自己配置`vxe-table`的适配器,你可以根据自己的需求。下面是一个简单的配置示例: + +::: details vxe-table 表格适配器 + +```ts +import { h } from 'vue'; + +import { setupVbenVxeTable, useVbenVxeGrid } from '@vben/plugins/vxe-table'; + +import { Button, Image } from 'ant-design-vue'; + +import { useVbenForm } from './form'; + +setupVbenVxeTable({ + configVxeTable: (vxeUI) => { + vxeUI.setConfig({ + grid: { + align: 'center', + border: false, + columnConfig: { + resizable: true, + }, + minHeight: 180, + formConfig: { + // 全局禁用vxe-table的表单配置,使用formOptions + enabled: false, + }, + proxyConfig: { + autoLoad: true, + response: { + result: 'items', + total: 'total', + list: 'items', + }, + showActiveMsg: true, + showResponseMsg: false, + }, + round: true, + showOverflow: true, + size: 'small', + }, + }); + + // 表格配置项可以用 cellRender: { name: 'CellImage' }, + vxeUI.renderer.add('CellImage', { + renderTableDefault(_renderOpts, params) { + const { column, row } = params; + return h(Image, { src: row[column.field] }); + }, + }); + + // 表格配置项可以用 cellRender: { name: 'CellLink' }, + vxeUI.renderer.add('CellLink', { + renderTableDefault(renderOpts) { + const { props } = renderOpts; + return h( + Button, + { size: 'small', type: 'link' }, + { default: () => props?.text }, + ); + }, + }); + + // 这里可以自行扩展 vxe-table 的全局配置,比如自定义格式化 + // vxeUI.formats.add + }, + useVbenForm, +}); + +export { useVbenVxeGrid }; + +export type * from '@vben/plugins/vxe-table'; +``` + +::: + +## 基础表格 + +使用 `useVbenVxeGrid` 创建最基础的表格。 + + + +## 远程加载 + +通过指定 `proxyConfig.ajax` 的 `query` 方法,可以实现远程加载数据。 + + + +## 树形表格 + +树形表格的数据源为扁平结构,可以指定`treeConfig`配置项,实现树形表格。 + +```typescript +treeConfig: { + transform: true, // 指定表格为树形表格 + parentField: 'parentId', // 父节点字段名 + rowField: 'id', // 行数据字段名 +}, +``` + + + +## 固定表头/列 + +列固定可选参数: `'left' | 'right' | '' | null` + + + +## 自定义单元格 + +自定义单元格有两种实现方式 + +- 通过 `slots` 插槽 +- 通过 `customCell` 自定义单元格,但是要先添加渲染器 + +```typescript +// 表格配置项可以用 cellRender: { name: 'CellImage' }, +vxeUI.renderer.add('CellImage', { + renderDefault(_renderOpts, params) { + const { column, row } = params; + return h(Image, { src: row[column.field] } as any); // 注意此处的Image 组件,来源于Antd,需要自行引入,否则会使用js的Image类 + }, +}); + +// 表格配置项可以用 cellRender: { name: 'CellLink' }, +vxeUI.renderer.add('CellLink', { + renderDefault(renderOpts) { + const { props } = renderOpts; + return h( + Button, + { size: 'small', type: 'link' }, + { default: () => props?.text }, + ); + }, +}); +``` + + + +## 搜索表单 + +**表单搜索** 部分采用了`Vben Form 表单`,参考 [Vben Form 表单文档](/components/common-ui/vben-form)。 + +当启用了表单搜索时,可以在toolbarConfig中配置`search`为`true`来让表格在工具栏区域显示一个搜索表单控制按钮。表格的所有以`form-`开头的命名插槽都会被传递给搜索表单。 + +### 定制分隔条 + +当你启用表单搜索时,在表单和表格之间会显示一个分隔条。这个分隔条使用了默认的组件背景色,并且横向贯穿整个Vben Vxe Table在视觉上融入了页面的默认背景中。如果你在Vben Vxe Table的外层包裹了一个不同背景色的容器(如将其放在一个Card内),默认的表单和表格之间的分隔条可能就显得格格不入了,下面的代码演示了如何定制这个分隔条。 + +```ts +const [Grid] = useVbenVxeGrid({ + formOptions: {}, + gridOptions: {}, + // 完全移除分隔条 + separator: false, + // 你也可以使用下面的代码来移除分隔条 + // separator: { show: false }, + // 或者使用下面的代码来改变分隔条的颜色 + // separator: { backgroundColor: 'rgba(100,100,0,0.5)' }, +}); +``` + + + +## 单元格编辑 + +通过指定`editConfig.mode`为`cell`,可以实现单元格编辑。 + + + +## 行编辑 + +通过指定`editConfig.mode`为`row`,可以实现行编辑。 + + + +## 虚拟滚动 + +通过 scroll-y.enabled 与 scroll-y.gt 组合开启,其中 enabled 为总开关,gt 是指当总行数大于指定行数时自动开启。 + +> 参考 [vxe-table 官方文档 - 虚拟滚动](https://vxetable.cn/v4/#/component/grid/scroll/vertical)。 + + + +## API + +`useVbenVxeGrid` 返回一个数组,第一个元素是表格组件,第二个元素是表格的方法。 + +```vue + + + +``` + +### GridApi + +useVbenVxeGrid 返回的第二个参数,是一个对象,包含了一些表单的方法。 + +| 方法名 | 描述 | 类型 | 说明 | +| --- | --- | --- | --- | +| setLoading | 设置loading状态 | `(loading)=>void` | - | +| setGridOptions | 设置vxe-table grid组件参数 | `(options: Partialvoid` | - | +| reload | 重载表格,会进行初始化 | `(params:any)=>void` | - | +| query | 重载表格,会保留当前分页 | `(params:any)=>void` | - | +| grid | vxe-table grid实例 | `VxeGridInstance` | - | +| formApi | vbenForm api实例 | `FormApi` | - | +| toggleSearchForm | 设置搜索表单显示状态 | `(show?: boolean)=>boolean` | 当省略参数时,则将表单在显示和隐藏两种状态之间切换 | + +## Props + +所有属性都可以传入 `useVbenVxeGrid` 的第一个参数中。 + +| 属性名 | 描述 | 类型 | 版本要求 | +| --- | --- | --- | --- | +| tableTitle | 表格标题 | `string` | - | +| tableTitleHelp | 表格标题帮助信息 | `string` | - | +| gridClass | grid组件的class | `string` | - | +| gridOptions | grid组件的参数 | `VxeTableGridProps` | - | +| gridEvents | grid组件的触发的事件 | `VxeGridListeners` | - | +| formOptions | 表单参数 | `VbenFormProps` | - | +| showSearchForm | 是否显示搜索表单 | `boolean` | - | +| separator | 搜索表单与表格主体之间的分隔条 | `boolean\|SeparatorOptions` | >5.5.4 | + +## Slots + +大部分插槽的说明请参考 [vxe-table 官方文档](https://vxetable.cn/v4/#/grid/api),但工具栏部分由于做了一些定制封装,需使用以下插槽定制表格的工具栏: + +| 插槽名 | 描述 | +| --------------- | -------------------------------------------- | +| toolbar-actions | 工具栏左侧部分(表格标题附近) | +| toolbar-tools | 工具栏右侧部分(vxeTable原生工具按钮的左侧) | +| table-title | 表格标题插槽 | + +::: info 搜索表单的插槽 + +对于使用了搜索表单的表格来说,所有以`form-`开头的命名插槽都会传递给表单。 + +::: diff --git a/docs/src/components/introduction.md b/docs/src/components/introduction.md new file mode 100644 index 000000000..438470e9a --- /dev/null +++ b/docs/src/components/introduction.md @@ -0,0 +1,15 @@ +# 介绍 + +::: info README + +该文档介绍的是框架组件的使用方法、属性、事件等。如果你觉得现有组件的封装不够理想,或者不完全符合你的需求,大可以直接使用原生组件,亦或亲手封装一个适合的组件。框架提供的组件并非束缚,使用与否,完全取决于你的需求与自由。 + +::: + +## 布局组件 + +布局组件一般在页面内容区域用作顶层容器组件,提供一些统一的布局样式和基本功能。 + +## 通用组件 + +通用组件是一些常用的组件,比如弹窗、抽屉、表单等。大部分基于 `Tailwind CSS` 实现,可适用于不同 UI 组件库的应用。 diff --git a/docs/src/components/layout-ui/page.md b/docs/src/components/layout-ui/page.md new file mode 100644 index 000000000..29fbdd40f --- /dev/null +++ b/docs/src/components/layout-ui/page.md @@ -0,0 +1,44 @@ +--- +outline: deep +--- + +# Page 常规页面组件 + +提供一个常规页面布局的组件,包括头部、内容区域、底部三个部分。 + +::: info 写在前面 + +本组件是一个基本布局组件。如果有更多的通用页面布局需求(比如双列布局等),可以根据实际需求自行封装。 + +::: + +## 基础用法 + +将`Page`作为你的业务页面的根组件即可。 + +### Props + +| 属性名 | 描述 | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | --- | +| title | 页面标题 | `string\|slot` | - | - | +| description | 页面描述(标题下的内容) | `string\|slot` | - | - | +| contentClass | 内容区域的class | `string` | - | - | +| headerClass | 头部区域的class | `string` | - | - | +| footerClass | 底部区域的class | `string` | - | - | +| autoContentHeight | 自动调整内容区域的高度 | `boolean` | `false` | - | + +::: tip 注意 + +如果`title`、`description`、`extra`三者均未提供有效内容(通过`props`或者`slots`均可),则页面头部区域不会渲染。 + +::: + +### Slots + +| 插槽名称 | 描述 | +| ----------- | ------------ | +| default | 页面内容 | +| title | 页面标题 | +| description | 页面描述 | +| extra | 页面头部右侧 | +| footer | 页面底部 | diff --git a/docs/src/demos/vben-alert/alert/index.vue b/docs/src/demos/vben-alert/alert/index.vue new file mode 100644 index 000000000..9ba18a4da --- /dev/null +++ b/docs/src/demos/vben-alert/alert/index.vue @@ -0,0 +1,36 @@ + + diff --git a/docs/src/demos/vben-alert/confirm/index.vue b/docs/src/demos/vben-alert/confirm/index.vue new file mode 100644 index 000000000..723445d96 --- /dev/null +++ b/docs/src/demos/vben-alert/confirm/index.vue @@ -0,0 +1,75 @@ + + diff --git a/docs/src/demos/vben-alert/prompt/index.vue b/docs/src/demos/vben-alert/prompt/index.vue new file mode 100644 index 000000000..a19221347 --- /dev/null +++ b/docs/src/demos/vben-alert/prompt/index.vue @@ -0,0 +1,118 @@ + + diff --git a/docs/src/demos/vben-api-component/cascader/index.vue b/docs/src/demos/vben-api-component/cascader/index.vue new file mode 100644 index 000000000..957964cd3 --- /dev/null +++ b/docs/src/demos/vben-api-component/cascader/index.vue @@ -0,0 +1,100 @@ + + diff --git a/docs/src/demos/vben-count-to-animator/basic/index.vue b/docs/src/demos/vben-count-to-animator/basic/index.vue new file mode 100644 index 000000000..acc76edaa --- /dev/null +++ b/docs/src/demos/vben-count-to-animator/basic/index.vue @@ -0,0 +1,6 @@ + + diff --git a/docs/src/demos/vben-count-to-animator/custom/index.vue b/docs/src/demos/vben-count-to-animator/custom/index.vue new file mode 100644 index 000000000..5a2434058 --- /dev/null +++ b/docs/src/demos/vben-count-to-animator/custom/index.vue @@ -0,0 +1,12 @@ + + diff --git a/docs/src/demos/vben-drawer/auto-height/index.vue b/docs/src/demos/vben-drawer/auto-height/index.vue new file mode 100644 index 000000000..59294e538 --- /dev/null +++ b/docs/src/demos/vben-drawer/auto-height/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/docs/src/demos/vben-drawer/basic/index.vue b/docs/src/demos/vben-drawer/basic/index.vue new file mode 100644 index 000000000..bd7d92750 --- /dev/null +++ b/docs/src/demos/vben-drawer/basic/index.vue @@ -0,0 +1,11 @@ + + diff --git a/docs/src/demos/vben-drawer/dynamic/drawer.vue b/docs/src/demos/vben-drawer/dynamic/drawer.vue new file mode 100644 index 000000000..50f628316 --- /dev/null +++ b/docs/src/demos/vben-drawer/dynamic/drawer.vue @@ -0,0 +1,26 @@ + + diff --git a/docs/src/demos/vben-drawer/dynamic/index.vue b/docs/src/demos/vben-drawer/dynamic/index.vue new file mode 100644 index 000000000..95464023a --- /dev/null +++ b/docs/src/demos/vben-drawer/dynamic/index.vue @@ -0,0 +1,29 @@ + + + diff --git a/docs/src/demos/vben-drawer/extra/drawer.vue b/docs/src/demos/vben-drawer/extra/drawer.vue new file mode 100644 index 000000000..e84c1939f --- /dev/null +++ b/docs/src/demos/vben-drawer/extra/drawer.vue @@ -0,0 +1,8 @@ + + diff --git a/docs/src/demos/vben-drawer/extra/index.vue b/docs/src/demos/vben-drawer/extra/index.vue new file mode 100644 index 000000000..59294e538 --- /dev/null +++ b/docs/src/demos/vben-drawer/extra/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/docs/src/demos/vben-drawer/shared-data/drawer.vue b/docs/src/demos/vben-drawer/shared-data/drawer.vue new file mode 100644 index 000000000..629199b67 --- /dev/null +++ b/docs/src/demos/vben-drawer/shared-data/drawer.vue @@ -0,0 +1,26 @@ + + diff --git a/docs/src/demos/vben-drawer/shared-data/index.vue b/docs/src/demos/vben-drawer/shared-data/index.vue new file mode 100644 index 000000000..fef6cb058 --- /dev/null +++ b/docs/src/demos/vben-drawer/shared-data/index.vue @@ -0,0 +1,27 @@ + + + diff --git a/docs/src/demos/vben-ellipsis-text/auto-display/index.vue b/docs/src/demos/vben-ellipsis-text/auto-display/index.vue new file mode 100644 index 000000000..fb5a32a50 --- /dev/null +++ b/docs/src/demos/vben-ellipsis-text/auto-display/index.vue @@ -0,0 +1,16 @@ + + diff --git a/docs/src/demos/vben-ellipsis-text/expand/index.vue b/docs/src/demos/vben-ellipsis-text/expand/index.vue new file mode 100644 index 000000000..842f6b32e --- /dev/null +++ b/docs/src/demos/vben-ellipsis-text/expand/index.vue @@ -0,0 +1,10 @@ + + diff --git a/docs/src/demos/vben-ellipsis-text/line/index.vue b/docs/src/demos/vben-ellipsis-text/line/index.vue new file mode 100644 index 000000000..dfbf20eff --- /dev/null +++ b/docs/src/demos/vben-ellipsis-text/line/index.vue @@ -0,0 +1,10 @@ + + diff --git a/docs/src/demos/vben-ellipsis-text/tooltip/index.vue b/docs/src/demos/vben-ellipsis-text/tooltip/index.vue new file mode 100644 index 000000000..e6287a12f --- /dev/null +++ b/docs/src/demos/vben-ellipsis-text/tooltip/index.vue @@ -0,0 +1,14 @@ + + diff --git a/docs/src/demos/vben-form/api/index.vue b/docs/src/demos/vben-form/api/index.vue new file mode 100644 index 000000000..786dc89e5 --- /dev/null +++ b/docs/src/demos/vben-form/api/index.vue @@ -0,0 +1,236 @@ + + + diff --git a/docs/src/demos/vben-form/basic/index.vue b/docs/src/demos/vben-form/basic/index.vue new file mode 100644 index 000000000..88d014256 --- /dev/null +++ b/docs/src/demos/vben-form/basic/index.vue @@ -0,0 +1,231 @@ + + + diff --git a/docs/src/demos/vben-form/custom/index.vue b/docs/src/demos/vben-form/custom/index.vue new file mode 100644 index 000000000..e4da38dcc --- /dev/null +++ b/docs/src/demos/vben-form/custom/index.vue @@ -0,0 +1,68 @@ + + + diff --git a/docs/src/demos/vben-form/dynamic/index.vue b/docs/src/demos/vben-form/dynamic/index.vue new file mode 100644 index 000000000..83d1a7110 --- /dev/null +++ b/docs/src/demos/vben-form/dynamic/index.vue @@ -0,0 +1,168 @@ + + + diff --git a/docs/src/demos/vben-form/query/index.vue b/docs/src/demos/vben-form/query/index.vue new file mode 100644 index 000000000..a0b64f5dd --- /dev/null +++ b/docs/src/demos/vben-form/query/index.vue @@ -0,0 +1,94 @@ + + + diff --git a/docs/src/demos/vben-form/rules/index.vue b/docs/src/demos/vben-form/rules/index.vue new file mode 100644 index 000000000..78e598133 --- /dev/null +++ b/docs/src/demos/vben-form/rules/index.vue @@ -0,0 +1,190 @@ + + + diff --git a/docs/src/demos/vben-modal/auto-height/index.vue b/docs/src/demos/vben-modal/auto-height/index.vue new file mode 100644 index 000000000..2addf2e90 --- /dev/null +++ b/docs/src/demos/vben-modal/auto-height/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/docs/src/demos/vben-modal/basic/index.vue b/docs/src/demos/vben-modal/basic/index.vue new file mode 100644 index 000000000..9f8997085 --- /dev/null +++ b/docs/src/demos/vben-modal/basic/index.vue @@ -0,0 +1,11 @@ + + diff --git a/docs/src/demos/vben-modal/draggable/index.vue b/docs/src/demos/vben-modal/draggable/index.vue new file mode 100644 index 000000000..2addf2e90 --- /dev/null +++ b/docs/src/demos/vben-modal/draggable/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/docs/src/demos/vben-modal/draggable/modal.vue b/docs/src/demos/vben-modal/draggable/modal.vue new file mode 100644 index 000000000..ecca497b1 --- /dev/null +++ b/docs/src/demos/vben-modal/draggable/modal.vue @@ -0,0 +1,10 @@ + + diff --git a/docs/src/demos/vben-modal/dynamic/index.vue b/docs/src/demos/vben-modal/dynamic/index.vue new file mode 100644 index 000000000..1b0255459 --- /dev/null +++ b/docs/src/demos/vben-modal/dynamic/index.vue @@ -0,0 +1,29 @@ + + + diff --git a/docs/src/demos/vben-modal/dynamic/modal.vue b/docs/src/demos/vben-modal/dynamic/modal.vue new file mode 100644 index 000000000..d46128965 --- /dev/null +++ b/docs/src/demos/vben-modal/dynamic/modal.vue @@ -0,0 +1,38 @@ + + diff --git a/docs/src/demos/vben-modal/extra/index.vue b/docs/src/demos/vben-modal/extra/index.vue new file mode 100644 index 000000000..2addf2e90 --- /dev/null +++ b/docs/src/demos/vben-modal/extra/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/docs/src/demos/vben-modal/extra/modal.vue b/docs/src/demos/vben-modal/extra/modal.vue new file mode 100644 index 000000000..488fd4a0d --- /dev/null +++ b/docs/src/demos/vben-modal/extra/modal.vue @@ -0,0 +1,8 @@ + + diff --git a/docs/src/demos/vben-modal/shared-data/index.vue b/docs/src/demos/vben-modal/shared-data/index.vue new file mode 100644 index 000000000..91afeb70d --- /dev/null +++ b/docs/src/demos/vben-modal/shared-data/index.vue @@ -0,0 +1,27 @@ + + + diff --git a/docs/src/demos/vben-modal/shared-data/modal.vue b/docs/src/demos/vben-modal/shared-data/modal.vue new file mode 100644 index 000000000..806585d99 --- /dev/null +++ b/docs/src/demos/vben-modal/shared-data/modal.vue @@ -0,0 +1,26 @@ + + diff --git a/docs/src/demos/vben-vxe-table/basic/index.vue b/docs/src/demos/vben-vxe-table/basic/index.vue new file mode 100644 index 000000000..4b6b5a632 --- /dev/null +++ b/docs/src/demos/vben-vxe-table/basic/index.vue @@ -0,0 +1,85 @@ + + + diff --git a/docs/src/demos/vben-vxe-table/edit-cell/index.vue b/docs/src/demos/vben-vxe-table/edit-cell/index.vue new file mode 100644 index 000000000..711941de3 --- /dev/null +++ b/docs/src/demos/vben-vxe-table/edit-cell/index.vue @@ -0,0 +1,55 @@ + + + diff --git a/docs/src/demos/vben-vxe-table/edit-row/index.vue b/docs/src/demos/vben-vxe-table/edit-row/index.vue new file mode 100644 index 000000000..f317f69d1 --- /dev/null +++ b/docs/src/demos/vben-vxe-table/edit-row/index.vue @@ -0,0 +1,92 @@ + + + diff --git a/docs/src/demos/vben-vxe-table/fixed/index.vue b/docs/src/demos/vben-vxe-table/fixed/index.vue new file mode 100644 index 000000000..6067a5ebe --- /dev/null +++ b/docs/src/demos/vben-vxe-table/fixed/index.vue @@ -0,0 +1,67 @@ + + + diff --git a/docs/src/demos/vben-vxe-table/form/index.vue b/docs/src/demos/vben-vxe-table/form/index.vue new file mode 100644 index 000000000..bcf3f5a5d --- /dev/null +++ b/docs/src/demos/vben-vxe-table/form/index.vue @@ -0,0 +1,127 @@ + + + diff --git a/docs/src/demos/vben-vxe-table/mock-api.ts b/docs/src/demos/vben-vxe-table/mock-api.ts new file mode 100644 index 000000000..e5c40b61e --- /dev/null +++ b/docs/src/demos/vben-vxe-table/mock-api.ts @@ -0,0 +1,36 @@ +import { MOCK_API_DATA } from './table-data'; + +export namespace DemoTableApi { + export interface PageFetchParams { + [key: string]: any; + page: number; + pageSize: number; + } +} + +export function sleep(time = 1000) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(true); + }, time); + }); +} + +/** + * 获取示例表格数据 + */ +async function getExampleTableApi(params: DemoTableApi.PageFetchParams) { + return new Promise<{ items: any; total: number }>((resolve) => { + const { page, pageSize } = params; + const items = MOCK_API_DATA.slice((page - 1) * pageSize, page * pageSize); + + sleep(1000).then(() => { + resolve({ + total: items.length, + items, + }); + }); + }); +} + +export { getExampleTableApi }; diff --git a/docs/src/demos/vben-vxe-table/remote/index.vue b/docs/src/demos/vben-vxe-table/remote/index.vue new file mode 100644 index 000000000..bc93d29a9 --- /dev/null +++ b/docs/src/demos/vben-vxe-table/remote/index.vue @@ -0,0 +1,112 @@ + + + diff --git a/docs/src/demos/vben-vxe-table/table-data.ts b/docs/src/demos/vben-vxe-table/table-data.ts new file mode 100644 index 000000000..c37b88ade --- /dev/null +++ b/docs/src/demos/vben-vxe-table/table-data.ts @@ -0,0 +1,384 @@ +interface TableRowData { + address: string; + age: number; + id: number; + name: string; + nickname: string; + role: string; +} + +const roles = ['User', 'Admin', 'Manager', 'Guest']; + +export const MOCK_TABLE_DATA: TableRowData[] = (() => { + const data: TableRowData[] = []; + for (let i = 0; i < 10; i++) { + data.push({ + address: `New York${i}`, + age: i + 1, + id: i, + name: `Test${i}`, + nickname: `Test${i}`, + role: roles[Math.floor(Math.random() * roles.length)] as string, + }); + } + return data; +})(); + +export const MOCK_TREE_TABLE_DATA = [ + { + date: '2020-08-01', + id: 10_000, + name: 'Test1', + parentId: null, + size: 1024, + type: 'mp3', + }, + { + date: '2021-04-01', + id: 10_050, + name: 'Test2', + parentId: null, + size: 0, + type: 'mp4', + }, + { + date: '2020-03-01', + id: 24_300, + name: 'Test3', + parentId: 10_050, + size: 1024, + type: 'avi', + }, + { + date: '2021-04-01', + id: 20_045, + name: 'Test4', + parentId: 24_300, + size: 600, + type: 'html', + }, + { + date: '2021-04-01', + id: 10_053, + name: 'Test5', + parentId: 24_300, + size: 0, + type: 'avi', + }, + { + date: '2021-10-01', + id: 24_330, + name: 'Test6', + parentId: 10_053, + size: 25, + type: 'txt', + }, + { + date: '2020-01-01', + id: 21_011, + name: 'Test7', + parentId: 10_053, + size: 512, + type: 'pdf', + }, + { + date: '2021-06-01', + id: 22_200, + name: 'Test8', + parentId: 10_053, + size: 1024, + type: 'js', + }, + { + date: '2020-11-01', + id: 23_666, + name: 'Test9', + parentId: null, + size: 2048, + type: 'xlsx', + }, + { + date: '2021-06-01', + id: 23_677, + name: 'Test10', + parentId: 23_666, + size: 1024, + type: 'js', + }, + { + date: '2021-06-01', + id: 23_671, + name: 'Test11', + parentId: 23_677, + size: 1024, + type: 'js', + }, + { + date: '2021-06-01', + id: 23_672, + name: 'Test12', + parentId: 23_677, + size: 1024, + type: 'js', + }, + { + date: '2021-06-01', + id: 23_688, + name: 'Test13', + parentId: 23_666, + size: 1024, + type: 'js', + }, + { + date: '2021-06-01', + id: 23_681, + name: 'Test14', + parentId: 23_688, + size: 1024, + type: 'js', + }, + { + date: '2021-06-01', + id: 23_682, + name: 'Test15', + parentId: 23_688, + size: 1024, + type: 'js', + }, + { + date: '2020-10-01', + id: 24_555, + name: 'Test16', + parentId: null, + size: 224, + type: 'avi', + }, + { + date: '2021-06-01', + id: 24_566, + name: 'Test17', + parentId: 24_555, + size: 1024, + type: 'js', + }, + { + date: '2021-06-01', + id: 24_577, + name: 'Test18', + parentId: 24_555, + size: 1024, + type: 'js', + }, +]; + +export const MOCK_API_DATA = [ + { + available: true, + category: 'Computers', + color: 'purple', + currency: 'NAD', + description: + 'Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support', + id: '45a613df-227a-4907-a89f-4a7f1252ca0c', + imageUrl: 'https://avatars.githubusercontent.com/u/62715097', + imageUrl2: 'https://avatars.githubusercontent.com/u/75395683', + inProduction: false, + open: true, + price: '48.89', + productName: 'Handcrafted Steel Salad', + quantity: 70, + rating: 3.780_582_329_574_367, + releaseDate: '2024-09-09T04:06:57.793Z', + status: 'error', + tags: ['Bespoke', 'Handmade', 'Luxurious'], + weight: 1.031_015_671_912_002_5, + }, + { + available: true, + category: 'Toys', + color: 'green', + currency: 'CZK', + description: + 'The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J', + id: 'd02e5ee9-bc98-4de2-98fa-25a6567ecc19', + imageUrl: 'https://avatars.githubusercontent.com/u/51512330', + imageUrl2: 'https://avatars.githubusercontent.com/u/58698113', + inProduction: false, + open: false, + price: '68.15', + productName: 'Generic Cotton Gloves', + quantity: 3, + rating: 1.681_749_367_682_703_3, + releaseDate: '2024-06-16T09:00:36.806Z', + status: 'warning', + tags: ['Rustic', 'Handcrafted', 'Recycled'], + weight: 9.601_076_149_300_575, + }, + { + available: true, + category: 'Beauty', + color: 'teal', + currency: 'OMR', + description: + 'The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design', + id: '2b72521c-225c-4e64-8030-611b76b10b37', + imageUrl: 'https://avatars.githubusercontent.com/u/50300075', + imageUrl2: 'https://avatars.githubusercontent.com/u/36541691', + inProduction: true, + open: true, + price: '696.94', + productName: 'Gorgeous Soft Ball', + quantity: 50, + rating: 2.361_581_777_372_057_5, + releaseDate: '2024-06-03T13:24:19.809Z', + status: 'warning', + tags: ['Gorgeous', 'Ergonomic', 'Licensed'], + weight: 8.882_340_049_286_19, + }, + { + available: true, + category: 'Games', + color: 'silver', + currency: 'SOS', + description: + 'Carbonite web goalkeeper gloves are ergonomically designed to give easy fit', + id: 'bafab694-3801-452c-b102-9eb519bd1143', + imageUrl: 'https://avatars.githubusercontent.com/u/89827115', + imageUrl2: 'https://avatars.githubusercontent.com/u/55952747', + inProduction: false, + open: false, + price: '553.84', + productName: 'Bespoke Soft Computer', + quantity: 29, + rating: 2.176_412_873_760_271_7, + releaseDate: '2024-09-17T12:16:27.034Z', + status: 'error', + tags: ['Elegant', 'Rustic', 'Recycled'], + weight: 9.653_285_869_978_038, + }, + { + available: true, + category: 'Toys', + color: 'indigo', + currency: 'BIF', + description: + 'Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals', + id: 'bf6dea6b-2a55-441d-8773-937e03d99389', + imageUrl: 'https://avatars.githubusercontent.com/u/21431092', + imageUrl2: 'https://avatars.githubusercontent.com/u/3771350', + inProduction: true, + open: true, + price: '237.39', + productName: 'Handcrafted Cotton Mouse', + quantity: 54, + rating: 4.363_265_388_265_461, + releaseDate: '2023-10-23T13:42:34.947Z', + status: 'error', + tags: ['Unbranded', 'Handmade', 'Generic'], + weight: 9.513_203_612_535_571, + }, + { + available: false, + category: 'Tools', + color: 'violet', + currency: 'TZS', + description: + 'New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016', + id: '135ba6ab-32ee-4989-8189-5cfa658ef970', + imageUrl: 'https://avatars.githubusercontent.com/u/29946092', + imageUrl2: 'https://avatars.githubusercontent.com/u/23842994', + inProduction: false, + open: false, + price: '825.25', + productName: 'Awesome Bronze Ball', + quantity: 94, + rating: 4.251_159_804_726_753, + releaseDate: '2023-12-30T07:31:43.464Z', + status: 'warning', + tags: ['Handmade', 'Elegant', 'Unbranded'], + weight: 2.247_473_385_732_636_8, + }, + { + available: true, + category: 'Automotive', + color: 'teal', + currency: 'BOB', + description: 'The Football Is Good For Training And Recreational Purposes', + id: '652ef256-7d4e-48b7-976c-7afaa781ea92', + imageUrl: 'https://avatars.githubusercontent.com/u/2531904', + imageUrl2: 'https://avatars.githubusercontent.com/u/15215990', + inProduction: false, + open: false, + price: '780.49', + productName: 'Oriental Rubber Pants', + quantity: 70, + rating: 2.636_323_417_377_916, + releaseDate: '2024-02-23T23:30:49.628Z', + status: 'success', + tags: ['Unbranded', 'Elegant', 'Unbranded'], + weight: 4.812_965_858_018_838, + }, + { + available: false, + category: 'Garden', + color: 'plum', + currency: 'LRD', + description: + 'The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality', + id: '3ea24798-6589-40cc-85f0-ab78752244a0', + imageUrl: 'https://avatars.githubusercontent.com/u/23165285', + imageUrl2: 'https://avatars.githubusercontent.com/u/14595665', + inProduction: false, + open: true, + price: '583.85', + productName: 'Handcrafted Concrete Hat', + quantity: 15, + rating: 1.371_600_527_752_802_7, + releaseDate: '2024-03-02T19:40:50.255Z', + status: 'error', + tags: ['Rustic', 'Sleek', 'Ergonomic'], + weight: 4.926_949_366_405_728_4, + }, + { + available: false, + category: 'Industrial', + color: 'salmon', + currency: 'AUD', + description: + 'The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design', + id: '997113dd-f6e4-4acc-9790-ef554c7498d1', + imageUrl: 'https://avatars.githubusercontent.com/u/49021914', + imageUrl2: 'https://avatars.githubusercontent.com/u/4690621', + inProduction: true, + open: false, + price: '67.99', + productName: 'Generic Rubber Bacon', + quantity: 68, + rating: 4.129_840_682_128_08, + releaseDate: '2023-12-17T01:40:25.415Z', + status: 'error', + tags: ['Oriental', 'Small', 'Handcrafted'], + weight: 1.080_114_331_801_906_4, + }, + { + available: false, + category: 'Tools', + color: 'sky blue', + currency: 'NOK', + description: + 'The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J', + id: 'f697a250-6cb2-46c8-b0f7-871ab1f2fa8d', + imageUrl: 'https://avatars.githubusercontent.com/u/95928385', + imageUrl2: 'https://avatars.githubusercontent.com/u/47588244', + inProduction: false, + open: false, + price: '613.89', + productName: 'Gorgeous Frozen Ball', + quantity: 55, + rating: 1.646_947_205_998_534_6, + releaseDate: '2024-10-13T12:31:04.929Z', + status: 'warning', + tags: ['Handmade', 'Unbranded', 'Unbranded'], + weight: 9.430_690_557_758_114, + }, +]; diff --git a/docs/src/demos/vben-vxe-table/tree/index.vue b/docs/src/demos/vben-vxe-table/tree/index.vue new file mode 100644 index 000000000..0024765a8 --- /dev/null +++ b/docs/src/demos/vben-vxe-table/tree/index.vue @@ -0,0 +1,80 @@ + + + diff --git a/docs/src/demos/vben-vxe-table/virtual/index.vue b/docs/src/demos/vben-vxe-table/virtual/index.vue new file mode 100644 index 000000000..81fa00af2 --- /dev/null +++ b/docs/src/demos/vben-vxe-table/virtual/index.vue @@ -0,0 +1,64 @@ + + + diff --git a/docs/src/en/guide/essentials/build.md b/docs/src/en/guide/essentials/build.md new file mode 100644 index 000000000..7f5c95321 --- /dev/null +++ b/docs/src/en/guide/essentials/build.md @@ -0,0 +1,243 @@ +# Build and Deployment + +::: tip Preface + +Since this is a demonstration project, the package size after building is relatively large. If there are plugins in the project that are not used, you can delete the corresponding files or routes. If they are not referenced, they will not be packaged. + +::: + +## Building + +After the project development is completed, execute the following command to build: + +**Note:** Please execute the following command in the project root directory. + +```bash +pnpm build +``` + +After the build is successful, a `dist` folder for the corresponding application will be generated in the root directory, which contains the built and packaged files, for example: `apps/web-antd/dist/` + +## Preview + +Before publishing, you can preview it locally in several ways, here are two: + +- Using the project's custom command for preview (recommended) + +**Note:** Please execute the following command in the project root directory. + +```bash +pnpm preview +``` + +After waiting for the build to succeed, visit `http://localhost:4173` to view the effect. + +- Local server preview + +You can globally install a `serve` service on your computer, such as `live-server`, + +```bash +npm i -g live-server +``` + +Then execute the `live-server` command in the `dist` directory to view the effect locally. + +```bash +cd apps/web-antd/dist +# Local preview, default port 8080 +live-server +# Specify port +live-server --port 9000 +``` + +## Compression + +### Enable `gzip` Compression + +To enable during the build process, change the `.env.production` configuration: + +```bash +VITE_COMPRESS=gzip +``` + +### Enable `brotli` Compression + +To enable during the build process, change the `.env.production` configuration: + +```bash +VITE_COMPRESS=brotli +``` + +### Enable Both `gzip` and `brotli` Compression + +To enable during the build process, change the `.env.production` configuration: + +```bash +VITE_COMPRESS=gzip,brotli +``` + +::: tip Note + +Both `gzip` and `brotli` require specific modules to be installed for use. + +::: + +::: details gzip 与 brotli 在 nginx 内的配置 + +```bash +http { + # Enable gzip + gzip on; + # Enable gzip_static + # After enabling gzip_static, there might be errors, requiring the installation of specific modules. The installation method can be researched independently. + # Only with this enabled, the .gz files packaged by vue files will be effective; otherwise, there is no need to enable gzip for packaging. + gzip_static on; + gzip_proxied any; + gzip_min_length 1k; + gzip_buffers 4 16k; + # If nginx uses multiple layers of proxy, this must be set to enable gzip. + gzip_http_version 1.0; + gzip_comp_level 2; + gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; + gzip_vary off; + gzip_disable "MSIE [1-6]\."; + + # Enable brotli compression + # Requires the installation of the corresponding nginx module, which can be researched independently. + # Can coexist with gzip without conflict. + brotli on; + brotli_comp_level 6; + brotli_buffers 16 8k; + brotli_min_length 20; + brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; +} +``` + +::: + +## Build Analysis + +If your build files are large, you can optimize your code by analyzing the code size with the built-in [rollup-plugin-analyzer](https://github.com/doesdev/rollup-plugin-analyzer) plugin. Just execute the following command in the `root directory`: + +```bash +pnpm run build:analyze +``` + +After running, you can see the specific distribution of sizes on the automatically opened page to analyze which dependencies are problematic. + +![Build analysis report](/guide/report.png) + +## Deployment + +A simple deployment only requires publishing the final static files, the static files in the dist folder, to your CDN or static server. It's important to note that the index.html is usually the entry page for your backend service. After determining the static js and css, you may need to change the page's import path. + +For example, to upload to an nginx server, you can upload the files under the dist folder to the server's `/srv/www/project/index.html` directory, and then access the configured domain name. + +```bash +# nginx configuration +location / { + # Do not cache html to prevent cache from continuing to be effective after program updates + if ($request_filename ~* .*\.(?:htm|html)$) { + add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate"; + access_log on; + } + # This is the storage path for the files inside the vue packaged dist folder + root /srv/www/project/; + index index.html index.htm; +} +``` + +If you find the resource path is incorrect during deployment, you just need to modify the `.env.production` file. + +```bash +# Configure the change according to your own path +# Note that it needs to start and end with / +VITE_BASE=/ +VITE_BASE=/xxx/ +``` + +### Integration of Frontend Routing and Server + +The project uses vue-router for frontend routing, so you can choose between two modes: history and hash. + +- `hash` mode will append `#` to the URL by default. +- `history` mode will not, but `history` mode requires server-side support. + +You can modify the mode in `.env.production`: + +```bash +VITE_ROUTER_HISTORY=hash +``` + +### Server Configuration for History Mode Routing + +Enabling `history` mode requires server configuration. For more details on server configuration, see [history-mode](https://router.vuejs.org/guide/essentials/history-mode.html#html5-mode) + +Here is an example of `nginx` configuration: + +#### Deployment at the Root Directory + +```bash {5} +server { + listen 80; + location / { + # For use with History mode + try_files $uri $uri/ /index.html; + } +} +``` + +#### Deployment to a Non-root Directory + +- First, you need to change the `.env.production` configuration during packaging: + +```bash +VITE_BASE = /sub/ +``` + +- Then configure in the nginx configuration file + +```bash {8} +server { + listen 80; + server_name localhost; + location /sub/ { + # This is the path where the vue packaged dist files are stored + alias /srv/www/project/; + index index.html index.htm; + try_files $uri $uri/ /sub/index.html; + } +} +``` + +## Cross-Domain Handling + +Using nginx to handle cross-domain issues after project deployment + +1. Configure the frontend project API address in the `.env.production` file in the project directory: + +```bash +VITE_GLOB_API_URL=/api +``` + +2. Configure nginx to forward requests to the backend + +```bash {10-11} +server { + listen 8080; + server_name localhost; + # API proxy for solving cross-domain issues + location /api { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # Backend API address + proxy_pass http://110.110.1.1:8080/api; + rewrite "^/api/(.*)$" /$1 break; + proxy_redirect default; + add_header Access-Control-Allow-Origin *; + add_header Access-Control-Allow-Headers X-Requested-With; + add_header Access-Control-Allow-Methods GET,POST,OPTIONS; + } +} +``` diff --git a/docs/src/en/guide/essentials/concept.md b/docs/src/en/guide/essentials/concept.md new file mode 100644 index 000000000..8c940a943 --- /dev/null +++ b/docs/src/en/guide/essentials/concept.md @@ -0,0 +1,70 @@ +# Basic Concepts + +In the new version, the entire project has been restructured. Now, we will introduce some basic concepts to help you better understand the entire document. Please make sure to read this section first. + +## Monorepo + +Monorepo refers to the repository of the entire project, which includes all code, packages, applications, standards, documentation, configurations, etc., that is, the entire content of a `Monorepo` directory. + +## Applications + +Applications refer to a complete project; a project can contain multiple applications, which can reuse the code, packages, standards, etc., within the monorepo. Applications are placed in the `apps` directory. Each application is independent and can be run, built, tested, and deployed separately; it can also include different component libraries, etc. + +::: tip + +Applications are not limited to front-end applications; they can also be back-end applications, mobile applications, etc. For example, `apps/backend-mock` is a back-end service. + +::: + +## Packages + +A package refers to an independent module, which can be a component, a tool, a library, etc. Packages can be referenced by multiple applications or other packages. Packages are placed in the `packages` directory. + +You can consider these packages as independent `npm` packages, and they are used in the same way as `npm` packages. + +### Package Import + +Importing a package in `package.json`: + +```json {3} +{ + "dependencies": { + "@vben/utils": "workspace:*" + } +} +``` + +### Package Usage + +Importing a package in the code: + +```ts +import { isString } from '@vben/utils'; +``` + +## Aliases + +In the project, you can see some paths starting with `#`, such as `#/api`, `#/views`. These paths are aliases, used for quickly locating a certain directory. They are not implemented through `vite`'s `alias`, but through the principle of [subpath imports](https://nodejs.org/api/packages.html#subpath-imports) in `Node.js` itself. You only need to configure the `imports` field in `package.json`. + +```json {3} +{ + "imports": { + "#/*": "./src/*" + } +} +``` + +To make these aliases recognizable by the IDE, we also need to configure them in `tsconfig.json`: + +```json {5} +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "#/*": ["src/*"] + } + } +} +``` + +This way, you can use aliases in your code. diff --git a/docs/src/en/guide/essentials/external-module.md b/docs/src/en/guide/essentials/external-module.md new file mode 100644 index 000000000..f0a6d6e3f --- /dev/null +++ b/docs/src/en/guide/essentials/external-module.md @@ -0,0 +1,58 @@ +# External Modules + +In addition to the external modules that are included by default in the project, sometimes we need to import other external modules. Let's take [ant-design-vue](https://antdv.com/components/overview) as an example: + +## Installing Dependencies + +::: tip Install dependencies into a specific package + +- Since the project uses [pnpm](https://pnpm.io/) as the package management tool, we need to use the `pnpm` command to install dependencies. +- As the project is managed using a Monorepo module, we need to install dependencies under a specific package. Please make sure you have entered the specific package directory before installing dependencies. + +::: + +```bash +# cd /path/to/your/package +pnpm add ant-design-vue +``` + +## Usage + +### Global Import + +```ts +import { createApp } from 'vue'; +import Antd from 'ant-design-vue'; +import App from './App'; +import 'ant-design-vue/dist/reset.css'; + +const app = createApp(App); + +app.use(Antd).mount('#app'); +``` + +#### Usage + +```vue + +``` + +### Partial Import + +```vue + + + +``` + +::: warning Note + +- If the component depends on styles, you also need to import the style file. + +::: diff --git a/docs/src/en/guide/essentials/icons.md b/docs/src/en/guide/essentials/icons.md new file mode 100644 index 000000000..0c1631fe8 --- /dev/null +++ b/docs/src/en/guide/essentials/icons.md @@ -0,0 +1,78 @@ +# Icons + +::: tip About Icon Management + +- The icons in the project are mainly provided by the `@vben/icons` package. It is recommended to manage them within this package for unified management and maintenance. +- If you are using `Vscode`, it is recommended to install the [Iconify IntelliSense](https://marketplace.visualstudio.com/items?itemName=antfu.iconify) plugin, which makes it easy to find and use icons. + +::: + +There are several ways to use icons in the project, you can choose according to the actual situation: + +## Iconify Icons + +Integrated with the [iconify](https://github.com/iconify/iconify) icon library + +### Adding New Icons + +You can add new icons in the `packages/icons/src/iconify` directory: + +```ts +// packages/icons/src/iconify/index.ts +import { createIconifyIcon } from '@vben-core/icons'; + +export const MdiKeyboardEsc = createIconifyIcon('mdi:keyboard-esc'); +``` + +### Usage + +```vue + + + +``` + +## SVG Icons + +Instead of using Svg Sprite, SVG icons are directly imported, + +### Adding New Icons + +You can add new icon files `test.svg` in the `packages/icons/src/svg/icons` directory, and then import it in `packages/icons/src/svg/index.ts`: + +```ts +// packages/icons/src/svg/index.ts +import { createIconifyIcon } from '@vben-core/icons'; + +const SvgTestIcon = createIconifyIcon('svg:test'); + +export { SvgTestIcon }; +``` + +### Usage + +```vue + + + +``` + +## Tailwind CSS Icons + +### Usage + +You can use the icons by directly adding the Tailwind CSS icon class names, which can be found on [iconify](https://github.com/iconify/iconify) : + +```vue + +``` diff --git a/docs/src/en/guide/essentials/route.md b/docs/src/en/guide/essentials/route.md new file mode 100644 index 000000000..8fb0a6d1c --- /dev/null +++ b/docs/src/en/guide/essentials/route.md @@ -0,0 +1,603 @@ +--- +outline: deep +--- + +# Routes and Menus + +::: info + +This page is translated by machine translation and may not be very accurate. + +::: + +In the project, the framework provides a basic routing system and **automatically generates the corresponding menu structure based on the routing files**. + +## Types of Routes + +Routes are divided into core routes, static routes, and dynamic routes. Core routes are built-in routes of the framework, including root routes, login routes, 404 routes, etc.; static routes are routes that are determined when the project starts; dynamic routes are generally generated dynamically based on the user's permissions after the user logs in. + +Both static and dynamic routes go through permission control, which can be controlled by configuring the `authority` field in the `meta` property of the route. + +### Core Routes + +Core routes are built-in routes of the framework, including root routes, login routes, 404 routes, etc. The configuration of core routes is in the `src/router/routes/core` directory under the application. + +::: tip + +Core routes are mainly used for the basic functions of the framework, so it is not recommended to put business-related routes in core routes. It is recommended to put business-related routes in static or dynamic routes. + +::: + +### Static Routes + +The configuration of static routes is in the `src/router/routes/index` directory under the application. Open the commented file content: + +::: tip + +Permission control is controlled by the `authority` field in the `meta` property of the route. If your page project does not require permission control, you can omit the `authority` field. + +::: + +```ts +// Uncomment if needed and create the folder +// const externalRouteFiles = import.meta.glob('./external/**/*.ts', { eager: true }); // [!code --] +const staticRouteFiles = import.meta.glob('./static/**/*.ts', { eager: true }); // [!code ++] +/** Dynamic routes */ +const dynamicRoutes: RouteRecordRaw[] = mergeRouteModules(dynamicRouteFiles); + +/** External route list, these pages can be accessed without Layout, possibly used for embedding in other systems */ +// const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles) // [!code --] +const externalRoutes: RouteRecordRaw[] = []; // [!code --] +const externalRoutes: RouteRecordRaw[] = mergeRouteModules(externalRouteFiles); // [!code ++] +``` + +### Dynamic Routes + +The configuration of dynamic routes is in the `src/router/routes/modules` directory under the corresponding application. This directory contains all the route files. The content format of each file is consistent with the Vue Router route configuration format. Below is the configuration of secondary and multi-level routes. + +## Route Definition + +The configuration method of static routes and dynamic routes is the same. Below is the configuration of secondary and multi-level routes: + +### Secondary Routes + +::: details Secondary Route Example Code + +```ts +import type { RouteRecordRaw } from 'vue-router'; + +import { VBEN_LOGO_URL } from '@vben/constants'; + +import { BasicLayout } from '#/layouts'; +import { $t } from '#/locales'; + +const routes: RouteRecordRaw[] = [ + { + meta: { + badgeType: 'dot', + badgeVariants: 'destructive', + icon: VBEN_LOGO_URL, + order: 9999, + title: $t('page.vben.title'), + }, + name: 'VbenProject', + path: '/vben-admin', + redirect: '/vben-admin/about', + children: [ + { + name: 'VbenAbout', + path: '/vben-admin/about', + component: () => import('#/views/_core/about/index.vue'), + meta: { + badgeType: 'dot', + badgeVariants: 'destructive', + icon: 'lucide:copyright', + title: $t('page.vben.about'), + }, + }, + ], + }, +]; + +export default routes; +``` + +::: + +### Multi-level Routes + +::: tip + +- The parent route of multi-level routes does not need to set the `component` property, just set the `children` property. Unless you really need to display content nested under the parent route. +- In most cases, the `redirect` property of the parent route does not need to be specified, it will default to the first child route. + +::: + +::: details Multi-level Route Example Code + +```ts +import type { RouteRecordRaw } from 'vue-router'; + +import { BasicLayout } from '#/layouts'; +import { $t } from '#/locales'; + +const routes: RouteRecordRaw[] = [ + { + meta: { + icon: 'ic:baseline-view-in-ar', + keepAlive: true, + order: 1000, + title: $t('demos.title'), + }, + name: 'Demos', + path: '/demos', + redirect: '/demos/access', + children: [ + // Nested menu + { + meta: { + icon: 'ic:round-menu', + title: $t('demos.nested.title'), + }, + name: 'NestedDemos', + path: '/demos/nested', + redirect: '/demos/nested/menu1', + children: [ + { + name: 'Menu1Demo', + path: '/demos/nested/menu1', + component: () => import('#/views/demos/nested/menu-1.vue'), + meta: { + icon: 'ic:round-menu', + keepAlive: true, + title: $t('demos.nested.menu1'), + }, + }, + { + name: 'Menu2Demo', + path: '/demos/nested/menu2', + meta: { + icon: 'ic:round-menu', + keepAlive: true, + title: $t('demos.nested.menu2'), + }, + redirect: '/demos/nested/menu2/menu2-1', + children: [ + { + name: 'Menu21Demo', + path: '/demos/nested/menu2/menu2-1', + component: () => import('#/views/demos/nested/menu-2-1.vue'), + meta: { + icon: 'ic:round-menu', + keepAlive: true, + title: $t('demos.nested.menu2_1'), + }, + }, + ], + }, + { + name: 'Menu3Demo', + path: '/demos/nested/menu3', + meta: { + icon: 'ic:round-menu', + title: $t('demos.nested.menu3'), + }, + redirect: '/demos/nested/menu3/menu3-1', + children: [ + { + name: 'Menu31Demo', + path: 'menu3-1', + component: () => import('#/views/demos/nested/menu-3-1.vue'), + meta: { + icon: 'ic:round-menu', + keepAlive: true, + title: $t('demos.nested.menu3_1'), + }, + }, + { + name: 'Menu32Demo', + path: 'menu3-2', + meta: { + icon: 'ic:round-menu', + title: $t('demos.nested.menu3_2'), + }, + redirect: '/demos/nested/menu3/menu3-2/menu3-2-1', + children: [ + { + name: 'Menu321Demo', + path: '/demos/nested/menu3/menu3-2/menu3-2-1', + component: () => + import('#/views/demos/nested/menu-3-2-1.vue'), + meta: { + icon: 'ic:round-menu', + keepAlive: true, + title: $t('demos.nested.menu3_2_1'), + }, + }, + ], + }, + ], + }, + ], + }, + ], + }, +]; + +export default routes; +``` + +::: + +## Adding a New Page + +To add a new page, you only need to add a route and the corresponding page component. + +### Adding a Route + +Add a route object in the corresponding route file, as follows: + +```ts +import type { RouteRecordRaw } from 'vue-router'; + +import { VBEN_LOGO_URL } from '@vben/constants'; + +import { BasicLayout } from '#/layouts'; +import { $t } from '#/locales'; + +const routes: RouteRecordRaw[] = [ + { + meta: { + icon: 'mdi:home', + title: $t('page.home.title'), + }, + name: 'Home', + path: '/home', + redirect: '/home/index', + children: [ + { + name: 'HomeIndex', + path: '/home/index', + component: () => import('#/views/home/index.vue'), + meta: { + icon: 'mdi:home', + title: $t('page.home.index'), + }, + }, + ], + }, +]; + +export default routes; +``` + +### Adding a Page Component + +In `#/views/home/`, add a new `index.vue` file, as follows: + +```vue + +``` + +### Verification + +At this point, the page has been added. Visit `http://localhost:5555/home/index` to see the corresponding page. + +## Route Configuration + +The route configuration items are mainly in the `meta` property of the route object. The following are common configuration items: + +```ts {5-8} +const routes = [ + { + name: 'HomeIndex', + path: '/home/index', + meta: { + icon: 'mdi:home', + title: $t('page.home.index'), + }, + }, +]; +``` + +::: details Route Meta Configuration Type Definition + +```ts +interface RouteMeta { + /** + * Active icon (menu) + */ + activeIcon?: string; + /** + * The currently active menu, sometimes you don't want to activate the existing menu, use this to activate the parent menu + */ + activePath?: string; + /** + * Whether to fix the tab + * @default false + */ + affixTab?: boolean; + /** + * The order of fixed tabs + * @default 0 + */ + affixTabOrder?: number; + /** + * Specific roles required to access + * @default [] + */ + authority?: string[]; + /** + * Badge + */ + badge?: string; + /** + * Badge type + */ + badgeType?: 'dot' | 'normal'; + /** + * Badge color + */ + badgeVariants?: + | 'default' + | 'destructive' + | 'primary' + | 'success' + | 'warning' + | string; + /** + * The children of the current route are not displayed in the menu + * @default false + */ + hideChildrenInMenu?: boolean; + /** + * The current route is not displayed in the breadcrumb + * @default false + */ + hideInBreadcrumb?: boolean; + /** + * The current route is not displayed in the menu + * @default false + */ + hideInMenu?: boolean; + /** + * The current route is not displayed in the tab + * @default false + */ + hideInTab?: boolean; + /** + * Icon (menu/tab) + */ + icon?: string; + /** + * iframe address + */ + iframeSrc?: string; + /** + * Ignore permissions, can be accessed directly + * @default false + */ + ignoreAccess?: boolean; + /** + * Enable KeepAlive cache + */ + keepAlive?: boolean; + /** + * External link - jump path + */ + link?: string; + /** + * Whether the route has been loaded + */ + loaded?: boolean; + /** + * Maximum number of open tabs + * @default false + */ + maxNumOfOpenTab?: number; + /** + * The menu can be seen, but access will be redirected to 403 + */ + menuVisibleWithForbidden?: boolean; + /** + * Open in a new window + */ + openInNewWindow?: boolean; + /** + * Used for route -> menu sorting + */ + order?: number; + /** + * Parameters carried by the menu + */ + query?: Recordable; + /** + * Title name + */ + title: string; +} +``` + +::: + +### title + +- Type: `string` +- Default: `''` + +Used to configure the title of the page, which will be displayed in the menu and tab. Generally used with internationalization. + +### icon + +- Type: `string` +- Default: `''` + +Used to configure the icon of the page, which will be displayed in the menu and tab. Generally used with an icon library, if it is an `http` link, the image will be loaded automatically. + +### activeIcon + +- Type: `string` +- Default: `''` + +Used to configure the active icon of the page, which will be displayed in the menu. Generally used with an icon library, if it is an `http` link, the image will be loaded automatically. + +### keepAlive + +- Type: `boolean` +- Default: `false` + +Used to configure whether the page cache is enabled. When enabled, the page will be cached and will not reload, only effective when the tab is enabled. + +### hideInMenu + +- Type: `boolean` +- Default: `false` + +Used to configure whether the page is hidden in the menu. When hidden, the page will not be displayed in the menu. + +### hideInTab + +- Type: `boolean` +- Default: `false` + +Used to configure whether the page is hidden in the tab. When hidden, the page will not be displayed in the tab. + +### hideInBreadcrumb + +- Type: `boolean` +- Default: `false` + +Used to configure whether the page is hidden in the breadcrumb. When hidden, the page will not be displayed in the breadcrumb. + +### hideChildrenInMenu + +- Type: `boolean` +- Default: `false` + +Used to configure whether the subpages of the page are hidden in the menu. When hidden, the subpages will not be displayed in the menu. + +### authority + +- Type: `string[]` +- Default: `[]` + +Used to configure the permissions of the page. Only users with the corresponding permissions can access the page. If not configured, no permissions are required. + +### badge + +- Type: `string` +- Default: `''` + +Used to configure the badge of the page, which will be displayed in the menu. + +### badgeType + +- Type: `'dot' | 'normal'` +- Default: `'normal'` + +Used to configure the badge type of the page. `dot` is a small red dot, `normal` is text. + +### badgeVariants + +- Type: `'default' | 'destructive' | 'primary' | 'success' | 'warning' | string` +- Default: `'success'` + +Used to configure the badge color of the page. + +### activePath + +- Type: `string` +- Default: `''` + +Used to configure the currently active menu. Sometimes the page is not displayed in the menu, and this is used to activate the parent menu. + +### affixTab + +- Type: `boolean` +- Default: `false` + +Used to configure whether the page is fixed in the tab. When fixed, the page cannot be closed. + +### affixTabOrder + +- Type: `number` +- Default: `0` + +Used to configure the order of fixed tabs, sorted in ascending order. + +### iframeSrc + +- Type: `string` +- Default: `''` + +Used to configure the `iframe` address of the embedded page. When set, the corresponding page will be embedded in the current page. + +### ignoreAccess + +- Type: `boolean` +- Default: `false` + +Used to configure whether the page ignores permissions and can be accessed directly. + +### link + +- Type: `string` +- Default: `''` + +Used to configure the external link jump path, which will open in a new window. + +### maxNumOfOpenTab + +- Type: `number` +- Default: `-1` + +Used to configure the maximum number of open tabs. When set, the earliest opened tab will be automatically closed when opening a new tab (only effective when opening tabs with the same name). + +### menuVisibleWithForbidden + +- Type: `boolean` +- Default: `false` + +Used to configure whether the page can be seen in the menu, but access will be redirected to 403. + +### openInNewWindow + +- Type: `boolean` +- Default: `false` + +When set to `true`, the page will open in a new window. + +### order + +- Type: `number` +- Default: `0` + +Used to configure the sorting of the page, used for route to menu sorting. + +_Note:_ Sorting is only effective for first-level menus. The sorting of second-level menus needs to be set in the corresponding first-level menu in code order. + +### query + +- Type: `Recordable` +- Default: `{}` + +Used to configure the menu parameters of the page, which will be passed to the page in the menu. + +## Route Refresh + +The route refresh method is as follows: + +```vue + +``` diff --git a/docs/src/en/guide/essentials/server.md b/docs/src/en/guide/essentials/server.md new file mode 100644 index 000000000..67e0b1fd0 --- /dev/null +++ b/docs/src/en/guide/essentials/server.md @@ -0,0 +1,356 @@ +# Server Interaction and Data Mocking + +::: tip Note + +This document explains how to use Mock data and interact with the server in a development environment, involving technologies such as: + +- [Nitro](https://nitro.unjs.io/) A lightweight backend server that can be deployed anywhere, used as a Mock server in the project. +- [axios](https://axios-http.com/docs/intro) Used to send HTTP requests to interact with the server. + +::: + +## Interaction in Development Environment + +If the frontend application and the backend API server are not running on the same host, you need to proxy the API requests to the API server in the development environment. If they are on the same host, you can directly request the specific API endpoint. + +### Local Development CORS Configuration + +::: tip Hint + +The CORS configuration for local development has already been set up. If you have other requirements, you can add or adjust the configuration as needed. + +::: + +#### Configuring Local Development API Endpoint + +Configure the API endpoint in the `.env.development` file at the project root directory, here it is set to `/api`: + +```bash +VITE_GLOB_API_URL=/api +``` + +#### Configuring Development Server Proxy + +In the development environment, if you need to handle CORS, configure the API endpoint in the `vite.config.mts` file under the corresponding application directory: + +```ts{8-16} +// apps/web-antd/vite.config.mts +import { defineConfig } from '@vben/vite-config'; + +export default defineConfig(async () => { + return { + vite: { + server: { + proxy: {// [!code focus:11] + '/api': { + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, ''), + // mock proxy + target: 'http://localhost:5320/api', + ws: true, + }, + }, + }, + }, + }; +}); +``` + +#### API Requests + +Based on the above configuration, we can use `/api` as the prefix for API requests in our frontend project, for example: + +```ts +import axios from 'axios'; + +axios.get('/api/user').then((res) => { + console.log(res); +}); +``` + +At this point, the request will be proxied to `http://localhost:5320/api/user`. + +::: warning Note + +From the browser's console Network tab, the request appears as `http://localhost:5555/api/user`. This is because the proxy configuration does not change the local request's URL. + +::: + +### Configuration Without CORS + +If there is no CORS issue, you can directly ignore the [Configure Development Server Proxy](./server.md#configure-development-server-proxy) settings and set the API endpoint directly in `VITE_GLOB_API_URL`. + +Configure the API endpoint in the `.env.development` file at the project root directory: + +```bash +VITE_GLOB_API_URL=https://mock-napi.vben.pro/api +``` + +## Production Environment Interaction + +### API Endpoint Configuration + +Configure the API endpoint in the `.env.production` file at the project root directory: + +```bash +VITE_GLOB_API_URL=https://mock-napi.vben.pro/api +``` + +::: tip How to Dynamically Modify API Endpoint in Production + +Variables starting with `VITE_GLOB_*` in the `.env` file are injected into the `_app.config.js` file during packaging. After packaging, you can modify the corresponding API addresses in `dist/_app.config.js` and refresh the page to apply the changes. This eliminates the need to package multiple times for different environments, allowing a single package to be deployed across multiple API environments. + +::: + +### Cross-Origin Resource Sharing (CORS) Handling + +In the production environment, if CORS issues arise, you can use `nginx` to proxy the API address or enable `cors` on the backend to handle it (refer to the mock service for examples). + +## API Request Configuration + +The project comes with a default basic request configuration based on `axios`, provided by the `@vben/request` package. The project does not overly complicate things but simply wraps some common configurations. If there are other requirements, you can add or adjust the configurations as needed. Depending on the app, different component libraries and `store` might be used, so under the `src/api/request.ts` folder in the application directory, there are corresponding request configuration files. For example, in the `web-antd` project, there's a `src/api/request.ts` file where you can configure according to your needs. + +### Request Examples + +#### GET Request + +```ts +import { requestClient } from '#/api/request'; + +export async function getUserInfoApi() { + return requestClient.get('/user/info'); +} +``` + +#### POST/PUT Request + +```ts +import { requestClient } from '#/api/request'; + +export async function saveUserApi(user: UserInfo) { + return requestClient.post('/user', user); +} + +export async function saveUserApi(user: UserInfo) { + return requestClient.put('/user', user); +} + +export async function saveUserApi(user: UserInfo) { + const url = user.id ? `/user/${user.id}` : '/user/'; + return requestClient.request(url, { + data: user, + // OR PUT + method: user.id ? 'PUT' : 'POST', + }); +} +``` + +#### DELETE Request + +```ts +import { requestClient } from '#/api/request'; + +export async function deleteUserApi(userId: number) { + return requestClient.delete(`/user/${userId}`); +} +``` + +### Request Configuration + +The `src/api/request.ts` within the application can be configured according to the needs of your application: + +```ts +/** + * This file can be adjusted according to business logic + */ +import type { HttpResponse } from '@vben/request'; + +import { useAppConfig } from '@vben/hooks'; +import { preferences } from '@vben/preferences'; +import { + authenticateResponseInterceptor, + errorMessageResponseInterceptor, + RequestClient, +} from '@vben/request'; +import { useAccessStore } from '@vben/stores'; + +import { message } from 'ant-design-vue'; + +import { useAuthStore } from '#/store'; + +import { refreshTokenApi } from './core'; + +const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); + +function createRequestClient(baseURL: string) { + const client = new RequestClient({ + baseURL, + }); + + /** + * Re-authentication Logic + */ + async function doReAuthenticate() { + console.warn('Access token or refresh token is invalid or expired. '); + const accessStore = useAccessStore(); + const authStore = useAuthStore(); + accessStore.setAccessToken(null); + if (preferences.app.loginExpiredMode === 'modal') { + accessStore.setLoginExpired(true); + } else { + await authStore.logout(); + } + } + + /** + * Refresh token Logic + */ + async function doRefreshToken() { + const accessStore = useAccessStore(); + const resp = await refreshTokenApi(); + const newToken = resp.data; + accessStore.setAccessToken(newToken); + return newToken; + } + + function formatToken(token: null | string) { + return token ? `Bearer ${token}` : null; + } + + // Request Header Processing + client.addRequestInterceptor({ + fulfilled: async (config) => { + const accessStore = useAccessStore(); + + config.headers.Authorization = formatToken(accessStore.accessToken); + config.headers['Accept-Language'] = preferences.app.locale; + return config; + }, + }); + + // Deal Response Data + client.addResponseInterceptor({ + fulfilled: (response) => { + const { data: responseData, status } = response; + + const { code, data } = responseData; + + if (status >= 200 && status < 400 && code === 0) { + return data; + } + throw Object.assign({}, response, { response }); + }, + }); + + // Handling Token Expiration + client.addResponseInterceptor( + authenticateResponseInterceptor({ + client, + doReAuthenticate, + doRefreshToken, + enableRefreshToken: preferences.app.enableRefreshToken, + formatToken, + }), + ); + + // Generic error handling; if none of the above error handling logic is triggered, it will fall back to this. + client.addResponseInterceptor( + errorMessageResponseInterceptor((msg: string, error) => { + // 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg + // 当前mock接口返回的错误字段是 error 或者 message + const responseData = error?.response?.data ?? {}; + const errorMessage = responseData?.error ?? responseData?.message ?? ''; + // 如果没有错误信息,则会根据状态码进行提示 + message.error(errorMessage || msg); + }), + ); + + return client; +} + +export const requestClient = createRequestClient(apiURL); + +export const baseRequestClient = new RequestClient({ baseURL: apiURL }); +``` + +### Multiple API Endpoints + +To handle multiple API endpoints, simply create multiple `requestClient` instances, as follows: + +```ts +const { apiURL, otherApiURL } = useAppConfig( + import.meta.env, + import.meta.env.PROD, +); + +export const requestClient = createRequestClient(apiURL); + +export const otherRequestClient = createRequestClient(otherApiURL); +``` + +## Refresh Token + +The project provides a default logic for refreshing tokens. To enable it, follow the configuration below: + +- Ensure the refresh token feature is enabled + +Adjust the `preferences.ts` in the corresponding application directory to ensure `enableRefreshToken='true'`. + +```ts +import { defineOverridesPreferences } from '@vben/preferences'; + +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + enableRefreshToken: true, + }, +}); +``` + +Configure the `doRefreshToken` method in `src/api/request.ts` as follows: + +```ts +// Adjust this to your token format +function formatToken(token: null | string) { + return token ? `Bearer ${token}` : null; +} + +/** + * Refresh token logic + */ +async function doRefreshToken() { + const accessStore = useAccessStore(); + // Adjust this to your refresh token API + const resp = await refreshTokenApi(); + const newToken = resp.data; + accessStore.setAccessToken(newToken); + return newToken; +} +``` + +## Data Mocking + +::: tip Production Environment Mock + +The new version no longer supports mock in the production environment. Please use real interfaces. + +::: + +Mock data is an indispensable part of frontend development, serving as a key link in separating frontend and backend development. By agreeing on interfaces with the server side in advance and simulating request data and even logic, frontend development can proceed independently, without being blocked by the backend development process. + +The project uses [Nitro](https://nitro.unjs.io/) for local mock data processing. The principle is to start an additional backend service locally, which is a real backend service that can handle requests and return data. + +### Using Nitro + +The mock service code is located in the `apps/backend-mock` directory. It does not need to be started manually and is already integrated into the project. You only need to run `pnpm dev` in the project root directory. After running successfully, the console will print `http://localhost:5320/api`, and you can access this address to view the mock service. + +[Nitro](https://nitro.unjs.io/) syntax is simple, and you can configure and develop according to your needs. For specific configurations, you can refer to the [Nitro documentation](https://nitro.unjs.io/). + +## Disabling Mock Service + +Since mock is essentially a real backend service, if you do not need the mock service, you can configure `VITE_NITRO_MOCK=false` in the `.env.development` file in the project root directory to disable the mock service. + +```bash +# .env.development +VITE_NITRO_MOCK=false +``` diff --git a/docs/src/en/guide/essentials/styles.md b/docs/src/en/guide/essentials/styles.md new file mode 100644 index 000000000..16f6681d2 --- /dev/null +++ b/docs/src/en/guide/essentials/styles.md @@ -0,0 +1,106 @@ +# Styles + +::: tip Preface + +For Vue projects, the [official documentation](https://vuejs.org/api/sfc-css-features.html#deep-selectors) already provides a detailed introduction to the syntax. Here, we mainly introduce the structure and usage of style files in the project. + +::: + +## Project Structure + +The style files in the project are stored in `@vben/styles`, which includes some global styles, such as reset styles, global variables, etc. It inherits the styles and capabilities of `@vben-core/design` and can be overridden according to project needs. + +## Scss + +The project uses `scss` as the style preprocessor, allowing the use of `scss` features such as variables, functions, mixins, etc., within the project. + +```vue + +``` + +## Postcss + +If you're not accustomed to using `scss`, you can also use `postcss`, which is a more powerful style processor that supports a wider range of plugins. The project includes the [postcss-nested](https://github.com/postcss/postcss-nested) plugin and is configured with `Css Variables`, making it a complete substitute for `scss`. + +```vue + +``` + +## Tailwind CSS + +The project integrates [Tailwind CSS](https://tailwindcss.com/), allowing the use of `tailwindcss` class names to quickly build pages. + +```vue + +``` + +## BEM Standard + +Another option to avoid style conflicts is to use the `BEM` standard. If you choose `scss`, it is recommended to use the `BEM` naming convention for better style management. The project provides a default `useNamespace` function to easily generate namespaces. + +```vue + + + +``` + +## CSS Modules + +Another solution to address style conflicts is to use the `CSS Modules` modular approach. The usage method is as follows. + +```vue + + + +``` + +For more usage, see the [CSS Modules official documentation](https://vuejs.org/api/sfc-css-features.html#css-modules). diff --git a/docs/src/en/guide/in-depth/access.md b/docs/src/en/guide/in-depth/access.md new file mode 100644 index 000000000..545dddabd --- /dev/null +++ b/docs/src/en/guide/in-depth/access.md @@ -0,0 +1,356 @@ +--- +outline: deep +--- + +# Access Control + +The framework has built-in three types of access control methods: + +- Determining whether a menu or button can be accessed based on user roles +- Determining whether a menu or button can be accessed through an API +- Mixed mode: Using both frontend and backend access control simultaneously + +## Frontend Access Control + +**Implementation Principle**: The permissions for routes are hardcoded on the frontend, specifying which permissions are required to view certain routes. Only general routes are initialized, and routes that require permissions are not added to the route table. After logging in or obtaining user roles through other means, the roles are used to traverse the route table to generate a route table that the role can access. This table is then added to the router instance using `router.addRoute`, achieving permission filtering. + +**Disadvantage**: The permissions are relatively inflexible; if the backend changes roles, the frontend needs to be adjusted accordingly. This is suitable for systems with relatively fixed roles. + +### Steps + +- Ensure the current mode is set to frontend access control + +Adjust `preferences.ts` in the corresponding application directory to ensure `accessMode='frontend'`. + +```ts +import { defineOverridesPreferences } from '@vben/preferences'; + +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + // Default value, optional + accessMode: 'frontend', + }, +}); +``` + +- Configure route permissions + +#### If not configured, it is visible by default + +```ts {3} + { + meta: { + authority: ['super'], + }, +}, +``` + +- Ensure the roles returned by the interface match the permissions in the route table + +You can look under `src/store/auth` in the application to find the following code: + +```ts +// Set the login user information, ensuring that userInfo.roles is an array and contains permissions from the route table +// For example: userInfo.roles=['super', 'admin'] +authStore.setUserInfo(userInfo); +``` + +At this point, the configuration is complete. You need to ensure that the roles returned by the interface after login match the permissions in the route table; otherwise, access will not be possible. + +### Menu Visible but Access Forbidden + +Sometimes, we need the menu to be visible but access to it forbidden. This can be achieved by setting `menuVisibleWithForbidden` to `true`. In this case, the menu will be visible, but access will be forbidden, redirecting to a 403 page. + +```ts +{ + meta: { + menuVisibleWithForbidden: true, + }, +}, +``` + +## Backend Access Control + +**Implementation Principle**: It is achieved by dynamically generating a routing table through an API, which returns data following a certain structure. The frontend processes this data into a recognizable structure, then adds it to the routing instance using `router.addRoute`, realizing the dynamic generation of permissions. + +**Disadvantage**: The backend needs to provide a data structure that meets the standards, and the frontend needs to process this structure. This is suitable for systems with more complex permissions. + +### Steps + +- Ensure the current mode is set to backend access control + +Adjust `preferences.ts` in the corresponding application directory to ensure `accessMode='backend'`. + +```ts +import { defineOverridesPreferences } from '@vben/preferences'; + +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + accessMode: 'backend', + }, +}); +``` + +- Ensure the structure of the menu data returned by the interface is correct + +You can look under `src/router/access.ts` in the application to find the following code: + +```ts +async function generateAccess(options: GenerateMenuAndRoutesOptions) { + return await generateAccessible(preferences.app.accessMode, { + fetchMenuListAsync: async () => { + // This interface is for the menu data returned by the backend + return await getAllMenus(); + }, + }); +} +``` + +- Interface returns menu data, see comments for explanation + +::: details Example of Interface Returning Menu Data + +```ts +const dashboardMenus = [ + { + // Here, 'BasicLayout' is hardcoded and cannot be changed + component: 'BasicLayout', + meta: { + order: -1, + title: 'page.dashboard.title', + }, + name: 'Dashboard', + path: '/', + redirect: '/analytics', + children: [ + { + name: 'Analytics', + path: '/analytics', + // Here is the path of the page, need to remove 'views/' and '.vue' + component: '/dashboard/analytics/index', + meta: { + affixTab: true, + title: 'page.dashboard.analytics', + }, + }, + { + name: 'Workspace', + path: '/workspace', + component: '/dashboard/workspace/index', + meta: { + title: 'page.dashboard.workspace', + }, + }, + ], + }, +]; +``` + +::: + +At this point, the configuration is complete. You need to ensure that after logging in, the format of the menu returned by the interface is correct; otherwise, access will not be possible. + +## Mixed Access Control + +**Implementation Principle**: Mixed mode combines both frontend access control and backend access control methods. The system processes frontend fixed route permissions and backend dynamic menu data in parallel, ultimately merging both parts of routes to provide a more flexible access control solution. + +**Advantages**: Combines the performance advantages of frontend control with the flexibility of backend control, suitable for complex business scenarios requiring permission management. + +### Steps + +- Ensure the current mode is set to mixed access control + +Adjust `preferences.ts` in the corresponding application directory to ensure `accessMode='mixed'`. + +```ts +import { defineOverridesPreferences } from '@vben/preferences'; + +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + accessMode: 'mixed', + }, +}); +``` + +- Configure frontend route permissions + +Same as the route permission configuration method in [Frontend Access Control](#frontend-access-control) mode. + +- Configure backend menu interface + +Same as the interface configuration method in [Backend Access Control](#backend-access-control) mode. + +- Ensure roles and permissions match + +Must satisfy both frontend route permission configuration and backend menu data return requirements, ensuring user roles match the permission configurations of both modes. + +At this point, the configuration is complete. Mixed mode will automatically merge frontend and backend routes, providing complete access control functionality. + +## Fine-grained Control of Buttons + +In some cases, we need to control the display of buttons with fine granularity. We can control the display of buttons through interfaces or roles. + +### Permission Code + +The permission code is the code returned by the interface. The logic to determine whether a button is displayed is located under `src/store/auth`: + +```ts +const [fetchUserInfoResult, accessCodes] = await Promise.all([ + fetchUserInfo(), + getAccessCodes(), +]); + +userInfo = fetchUserInfoResult; +authStore.setUserInfo(userInfo); +accessStore.setAccessCodes(accessCodes); +``` + +Locate the `getAccessCodes` corresponding interface, which can be adjusted according to business logic. + +The data structure returned by the permission code is an array of strings, for example: `['AC_100100', 'AC_100110', 'AC_100120', 'AC_100010']` + +With the permission codes, you can use the `AccessControl` component and API provided by `@vben/access` to show and hide buttons. + +#### Component Method + +```vue + + + +``` + +#### API Method + +```vue + + + +``` + +#### Directive Method + +> The directive supports binding single or multiple permission codes. For a single one, you can pass a string or an array containing one permission code, and for multiple permission codes, you can pass an array. + +```vue + +``` + +### Roles + +The method of determining roles does not require permission codes returned by the interface; it directly determines whether buttons are displayed based on roles. + +#### Component Method + +```vue + + + +``` + +#### API Method + +```vue + + + +``` + +#### Directive Method + +> The directive supports binding single or multiple permission codes. For a single one, you can pass a string or an array containing one permission code, and for multiple permission codes, you can pass an array. + +```vue + +``` diff --git a/docs/src/en/guide/in-depth/check-updates.md b/docs/src/en/guide/in-depth/check-updates.md new file mode 100644 index 000000000..1e5b679dc --- /dev/null +++ b/docs/src/en/guide/in-depth/check-updates.md @@ -0,0 +1,48 @@ +# Check Updates + +## Introduction + +When there are updates to the website, you might need to check for updates. The framework provides this functionality. By periodically checking for updates, you can configure the `checkUpdatesInterval` and `enableCheckUpdates` fields in your application's preferences.ts file to enable and set the interval for checking updates (in minutes). + +```ts +import { defineOverridesPreferences } from '@vben/preferences'; + +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + // Whether to enable check for updates + enableCheckUpdates: true, + // The interval for checking updates, in minutes + checkUpdatesInterval: 1, + }, +}); +``` + +## Effect + +When an update is detected, a prompt will pop up asking the user whether to refresh the page: + +![check-updates](/guide/update-notice.png) + +## Replacing with Other Update Checking Methods + +If you need to check for updates in other ways, such as through an API to more flexibly control the update logic (such as force refresh, display update content, etc.), you can do so by modifying the `src/widgets/check-updates/check-updates.vue` file under `@vben/layouts`. + +```ts +// Replace this with your update checking logic +async function getVersionTag() { + try { + const response = await fetch('/', { + cache: 'no-cache', + method: 'HEAD', + }); + + return ( + response.headers.get('etag') || response.headers.get('last-modified') + ); + } catch { + console.error('Failed to fetch version tag'); + return null; + } +} +``` diff --git a/docs/src/en/guide/in-depth/features.md b/docs/src/en/guide/in-depth/features.md new file mode 100644 index 000000000..24fecea96 --- /dev/null +++ b/docs/src/en/guide/in-depth/features.md @@ -0,0 +1,84 @@ +# Common Features + +A collection of some commonly used features. + +## Login Authentication Expiry + +When the interface returns a `401` status code, the framework will consider the login authentication to have expired. Upon login timeout, it will redirect to the login page or open a login popup. This can be configured in `preferences.ts` in the application directory: + +### Redirect to Login Page + +Upon login timeout, it will redirect to the login page. + +```ts +import { defineOverridesPreferences } from '@vben/preferences'; + +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + loginExpiredMode: 'page', + }, +}); +``` + +### Open Login Popup + +When login times out, a login popup will open. + +![login-expired](/guide/login-expired.png) + +Configuration: + +```ts +import { defineOverridesPreferences } from '@vben/preferences'; + +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + loginExpiredMode: 'modal', + }, +}); +``` + +## Dynamic Title + +- Default value: `true` + +When enabled, the webpage title changes according to the route's `title`. You can enable or disable this in the `preferences.ts` file in your application directory. + +```ts +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + dynamicTitle: true, + }, +}); +``` + +## Page Watermark + +- Default value: `false` + +When enabled, the webpage will display a watermark. You can enable or disable this in the `preferences.ts` file in your application directory. + +```ts +export const overridesPreferences = defineOverridesPreferences({ + // overrides + app: { + watermark: true, + }, +}); +``` + +If you want to update the content of the watermark, you can do so. The parameters can be referred to [watermark-js-plus](https://zhensherlock.github.io/watermark-js-plus/): + +```ts +import { useWatermark } from '@vben/hooks'; + +const { destroyWatermark, updateWatermark } = useWatermark(); + +await updateWatermark({ + // watermark content + content: 'hello my watermark', +}); +``` diff --git a/docs/src/en/guide/in-depth/layout.md b/docs/src/en/guide/in-depth/layout.md new file mode 100644 index 000000000..412c1cf07 --- /dev/null +++ b/docs/src/en/guide/in-depth/layout.md @@ -0,0 +1 @@ +# Layout diff --git a/docs/src/en/guide/in-depth/loading.md b/docs/src/en/guide/in-depth/loading.md new file mode 100644 index 000000000..0f1cff6ee --- /dev/null +++ b/docs/src/en/guide/in-depth/loading.md @@ -0,0 +1,44 @@ +# Global Loading + +Global loading refers to the loading effect that appears when the page is refreshed, usually a spinning icon: + +![Global loading spinner](/guide/loading.png) + +## Principle + +Implemented by the `vite-plugin-inject-app-loading` plugin, the plugin injects a global `loading html` into each application. + +## Disable + +If you do not need global loading, you can disable it in the `.env` file: + +```bash +VITE_INJECT_APP_LOADING=false +``` + +## Customization + +If you want to customize the global loading, you can create a `loading.html` file in the application directory, at the same level as `index.html`. The plugin will automatically read and inject this HTML. You can define the style and animation of this HTML as you wish. + +::: tip + +- You can use the same syntax as in `index.html`, such as the `VITE_APP_TITLE` variable, to get the application's title. +- You must ensure there is an element with `id="__app-loading__"`. +- Add a `hidden` class to the element with `id="__app-loading__"`. +- You must ensure there is a `style[data-app-loading="inject-css"]` element. + +```html{1,4} + +
    + +
    <%= VITE_APP_TITLE %>
    +
    +``` diff --git a/docs/src/en/guide/in-depth/locale.md b/docs/src/en/guide/in-depth/locale.md new file mode 100644 index 000000000..549bc83f5 --- /dev/null +++ b/docs/src/en/guide/in-depth/locale.md @@ -0,0 +1,227 @@ +# Internationalization + +The project has integrated [Vue i18n](https://kazupon.github.io/vue-i18n/), and Chinese and English language packs have been configured. + +## IDE Plugin + +If you are using vscode as your development tool, it is recommended to install the [i18n Ally](https://marketplace.visualstudio.com/items?itemName=Lokalise.i18n-ally) plugin. It can help you manage internationalization copy more conveniently. After installing this plugin, you can see the corresponding language content in your code in real-time: + +![](/public/guide/locale.png) + +## Configure Default Language + +You just need to override the default preferences. In the corresponding application, find the `src/preferences.ts` file and modify the value of `locale`: + +```ts {3} +export const overridesPreferences = defineOverridesPreferences({ + app: { + locale: 'en-US', + }, +}); +``` + +## Dynamic Language Switching + +Switching languages consists of two parts: + +- Updating preferences +- Loading the corresponding language pack + +```ts +import type { SupportedLanguagesType } from '@vben/locales'; +import { loadLocaleMessages } from '@vben/locales'; +import { updatePreferences } from '@vben/preferences'; + +async function updateLocale(value: string) { + // 1. Update preferences + const locale = value as SupportedLanguagesType; + updatePreferences({ + app: { + locale, + }, + }); + // 2. Load the corresponding language pack + await loadLocaleMessages(locale); +} + +updateLocale('en-US'); +``` + +## Adding Translation Texts + +::: warning Attention + +- Do not place business translation texts inside `@vben/locales` to better manage business and general translation texts. +- When adding new translation texts and multiple language packs are available, ensure to add the corresponding texts in all language packs. + +::: + +To add new translation texts, simply find `src/locales/langs/` in the corresponding application and add the texts accordingly, for example: + +**src/locales/langs/zh-CN/\*.json** + +````ts +```json +{ + "about": { + "desc": "Vben Admin 是一个现代的管理模版。" + } +} +```` + +**src/locales/langs/en-US.ts** + +````ts +```json +{ + "about": { + "desc": "Vben Admin is a modern management template." + } +} +```` + +## Using Translation Texts + +With `@vben/locales`, you can easily use translation texts: + +### In Code + +```vue + + +``` + +## Adding a New Language Pack + +If you need to add a new language pack, follow these steps: + +- Add the corresponding language pack file in the `packages/locales/langs` directory, for example, `zh-TW.json`, and translate the respective texts. +- In the corresponding application, locate the `src/locales/langs` file and add the new language pack `zh-TW.json`. +- Add the corresponding language in `packages/constants/src/core.ts`: + + ```ts + export interface LanguageOption { + label: string; + value: 'en-US' | 'zh-CN'; // [!code --] + value: 'en-US' | 'zh-CN' | 'zh-TW'; // [!code ++] + } + export const SUPPORT_LANGUAGES: LanguageOption[] = [ + { + label: '简体中文', + value: 'zh-CN', + }, + { + label: 'English', + value: 'en-US', + }, + { + label: '繁体中文', // [!code ++] + value: 'zh-TW', // [!code ++] + }, + ]; + ``` + +- In `packages/locales/typing.ts`, add a new TypeScript type: + + ```ts + export type SupportedLanguagesType = 'en-US' | 'zh-CN'; // [!code --] + export type SupportedLanguagesType = 'en-US' | 'zh-CN' | 'zh-TW'; // [!code ++] + ``` + +At this point, you can use the newly added language pack in the project. + +## Interface Language Switching Function + +If you want to disable the language switching display button on the interface, in the corresponding application, find the `src/preferences.ts` file and modify the value of `locale` accordingly: + +```ts {3} +export const overridesPreferences = defineOverridesPreferences({ + widget: { + languageToggle: false, + }, +}); +``` + +## Remote Loading of Language Packs + +::: tip Tip + +When making interface requests through the project's built-in `request` tool, the default request header will include [Accept-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language), allowing the server to dynamically internationalize data based on the request header. + +::: + +Each application has an independent language pack that can override the general language configuration. You can remotely load the corresponding language pack by finding the `src/locales/index.ts` file in the corresponding application and modifying the `loadMessages` method accordingly: + +```ts {3-4} +async function loadMessages(lang: SupportedLanguagesType) { + const [appLocaleMessages] = await Promise.all([ + // Modify here to load data via a remote interface + localesMap[lang](), + loadThirdPartyMessage(lang), + ]); + return appLocaleMessages.default; +} +``` + +## Third-Party Language Packs + +Different applications may use third-party component libraries or plugins with varying internationalization methods, so they need to be handled differently. If you need to introduce a third-party language pack, you can find the `src/locales/index.ts` file in the corresponding application and modify the `loadThirdPartyMessage` method accordingly: + +```ts +/** + * Load the dayjs language pack + * @param lang + */ +async function loadDayjsLocale(lang: SupportedLanguagesType) { + let locale; + switch (lang) { + case 'zh-CN': { + locale = await import('dayjs/locale/zh-cn'); + break; + } + case 'en-US': { + locale = await import('dayjs/locale/en'); + break; + } + // Default to using English + default: { + locale = await import('dayjs/locale/en'); + } + } + if (locale) { + dayjs.locale(locale); + } else { + console.error(`Failed to load dayjs locale for ${lang}`); + } +} +``` + +## Removing Internationalization + +Firstly, it is not recommended to remove internationalization, as it is a good development practice. However, if you really need to remove it, you can directly use Chinese copy and then retain the project's built-in language pack, which will not affect the overall development experience. The steps to remove internationalization are as follows: + +- Hide the language switching button on the interface, see: [Interface Language Switching Function](#interface-language-switching-function) +- Modify the default language, see: [Configure Default Language](#configure-default-language) +- Disable `vue-i18n` warning prompts, in the `src/locales/index.ts` file, modify `missingWarn` to `false`: + + ```ts + async function setupI18n(app: App, options: LocaleSetupOptions = {}) { + await coreSetup(app, { + defaultLocale: preferences.app.locale, + loadMessages, + missingWarn: !import.meta.env.PROD, // [!code --] + missingWarn: false, // [!code ++] + ...options, + }); + } + ``` diff --git a/docs/src/en/guide/in-depth/login.md b/docs/src/en/guide/in-depth/login.md new file mode 100644 index 000000000..7fdac2c6f --- /dev/null +++ b/docs/src/en/guide/in-depth/login.md @@ -0,0 +1,119 @@ +# Login + +This document explains how to customize the login page of your application. + +## Login Page Adjustment + +If you want to adjust the title, description, icon, and toolbar of the login page, you can do so by configuring the `props` parameter of the `AuthPageLayout` component. + +![login](/guide/login.png) + +You just need to configure the `props` parameter of `AuthPageLayout` in `src/router/routes/core.ts` within your application: + +```ts {4-8} + { + component: AuthPageLayout, + props: { + sloganImage: "xxx/xxx.png", + pageTitle: "开箱即用的大型中后台管理系统", + pageDescription: "工程化、高性能、跨组件库的前端模版", + toolbar: true, + toolbarList: ['color', 'language', 'layout', 'theme'], + } + // ... + }, +``` + +::: tip + +If these configurations do not meet your needs, you can implement your own login page. Simply implement your own `AuthPageLayout`. + +::: + +## Login Form Adjustment + +If you want to adjust the content of the login form, you can configure the `AuthenticationLogin` component parameters in `src/views/_core/authentication/login.vue` within your application: + +```vue + +``` + +::: details AuthenticationLogin Component Props + +```ts +{ + /** + * @en Verification code login path + */ + codeLoginPath?: string; + /** + * @en Forget password path + */ + forgetPasswordPath?: string; + + /** + * @en Whether it is in loading state + */ + loading?: boolean; + + /** + * @en QR code login path + */ + qrCodeLoginPath?: string; + + /** + * @en Registration path + */ + registerPath?: string; + + /** + * @en Whether to show verification code login + */ + showCodeLogin?: boolean; + /** + * @en Whether to show forget password + */ + showForgetPassword?: boolean; + + /** + * @en Whether to show QR code login + */ + showQrcodeLogin?: boolean; + + /** + * @en Whether to show registration button + */ + showRegister?: boolean; + + /** + * @en Whether to show remember account + */ + showRememberMe?: boolean; + + /** + * @en Whether to show third-party login + */ + showThirdPartyLogin?: boolean; + + /** + * @en Login box subtitle + */ + subTitle?: string; + + /** + * @en Login box title + */ + title?: string; +} +``` + +::: + +::: tip + +If these configurations do not meet your needs, you can implement your own login form and related login logic. + +::: diff --git a/docs/src/en/guide/in-depth/theme.md b/docs/src/en/guide/in-depth/theme.md new file mode 100644 index 000000000..164ac1797 --- /dev/null +++ b/docs/src/en/guide/in-depth/theme.md @@ -0,0 +1,1295 @@ +# Theme + +The framework is built on [shadcn-vue](https://www.shadcn-vue.com/themes.html) and [tailwindcss](https://tailwindcss.com/), offering a rich theme configuration. You can easily switch between various themes through simple configuration to meet personalized needs. You can choose to use CSS variables or Tailwind CSS utility classes for theme settings. + +## CSS Variables + +The project follows the theme configuration of [shadcn-vue](https://www.shadcn-vue.com/themes.html), for example: + +```html +
    +``` + +We use a simple convention for colors. The `background` variable is used for the background color of components, and the `foreground` variable is used for text color. + +For the following components, `background` will be `hsl(var(--primary))`, and `foreground` will be `hsl(var(--primary-foreground))`. + +## Detailed List of CSS Variables + +::: warning Note + +The colors inside CSS variables must use the `hsl` format, such as `0 0% 100%`, without adding `hsl()` and `,`. + +::: + +You can check the list below to understand all the available variables. + +::: details Default theme CSS variables + +```css +:root { + --font-family: + -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, 'Helvetica Neue', + arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol', 'Noto Color Emoji'; + + /* Default background color of ...etc */ + --background: 0 0% 100%; + + /* Main area background color */ + --background-deep: 216 20.11% 95.47%; + --foreground: 210 6% 21%; + + /* Background color for */ + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + /* Background color for popovers such as , , */ + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + /* Muted backgrounds such as , and */ + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + /* Theme Colors */ + + --primary: 212 100% 45%; + --primary-foreground: 0 0% 98%; + + /* Used for destructive actions such as