Full Code of ageerle/ruoyi-admin for AI

main 3c6e6692be38 cached
1431 files
4.1 MB
1.2M tokens
2188 symbols
1 requests
Download .txt
Showing preview only (4,835K chars total). Download the full file or copy to clipboard to get everything.
Repository: ageerle/ruoyi-admin
Branch: main
Commit: 3c6e6692be38
Files: 1431
Total size: 4.1 MB

Directory structure:
gitextract_bqdxkhyg/

├── .browserslistrc
├── .commitlintrc.js
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .gitconfig
├── .gitignore
├── .npmrc
├── .prettierignore
├── .prettierrc.mjs
├── .stylelintignore
├── LICENSE
├── README.md
├── apps/
│   └── web-antd/
│       ├── Dockerfile
│       ├── docker-compose.yml
│       ├── docker-entrypoint.sh
│       ├── index.html
│       ├── nginx.conf
│       ├── package.json
│       ├── postcss.config.mjs
│       ├── public/
│       │   └── tinymce/
│       │       ├── langs/
│       │       │   ├── README.md
│       │       │   └── zh_CN.js
│       │       ├── plugins/
│       │       │   ├── emoticons/
│       │       │   │   └── js/
│       │       │   │       ├── emojiimages.js
│       │       │   │       └── emojis.js
│       │       │   └── help/
│       │       │       └── js/
│       │       │           └── i18n/
│       │       │               └── keynav/
│       │       │                   ├── ar.js
│       │       │                   ├── bg_BG.js
│       │       │                   ├── ca.js
│       │       │                   ├── cs.js
│       │       │                   ├── da.js
│       │       │                   ├── de.js
│       │       │                   ├── el.js
│       │       │                   ├── en.js
│       │       │                   ├── es.js
│       │       │                   ├── eu.js
│       │       │                   ├── fa.js
│       │       │                   ├── fi.js
│       │       │                   ├── fr_FR.js
│       │       │                   ├── he_IL.js
│       │       │                   ├── hi.js
│       │       │                   ├── hr.js
│       │       │                   ├── hu_HU.js
│       │       │                   ├── id.js
│       │       │                   ├── it.js
│       │       │                   ├── ja.js
│       │       │                   ├── kk.js
│       │       │                   ├── ko_KR.js
│       │       │                   ├── ms.js
│       │       │                   ├── nb_NO.js
│       │       │                   ├── nl.js
│       │       │                   ├── pl.js
│       │       │                   ├── pt_BR.js
│       │       │                   ├── pt_PT.js
│       │       │                   ├── ro.js
│       │       │                   ├── ru.js
│       │       │                   ├── sk.js
│       │       │                   ├── sl_SI.js
│       │       │                   ├── sv_SE.js
│       │       │                   ├── th_TH.js
│       │       │                   ├── tr.js
│       │       │                   ├── uk.js
│       │       │                   ├── vi.js
│       │       │                   ├── zh_CN.js
│       │       │                   └── zh_TW.js
│       │       ├── skins/
│       │       │   ├── content/
│       │       │   │   ├── dark/
│       │       │   │   │   └── content.js
│       │       │   │   ├── default/
│       │       │   │   │   └── content.js
│       │       │   │   ├── document/
│       │       │   │   │   └── content.js
│       │       │   │   ├── tinymce-5/
│       │       │   │   │   └── content.js
│       │       │   │   ├── tinymce-5-dark/
│       │       │   │   │   └── content.js
│       │       │   │   └── writer/
│       │       │   │       └── content.js
│       │       │   └── ui/
│       │       │       ├── oxide/
│       │       │       │   ├── content.inline.js
│       │       │       │   ├── content.js
│       │       │       │   ├── skin.js
│       │       │       │   └── skin.shadowdom.js
│       │       │       ├── oxide-dark/
│       │       │       │   ├── content.inline.js
│       │       │       │   ├── content.js
│       │       │       │   ├── skin.js
│       │       │       │   └── skin.shadowdom.js
│       │       │       ├── tinymce-5/
│       │       │       │   ├── content.inline.js
│       │       │       │   ├── content.js
│       │       │       │   ├── skin.js
│       │       │       │   └── skin.shadowdom.js
│       │       │       └── tinymce-5-dark/
│       │       │           ├── content.inline.js
│       │       │           ├── content.js
│       │       │           ├── skin.js
│       │       │           └── skin.shadowdom.js
│       │       └── tinymce.d.ts
│       ├── src/
│       │   ├── adapter/
│       │   │   ├── component/
│       │   │   │   └── index.ts
│       │   │   ├── form.ts
│       │   │   └── vxe-table.ts
│       │   ├── api/
│       │   │   ├── aiflow/
│       │   │   │   ├── API文档.md
│       │   │   │   ├── adapters.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── runtime.ts
│       │   │   │   └── types.d.ts
│       │   │   ├── chat/
│       │   │   │   ├── chatconfig/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── message/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── model/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── provider/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── common.d.ts
│       │   │   ├── core/
│       │   │   │   ├── auth.ts
│       │   │   │   ├── captcha.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── menu.ts
│       │   │   │   ├── upload.ts
│       │   │   │   └── user.ts
│       │   │   ├── graph/
│       │   │   │   ├── index.ts
│       │   │   │   └── model.d.ts
│       │   │   ├── helper.ts
│       │   │   ├── index.ts
│       │   │   ├── knowledge/
│       │   │   │   ├── attach/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── fragment/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── info/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── mcp/
│       │   │   │   ├── market/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── tool/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── monitor/
│       │   │   │   ├── cache/
│       │   │   │   │   └── index.ts
│       │   │   │   ├── logininfo/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── online/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── operlog/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── operator/
│       │   │   │   └── configurationManage/
│       │   │   │       └── index.ts
│       │   │   ├── request.ts
│       │   │   ├── system/
│       │   │   │   ├── client/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── config/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── dept/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── dict/
│       │   │   │   │   ├── dict-data-model.d.ts
│       │   │   │   │   ├── dict-data.ts
│       │   │   │   │   ├── dict-type-model.d.ts
│       │   │   │   │   ├── dict-type.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── menu/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── notice/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── oss/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── oss-config/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── post/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── profile/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── role/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── social/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── tenant/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── tenant-package/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── user/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── tool/
│       │   │   │   └── gen/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   └── workflow/
│       │   │       ├── category/
│       │   │       │   ├── index.ts
│       │   │       │   └── model.d.ts
│       │   │       ├── definition/
│       │   │       │   ├── index.ts
│       │   │       │   └── model.d.ts
│       │   │       ├── instance/
│       │   │       │   ├── index.ts
│       │   │       │   └── model.d.ts
│       │   │       ├── spel/
│       │   │       │   ├── index.tsx
│       │   │       │   └── model.d.ts
│       │   │       └── task/
│       │   │           ├── index.ts
│       │   │           └── model.d.ts
│       │   ├── app.vue
│       │   ├── bootstrap.ts
│       │   ├── components/
│       │   │   ├── cropper/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── cropper-avatar.vue
│       │   │   │       ├── cropper-modal.vue
│       │   │   │       ├── cropper.vue
│       │   │   │       └── typing.ts
│       │   │   ├── description/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── description.vue
│       │   │   │       ├── typing.ts
│       │   │   │       └── useDescription.ts
│       │   │   ├── dict/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── data.tsx
│       │   │   │       ├── index.vue
│       │   │   │       └── type.d.ts
│       │   │   ├── global/
│       │   │   │   ├── button.ts
│       │   │   │   ├── index.ts
│       │   │   │   └── slot.ts
│       │   │   ├── table/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── options-tag.vue
│       │   │   │       └── table-switch.vue
│       │   │   ├── tenant-toggle/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       └── index.vue
│       │   │   ├── tinymce/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── editor.vue
│       │   │   │       ├── helper.ts
│       │   │   │       └── tinymce.ts
│       │   │   ├── tree/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── data.tsx
│       │   │   │       ├── helper.tsx
│       │   │   │       ├── hook.tsx
│       │   │   │       ├── menu-select-table.vue
│       │   │   │       └── tree-select-panel.vue
│       │   │   ├── upload/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── file-upload.vue
│       │   │   │       ├── helper.ts
│       │   │   │       ├── hook.ts
│       │   │   │       ├── image-upload.vue
│       │   │   │       ├── note.md
│       │   │   │       └── props.d.ts
│       │   │   └── upload-old/
│       │   │       ├── index.ts
│       │   │       └── src/
│       │   │           ├── file-upload.vue
│       │   │           ├── helper.ts
│       │   │           ├── image-upload.vue
│       │   │           ├── typing.ts
│       │   │           └── use-upload.ts
│       │   ├── layouts/
│       │   │   ├── auth.vue
│       │   │   ├── basic.vue
│       │   │   └── index.ts
│       │   ├── locales/
│       │   │   ├── README.md
│       │   │   ├── index.ts
│       │   │   └── langs/
│       │   │       ├── en-US/
│       │   │       │   ├── component.json
│       │   │       │   ├── demos.json
│       │   │       │   ├── http.json
│       │   │       │   ├── menu.json
│       │   │       │   ├── page.json
│       │   │       │   └── pages.json
│       │   │       └── zh-CN/
│       │   │           ├── component.json
│       │   │           ├── demos.json
│       │   │           ├── http.json
│       │   │           ├── menu.json
│       │   │           ├── page.json
│       │   │           └── pages.json
│       │   ├── main.ts
│       │   ├── packages/
│       │   │   └── workflow-designer/
│       │   │       ├── StandaloneWorkflowDesigner.vue
│       │   │       ├── components/
│       │   │       │   ├── CommonNodeHeader.vue
│       │   │       │   ├── RunDetail.vue
│       │   │       │   ├── RuntimeNodes.vue
│       │   │       │   ├── SvgIcon.vue
│       │   │       │   ├── WfVariableSelector.vue
│       │   │       │   ├── edges/
│       │   │       │   │   ├── CustomEdge.vue
│       │   │       │   │   ├── CustomEdge2.vue
│       │   │       │   │   └── SpecialEdge.vue
│       │   │       │   └── nodes/
│       │   │       │       ├── AnswerNode.vue
│       │   │       │       ├── ClassifierNode.vue
│       │   │       │       ├── Dalle3Node.vue
│       │   │       │       ├── DocumentExtractorNode.vue
│       │   │       │       ├── EndNode.vue
│       │   │       │       ├── FaqExtractorNode.vue
│       │   │       │       ├── GoogleNode.vue
│       │   │       │       ├── HumanFeedbackNode.vue
│       │   │       │       ├── KeywordExtractorNode.vue
│       │   │       │       ├── NodeShell.vue
│       │   │       │       ├── StartNode.vue
│       │   │       │       ├── SwitcherNode.vue
│       │   │       │       ├── TemplateNode.vue
│       │   │       │       ├── TestNode.vue
│       │   │       │       └── TongyiwanxNode.vue
│       │   │       ├── docs/
│       │   │       │   ├── README.md
│       │   │       │   ├── WorkflowDesigner树状架构分析.md
│       │   │       │   ├── WorkflowDesigner详细树状架构.md
│       │   │       │   ├── 图标说明.md
│       │   │       │   └── 流程编排架构说明.md
│       │   │       ├── index.ts
│       │   │       ├── panels/
│       │   │       │   └── RightPanel.vue
│       │   │       ├── properties/
│       │   │       │   ├── AnswerNodeProperty.vue
│       │   │       │   ├── ClassifierNodeProperty.vue
│       │   │       │   ├── GenericNodeProperty.vue
│       │   │       │   ├── KeywordExtractorNodeProperty.vue
│       │   │       │   ├── StartNodeProperty.vue
│       │   │       │   ├── SwitcherNodeProperty.vue
│       │   │       │   ├── TestNodeProperty.vue
│       │   │       │   └── defaults.ts
│       │   │       ├── store/
│       │   │       │   └── index.ts
│       │   │       ├── types/
│       │   │       │   └── index.d.ts
│       │   │       └── utils/
│       │   │           ├── operators.ts
│       │   │           └── workflow-util.ts
│       │   ├── preferences.ts
│       │   ├── router/
│       │   │   ├── access.ts
│       │   │   ├── guard.ts
│       │   │   ├── index.ts
│       │   │   └── routes/
│       │   │       ├── core.ts
│       │   │       ├── index.ts
│       │   │       ├── local.ts
│       │   │       └── modules/
│       │   │           ├── aiflow.ts
│       │   │           ├── dashboard.ts
│       │   │           ├── knowledge.ts
│       │   │           └── vben.ts
│       │   ├── store/
│       │   │   ├── auth.ts
│       │   │   ├── dict.ts
│       │   │   ├── index.ts
│       │   │   ├── notify.ts
│       │   │   └── tenant.ts
│       │   ├── upload-tip.ts
│       │   ├── utils/
│       │   │   ├── dict.ts
│       │   │   ├── file/
│       │   │   │   ├── base64Conver.ts
│       │   │   │   ├── download.ts
│       │   │   │   └── index.ts
│       │   │   ├── message.ts
│       │   │   ├── modal.tsx
│       │   │   ├── popup.ts
│       │   │   └── render.tsx
│       │   └── views/
│       │       ├── _core/
│       │       │   ├── README.md
│       │       │   ├── about/
│       │       │   │   └── index.vue
│       │       │   ├── authentication/
│       │       │   │   ├── code-login.vue
│       │       │   │   ├── forget-password.vue
│       │       │   │   ├── login.vue
│       │       │   │   ├── oauth-login.vue
│       │       │   │   ├── qrcode-login.vue
│       │       │   │   └── register.vue
│       │       │   ├── fallback/
│       │       │   │   ├── coming-soon.vue
│       │       │   │   ├── forbidden.vue
│       │       │   │   ├── internal-error.vue
│       │       │   │   ├── not-found.vue
│       │       │   │   └── offline.vue
│       │       │   ├── oauth-common.ts
│       │       │   ├── profile/
│       │       │   │   ├── components/
│       │       │   │   │   ├── account-bind.vue
│       │       │   │   │   ├── base-setting.vue
│       │       │   │   │   ├── online-device.vue
│       │       │   │   │   └── secure-setting.vue
│       │       │   │   ├── index.vue
│       │       │   │   ├── mitt.ts
│       │       │   │   ├── profile-panel.vue
│       │       │   │   └── setting-panel.vue
│       │       │   └── social-callback/
│       │       │       └── index.vue
│       │       ├── aiflow/
│       │       │   ├── README.md
│       │       │   ├── data.ts
│       │       │   ├── edit.vue
│       │       │   ├── index.vue
│       │       │   ├── run.vue
│       │       │   └── workflow-modal.vue
│       │       ├── chat/
│       │       │   ├── message/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── message-modal.vue
│       │       │   ├── model/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── model-modal.vue
│       │       │   └── provider/
│       │       │       ├── data.ts
│       │       │       ├── index.vue
│       │       │       ├── options.ts
│       │       │       └── provider-modal.vue
│       │       ├── dashboard/
│       │       │   ├── analytics/
│       │       │   │   ├── analytics-trends.vue
│       │       │   │   ├── analytics-visits-data.vue
│       │       │   │   ├── analytics-visits-sales.vue
│       │       │   │   ├── analytics-visits-source.vue
│       │       │   │   ├── analytics-visits.vue
│       │       │   │   └── index.vue
│       │       │   └── workspace/
│       │       │       └── index.vue
│       │       ├── knowledge/
│       │       │   ├── attach/
│       │       │   │   ├── attach-modal.vue
│       │       │   │   ├── data.ts
│       │       │   │   └── index.vue
│       │       │   ├── fragment/
│       │       │   │   ├── data.ts
│       │       │   │   ├── fragment-modal.vue
│       │       │   │   └── index.vue
│       │       │   └── info/
│       │       │       ├── components/
│       │       │       │   └── KnowledgeAddModal.vue
│       │       │       ├── data.ts
│       │       │       ├── detail/
│       │       │       │   ├── components/
│       │       │       │   │   ├── FileManagement.vue
│       │       │       │   │   ├── KnowledgeConfig.vue
│       │       │       │   │   └── RetrievalTest.vue
│       │       │       │   └── index.vue
│       │       │       ├── index.vue
│       │       │       ├── info-drawer.vue
│       │       │       └── info-modal.vue
│       │       ├── mcp/
│       │       │   ├── market/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── market-drawer.vue
│       │       │   └── tool/
│       │       │       ├── data.tsx
│       │       │       ├── index.vue
│       │       │       └── tool-drawer.vue
│       │       ├── monitor/
│       │       │   ├── admin/
│       │       │   │   └── index.vue
│       │       │   ├── cache/
│       │       │   │   ├── components/
│       │       │   │   │   ├── command-chart.vue
│       │       │   │   │   ├── index.ts
│       │       │   │   │   ├── memory-chart.vue
│       │       │   │   │   └── redis-description.vue
│       │       │   │   └── index.vue
│       │       │   ├── logininfor/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── login-info-modal.vue
│       │       │   ├── online/
│       │       │   │   ├── data.ts
│       │       │   │   └── index.vue
│       │       │   ├── operlog/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── operation-preview-drawer.vue
│       │       │   └── snailjob/
│       │       │       └── index.vue
│       │       ├── nodeManage/
│       │       │   ├── data.ts
│       │       │   ├── index.d.ts
│       │       │   ├── index.vue
│       │       │   └── modal.vue
│       │       ├── system/
│       │       │   ├── client/
│       │       │   │   ├── client-drawer.vue
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── secret-input.vue
│       │       │   ├── config/
│       │       │   │   ├── config-modal.vue
│       │       │   │   ├── data.ts
│       │       │   │   └── index.vue
│       │       │   ├── dept/
│       │       │   │   ├── data.ts
│       │       │   │   ├── dept-drawer.vue
│       │       │   │   └── index.vue
│       │       │   ├── dict/
│       │       │   │   ├── data/
│       │       │   │   │   ├── data.ts
│       │       │   │   │   ├── dict-data-drawer.vue
│       │       │   │   │   ├── index.vue
│       │       │   │   │   └── tag-style-picker.vue
│       │       │   │   ├── data.vue
│       │       │   │   ├── index.vue
│       │       │   │   ├── mitt.ts
│       │       │   │   └── type/
│       │       │   │       ├── data.ts
│       │       │   │       ├── dict-type-modal.vue
│       │       │   │       ├── index-refactor.vue
│       │       │   │       └── index.vue
│       │       │   ├── menu/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── menu-drawer.vue
│       │       │   ├── notice/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── notice-modal.vue
│       │       │   ├── oss/
│       │       │   │   ├── config.vue
│       │       │   │   ├── constant.ts
│       │       │   │   ├── data.tsx
│       │       │   │   ├── fallback-image.txt
│       │       │   │   ├── file-upload-modal.vue
│       │       │   │   ├── image-upload-modal.vue
│       │       │   │   └── index.vue
│       │       │   ├── oss-config/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── oss-config-drawer.vue
│       │       │   ├── post/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── post-drawer.vue
│       │       │   ├── role/
│       │       │   │   ├── authUser.vue
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   ├── role-auth-modal.vue
│       │       │   │   └── role-drawer.vue
│       │       │   ├── role-assign/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── role-assign-drawer.vue
│       │       │   ├── tenant/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── tenant-drawer.vue
│       │       │   ├── tenantPackage/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── tenant-package-drawer.vue
│       │       │   └── user/
│       │       │       ├── authRole.vue
│       │       │       ├── data.tsx
│       │       │       ├── dept-tree.vue
│       │       │       ├── index.vue
│       │       │       ├── user-drawer.vue
│       │       │       ├── user-import-modal.vue
│       │       │       ├── user-info-modal.vue
│       │       │       └── user-reset-pwd-modal.vue
│       │       ├── tool/
│       │       │   └── gen/
│       │       │       ├── code-preview-modal.vue
│       │       │       ├── data.tsx
│       │       │       ├── edit-gen.vue
│       │       │       ├── edit-steps/
│       │       │       │   ├── basic-setting.vue
│       │       │       │   ├── basic.tsx
│       │       │       │   ├── gen-config.vue
│       │       │       │   ├── gen-data.tsx
│       │       │       │   └── index.ts
│       │       │       ├── editTable.vue
│       │       │       ├── index.vue
│       │       │       └── table-import-modal.vue
│       │       └── workflow/
│       │           ├── category/
│       │           │   ├── category-modal.vue
│       │           │   ├── data.ts
│       │           │   └── index.vue
│       │           ├── components/
│       │           │   ├── actions/
│       │           │   │   ├── flow-actions.vue
│       │           │   │   └── index.ts
│       │           │   ├── apply-modal.vue
│       │           │   ├── approval-card.vue
│       │           │   ├── approval-content.vue
│       │           │   ├── approval-details.vue
│       │           │   ├── approval-modal.vue
│       │           │   ├── approval-panel.vue
│       │           │   ├── approval-rejection-modal.vue
│       │           │   ├── approval-timeline-item.vue
│       │           │   ├── approval-timeline.vue
│       │           │   ├── copy-component.vue
│       │           │   ├── flow-designer.vue
│       │           │   ├── flow-info-modal.vue
│       │           │   ├── flow-interfere-modal.vue
│       │           │   ├── flow-preview.vue
│       │           │   ├── helper.tsx
│       │           │   ├── hook.ts
│       │           │   ├── index.ts
│       │           │   ├── type.d.ts
│       │           │   └── user-select-modal.vue
│       │           ├── leave/
│       │           │   ├── api/
│       │           │   │   ├── index.ts
│       │           │   │   └── model.d.ts
│       │           │   ├── data.tsx
│       │           │   ├── hook.ts
│       │           │   ├── index.vue
│       │           │   ├── leave-description.vue
│       │           │   ├── leave-drawer.vue
│       │           │   ├── leave-form.vue
│       │           │   └── leaveEdit.vue
│       │           ├── processDefinition/
│       │           │   ├── category-tree.vue
│       │           │   ├── constant.ts
│       │           │   ├── data.tsx
│       │           │   ├── design.vue
│       │           │   ├── index.vue
│       │           │   ├── process-definition-deploy-modal.vue
│       │           │   └── process-definition-modal.vue
│       │           ├── processInstance/
│       │           │   ├── data.tsx
│       │           │   ├── index.vue
│       │           │   ├── instance-invalid-modal.vue
│       │           │   └── instance-variable-modal.vue
│       │           ├── register.ts
│       │           ├── spel/
│       │           │   ├── common.ts
│       │           │   ├── data.tsx
│       │           │   ├── index.vue
│       │           │   ├── spel-drawer.vue
│       │           │   └── spel-previewer.vue
│       │           └── task/
│       │               ├── allTaskWaiting.vue
│       │               ├── constant.ts
│       │               ├── myDocument.vue
│       │               ├── taskCopyList.vue
│       │               ├── taskFinish.vue
│       │               └── taskWaiting.vue
│       ├── tailwind.config.mjs
│       ├── tsconfig.json
│       ├── tsconfig.node.json
│       ├── types/
│       │   ├── directive.d.ts
│       │   └── global-components.d.ts
│       └── vite.config.mts
├── docker-compose-all.yaml
├── eslint.config.mjs
├── internal/
│   ├── lint-configs/
│   │   ├── commitlint-config/
│   │   │   ├── index.mjs
│   │   │   └── package.json
│   │   ├── eslint-config/
│   │   │   ├── build.config.ts
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── configs/
│   │   │   │   │   ├── command.ts
│   │   │   │   │   ├── comments.ts
│   │   │   │   │   ├── disableds.ts
│   │   │   │   │   ├── ignores.ts
│   │   │   │   │   ├── import.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── javascript.ts
│   │   │   │   │   ├── jsdoc.ts
│   │   │   │   │   ├── jsonc.ts
│   │   │   │   │   ├── node.ts
│   │   │   │   │   ├── perfectionist.ts
│   │   │   │   │   ├── prettier.ts
│   │   │   │   │   ├── regexp.ts
│   │   │   │   │   ├── test.ts
│   │   │   │   │   ├── turbo.ts
│   │   │   │   │   ├── typescript.ts
│   │   │   │   │   ├── unicorn.ts
│   │   │   │   │   └── vue.ts
│   │   │   │   ├── custom-config.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── util.ts
│   │   │   └── tsconfig.json
│   │   ├── prettier-config/
│   │   │   ├── index.mjs
│   │   │   └── package.json
│   │   └── stylelint-config/
│   │       ├── index.mjs
│   │       └── package.json
│   ├── node-utils/
│   │   ├── build.config.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── __tests__/
│   │   │   │   ├── hash.test.ts
│   │   │   │   └── path.test.ts
│   │   │   ├── constants.ts
│   │   │   ├── date.ts
│   │   │   ├── fs.ts
│   │   │   ├── git.ts
│   │   │   ├── hash.ts
│   │   │   ├── index.ts
│   │   │   ├── monorepo.ts
│   │   │   ├── path.ts
│   │   │   ├── prettier.ts
│   │   │   └── spinner.ts
│   │   └── tsconfig.json
│   ├── tailwind-config/
│   │   ├── build.config.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   ├── module.d.ts
│   │   │   ├── plugins/
│   │   │   │   └── entry.ts
│   │   │   └── postcss.config.ts
│   │   └── tsconfig.json
│   ├── tsconfig/
│   │   ├── base.json
│   │   ├── library.json
│   │   ├── node.json
│   │   ├── package.json
│   │   ├── web-app.json
│   │   └── web.json
│   └── vite-config/
│       ├── build.config.ts
│       ├── package.json
│       ├── src/
│       │   ├── config/
│       │   │   ├── application.ts
│       │   │   ├── common.ts
│       │   │   ├── index.ts
│       │   │   └── library.ts
│       │   ├── index.ts
│       │   ├── options.ts
│       │   ├── plugins/
│       │   │   ├── archiver.ts
│       │   │   ├── extra-app-config.ts
│       │   │   ├── importmap.ts
│       │   │   ├── index.ts
│       │   │   ├── inject-app-loading/
│       │   │   │   ├── README.md
│       │   │   │   ├── default-loading-antd.html
│       │   │   │   ├── default-loading.html
│       │   │   │   └── index.ts
│       │   │   ├── inject-metadata.ts
│       │   │   ├── license.ts
│       │   │   ├── nitro-mock.ts
│       │   │   ├── print.ts
│       │   │   └── vxe-table.ts
│       │   ├── typing.ts
│       │   └── utils/
│       │       └── env.ts
│       └── tsconfig.json
├── package.json
├── packages/
│   ├── @core/
│   │   ├── README.md
│   │   ├── base/
│   │   │   ├── README.md
│   │   │   ├── design/
│   │   │   │   ├── package.json
│   │   │   │   ├── src/
│   │   │   │   │   ├── css/
│   │   │   │   │   │   ├── global.css
│   │   │   │   │   │   ├── nprogress.css
│   │   │   │   │   │   ├── transition.css
│   │   │   │   │   │   └── ui.css
│   │   │   │   │   ├── design-tokens/
│   │   │   │   │   │   ├── dark.css
│   │   │   │   │   │   ├── default.css
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── scss-bem/
│   │   │   │   │       ├── bem.scss
│   │   │   │   │       └── constants.scss
│   │   │   │   ├── tsconfig.json
│   │   │   │   └── vite.config.mts
│   │   │   ├── icons/
│   │   │   │   ├── build.config.ts
│   │   │   │   ├── package.json
│   │   │   │   ├── src/
│   │   │   │   │   ├── create-icon.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── lucide.ts
│   │   │   │   └── tsconfig.json
│   │   │   ├── shared/
│   │   │   │   ├── build.config.ts
│   │   │   │   ├── package.json
│   │   │   │   ├── src/
│   │   │   │   │   ├── cache/
│   │   │   │   │   │   ├── __tests__/
│   │   │   │   │   │   │   └── storage-manager.test.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── storage-manager.ts
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── color/
│   │   │   │   │   │   ├── __tests__/
│   │   │   │   │   │   │   └── convert.test.ts
│   │   │   │   │   │   ├── color.ts
│   │   │   │   │   │   ├── convert.ts
│   │   │   │   │   │   ├── generator.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── constants/
│   │   │   │   │   │   ├── dict-enum.ts
│   │   │   │   │   │   ├── globals.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── vben.ts
│   │   │   │   │   ├── global-state.ts
│   │   │   │   │   ├── store.ts
│   │   │   │   │   └── utils/
│   │   │   │   │       ├── __tests__/
│   │   │   │   │       │   ├── diff.test.ts
│   │   │   │   │       │   ├── dom.test.ts
│   │   │   │   │       │   ├── inference.test.ts
│   │   │   │   │       │   ├── letter.test.ts
│   │   │   │   │       │   ├── resources.test.ts
│   │   │   │   │       │   ├── state-handler.test.ts
│   │   │   │   │       │   ├── tree.test.ts
│   │   │   │   │       │   ├── unique.test.ts
│   │   │   │   │       │   ├── update-css-variables.test.ts
│   │   │   │   │       │   ├── util.test.ts
│   │   │   │   │       │   └── window.test.ts
│   │   │   │   │       ├── cn.ts
│   │   │   │   │       ├── date.ts
│   │   │   │   │       ├── diff.ts
│   │   │   │   │       ├── dom.ts
│   │   │   │   │       ├── download.ts
│   │   │   │   │       ├── index.ts
│   │   │   │   │       ├── inference.ts
│   │   │   │   │       ├── letter.ts
│   │   │   │   │       ├── merge.ts
│   │   │   │   │       ├── nprogress.ts
│   │   │   │   │       ├── resources.ts
│   │   │   │   │       ├── state-handler.ts
│   │   │   │   │       ├── to.ts
│   │   │   │   │       ├── tree.ts
│   │   │   │   │       ├── unique.ts
│   │   │   │   │       ├── update-css-variables.ts
│   │   │   │   │       ├── util.ts
│   │   │   │   │       └── window.ts
│   │   │   │   └── tsconfig.json
│   │   │   └── typings/
│   │   │       ├── build.config.ts
│   │   │       ├── package.json
│   │   │       ├── src/
│   │   │       │   ├── app.d.ts
│   │   │       │   ├── basic.d.ts
│   │   │       │   ├── helper.d.ts
│   │   │       │   ├── index.ts
│   │   │       │   ├── menu-record.ts
│   │   │       │   ├── tabs.ts
│   │   │       │   └── vue-router.d.ts
│   │   │       ├── tsconfig.json
│   │   │       └── vue-router.d.ts
│   │   ├── composables/
│   │   │   ├── build.config.ts
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── __tests__/
│   │   │   │   │   └── use-sortable.test.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── use-is-mobile.ts
│   │   │   │   ├── use-layout-style.ts
│   │   │   │   ├── use-namespace.ts
│   │   │   │   ├── use-priority-value.ts
│   │   │   │   ├── use-scroll-lock.ts
│   │   │   │   ├── use-simple-locale/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── messages.ts
│   │   │   │   └── use-sortable.ts
│   │   │   └── tsconfig.json
│   │   ├── preferences/
│   │   │   ├── __tests__/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── config.test.ts.snap
│   │   │   │   ├── config.test.ts
│   │   │   │   └── preferences.test.ts
│   │   │   ├── build.config.ts
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── config.ts
│   │   │   │   ├── constants.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── preferences.ts
│   │   │   │   ├── types.ts
│   │   │   │   ├── update-css-variables.ts
│   │   │   │   └── use-preferences.ts
│   │   │   └── tsconfig.json
│   │   └── ui-kit/
│   │       ├── README.md
│   │       ├── form-ui/
│   │       │   ├── __tests__/
│   │       │   │   └── form-api.test.ts
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   └── form-actions.vue
│   │       │   │   ├── config.ts
│   │       │   │   ├── form-api.ts
│   │       │   │   ├── form-render/
│   │       │   │   │   ├── context.ts
│   │       │   │   │   ├── dependencies.ts
│   │       │   │   │   ├── expandable.ts
│   │       │   │   │   ├── form-field.vue
│   │       │   │   │   ├── form-label.vue
│   │       │   │   │   ├── form.vue
│   │       │   │   │   ├── helper.ts
│   │       │   │   │   └── index.ts
│   │       │   │   ├── index.ts
│   │       │   │   ├── types.ts
│   │       │   │   ├── use-form-context.ts
│   │       │   │   ├── use-vben-form.ts
│   │       │   │   ├── vben-form.vue
│   │       │   │   └── vben-use-form.vue
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── layout-ui/
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── layout-content.vue
│   │       │   │   │   ├── layout-footer.vue
│   │       │   │   │   ├── layout-header.vue
│   │       │   │   │   ├── layout-sidebar.vue
│   │       │   │   │   ├── layout-tabbar.vue
│   │       │   │   │   └── widgets/
│   │       │   │   │       ├── index.ts
│   │       │   │   │       ├── sidebar-collapse-button.vue
│   │       │   │   │       └── sidebar-fixed-button.vue
│   │       │   │   ├── hooks/
│   │       │   │   │   └── use-layout.ts
│   │       │   │   ├── index.ts
│   │       │   │   ├── vben-layout.ts
│   │       │   │   └── vben-layout.vue
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── menu-ui/
│   │       │   ├── README.md
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   ├── collapse-transition.vue
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── menu-badge-dot.vue
│   │       │   │   │   ├── menu-badge.vue
│   │       │   │   │   ├── menu-item.vue
│   │       │   │   │   ├── menu.vue
│   │       │   │   │   ├── normal-menu/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── normal-menu.ts
│   │       │   │   │   │   └── normal-menu.vue
│   │       │   │   │   ├── sub-menu-content.vue
│   │       │   │   │   └── sub-menu.vue
│   │       │   │   ├── hooks/
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── use-menu-context.ts
│   │       │   │   │   ├── use-menu-scroll.ts
│   │       │   │   │   └── use-menu.ts
│   │       │   │   ├── index.ts
│   │       │   │   ├── menu.vue
│   │       │   │   ├── sub-menu.vue
│   │       │   │   ├── types.ts
│   │       │   │   └── utils/
│   │       │   │       └── index.ts
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── popup-ui/
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── alert/
│   │       │   │   │   ├── AlertBuilder.ts
│   │       │   │   │   ├── alert.ts
│   │       │   │   │   ├── alert.vue
│   │       │   │   │   └── index.ts
│   │       │   │   ├── drawer/
│   │       │   │   │   ├── __tests__/
│   │       │   │   │   │   └── drawer-api.test.ts
│   │       │   │   │   ├── drawer-api.ts
│   │       │   │   │   ├── drawer.ts
│   │       │   │   │   ├── drawer.vue
│   │       │   │   │   ├── index.ts
│   │       │   │   │   └── use-drawer.ts
│   │       │   │   ├── index.ts
│   │       │   │   └── modal/
│   │       │   │       ├── __tests__/
│   │       │   │       │   └── modal-api.test.ts
│   │       │   │       ├── index.ts
│   │       │   │       ├── modal-api.ts
│   │       │   │       ├── modal.ts
│   │       │   │       ├── modal.vue
│   │       │   │       ├── use-modal-draggable.ts
│   │       │   │       └── use-modal.ts
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── shadcn-ui/
│   │       │   ├── build.config.ts
│   │       │   ├── components.json
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   ├── avatar/
│   │       │   │   │   │   ├── avatar.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── back-top/
│   │       │   │   │   │   ├── back-top.vue
│   │       │   │   │   │   ├── backtop.ts
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── use-backtop.ts
│   │       │   │   │   ├── breadcrumb/
│   │       │   │   │   │   ├── breadcrumb-background.vue
│   │       │   │   │   │   ├── breadcrumb-view.vue
│   │       │   │   │   │   ├── breadcrumb.vue
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── types.ts
│   │       │   │   │   ├── button/
│   │       │   │   │   │   ├── button-group.vue
│   │       │   │   │   │   ├── button.ts
│   │       │   │   │   │   ├── button.vue
│   │       │   │   │   │   ├── check-button-group.vue
│   │       │   │   │   │   ├── icon-button.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── checkbox/
│   │       │   │   │   │   ├── checkbox.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── context-menu/
│   │       │   │   │   │   ├── context-menu.vue
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── interface.ts
│   │       │   │   │   ├── count-to-animator/
│   │       │   │   │   │   ├── count-to-animator.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── dropdown-menu/
│   │       │   │   │   │   ├── dropdown-menu.vue
│   │       │   │   │   │   ├── dropdown-radio-menu.vue
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── interface.ts
│   │       │   │   │   ├── expandable-arrow/
│   │       │   │   │   │   ├── expandable-arrow.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── full-screen/
│   │       │   │   │   │   ├── full-screen.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── hover-card/
│   │       │   │   │   │   ├── hover-card.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── icon/
│   │       │   │   │   │   ├── icon.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── input-captcha/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── input-captcha.vue
│   │       │   │   │   ├── input-password/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── input-password.vue
│   │       │   │   │   │   └── password-strength.vue
│   │       │   │   │   ├── logo/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── logo.vue
│   │       │   │   │   ├── pin-input/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── input.vue
│   │       │   │   │   │   └── types.ts
│   │       │   │   │   ├── popover/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── popover.vue
│   │       │   │   │   ├── render-content/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── render-content.vue
│   │       │   │   │   ├── scrollbar/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── scrollbar.vue
│   │       │   │   │   ├── segmented/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── segmented.vue
│   │       │   │   │   │   ├── tabs-indicator.vue
│   │       │   │   │   │   └── types.ts
│   │       │   │   │   ├── select/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── select.vue
│   │       │   │   │   ├── spine-text/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── spine-text.vue
│   │       │   │   │   ├── spinner/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── loading.vue
│   │       │   │   │   │   └── spinner.vue
│   │       │   │   │   └── tooltip/
│   │       │   │   │       ├── help-tooltip.vue
│   │       │   │   │       ├── index.ts
│   │       │   │   │       └── tooltip.vue
│   │       │   │   ├── index.ts
│   │       │   │   └── ui/
│   │       │   │       ├── accordion/
│   │       │   │       │   ├── Accordion.vue
│   │       │   │       │   ├── AccordionContent.vue
│   │       │   │       │   ├── AccordionItem.vue
│   │       │   │       │   ├── AccordionTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── alert-dialog/
│   │       │   │       │   ├── AlertDialog.vue
│   │       │   │       │   ├── AlertDialogAction.vue
│   │       │   │       │   ├── AlertDialogCancel.vue
│   │       │   │       │   ├── AlertDialogContent.vue
│   │       │   │       │   ├── AlertDialogDescription.vue
│   │       │   │       │   ├── AlertDialogOverlay.vue
│   │       │   │       │   ├── AlertDialogTitle.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── avatar/
│   │       │   │       │   ├── Avatar.vue
│   │       │   │       │   ├── AvatarFallback.vue
│   │       │   │       │   ├── AvatarImage.vue
│   │       │   │       │   ├── avatar.ts
│   │       │   │       │   └── index.ts
│   │       │   │       ├── badge/
│   │       │   │       │   ├── Badge.vue
│   │       │   │       │   ├── badge.ts
│   │       │   │       │   └── index.ts
│   │       │   │       ├── breadcrumb/
│   │       │   │       │   ├── Breadcrumb.vue
│   │       │   │       │   ├── BreadcrumbEllipsis.vue
│   │       │   │       │   ├── BreadcrumbItem.vue
│   │       │   │       │   ├── BreadcrumbLink.vue
│   │       │   │       │   ├── BreadcrumbList.vue
│   │       │   │       │   ├── BreadcrumbPage.vue
│   │       │   │       │   ├── BreadcrumbSeparator.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── button/
│   │       │   │       │   ├── Button.vue
│   │       │   │       │   ├── button.ts
│   │       │   │       │   ├── index.ts
│   │       │   │       │   └── types.ts
│   │       │   │       ├── card/
│   │       │   │       │   ├── Card.vue
│   │       │   │       │   ├── CardContent.vue
│   │       │   │       │   ├── CardDescription.vue
│   │       │   │       │   ├── CardFooter.vue
│   │       │   │       │   ├── CardHeader.vue
│   │       │   │       │   ├── CardTitle.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── checkbox/
│   │       │   │       │   ├── Checkbox.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── context-menu/
│   │       │   │       │   ├── ContextMenu.vue
│   │       │   │       │   ├── ContextMenuCheckboxItem.vue
│   │       │   │       │   ├── ContextMenuContent.vue
│   │       │   │       │   ├── ContextMenuGroup.vue
│   │       │   │       │   ├── ContextMenuItem.vue
│   │       │   │       │   ├── ContextMenuLabel.vue
│   │       │   │       │   ├── ContextMenuPortal.vue
│   │       │   │       │   ├── ContextMenuRadioGroup.vue
│   │       │   │       │   ├── ContextMenuRadioItem.vue
│   │       │   │       │   ├── ContextMenuSeparator.vue
│   │       │   │       │   ├── ContextMenuShortcut.vue
│   │       │   │       │   ├── ContextMenuSub.vue
│   │       │   │       │   ├── ContextMenuSubContent.vue
│   │       │   │       │   ├── ContextMenuSubTrigger.vue
│   │       │   │       │   ├── ContextMenuTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── dialog/
│   │       │   │       │   ├── Dialog.vue
│   │       │   │       │   ├── DialogClose.vue
│   │       │   │       │   ├── DialogContent.vue
│   │       │   │       │   ├── DialogDescription.vue
│   │       │   │       │   ├── DialogFooter.vue
│   │       │   │       │   ├── DialogHeader.vue
│   │       │   │       │   ├── DialogOverlay.vue
│   │       │   │       │   ├── DialogScrollContent.vue
│   │       │   │       │   ├── DialogTitle.vue
│   │       │   │       │   ├── DialogTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── dropdown-menu/
│   │       │   │       │   ├── DropdownMenu.vue
│   │       │   │       │   ├── DropdownMenuCheckboxItem.vue
│   │       │   │       │   ├── DropdownMenuContent.vue
│   │       │   │       │   ├── DropdownMenuGroup.vue
│   │       │   │       │   ├── DropdownMenuItem.vue
│   │       │   │       │   ├── DropdownMenuLabel.vue
│   │       │   │       │   ├── DropdownMenuRadioGroup.vue
│   │       │   │       │   ├── DropdownMenuRadioItem.vue
│   │       │   │       │   ├── DropdownMenuSeparator.vue
│   │       │   │       │   ├── DropdownMenuShortcut.vue
│   │       │   │       │   ├── DropdownMenuSub.vue
│   │       │   │       │   ├── DropdownMenuSubContent.vue
│   │       │   │       │   ├── DropdownMenuSubTrigger.vue
│   │       │   │       │   ├── DropdownMenuTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── form/
│   │       │   │       │   ├── FormControl.vue
│   │       │   │       │   ├── FormDescription.vue
│   │       │   │       │   ├── FormItem.vue
│   │       │   │       │   ├── FormLabel.vue
│   │       │   │       │   ├── FormMessage.vue
│   │       │   │       │   ├── index.ts
│   │       │   │       │   ├── injectionKeys.ts
│   │       │   │       │   └── useFormField.ts
│   │       │   │       ├── hover-card/
│   │       │   │       │   ├── HoverCard.vue
│   │       │   │       │   ├── HoverCardContent.vue
│   │       │   │       │   ├── HoverCardTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── index.ts
│   │       │   │       ├── input/
│   │       │   │       │   ├── Input.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── label/
│   │       │   │       │   ├── Label.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── number-field/
│   │       │   │       │   ├── NumberField.vue
│   │       │   │       │   ├── NumberFieldContent.vue
│   │       │   │       │   ├── NumberFieldDecrement.vue
│   │       │   │       │   ├── NumberFieldIncrement.vue
│   │       │   │       │   ├── NumberFieldInput.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── pagination/
│   │       │   │       │   ├── PaginationEllipsis.vue
│   │       │   │       │   ├── PaginationFirst.vue
│   │       │   │       │   ├── PaginationLast.vue
│   │       │   │       │   ├── PaginationNext.vue
│   │       │   │       │   ├── PaginationPrev.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── pin-input/
│   │       │   │       │   ├── PinInput.vue
│   │       │   │       │   ├── PinInputGroup.vue
│   │       │   │       │   ├── PinInputInput.vue
│   │       │   │       │   ├── PinInputSeparator.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── popover/
│   │       │   │       │   ├── Popover.vue
│   │       │   │       │   ├── PopoverContent.vue
│   │       │   │       │   ├── PopoverTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── radio-group/
│   │       │   │       │   ├── RadioGroup.vue
│   │       │   │       │   ├── RadioGroupItem.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── resizable/
│   │       │   │       │   ├── ResizableHandle.vue
│   │       │   │       │   ├── ResizablePanelGroup.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── scroll-area/
│   │       │   │       │   ├── ScrollArea.vue
│   │       │   │       │   ├── ScrollBar.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── select/
│   │       │   │       │   ├── Select.vue
│   │       │   │       │   ├── SelectContent.vue
│   │       │   │       │   ├── SelectGroup.vue
│   │       │   │       │   ├── SelectItem.vue
│   │       │   │       │   ├── SelectItemText.vue
│   │       │   │       │   ├── SelectLabel.vue
│   │       │   │       │   ├── SelectScrollDownButton.vue
│   │       │   │       │   ├── SelectScrollUpButton.vue
│   │       │   │       │   ├── SelectSeparator.vue
│   │       │   │       │   ├── SelectTrigger.vue
│   │       │   │       │   ├── SelectValue.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── separator/
│   │       │   │       │   ├── Separator.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── sheet/
│   │       │   │       │   ├── Sheet.vue
│   │       │   │       │   ├── SheetClose.vue
│   │       │   │       │   ├── SheetContent.vue
│   │       │   │       │   ├── SheetDescription.vue
│   │       │   │       │   ├── SheetFooter.vue
│   │       │   │       │   ├── SheetHeader.vue
│   │       │   │       │   ├── SheetOverlay.vue
│   │       │   │       │   ├── SheetTitle.vue
│   │       │   │       │   ├── SheetTrigger.vue
│   │       │   │       │   ├── index.ts
│   │       │   │       │   └── sheet.ts
│   │       │   │       ├── switch/
│   │       │   │       │   ├── Switch.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── tabs/
│   │       │   │       │   ├── Tabs.vue
│   │       │   │       │   ├── TabsContent.vue
│   │       │   │       │   ├── TabsList.vue
│   │       │   │       │   ├── TabsTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── textarea/
│   │       │   │       │   ├── Textarea.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── toggle/
│   │       │   │       │   ├── Toggle.vue
│   │       │   │       │   ├── index.ts
│   │       │   │       │   └── toggle.ts
│   │       │   │       ├── toggle-group/
│   │       │   │       │   ├── ToggleGroup.vue
│   │       │   │       │   ├── ToggleGroupItem.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── tooltip/
│   │       │   │       │   ├── Tooltip.vue
│   │       │   │       │   ├── TooltipContent.vue
│   │       │   │       │   ├── TooltipProvider.vue
│   │       │   │       │   ├── TooltipTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       └── tree/
│   │       │   │           ├── index.ts
│   │       │   │           ├── tree.vue
│   │       │   │           └── types.ts
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       └── tabs-ui/
│   │           ├── build.config.ts
│   │           ├── package.json
│   │           ├── postcss.config.mjs
│   │           ├── src/
│   │           │   ├── components/
│   │           │   │   ├── index.ts
│   │           │   │   ├── tabs/
│   │           │   │   │   └── tabs.vue
│   │           │   │   ├── tabs-chrome/
│   │           │   │   │   └── tabs.vue
│   │           │   │   └── widgets/
│   │           │   │       ├── index.ts
│   │           │   │       ├── tool-more.vue
│   │           │   │       └── tool-screen.vue
│   │           │   ├── index.ts
│   │           │   ├── tabs-view.vue
│   │           │   ├── types.ts
│   │           │   ├── use-tabs-drag.ts
│   │           │   └── use-tabs-view-scroll.ts
│   │           ├── tailwind.config.mjs
│   │           └── tsconfig.json
│   ├── constants/
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── core.ts
│   │   │   └── index.ts
│   │   └── tsconfig.json
│   ├── effects/
│   │   ├── README.md
│   │   ├── access/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── access-control.vue
│   │   │   │   ├── accessible.ts
│   │   │   │   ├── directive.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── use-access.ts
│   │   │   └── tsconfig.json
│   │   ├── common-ui/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── components/
│   │   │   │   │   ├── api-component/
│   │   │   │   │   │   ├── api-component.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── captcha/
│   │   │   │   │   │   ├── hooks/
│   │   │   │   │   │   │   └── useCaptchaPoints.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── point-selection-captcha/
│   │   │   │   │   │   │   ├── index.vue
│   │   │   │   │   │   │   └── point-selection-captcha-card.vue
│   │   │   │   │   │   ├── slider-captcha/
│   │   │   │   │   │   │   ├── index.vue
│   │   │   │   │   │   │   ├── slider-captcha-action.vue
│   │   │   │   │   │   │   ├── slider-captcha-bar.vue
│   │   │   │   │   │   │   └── slider-captcha-content.vue
│   │   │   │   │   │   ├── slider-rotate-captcha/
│   │   │   │   │   │   │   └── index.vue
│   │   │   │   │   │   ├── slider-translate-captcha/
│   │   │   │   │   │   │   └── index.vue
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── code-mirror/
│   │   │   │   │   │   ├── code-mirror.vue
│   │   │   │   │   │   ├── data.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── col-page/
│   │   │   │   │   │   ├── col-page.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── count-to/
│   │   │   │   │   │   ├── count-to.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── ellipsis-text/
│   │   │   │   │   │   ├── ellipsis-text.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── icon-picker/
│   │   │   │   │   │   ├── icon-picker.vue
│   │   │   │   │   │   ├── icons.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── json-preview/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── json-preview.vue
│   │   │   │   │   ├── json-viewer/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── index.vue
│   │   │   │   │   │   ├── style.scss
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── loading/
│   │   │   │   │   │   ├── directive.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── loading.vue
│   │   │   │   │   │   └── spinner.vue
│   │   │   │   │   ├── markdown/
│   │   │   │   │   │   ├── editor.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── preview.vue
│   │   │   │   │   ├── page/
│   │   │   │   │   │   ├── __tests__/
│   │   │   │   │   │   │   └── page.test.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── page.vue
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── resize/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── resize.vue
│   │   │   │   │   ├── tippy/
│   │   │   │   │   │   ├── directive.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   └── tree/
│   │   │   │   │       ├── index.ts
│   │   │   │   │       └── tree.vue
│   │   │   │   ├── index.ts
│   │   │   │   └── ui/
│   │   │   │       ├── about/
│   │   │   │       │   ├── about.ts
│   │   │   │       │   ├── about.vue
│   │   │   │       │   └── index.ts
│   │   │   │       ├── authentication/
│   │   │   │       │   ├── auth-title.vue
│   │   │   │       │   ├── code-login.vue
│   │   │   │       │   ├── dingding-login.vue
│   │   │   │       │   ├── forget-password.vue
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── login-expired-modal.vue
│   │   │   │       │   ├── login.vue
│   │   │   │       │   ├── qrcode-login.vue
│   │   │   │       │   ├── register.vue
│   │   │   │       │   ├── third-party-login.vue
│   │   │   │       │   └── types.ts
│   │   │   │       ├── dashboard/
│   │   │   │       │   ├── analysis/
│   │   │   │       │   │   ├── analysis-chart-card.vue
│   │   │   │       │   │   ├── analysis-charts-tabs.vue
│   │   │   │       │   │   ├── analysis-overview.vue
│   │   │   │       │   │   └── index.ts
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── typing.ts
│   │   │   │       │   └── workbench/
│   │   │   │       │       ├── index.ts
│   │   │   │       │       ├── workbench-header.vue
│   │   │   │       │       ├── workbench-project.vue
│   │   │   │       │       ├── workbench-quick-nav.vue
│   │   │   │       │       ├── workbench-todo.vue
│   │   │   │       │       └── workbench-trends.vue
│   │   │   │       ├── fallback/
│   │   │   │       │   ├── fallback.ts
│   │   │   │       │   ├── fallback.vue
│   │   │   │       │   ├── icons/
│   │   │   │       │   │   ├── icon-403.vue
│   │   │   │       │   │   ├── icon-404.vue
│   │   │   │       │   │   ├── icon-500.vue
│   │   │   │       │   │   ├── icon-coming-soon.vue
│   │   │   │       │   │   └── icon-offline.vue
│   │   │   │       │   └── index.ts
│   │   │   │       └── index.ts
│   │   │   └── tsconfig.json
│   │   ├── hooks/
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── index.ts
│   │   │   │   ├── use-app-config.ts
│   │   │   │   ├── use-content-maximize.ts
│   │   │   │   ├── use-design-tokens.ts
│   │   │   │   ├── use-hover-toggle.ts
│   │   │   │   ├── use-pagination.ts
│   │   │   │   ├── use-refresh.ts
│   │   │   │   ├── use-tabs.ts
│   │   │   │   └── use-watermark.ts
│   │   │   └── tsconfig.json
│   │   ├── layouts/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── authentication/
│   │   │   │   │   ├── authentication.vue
│   │   │   │   │   ├── form.vue
│   │   │   │   │   ├── icons/
│   │   │   │   │   │   └── slogan.vue
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── toolbar.vue
│   │   │   │   │   └── types.ts
│   │   │   │   ├── basic/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── content/
│   │   │   │   │   │   ├── content-spinner.vue
│   │   │   │   │   │   ├── content.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── use-content-spinner.ts
│   │   │   │   │   ├── copyright/
│   │   │   │   │   │   ├── copyright.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── footer/
│   │   │   │   │   │   ├── footer.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── header/
│   │   │   │   │   │   ├── header.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── layout.vue
│   │   │   │   │   ├── menu/
│   │   │   │   │   │   ├── extra-menu.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── menu.vue
│   │   │   │   │   │   ├── mixed-menu.vue
│   │   │   │   │   │   ├── use-extra-menu.ts
│   │   │   │   │   │   ├── use-mixed-menu.ts
│   │   │   │   │   │   └── use-navigation.ts
│   │   │   │   │   └── tabbar/
│   │   │   │   │       ├── index.ts
│   │   │   │   │       ├── tabbar.vue
│   │   │   │   │       └── use-tabbar.ts
│   │   │   │   ├── iframe/
│   │   │   │   │   ├── iframe-router-view.vue
│   │   │   │   │   ├── iframe-view.vue
│   │   │   │   │   └── index.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── widgets/
│   │   │   │       ├── breadcrumb.vue
│   │   │   │       ├── check-updates/
│   │   │   │       │   ├── check-updates.vue
│   │   │   │       │   └── index.ts
│   │   │   │       ├── color-toggle.vue
│   │   │   │       ├── global-search/
│   │   │   │       │   ├── global-search.vue
│   │   │   │       │   ├── index.ts
│   │   │   │       │   └── search-panel.vue
│   │   │   │       ├── index.ts
│   │   │   │       ├── language-toggle.vue
│   │   │   │       ├── layout-toggle.vue
│   │   │   │       ├── lock-screen/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── lock-screen-modal.vue
│   │   │   │       │   └── lock-screen.vue
│   │   │   │       ├── notification/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── notification.vue
│   │   │   │       │   └── types.ts
│   │   │   │       ├── preferences/
│   │   │   │       │   ├── blocks/
│   │   │   │       │   │   ├── block.vue
│   │   │   │       │   │   ├── checkbox-item.vue
│   │   │   │       │   │   ├── general/
│   │   │   │       │   │   │   ├── animation.vue
│   │   │   │       │   │   │   └── general.vue
│   │   │   │       │   │   ├── index.ts
│   │   │   │       │   │   ├── input-item.vue
│   │   │   │       │   │   ├── layout/
│   │   │   │       │   │   │   ├── breadcrumb.vue
│   │   │   │       │   │   │   ├── content.vue
│   │   │   │       │   │   │   ├── copyright.vue
│   │   │   │       │   │   │   ├── footer.vue
│   │   │   │       │   │   │   ├── header.vue
│   │   │   │       │   │   │   ├── layout.vue
│   │   │   │       │   │   │   ├── navigation.vue
│   │   │   │       │   │   │   ├── sidebar.vue
│   │   │   │       │   │   │   ├── tabbar.vue
│   │   │   │       │   │   │   └── widget.vue
│   │   │   │       │   │   ├── number-field-item.vue
│   │   │   │       │   │   ├── select-item.vue
│   │   │   │       │   │   ├── shortcut-keys/
│   │   │   │       │   │   │   └── global.vue
│   │   │   │       │   │   ├── switch-item.vue
│   │   │   │       │   │   ├── theme/
│   │   │   │       │   │   │   ├── builtin.vue
│   │   │   │       │   │   │   ├── color-mode.vue
│   │   │   │       │   │   │   ├── radius.vue
│   │   │   │       │   │   │   └── theme.vue
│   │   │   │       │   │   └── toggle-item.vue
│   │   │   │       │   ├── icons/
│   │   │   │       │   │   ├── content-compact.vue
│   │   │   │       │   │   ├── full-content.vue
│   │   │   │       │   │   ├── header-mixed-nav.vue
│   │   │   │       │   │   ├── header-nav.vue
│   │   │   │       │   │   ├── header-sidebar-nav.vue
│   │   │   │       │   │   ├── index.ts
│   │   │   │       │   │   ├── mixed-nav.vue
│   │   │   │       │   │   ├── setting.vue
│   │   │   │       │   │   ├── sidebar-mixed-nav.vue
│   │   │   │       │   │   └── sidebar-nav.vue
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── preferences-button.vue
│   │   │   │       │   ├── preferences-drawer.vue
│   │   │   │       │   ├── preferences.vue
│   │   │   │       │   └── use-open-preferences.ts
│   │   │   │       ├── theme-toggle/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── theme-button.vue
│   │   │   │       │   └── theme-toggle.vue
│   │   │   │       └── user-dropdown/
│   │   │   │           ├── index.ts
│   │   │   │           └── user-dropdown.vue
│   │   │   └── tsconfig.json
│   │   ├── plugins/
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── echarts/
│   │   │   │   │   ├── echarts-ui.vue
│   │   │   │   │   ├── echarts.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── use-echarts.ts
│   │   │   │   ├── motion/
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── types.ts
│   │   │   │   └── vxe-table/
│   │   │   │       ├── api.ts
│   │   │   │       ├── extends.ts
│   │   │   │       ├── index.ts
│   │   │   │       ├── init.ts
│   │   │   │       ├── style.css
│   │   │   │       ├── types.ts
│   │   │   │       ├── use-vxe-grid.ts
│   │   │   │       └── use-vxe-grid.vue
│   │   │   └── tsconfig.json
│   │   └── request/
│   │       ├── package.json
│   │       ├── src/
│   │       │   ├── index.ts
│   │       │   └── request-client/
│   │       │       ├── index.ts
│   │       │       ├── modules/
│   │       │       │   ├── downloader.test.ts
│   │       │       │   ├── downloader.ts
│   │       │       │   ├── interceptor.ts
│   │       │       │   ├── sse.test.ts
│   │       │       │   ├── sse.ts
│   │       │       │   ├── uploader.test.ts
│   │       │       │   └── uploader.ts
│   │       │       ├── preset-interceptors.ts
│   │       │       ├── request-client.test.ts
│   │       │       ├── request-client.ts
│   │       │       └── types.ts
│   │       └── tsconfig.json
│   ├── icons/
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── iconify/
│   │   │   │   └── index.ts
│   │   │   ├── iconify-offline/
│   │   │   │   ├── index.ts
│   │   │   │   └── menu-icons.ts
│   │   │   ├── icons/
│   │   │   │   └── empty-icon.vue
│   │   │   ├── index.ts
│   │   │   └── svg/
│   │   │       ├── index.ts
│   │   │       └── load.ts
│   │   └── tsconfig.json
│   ├── locales/
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── i18n.ts
│   │   │   ├── index.ts
│   │   │   ├── langs/
│   │   │   │   ├── en-US/
│   │   │   │   │   ├── authentication.json
│   │   │   │   │   ├── common.json
│   │   │   │   │   ├── preferences.json
│   │   │   │   │   └── ui.json
│   │   │   │   └── zh-CN/
│   │   │   │       ├── authentication.json
│   │   │   │       ├── common.json
│   │   │   │       ├── preferences.json
│   │   │   │       └── ui.json
│   │   │   └── typing.ts
│   │   └── tsconfig.json
│   ├── preferences/
│   │   ├── package.json
│   │   ├── src/
│   │   │   └── index.ts
│   │   └── tsconfig.json
│   ├── stores/
│   │   ├── package.json
│   │   ├── shim-pinia.d.ts
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   ├── modules/
│   │   │   │   ├── access.test.ts
│   │   │   │   ├── access.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── tabbar.test.ts
│   │   │   │   ├── tabbar.ts
│   │   │   │   ├── user.test.ts
│   │   │   │   └── user.ts
│   │   │   └── setup.ts
│   │   └── tsconfig.json
│   ├── styles/
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── antd/
│   │   │   │   └── index.css
│   │   │   ├── ele/
│   │   │   │   └── index.css
│   │   │   ├── global/
│   │   │   │   └── index.scss
│   │   │   ├── index.ts
│   │   │   └── naive/
│   │   │       └── index.css
│   │   └── tsconfig.json
│   ├── types/
│   │   ├── README.md
│   │   ├── global.d.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   └── user.ts
│   │   └── tsconfig.json
│   └── utils/
│       ├── README.md
│       ├── package.json
│       ├── src/
│       │   ├── encryption/
│       │   │   ├── base.ts
│       │   │   ├── crypto.ts
│       │   │   ├── impl/
│       │   │   │   ├── aes.ts
│       │   │   │   ├── rsa.ts
│       │   │   │   ├── sm2.ts
│       │   │   │   └── sm4.ts
│       │   │   └── index.ts
│       │   ├── helpers/
│       │   │   ├── __tests__/
│       │   │   │   ├── enum-options.test.ts
│       │   │   │   ├── find-menu-by-path.test.ts
│       │   │   │   ├── generate-menus.test.ts
│       │   │   │   ├── generate-routes-frontend.test.ts
│       │   │   │   └── merge-route-modules.test.ts
│       │   │   ├── enum-options.ts
│       │   │   ├── find-menu-by-path.ts
│       │   │   ├── generate-menus.ts
│       │   │   ├── generate-routes-backend.ts
│       │   │   ├── generate-routes-frontend.ts
│       │   │   ├── get-popup-container.ts
│       │   │   ├── index.ts
│       │   │   ├── merge-route-modules.ts
│       │   │   ├── mitt.ts
│       │   │   ├── request.ts
│       │   │   ├── reset-routes.ts
│       │   │   ├── safe.ts
│       │   │   ├── tree.ts
│       │   │   ├── unmount-global-loading.ts
│       │   │   └── uuid.ts
│       │   └── index.ts
│       └── tsconfig.json
├── pnpm-workspace.yaml
├── scripts/
│   ├── clean.mjs
│   ├── deploy/
│   │   ├── Dockerfile
│   │   ├── build-local-docker-image.sh
│   │   └── nginx.conf
│   ├── turbo-run/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   └── turbo-run.mjs
│   │   ├── build.config.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   └── run.ts
│   │   └── tsconfig.json
│   └── vsh/
│       ├── README.md
│       ├── bin/
│       │   └── vsh.mjs
│       ├── build.config.ts
│       ├── package.json
│       ├── src/
│       │   ├── check-circular/
│       │   │   └── index.ts
│       │   ├── check-dep/
│       │   │   └── index.ts
│       │   ├── code-workspace/
│       │   │   └── index.ts
│       │   ├── index.ts
│       │   ├── lint/
│       │   │   └── index.ts
│       │   └── publint/
│       │       └── index.ts
│       └── tsconfig.json
├── stylelint.config.mjs
└── turbo.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .browserslistrc
================================================
> 1%
last 2 versions
not dead
not ie 11


================================================
FILE: .commitlintrc.js
================================================
export { default } from '@vben/commitlint-config';


================================================
FILE: .dockerignore
================================================
# Git
.git
.gitignore

# IDE
.idea
.vscode
*.iml

# Logs
*.log
logs

# Node
node_modules
.pnpm-store
.turbo

# Build outputs (will be rebuilt in container)
apps/*/dist
apps/*/.turbo
packages/*/dist
packages/*/.turbo

# Test
coverage
*.test.*
*.spec.*

# Docs
*.md
!README.md
docs

# Misc
.DS_Store
.env
.env.local
.env.*.local


================================================
FILE: .editorconfig
================================================
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


================================================
FILE: .gitattributes
================================================
# 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

================================================
FILE: .gitconfig
================================================
[core]
    ignorecase = false


================================================
FILE: .gitignore
================================================
node_modules
.DS_Store
dist
dist-ssr
dist.zip
dist.tar
dist.war
.nitro
.output
*-dist.zip
*-dist.tar
*-dist.war
coverage
*.local
**/.vitepress/cache
.cache
.turbo
.temp
dev-dist
.stylelintcache
yarn.lock
package-lock.json
pnpm-lock.yaml
.VSCodeCounter
**/backend-mock/data

# local env files
.env.local
.env.*.local
.eslintcache

logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
vite.config.mts.*
vite.config.mjs.*
vite.config.js.*
vite.config.ts.*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# 排除自动生成的类型文件
apps/web-antd/types/components.d.ts
.history
.cursor
.claude


================================================
FILE: .npmrc
================================================
registry = "https://registry.npmmirror.com"
public-hoist-pattern[]=lefthook
public-hoist-pattern[]=eslint
public-hoist-pattern[]=prettier
public-hoist-pattern[]=prettier-plugin-tailwindcss
public-hoist-pattern[]=stylelint
public-hoist-pattern[]=*postcss*
public-hoist-pattern[]=@commitlint/*
public-hoist-pattern[]=czg

strict-peer-dependencies=false
auto-install-peers=true
dedupe-peer-dependents=true


================================================
FILE: .prettierignore
================================================
dist
dev-dist
.local
.output.js
node_modules
.nvmrc
coverage
CODEOWNERS
.nitro
.output


**/*.svg
**/*.sh

public
.npmrc
*-lock.yaml


================================================
FILE: .prettierrc.mjs
================================================
// .prettierrc.mjs 是 Prettier 代码格式化工具的配置文件。
// 作用:
// 统一代码风格(缩进、引号、分号等)
// 在保存文件或提交代码时自动格式化
export { default } from '@vben/prettier-config';





================================================
FILE: .stylelintignore
================================================
dist
public
__tests__
coverage


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2026 ruoyi-ai

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.


================================================
FILE: README.md
================================================
# RuoYi-AI 管理端

<div align="center">

<img src="https://github.com/ageerle/ruoyi-ai/raw/main/docs/image/logo.png" alt="RuoYi AI Logo" width="120" height="120">

### 企业级AI助手平台 - 管理后台

*RuoYi-AI 的管理后台,提供系统管理、模型配置、知识库管理、流程编排等功能*

**[在线体验](https://admin.pandarobot.chat)** | **[后端服务](https://github.com/ageerle/ruoyi-ai)** | **[用户端](https://github.com/ageerle/ruoyi-web)**

</div>

## 技术栈

- **框架**: Vue 3 + Vben Admin
- **UI组件**: element-plus-x
- **构建工具**: Vite

## Docker 部署

本管理端支持两种 Docker 部署方式:

### 方式一:一键启动所有服务(推荐)

使用 `docker-compose-all.yaml` 可以一键启动所有服务(包括后端、管理端、用户端及依赖服务):

```bash
# 克隆后端仓库
git clone https://github.com/ageerle/ruoyi-ai.git
cd ruoyi-ai

# 启动所有服务(从镜像仓库拉取预构建镜像)
docker-compose -f docker-compose-all.yaml up -d

# 访问管理端
# 地址: http://localhost:25666
# 账号: admin / admin123
```

### 方式二:分步部署(源码编译)

如果您需要从源码构建,请按照以下步骤操作:

#### 第一步:部署后端服务

```bash
# 进入后端项目目录
cd ruoyi-ai

# 启动后端服务(源码编译构建)
docker-compose up -d --build

# 等待后端服务启动完成
docker-compose logs -f backend
```

#### 第二步:部署管理端

```bash
# 进入管理端项目目录
cd ruoyi-admin

# 构建并启动管理端
docker-compose up -d --build

# 访问管理端
# 地址: http://localhost:5666
```

#### 第三步:部署用户端(可选)

```bash
# 进入用户端项目目录
cd ruoyi-web

# 构建并启动用户端
docker-compose up -d --build

# 访问用户端
# 地址: http://localhost:5137
```

### 服务端口说明

| 服务 | 端口 | 说明 |
|------|------|------|
| 管理端 | 5666 | 管理后台访问地址 |
| 用户端 | 5137 | 用户前端访问地址 |
| 后端服务 | 6039 | 后端 API 服务 |
| MySQL | 23306 | 数据库服务 |
| Redis | 6379 | 缓存服务 |
| Weaviate | 28080 | 向量数据库 |
| MinIO | 9000/9090 | 对象存储 |

### 镜像仓库

所有镜像托管在阿里云容器镜像服务:

```
crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai
```

可用镜像:
- `mysql:v3` - MySQL 数据库(包含初始化 SQL)
- `redis:6.2` - Redis 缓存
- `weaviate:1.30.0` - 向量数据库
- `minio:latest` - 对象存储
- `ruoyi-ai-backend:latest` - 后端服务
- `ruoyi-ai-admin:latest` - 管理端前端
- `ruoyi-ai-web:latest` - 用户端前端

## 本地开发

```bash
# 安装依赖
pnpm install

# 启动开发服务器
pnpm dev

# 构建生产版本
pnpm build
```

## 常见问题

**Q: 管理端无法连接后端服务?**

A: 请确保后端服务已启动,并检查环境变量 `UPSTREAM_HOST` 配置是否正确。

**Q: 一键启动和分步部署有什么区别?**

A: 一键启动使用预构建的镜像,部署速度快;分步部署从源码编译,适合需要自定义修改的场景。

## 开源协议

本项目采用 **MIT 开源协议**,详情请查看 [LICENSE](license) 文件。

---

<div align="center">

**[⭐ 点个Star支持一下](https://github.com/ageerle/ruoyi-admin)** • **[Fork 开始贡献](https://github.com/ageerle/ruoyi-admin/fork)**

*用 ❤️ 打造,由 RuoYi AI 开源社区维护*

</div>


================================================
FILE: apps/web-antd/Dockerfile
================================================
# 构建阶段
FROM node:22-alpine AS builder

# 接收后端 API 地址(docker-compose 传入)
ARG VITE_GLOB_API_URL=http://localhost:6039
ENV VITE_GLOB_API_URL=${VITE_GLOB_API_URL}

# 设置环境变量 - 优化资源使用,增加内存限制
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
ENV NODE_OPTIONS=--max-old-space-size=16384

# 安装 pnpm 和设置时区
RUN npm i -g corepack && corepack enable && \
    apk add --no-cache tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

# 设置工作目录
WORKDIR /app

# 先复制 package 文件(优化 Docker 缓存)
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml turbo.json .npmrc ./

# 复制 internal 目录(包含 @vben/vite-config, @vben/tsconfig 等)
COPY internal ./internal

# 复制 scripts 目录(turbo 依赖)
COPY scripts ./scripts

# 复制 packages 目录(workspace 依赖)
COPY packages ./packages

# 复制 web-antd 应用
COPY apps/web-antd ./apps/web-antd

# 安装依赖(使用 workspace)
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile

# 构建 workspace 依赖包(使用 turbo)
RUN pnpm run build --filter="./packages/**"

# 构建 web-antd 应用(直接构建,避免 turbo 过滤器问题)
WORKDIR /app/apps/web-antd
RUN pnpm run build:prod
WORKDIR /app

# 生产阶段 - 使用 nginx 部署
FROM nginx:stable-alpine AS production

# 安装 tzdata 并设置时区
RUN apk add --no-cache tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

# 配置 nginx 支持 mjs
RUN echo "types { application/javascript js mjs; }" > /etc/nginx/conf.d/mjs.conf \
    && rm -rf /etc/nginx/conf.d/default.conf

# 从构建阶段复制构建产物
COPY --from=builder /app/apps/web-antd/dist /usr/share/nginx/html

# 复制 nginx 配置文件模板
COPY apps/web-antd/nginx.conf /etc/nginx/nginx.conf.template

# 复制启动脚本
COPY apps/web-antd/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh

# 暴露端口
EXPOSE 5666

# 设置默认后端地址(可被 docker-compose environment 覆盖)
ENV UPSTREAM_HOST=127.0.0.1:6039

# 启动脚本(处理环境变量并启动 nginx)
CMD ["/docker-entrypoint.sh"]


================================================
FILE: apps/web-antd/docker-compose.yml
================================================
services:
  # ==================== RuoYi-AI 前端服务 ====================
  frontend:
    image: ruoyi-ai-admin:latest
    build:
      context: ../..
      dockerfile: apps/web-antd/Dockerfile
      tags:
        - ruoyi-ai-admin:latest
    container_name: ruoyi-ai-admin
    restart: always
    ports:
      - "5666:5666"
    environment:
      # 后端 API 地址 - 运行时动态配置(无需重新构建镜像)
      # 使用后端容器名和内部端口(容器内端口是 6039)
      UPSTREAM_HOST: ${UPSTREAM_HOST:-ruoyi-ai-backend:6039}
    # 资源限制 - 防止 CPU 和内存耗尽
    deploy:
      resources:
        limits:
          cpus: '2'          # 限制最多使用 2 个 CPU 核心
          memory: 3G         # 限制内存使用为 3GB
        reservations:
          cpus: '1'          # 保留 1 个 CPU 核心
          memory: 1G         # 保留 1GB 内存
    networks:
      - ruoyi-net

# ==================== 网络配置 ====================
networks:
  # 使用后端服务的网络,实现容器间通信
  ruoyi-net:
    name: ruoyi-ai_ruoyi-net
    external: true


================================================
FILE: apps/web-antd/docker-entrypoint.sh
================================================
#!/bin/sh
# Nginx 启动脚本 - 支持运行时环境变量

# 使用 envsubst 替换 nginx.conf 中的环境变量
envsubst '${UPSTREAM_HOST}' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf

# 启动 nginx
exec nginx -g 'daemon off;'


================================================
FILE: apps/web-antd/index.html
================================================
<!doctype html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="renderer" content="webkit" />
    <meta name="description" content="A Modern Back-end Management System" />
    <meta name="keywords" content="Vben Admin Vue3 Vite" />
    <meta name="author" content="Vben" />
    <meta
      name="viewport"
      content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
    />
    <!-- 由 vite 注入 VITE_APP_TITLE 变量,在 .env 文件内配置 -->
    <title><%= VITE_APP_TITLE %></title>
    <link rel="icon" href="/favicon.ico" />
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>


================================================
FILE: apps/web-antd/nginx.conf
================================================
worker_processes 1;

events {
  worker_connections 1024;
}

http {
  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;

  # Gzip 压缩
  gzip on;
  gzip_vary on;
  gzip_min_length 1024;
  gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml+rss application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;

  # 后端 API 地址(运行时环境变量)
  upstream backend {
    server ${UPSTREAM_HOST};
  }

  server {
    listen 5666;
    server_name localhost;

    # API 代理到后端服务(去除 /api 前缀后转发)
    location /api/ {
      rewrite ^/api/(.*)$ /$1 break;
      proxy_pass http://backend;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      # 支持WebSocket
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }

    location / {
      root /usr/share/nginx/html;
      try_files $uri $uri/ /index.html;
      index index.html;
    }

    error_page 500 502 503 504 /50x.html;

    location = /50x.html {
        root /usr/share/nginx/html;
    }
  }
}


================================================
FILE: apps/web-antd/package.json
================================================
{
  "name": "@vben/web-antd",
  "version": "1.5.2",
  "homepage": "https://vben.pro",
  "bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vbenjs/vue-vben-admin.git",
    "directory": "apps/web-antd"
  },
  "license": "MIT",
  "author": {
    "name": "vben",
    "email": "ann.vben@gmail.com",
    "url": "https://github.com/anncwb"
  },
  "type": "module",
  "scripts": {
    "build:prod": "pnpm vite build",
    "build:test": "pnpm vite build --mode test",
    "build:analyze": "pnpm vite build --mode analyze",
    "dev": "pnpm vite --mode development",
    "preview": "vite preview",
    "typecheck": "vue-tsc --noEmit --skipLibCheck"
  },
  "imports": {
    "#/*": "./src/*"
  },
  "dependencies": {
    "@ant-design/icons-vue": "^7.0.1",
    "@antv/g6": "^5.0.51",
    "@tinymce/tinymce-vue": "^6.0.1",
    "@vben/access": "workspace:*",
    "@vben/common-ui": "workspace:*",
    "@vben/constants": "workspace:*",
    "@vben/hooks": "workspace:*",
    "@vben/icons": "workspace:*",
    "@vben/layouts": "workspace:*",
    "@vben/locales": "workspace:*",
    "@vben/plugins": "workspace:*",
    "@vben/preferences": "workspace:*",
    "@vben/request": "workspace:*",
    "@vben/stores": "workspace:*",
    "@vben/styles": "workspace:*",
    "@vben/types": "workspace:*",
    "@vben/utils": "workspace:*",
    "@vue-flow/background": "^1.3.2",
    "@vue-flow/core": "^1.46.5",
    "@vueuse/core": "catalog:",
    "ant-design-vue": "catalog:",
    "cropperjs": "^1.6.2",
    "dayjs": "catalog:",
    "echarts": "^5.5.1",
    "lodash-es": "^4.17.21",
    "pinia": "catalog:",
    "tinymce": "7.9.1",
    "unplugin-vue-components": "^0.27.3",
    "uuid": "^9.0.0",
    "vue": "catalog:",
    "vue-router": "catalog:",
    "vue3-colorpicker": "^2.3.0"
  },
  "devDependencies": {
    "@types/lodash-es": "^4.17.12"
  }
}


================================================
FILE: apps/web-antd/postcss.config.mjs
================================================
export { default } from '@vben/tailwind-config/postcss';


================================================
FILE: apps/web-antd/public/tinymce/langs/README.md
================================================
This is where language files should be placed.

Please DO NOT translate these directly, use this service instead: https://crowdin.com/project/tinymce


================================================
FILE: apps/web-antd/public/tinymce/langs/zh_CN.js
================================================
tinymce.addI18n("zh_CN",{"#":"#","Accessibility":"\u8f85\u52a9\u529f\u80fd","Accordion":"","Accordion body...":"","Accordion summary...":"","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}":"","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}":"","Black":"\u9ed1\u8272","Block":"\u5757","Block {0}":"","Blockquote":"\u5f15\u6587\u533a\u5757","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":"","Browse for an image":"\u6d4f\u89c8\u56fe\u50cf","Browse links":"","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":"","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}":"","Font sizes":"\u5b57\u4f53\u5927\u5c0f","Font {0}":"","Fonts":"\u5b57\u4f53","Food and Drink":"\u98df\u7269\u548c\u996e\u54c1","Footer":"\u8868\u5c3e","Format":"\u683c\u5f0f","Format {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":"","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":"\u884c\u9ad8","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.":"","Press the arrow keys to resize the editor.":"","Press {0} for help":"","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":"","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":"\u6e90","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":"\u6587\u672c\u989c\u8272","Text color {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":"","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} words":"{0} \u5b57"});

================================================
FILE: apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.js
================================================
window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💯" src="1f4af.png"/>',fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🔢" src="1f522.png"/>',fitzpatrick_scale:false,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😀" src="1f600.png"/>',fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😬" src="1f62c.png"/>',fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😁" src="1f601.png"/>',fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😂" src="1f602.png"/>',fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤣" src="1f923.png"/>',fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥳" src="1f973.png"/>',fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😃" src="1f603.png"/>',fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😄" src="1f604.png"/>',fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😅" src="1f605.png"/>',fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😆" src="1f606.png"/>',fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😇" src="1f607.png"/>',fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😉" src="1f609.png"/>',fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😊" src="1f60a.png"/>',fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙂" src="1f642.png"/>',fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙃" src="1f643.png"/>',fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☺️" src="263a.png"/>',fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😋" src="1f60b.png"/>',fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😌" src="1f60c.png"/>',fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😍" src="1f60d.png"/>',fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥰" src="1f970.png"/>',fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😘" src="1f618.png"/>',fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😗" src="1f617.png"/>',fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😙" src="1f619.png"/>',fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😚" src="1f61a.png"/>',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😜" src="1f61c.png"/>',fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤪" src="1f92a.png"/>',fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤨" src="1f928.png"/>',fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧐" src="1f9d0.png"/>',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😝" src="1f61d.png"/>',fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😛" src="1f61b.png"/>',fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤑" src="1f911.png"/>',fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤓" src="1f913.png"/>',fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😎" src="1f60e.png"/>',fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤩" src="1f929.png"/>',fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤡" src="1f921.png"/>',fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤠" src="1f920.png"/>',fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤗" src="1f917.png"/>',fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😏" src="1f60f.png"/>',fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😶" src="1f636.png"/>',fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😐" src="1f610.png"/>',fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😑" src="1f611.png"/>',fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😒" src="1f612.png"/>',fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙄" src="1f644.png"/>',fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤔" src="1f914.png"/>',fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤥" src="1f925.png"/>',fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤭" src="1f92d.png"/>',fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤫" src="1f92b.png"/>',fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤬" src="1f92c.png"/>',fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤯" src="1f92f.png"/>',fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😳" src="1f633.png"/>',fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😞" src="1f61e.png"/>',fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😟" src="1f61f.png"/>',fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😠" src="1f620.png"/>',fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😡" src="1f621.png"/>',fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😔" src="1f614.png"/>',fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😕" src="1f615.png"/>',fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙁" src="1f641.png"/>',fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☹" src="2639.png"/>',fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😣" src="1f623.png"/>',fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😖" src="1f616.png"/>',fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😫" src="1f62b.png"/>',fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😩" src="1f629.png"/>',fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥺" src="1f97a.png"/>',fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😤" src="1f624.png"/>',fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😮" src="1f62e.png"/>',fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😱" src="1f631.png"/>',fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😨" src="1f628.png"/>',fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😰" src="1f630.png"/>',fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😯" src="1f62f.png"/>',fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😦" src="1f626.png"/>',fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😧" src="1f627.png"/>',fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😢" src="1f622.png"/>',fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😥" src="1f625.png"/>',fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤤" src="1f924.png"/>',fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😪" src="1f62a.png"/>',fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😓" src="1f613.png"/>',fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥵" src="1f975.png"/>',fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥶" src="1f976.png"/>',fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😭" src="1f62d.png"/>',fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😵" src="1f635.png"/>',fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😲" src="1f632.png"/>',fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤐" src="1f910.png"/>',fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤢" src="1f922.png"/>',fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤧" src="1f927.png"/>',fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤮" src="1f92e.png"/>',fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😷" src="1f637.png"/>',fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤒" src="1f912.png"/>',fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤕" src="1f915.png"/>',fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥴" src="1f974.png"/>',fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😴" src="1f634.png"/>',fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💤" src="1f4a4.png"/>',fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💩" src="1f4a9.png"/>',fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😈" src="1f608.png"/>',fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👿" src="1f47f.png"/>',fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👹" src="1f479.png"/>',fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👺" src="1f47a.png"/>',fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💀" src="1f480.png"/>',fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👻" src="1f47b.png"/>',fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👽" src="1f47d.png"/>',fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤖" src="1f916.png"/>',fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😺" src="1f63a.png"/>',fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😸" src="1f638.png"/>',fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😹" src="1f639.png"/>',fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😻" src="1f63b.png"/>',fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😼" src="1f63c.png"/>',fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😽" src="1f63d.png"/>',fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙀" src="1f640.png"/>',fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😿" src="1f63f.png"/>',fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="😾" src="1f63e.png"/>',fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤲" src="1f932.png"/>',fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙌" src="1f64c.png"/>',fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👏" src="1f44f.png"/>',fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👋" src="1f44b.png"/>',fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤙" src="1f919.png"/>',fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👍" src="1f44d.png"/>',fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👎" src="1f44e.png"/>',fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👊" src="1f44a.png"/>',fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="✊" src="270a.png"/>',fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤛" src="1f91b.png"/>',fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤜" src="1f91c.png"/>',fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="✌" src="270c.png"/>',fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👌" src="1f44c.png"/>',fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="✋" src="270b.png"/>',fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤚" src="1f91a.png"/>',fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👐" src="1f450.png"/>',fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💪" src="1f4aa.png"/>',fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙏" src="1f64f.png"/>',fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦶" src="1f9b6.png"/>',fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦵" src="1f9b5.png"/>',fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤝" src="1f91d.png"/>',fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☝" src="261d.png"/>',fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👆" src="1f446.png"/>',fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👇" src="1f447.png"/>',fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👈" src="1f448.png"/>',fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👉" src="1f449.png"/>',fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🖕" src="1f595.png"/>',fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🖐" src="1f590.png"/>',fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤟" src="1f91f.png"/>',fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤘" src="1f918.png"/>',fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤞" src="1f91e.png"/>',fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🖖" src="1f596.png"/>',fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="✍" src="270d.png"/>',fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤳" src="1f933.png"/>',fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💅" src="1f485.png"/>',fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👄" src="1f444.png"/>',fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦷" src="1f9b7.png"/>',fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👅" src="1f445.png"/>',fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👂" src="1f442.png"/>',fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👃" src="1f443.png"/>',fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👁" src="1f441.png"/>',fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👀" src="1f440.png"/>',fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧠" src="1f9e0.png"/>',fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👤" src="1f464.png"/>',fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👥" src="1f465.png"/>',fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🗣" src="1f5e3.png"/>',fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👶" src="1f476.png"/>',fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧒" src="1f9d2.png"/>',fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👦" src="1f466.png"/>',fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👧" src="1f467.png"/>',fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧑" src="1f9d1.png"/>',fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨" src="1f468.png"/>',fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩" src="1f469.png"/>',fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👱‍♀️" src="1f471-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👱" src="1f471.png"/>',fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧔" src="1f9d4.png"/>',fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧓" src="1f9d3.png"/>',fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👴" src="1f474.png"/>',fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👵" src="1f475.png"/>',fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👲" src="1f472.png"/>',fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧕" src="1f9d5.png"/>',fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👳‍♀️" src="1f473-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👳" src="1f473.png"/>',fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👮‍♀️" src="1f46e-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👮" src="1f46e.png"/>',fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👷‍♀️" src="1f477-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👷" src="1f477.png"/>',fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💂‍♀️" src="1f482-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💂" src="1f482.png"/>',fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🕵️‍♀️" src="1f575-fe0f-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🕵" src="1f575.png"/>',fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍⚕️" src="1f469-200d-2695-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍⚕️" src="1f468-200d-2695-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🌾" src="1f469-200d-1f33e.png"/>',fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🌾" src="1f468-200d-1f33e.png"/>',fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🍳" src="1f469-200d-1f373.png"/>',fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🍳" src="1f468-200d-1f373.png"/>',fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🎓" src="1f469-200d-1f393.png"/>',fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🎓" src="1f468-200d-1f393.png"/>',fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🎤" src="1f469-200d-1f3a4.png"/>',fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🎤" src="1f468-200d-1f3a4.png"/>',fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🏫" src="1f469-200d-1f3eb.png"/>',fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🏫" src="1f468-200d-1f3eb.png"/>',fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🏭" src="1f469-200d-1f3ed.png"/>',fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🏭" src="1f468-200d-1f3ed.png"/>',fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍💻" src="1f469-200d-1f4bb.png"/>',fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍💻" src="1f468-200d-1f4bb.png"/>',fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍💼" src="1f469-200d-1f4bc.png"/>',fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍💼" src="1f468-200d-1f4bc.png"/>',fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🔧" src="1f469-200d-1f527.png"/>',fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🔧" src="1f468-200d-1f527.png"/>',fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🔬" src="1f469-200d-1f52c.png"/>',fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🔬" src="1f468-200d-1f52c.png"/>',fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🎨" src="1f469-200d-1f3a8.png"/>',fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🎨" src="1f468-200d-1f3a8.png"/>',fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🚒" src="1f469-200d-1f692.png"/>',fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🚒" src="1f468-200d-1f692.png"/>',fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍✈️" src="1f469-200d-2708-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍✈️" src="1f468-200d-2708-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍🚀" src="1f469-200d-1f680.png"/>',fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍🚀" src="1f468-200d-1f680.png"/>',fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍⚖️" src="1f469-200d-2696-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍⚖️" src="1f468-200d-2696-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦸‍♀️" src="1f9b8-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦸‍♂️" src="1f9b8-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦹‍♀️" src="1f9b9-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦹‍♂️" src="1f9b9-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤶" src="1f936.png"/>',fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎅" src="1f385.png"/>',fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧙‍♀️" src="1f9d9-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧙‍♂️" src="1f9d9-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧝‍♀️" src="1f9dd-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧝‍♂️" src="1f9dd-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧛‍♀️" src="1f9db-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧛‍♂️" src="1f9db-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧟‍♀️" src="1f9df-200d-2640-fe0f.png"/>',fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧟‍♂️" src="1f9df-200d-2642-fe0f.png"/>',fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧞‍♀️" src="1f9de-200d-2640-fe0f.png"/>',fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧞‍♂️" src="1f9de-200d-2642-fe0f.png"/>',fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧜‍♀️" src="1f9dc-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧜‍♂️" src="1f9dc-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧚‍♀️" src="1f9da-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧚‍♂️" src="1f9da-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👼" src="1f47c.png"/>',fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤰" src="1f930.png"/>',fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤱" src="1f931.png"/>',fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👸" src="1f478.png"/>',fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤴" src="1f934.png"/>',fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👰" src="1f470.png"/>',fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤵" src="1f935.png"/>',fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🏃‍♀️" src="1f3c3-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🏃" src="1f3c3.png"/>',fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🚶‍♀️" src="1f6b6-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🚶" src="1f6b6.png"/>',fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💃" src="1f483.png"/>',fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🕺" src="1f57a.png"/>',fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👯" src="1f46f.png"/>',fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👯‍♂️" src="1f46f-200d-2642-fe0f.png"/>',fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👫" src="1f46b.png"/>',fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👬" src="1f46c.png"/>',fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👭" src="1f46d.png"/>',fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙇‍♀️" src="1f647-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙇" src="1f647.png"/>',fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤦‍♂️" src="1f926-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤦‍♀️" src="1f926-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤷" src="1f937.png"/>',fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🤷‍♂️" src="1f937-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💁" src="1f481.png"/>',fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💁‍♂️" src="1f481-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙅" src="1f645.png"/>',fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙅‍♂️" src="1f645-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙆" src="1f646.png"/>',fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙆‍♂️" src="1f646-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙋" src="1f64b.png"/>',fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙋‍♂️" src="1f64b-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙎" src="1f64e.png"/>',fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙎‍♂️" src="1f64e-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙍" src="1f64d.png"/>',fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙍‍♂️" src="1f64d-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💇" src="1f487.png"/>',fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💇‍♂️" src="1f487-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💆" src="1f486.png"/>',fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💆‍♂️" src="1f486-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧖‍♀️" src="1f9d6-200d-2640-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧖‍♂️" src="1f9d6-200d-2642-fe0f.png"/>',fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💑" src="1f491.png"/>',fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍❤️‍👩" src="1f469-200d-2764-fe0f-200d-1f469.png"/>',fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍❤️‍👨" src="1f468-200d-2764-fe0f-200d-1f468.png"/>',fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💏" src="1f48f.png"/>',fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍❤️‍💋‍👩" src="1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png"/>',fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍❤️‍💋‍👨" src="1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png"/>',fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👪" src="1f46a.png"/>',fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👩‍👧" src="1f468-200d-1f469-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👩‍👧‍👦" src="1f468-200d-1f469-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👩‍👦‍👦" src="1f468-200d-1f469-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👩‍👧‍👧" src="1f468-200d-1f469-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👩‍👦" src="1f469-200d-1f469-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👩‍👧" src="1f469-200d-1f469-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👩‍👧‍👦" src="1f469-200d-1f469-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👩‍👦‍👦" src="1f469-200d-1f469-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👩‍👧‍👧" src="1f469-200d-1f469-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👨‍👦" src="1f468-200d-1f468-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👨‍👧" src="1f468-200d-1f468-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👨‍👧‍👦" src="1f468-200d-1f468-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👨‍👦‍👦" src="1f468-200d-1f468-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👨‍👧‍👧" src="1f468-200d-1f468-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👦" src="1f469-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👧" src="1f469-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👧‍👦" src="1f469-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👦‍👦" src="1f469-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👩‍👧‍👧" src="1f469-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👦" src="1f468-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👧" src="1f468-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👧‍👦" src="1f468-200d-1f467-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👦‍👦" src="1f468-200d-1f466-200d-1f466.png"/>',fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👨‍👧‍👧" src="1f468-200d-1f467-200d-1f467.png"/>',fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧶" src="1f9f6.png"/>',fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧵" src="1f9f5.png"/>',fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧥" src="1f9e5.png"/>',fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥼" src="1f97c.png"/>',fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👚" src="1f45a.png"/>',fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👕" src="1f455.png"/>',fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👖" src="1f456.png"/>',fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👔" src="1f454.png"/>',fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👗" src="1f457.png"/>',fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👙" src="1f459.png"/>',fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👘" src="1f458.png"/>',fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💄" src="1f484.png"/>',fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💋" src="1f48b.png"/>',fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👣" src="1f463.png"/>',fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥿" src="1f97f.png"/>',fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👠" src="1f460.png"/>',fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👡" src="1f461.png"/>',fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👢" src="1f462.png"/>',fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👞" src="1f45e.png"/>',fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👟" src="1f45f.png"/>',fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥾" src="1f97e.png"/>',fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧦" src="1f9e6.png"/>',fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧤" src="1f9e4.png"/>',fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧣" src="1f9e3.png"/>',fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👒" src="1f452.png"/>',fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎩" src="1f3a9.png"/>',fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧢" src="1f9e2.png"/>',fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⛑" src="26d1.png"/>',fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎓" src="1f393.png"/>',fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👑" src="1f451.png"/>',fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎒" src="1f392.png"/>',fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧳" src="1f9f3.png"/>',fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👝" src="1f45d.png"/>',fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👛" src="1f45b.png"/>',fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👜" src="1f45c.png"/>',fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💼" src="1f4bc.png"/>',fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="👓" src="1f453.png"/>',fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🕶" src="1f576.png"/>',fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥽" src="1f97d.png"/>',fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💍" src="1f48d.png"/>',fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌂" src="1f302.png"/>',fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐶" src="1f436.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐱" src="1f431.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐭" src="1f42d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐹" src="1f439.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐰" src="1f430.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦊" src="1f98a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐻" src="1f43b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐼" src="1f43c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐨" src="1f428.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐯" src="1f42f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦁" src="1f981.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐮" src="1f42e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐷" src="1f437.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐽" src="1f43d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐸" src="1f438.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦑" src="1f991.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐙" src="1f419.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦐" src="1f990.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐵" src="1f435.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦍" src="1f98d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙈" src="1f648.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙉" src="1f649.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🙊" src="1f64a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐒" src="1f412.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐔" src="1f414.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐧" src="1f427.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐦" src="1f426.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐤" src="1f424.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐣" src="1f423.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐥" src="1f425.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦆" src="1f986.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦅" src="1f985.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦉" src="1f989.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦇" src="1f987.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐺" src="1f43a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐗" src="1f417.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐴" src="1f434.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦄" src="1f984.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐝" src="1f41d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐛" src="1f41b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦋" src="1f98b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐌" src="1f40c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐞" src="1f41e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐜" src="1f41c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦗" src="1f997.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🕷" src="1f577.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦂" src="1f982.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦀" src="1f980.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐍" src="1f40d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦎" src="1f98e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦖" src="1f996.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦕" src="1f995.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐢" src="1f422.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐠" src="1f420.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐟" src="1f41f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐡" src="1f421.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐬" src="1f42c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦈" src="1f988.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐳" src="1f433.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐋" src="1f40b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐊" src="1f40a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐆" src="1f406.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦓" src="1f993.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐅" src="1f405.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐃" src="1f403.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐂" src="1f402.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐄" src="1f404.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦌" src="1f98c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐪" src="1f42a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐫" src="1f42b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦒" src="1f992.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐘" src="1f418.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦏" src="1f98f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐐" src="1f410.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐏" src="1f40f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐑" src="1f411.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐎" src="1f40e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐖" src="1f416.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐀" src="1f400.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐁" src="1f401.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐓" src="1f413.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦃" src="1f983.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🕊" src="1f54a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐕" src="1f415.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐩" src="1f429.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐈" src="1f408.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐇" src="1f407.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐿" src="1f43f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦔" src="1f994.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦝" src="1f99d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦙" src="1f999.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦛" src="1f99b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦘" src="1f998.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦡" src="1f9a1.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦢" src="1f9a2.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦚" src="1f99a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦜" src="1f99c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦞" src="1f99e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦟" src="1f99f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐾" src="1f43e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐉" src="1f409.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐲" src="1f432.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌵" src="1f335.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎄" src="1f384.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌲" src="1f332.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌳" src="1f333.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌴" src="1f334.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌱" src="1f331.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌿" src="1f33f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☘" src="2618.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍀" src="1f340.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎍" src="1f38d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎋" src="1f38b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍃" src="1f343.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍂" src="1f342.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍁" src="1f341.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌾" src="1f33e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌺" src="1f33a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌻" src="1f33b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌹" src="1f339.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥀" src="1f940.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌷" src="1f337.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌼" src="1f33c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌸" src="1f338.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💐" src="1f490.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍄" src="1f344.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌰" src="1f330.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎃" src="1f383.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🐚" src="1f41a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🕸" src="1f578.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌎" src="1f30e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌍" src="1f30d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌏" src="1f30f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌕" src="1f315.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌖" src="1f316.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌗" src="1f317.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌘" src="1f318.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌑" src="1f311.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌒" src="1f312.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌓" src="1f313.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌔" src="1f314.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌚" src="1f31a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌝" src="1f31d.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌛" src="1f31b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌜" src="1f31c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌞" src="1f31e.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌙" src="1f319.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⭐" src="2b50.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌟" src="1f31f.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💫" src="1f4ab.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="✨" src="2728.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☄" src="2604.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☀️" src="2600.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌤" src="1f324.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⛅" src="26c5.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌥" src="1f325.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌦" src="1f326.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☁️" src="2601.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌧" src="1f327.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⛈" src="26c8.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌩" src="1f329.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⚡" src="26a1.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🔥" src="1f525.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💥" src="1f4a5.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="❄️" src="2744.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌨" src="1f328.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⛄" src="26c4.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☃" src="2603.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌬" src="1f32c.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💨" src="1f4a8.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌪" src="1f32a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌫" src="1f32b.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☂" src="2602.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☔" src="2614.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💧" src="1f4a7.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="💦" src="1f4a6.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌊" src="1f30a.png"/>',fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍏" src="1f34f.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍎" src="1f34e.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍐" src="1f350.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍊" src="1f34a.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍋" src="1f34b.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍌" src="1f34c.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍉" src="1f349.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍇" src="1f347.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍓" src="1f353.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍈" src="1f348.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍒" src="1f352.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍑" src="1f351.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍍" src="1f34d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥥" src="1f965.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥝" src="1f95d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥭" src="1f96d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥑" src="1f951.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥦" src="1f966.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍅" src="1f345.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍆" src="1f346.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥒" src="1f952.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥕" src="1f955.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌶" src="1f336.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥔" src="1f954.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌽" src="1f33d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥬" src="1f96c.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍠" src="1f360.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥜" src="1f95c.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍯" src="1f36f.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥐" src="1f950.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍞" src="1f35e.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥖" src="1f956.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥯" src="1f96f.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥨" src="1f968.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧀" src="1f9c0.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥚" src="1f95a.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥓" src="1f953.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥩" src="1f969.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥞" src="1f95e.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍗" src="1f357.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍖" src="1f356.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🦴" src="1f9b4.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍤" src="1f364.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍳" src="1f373.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍔" src="1f354.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍟" src="1f35f.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥙" src="1f959.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌭" src="1f32d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍕" src="1f355.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥪" src="1f96a.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥫" src="1f96b.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍝" src="1f35d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌮" src="1f32e.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🌯" src="1f32f.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥗" src="1f957.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥘" src="1f958.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍜" src="1f35c.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍲" src="1f372.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍥" src="1f365.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥠" src="1f960.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍣" src="1f363.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍱" src="1f371.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍛" src="1f35b.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍙" src="1f359.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍚" src="1f35a.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍘" src="1f358.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍢" src="1f362.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍡" src="1f361.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍧" src="1f367.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍨" src="1f368.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍦" src="1f366.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥧" src="1f967.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍰" src="1f370.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧁" src="1f9c1.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥮" src="1f96e.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🎂" src="1f382.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍮" src="1f36e.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍬" src="1f36c.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍭" src="1f36d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍫" src="1f36b.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍿" src="1f37f.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥟" src="1f95f.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍩" src="1f369.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍪" src="1f36a.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥛" src="1f95b.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍺" src="1f37a.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍻" src="1f37b.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥂" src="1f942.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍷" src="1f377.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥃" src="1f943.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍸" src="1f378.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍹" src="1f379.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍾" src="1f37e.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍶" src="1f376.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍵" src="1f375.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥤" src="1f964.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="☕" src="2615.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍼" src="1f37c.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🧂" src="1f9c2.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥄" src="1f944.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍴" src="1f374.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🍽" src="1f37d.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥣" src="1f963.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥡" src="1f961.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥢" src="1f962.png"/>',fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⚽" src="26bd.png"/>',fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🏀" src="1f3c0.png"/>',fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🏈" src="1f3c8.png"/>',fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="⚾" src="26be.png"/>',fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:'<img data-emoticon="true" style="width:1em;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em" draggable="false" alt="🥎" src="1f94e.png"/>',fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'<img data-emoticon="tru
Download .txt
gitextract_bqdxkhyg/

├── .browserslistrc
├── .commitlintrc.js
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .gitconfig
├── .gitignore
├── .npmrc
├── .prettierignore
├── .prettierrc.mjs
├── .stylelintignore
├── LICENSE
├── README.md
├── apps/
│   └── web-antd/
│       ├── Dockerfile
│       ├── docker-compose.yml
│       ├── docker-entrypoint.sh
│       ├── index.html
│       ├── nginx.conf
│       ├── package.json
│       ├── postcss.config.mjs
│       ├── public/
│       │   └── tinymce/
│       │       ├── langs/
│       │       │   ├── README.md
│       │       │   └── zh_CN.js
│       │       ├── plugins/
│       │       │   ├── emoticons/
│       │       │   │   └── js/
│       │       │   │       ├── emojiimages.js
│       │       │   │       └── emojis.js
│       │       │   └── help/
│       │       │       └── js/
│       │       │           └── i18n/
│       │       │               └── keynav/
│       │       │                   ├── ar.js
│       │       │                   ├── bg_BG.js
│       │       │                   ├── ca.js
│       │       │                   ├── cs.js
│       │       │                   ├── da.js
│       │       │                   ├── de.js
│       │       │                   ├── el.js
│       │       │                   ├── en.js
│       │       │                   ├── es.js
│       │       │                   ├── eu.js
│       │       │                   ├── fa.js
│       │       │                   ├── fi.js
│       │       │                   ├── fr_FR.js
│       │       │                   ├── he_IL.js
│       │       │                   ├── hi.js
│       │       │                   ├── hr.js
│       │       │                   ├── hu_HU.js
│       │       │                   ├── id.js
│       │       │                   ├── it.js
│       │       │                   ├── ja.js
│       │       │                   ├── kk.js
│       │       │                   ├── ko_KR.js
│       │       │                   ├── ms.js
│       │       │                   ├── nb_NO.js
│       │       │                   ├── nl.js
│       │       │                   ├── pl.js
│       │       │                   ├── pt_BR.js
│       │       │                   ├── pt_PT.js
│       │       │                   ├── ro.js
│       │       │                   ├── ru.js
│       │       │                   ├── sk.js
│       │       │                   ├── sl_SI.js
│       │       │                   ├── sv_SE.js
│       │       │                   ├── th_TH.js
│       │       │                   ├── tr.js
│       │       │                   ├── uk.js
│       │       │                   ├── vi.js
│       │       │                   ├── zh_CN.js
│       │       │                   └── zh_TW.js
│       │       ├── skins/
│       │       │   ├── content/
│       │       │   │   ├── dark/
│       │       │   │   │   └── content.js
│       │       │   │   ├── default/
│       │       │   │   │   └── content.js
│       │       │   │   ├── document/
│       │       │   │   │   └── content.js
│       │       │   │   ├── tinymce-5/
│       │       │   │   │   └── content.js
│       │       │   │   ├── tinymce-5-dark/
│       │       │   │   │   └── content.js
│       │       │   │   └── writer/
│       │       │   │       └── content.js
│       │       │   └── ui/
│       │       │       ├── oxide/
│       │       │       │   ├── content.inline.js
│       │       │       │   ├── content.js
│       │       │       │   ├── skin.js
│       │       │       │   └── skin.shadowdom.js
│       │       │       ├── oxide-dark/
│       │       │       │   ├── content.inline.js
│       │       │       │   ├── content.js
│       │       │       │   ├── skin.js
│       │       │       │   └── skin.shadowdom.js
│       │       │       ├── tinymce-5/
│       │       │       │   ├── content.inline.js
│       │       │       │   ├── content.js
│       │       │       │   ├── skin.js
│       │       │       │   └── skin.shadowdom.js
│       │       │       └── tinymce-5-dark/
│       │       │           ├── content.inline.js
│       │       │           ├── content.js
│       │       │           ├── skin.js
│       │       │           └── skin.shadowdom.js
│       │       └── tinymce.d.ts
│       ├── src/
│       │   ├── adapter/
│       │   │   ├── component/
│       │   │   │   └── index.ts
│       │   │   ├── form.ts
│       │   │   └── vxe-table.ts
│       │   ├── api/
│       │   │   ├── aiflow/
│       │   │   │   ├── API文档.md
│       │   │   │   ├── adapters.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── runtime.ts
│       │   │   │   └── types.d.ts
│       │   │   ├── chat/
│       │   │   │   ├── chatconfig/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── message/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── model/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── provider/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── common.d.ts
│       │   │   ├── core/
│       │   │   │   ├── auth.ts
│       │   │   │   ├── captcha.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── menu.ts
│       │   │   │   ├── upload.ts
│       │   │   │   └── user.ts
│       │   │   ├── graph/
│       │   │   │   ├── index.ts
│       │   │   │   └── model.d.ts
│       │   │   ├── helper.ts
│       │   │   ├── index.ts
│       │   │   ├── knowledge/
│       │   │   │   ├── attach/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── fragment/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── info/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── mcp/
│       │   │   │   ├── market/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── tool/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── monitor/
│       │   │   │   ├── cache/
│       │   │   │   │   └── index.ts
│       │   │   │   ├── logininfo/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── online/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── operlog/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── operator/
│       │   │   │   └── configurationManage/
│       │   │   │       └── index.ts
│       │   │   ├── request.ts
│       │   │   ├── system/
│       │   │   │   ├── client/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── config/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── dept/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── dict/
│       │   │   │   │   ├── dict-data-model.d.ts
│       │   │   │   │   ├── dict-data.ts
│       │   │   │   │   ├── dict-type-model.d.ts
│       │   │   │   │   ├── dict-type.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── menu/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── notice/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── oss/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── oss-config/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── post/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── profile/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── role/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── social/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── tenant/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   ├── tenant-package/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── model.d.ts
│       │   │   │   └── user/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   ├── tool/
│       │   │   │   └── gen/
│       │   │   │       ├── index.ts
│       │   │   │       └── model.d.ts
│       │   │   └── workflow/
│       │   │       ├── category/
│       │   │       │   ├── index.ts
│       │   │       │   └── model.d.ts
│       │   │       ├── definition/
│       │   │       │   ├── index.ts
│       │   │       │   └── model.d.ts
│       │   │       ├── instance/
│       │   │       │   ├── index.ts
│       │   │       │   └── model.d.ts
│       │   │       ├── spel/
│       │   │       │   ├── index.tsx
│       │   │       │   └── model.d.ts
│       │   │       └── task/
│       │   │           ├── index.ts
│       │   │           └── model.d.ts
│       │   ├── app.vue
│       │   ├── bootstrap.ts
│       │   ├── components/
│       │   │   ├── cropper/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── cropper-avatar.vue
│       │   │   │       ├── cropper-modal.vue
│       │   │   │       ├── cropper.vue
│       │   │   │       └── typing.ts
│       │   │   ├── description/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── description.vue
│       │   │   │       ├── typing.ts
│       │   │   │       └── useDescription.ts
│       │   │   ├── dict/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── data.tsx
│       │   │   │       ├── index.vue
│       │   │   │       └── type.d.ts
│       │   │   ├── global/
│       │   │   │   ├── button.ts
│       │   │   │   ├── index.ts
│       │   │   │   └── slot.ts
│       │   │   ├── table/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── options-tag.vue
│       │   │   │       └── table-switch.vue
│       │   │   ├── tenant-toggle/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       └── index.vue
│       │   │   ├── tinymce/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── editor.vue
│       │   │   │       ├── helper.ts
│       │   │   │       └── tinymce.ts
│       │   │   ├── tree/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── data.tsx
│       │   │   │       ├── helper.tsx
│       │   │   │       ├── hook.tsx
│       │   │   │       ├── menu-select-table.vue
│       │   │   │       └── tree-select-panel.vue
│       │   │   ├── upload/
│       │   │   │   ├── index.ts
│       │   │   │   └── src/
│       │   │   │       ├── file-upload.vue
│       │   │   │       ├── helper.ts
│       │   │   │       ├── hook.ts
│       │   │   │       ├── image-upload.vue
│       │   │   │       ├── note.md
│       │   │   │       └── props.d.ts
│       │   │   └── upload-old/
│       │   │       ├── index.ts
│       │   │       └── src/
│       │   │           ├── file-upload.vue
│       │   │           ├── helper.ts
│       │   │           ├── image-upload.vue
│       │   │           ├── typing.ts
│       │   │           └── use-upload.ts
│       │   ├── layouts/
│       │   │   ├── auth.vue
│       │   │   ├── basic.vue
│       │   │   └── index.ts
│       │   ├── locales/
│       │   │   ├── README.md
│       │   │   ├── index.ts
│       │   │   └── langs/
│       │   │       ├── en-US/
│       │   │       │   ├── component.json
│       │   │       │   ├── demos.json
│       │   │       │   ├── http.json
│       │   │       │   ├── menu.json
│       │   │       │   ├── page.json
│       │   │       │   └── pages.json
│       │   │       └── zh-CN/
│       │   │           ├── component.json
│       │   │           ├── demos.json
│       │   │           ├── http.json
│       │   │           ├── menu.json
│       │   │           ├── page.json
│       │   │           └── pages.json
│       │   ├── main.ts
│       │   ├── packages/
│       │   │   └── workflow-designer/
│       │   │       ├── StandaloneWorkflowDesigner.vue
│       │   │       ├── components/
│       │   │       │   ├── CommonNodeHeader.vue
│       │   │       │   ├── RunDetail.vue
│       │   │       │   ├── RuntimeNodes.vue
│       │   │       │   ├── SvgIcon.vue
│       │   │       │   ├── WfVariableSelector.vue
│       │   │       │   ├── edges/
│       │   │       │   │   ├── CustomEdge.vue
│       │   │       │   │   ├── CustomEdge2.vue
│       │   │       │   │   └── SpecialEdge.vue
│       │   │       │   └── nodes/
│       │   │       │       ├── AnswerNode.vue
│       │   │       │       ├── ClassifierNode.vue
│       │   │       │       ├── Dalle3Node.vue
│       │   │       │       ├── DocumentExtractorNode.vue
│       │   │       │       ├── EndNode.vue
│       │   │       │       ├── FaqExtractorNode.vue
│       │   │       │       ├── GoogleNode.vue
│       │   │       │       ├── HumanFeedbackNode.vue
│       │   │       │       ├── KeywordExtractorNode.vue
│       │   │       │       ├── NodeShell.vue
│       │   │       │       ├── StartNode.vue
│       │   │       │       ├── SwitcherNode.vue
│       │   │       │       ├── TemplateNode.vue
│       │   │       │       ├── TestNode.vue
│       │   │       │       └── TongyiwanxNode.vue
│       │   │       ├── docs/
│       │   │       │   ├── README.md
│       │   │       │   ├── WorkflowDesigner树状架构分析.md
│       │   │       │   ├── WorkflowDesigner详细树状架构.md
│       │   │       │   ├── 图标说明.md
│       │   │       │   └── 流程编排架构说明.md
│       │   │       ├── index.ts
│       │   │       ├── panels/
│       │   │       │   └── RightPanel.vue
│       │   │       ├── properties/
│       │   │       │   ├── AnswerNodeProperty.vue
│       │   │       │   ├── ClassifierNodeProperty.vue
│       │   │       │   ├── GenericNodeProperty.vue
│       │   │       │   ├── KeywordExtractorNodeProperty.vue
│       │   │       │   ├── StartNodeProperty.vue
│       │   │       │   ├── SwitcherNodeProperty.vue
│       │   │       │   ├── TestNodeProperty.vue
│       │   │       │   └── defaults.ts
│       │   │       ├── store/
│       │   │       │   └── index.ts
│       │   │       ├── types/
│       │   │       │   └── index.d.ts
│       │   │       └── utils/
│       │   │           ├── operators.ts
│       │   │           └── workflow-util.ts
│       │   ├── preferences.ts
│       │   ├── router/
│       │   │   ├── access.ts
│       │   │   ├── guard.ts
│       │   │   ├── index.ts
│       │   │   └── routes/
│       │   │       ├── core.ts
│       │   │       ├── index.ts
│       │   │       ├── local.ts
│       │   │       └── modules/
│       │   │           ├── aiflow.ts
│       │   │           ├── dashboard.ts
│       │   │           ├── knowledge.ts
│       │   │           └── vben.ts
│       │   ├── store/
│       │   │   ├── auth.ts
│       │   │   ├── dict.ts
│       │   │   ├── index.ts
│       │   │   ├── notify.ts
│       │   │   └── tenant.ts
│       │   ├── upload-tip.ts
│       │   ├── utils/
│       │   │   ├── dict.ts
│       │   │   ├── file/
│       │   │   │   ├── base64Conver.ts
│       │   │   │   ├── download.ts
│       │   │   │   └── index.ts
│       │   │   ├── message.ts
│       │   │   ├── modal.tsx
│       │   │   ├── popup.ts
│       │   │   └── render.tsx
│       │   └── views/
│       │       ├── _core/
│       │       │   ├── README.md
│       │       │   ├── about/
│       │       │   │   └── index.vue
│       │       │   ├── authentication/
│       │       │   │   ├── code-login.vue
│       │       │   │   ├── forget-password.vue
│       │       │   │   ├── login.vue
│       │       │   │   ├── oauth-login.vue
│       │       │   │   ├── qrcode-login.vue
│       │       │   │   └── register.vue
│       │       │   ├── fallback/
│       │       │   │   ├── coming-soon.vue
│       │       │   │   ├── forbidden.vue
│       │       │   │   ├── internal-error.vue
│       │       │   │   ├── not-found.vue
│       │       │   │   └── offline.vue
│       │       │   ├── oauth-common.ts
│       │       │   ├── profile/
│       │       │   │   ├── components/
│       │       │   │   │   ├── account-bind.vue
│       │       │   │   │   ├── base-setting.vue
│       │       │   │   │   ├── online-device.vue
│       │       │   │   │   └── secure-setting.vue
│       │       │   │   ├── index.vue
│       │       │   │   ├── mitt.ts
│       │       │   │   ├── profile-panel.vue
│       │       │   │   └── setting-panel.vue
│       │       │   └── social-callback/
│       │       │       └── index.vue
│       │       ├── aiflow/
│       │       │   ├── README.md
│       │       │   ├── data.ts
│       │       │   ├── edit.vue
│       │       │   ├── index.vue
│       │       │   ├── run.vue
│       │       │   └── workflow-modal.vue
│       │       ├── chat/
│       │       │   ├── message/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── message-modal.vue
│       │       │   ├── model/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── model-modal.vue
│       │       │   └── provider/
│       │       │       ├── data.ts
│       │       │       ├── index.vue
│       │       │       ├── options.ts
│       │       │       └── provider-modal.vue
│       │       ├── dashboard/
│       │       │   ├── analytics/
│       │       │   │   ├── analytics-trends.vue
│       │       │   │   ├── analytics-visits-data.vue
│       │       │   │   ├── analytics-visits-sales.vue
│       │       │   │   ├── analytics-visits-source.vue
│       │       │   │   ├── analytics-visits.vue
│       │       │   │   └── index.vue
│       │       │   └── workspace/
│       │       │       └── index.vue
│       │       ├── knowledge/
│       │       │   ├── attach/
│       │       │   │   ├── attach-modal.vue
│       │       │   │   ├── data.ts
│       │       │   │   └── index.vue
│       │       │   ├── fragment/
│       │       │   │   ├── data.ts
│       │       │   │   ├── fragment-modal.vue
│       │       │   │   └── index.vue
│       │       │   └── info/
│       │       │       ├── components/
│       │       │       │   └── KnowledgeAddModal.vue
│       │       │       ├── data.ts
│       │       │       ├── detail/
│       │       │       │   ├── components/
│       │       │       │   │   ├── FileManagement.vue
│       │       │       │   │   ├── KnowledgeConfig.vue
│       │       │       │   │   └── RetrievalTest.vue
│       │       │       │   └── index.vue
│       │       │       ├── index.vue
│       │       │       ├── info-drawer.vue
│       │       │       └── info-modal.vue
│       │       ├── mcp/
│       │       │   ├── market/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── market-drawer.vue
│       │       │   └── tool/
│       │       │       ├── data.tsx
│       │       │       ├── index.vue
│       │       │       └── tool-drawer.vue
│       │       ├── monitor/
│       │       │   ├── admin/
│       │       │   │   └── index.vue
│       │       │   ├── cache/
│       │       │   │   ├── components/
│       │       │   │   │   ├── command-chart.vue
│       │       │   │   │   ├── index.ts
│       │       │   │   │   ├── memory-chart.vue
│       │       │   │   │   └── redis-description.vue
│       │       │   │   └── index.vue
│       │       │   ├── logininfor/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── login-info-modal.vue
│       │       │   ├── online/
│       │       │   │   ├── data.ts
│       │       │   │   └── index.vue
│       │       │   ├── operlog/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── operation-preview-drawer.vue
│       │       │   └── snailjob/
│       │       │       └── index.vue
│       │       ├── nodeManage/
│       │       │   ├── data.ts
│       │       │   ├── index.d.ts
│       │       │   ├── index.vue
│       │       │   └── modal.vue
│       │       ├── system/
│       │       │   ├── client/
│       │       │   │   ├── client-drawer.vue
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── secret-input.vue
│       │       │   ├── config/
│       │       │   │   ├── config-modal.vue
│       │       │   │   ├── data.ts
│       │       │   │   └── index.vue
│       │       │   ├── dept/
│       │       │   │   ├── data.ts
│       │       │   │   ├── dept-drawer.vue
│       │       │   │   └── index.vue
│       │       │   ├── dict/
│       │       │   │   ├── data/
│       │       │   │   │   ├── data.ts
│       │       │   │   │   ├── dict-data-drawer.vue
│       │       │   │   │   ├── index.vue
│       │       │   │   │   └── tag-style-picker.vue
│       │       │   │   ├── data.vue
│       │       │   │   ├── index.vue
│       │       │   │   ├── mitt.ts
│       │       │   │   └── type/
│       │       │   │       ├── data.ts
│       │       │   │       ├── dict-type-modal.vue
│       │       │   │       ├── index-refactor.vue
│       │       │   │       └── index.vue
│       │       │   ├── menu/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── menu-drawer.vue
│       │       │   ├── notice/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── notice-modal.vue
│       │       │   ├── oss/
│       │       │   │   ├── config.vue
│       │       │   │   ├── constant.ts
│       │       │   │   ├── data.tsx
│       │       │   │   ├── fallback-image.txt
│       │       │   │   ├── file-upload-modal.vue
│       │       │   │   ├── image-upload-modal.vue
│       │       │   │   └── index.vue
│       │       │   ├── oss-config/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── oss-config-drawer.vue
│       │       │   ├── post/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── post-drawer.vue
│       │       │   ├── role/
│       │       │   │   ├── authUser.vue
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   ├── role-auth-modal.vue
│       │       │   │   └── role-drawer.vue
│       │       │   ├── role-assign/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── role-assign-drawer.vue
│       │       │   ├── tenant/
│       │       │   │   ├── data.tsx
│       │       │   │   ├── index.vue
│       │       │   │   └── tenant-drawer.vue
│       │       │   ├── tenantPackage/
│       │       │   │   ├── data.ts
│       │       │   │   ├── index.vue
│       │       │   │   └── tenant-package-drawer.vue
│       │       │   └── user/
│       │       │       ├── authRole.vue
│       │       │       ├── data.tsx
│       │       │       ├── dept-tree.vue
│       │       │       ├── index.vue
│       │       │       ├── user-drawer.vue
│       │       │       ├── user-import-modal.vue
│       │       │       ├── user-info-modal.vue
│       │       │       └── user-reset-pwd-modal.vue
│       │       ├── tool/
│       │       │   └── gen/
│       │       │       ├── code-preview-modal.vue
│       │       │       ├── data.tsx
│       │       │       ├── edit-gen.vue
│       │       │       ├── edit-steps/
│       │       │       │   ├── basic-setting.vue
│       │       │       │   ├── basic.tsx
│       │       │       │   ├── gen-config.vue
│       │       │       │   ├── gen-data.tsx
│       │       │       │   └── index.ts
│       │       │       ├── editTable.vue
│       │       │       ├── index.vue
│       │       │       └── table-import-modal.vue
│       │       └── workflow/
│       │           ├── category/
│       │           │   ├── category-modal.vue
│       │           │   ├── data.ts
│       │           │   └── index.vue
│       │           ├── components/
│       │           │   ├── actions/
│       │           │   │   ├── flow-actions.vue
│       │           │   │   └── index.ts
│       │           │   ├── apply-modal.vue
│       │           │   ├── approval-card.vue
│       │           │   ├── approval-content.vue
│       │           │   ├── approval-details.vue
│       │           │   ├── approval-modal.vue
│       │           │   ├── approval-panel.vue
│       │           │   ├── approval-rejection-modal.vue
│       │           │   ├── approval-timeline-item.vue
│       │           │   ├── approval-timeline.vue
│       │           │   ├── copy-component.vue
│       │           │   ├── flow-designer.vue
│       │           │   ├── flow-info-modal.vue
│       │           │   ├── flow-interfere-modal.vue
│       │           │   ├── flow-preview.vue
│       │           │   ├── helper.tsx
│       │           │   ├── hook.ts
│       │           │   ├── index.ts
│       │           │   ├── type.d.ts
│       │           │   └── user-select-modal.vue
│       │           ├── leave/
│       │           │   ├── api/
│       │           │   │   ├── index.ts
│       │           │   │   └── model.d.ts
│       │           │   ├── data.tsx
│       │           │   ├── hook.ts
│       │           │   ├── index.vue
│       │           │   ├── leave-description.vue
│       │           │   ├── leave-drawer.vue
│       │           │   ├── leave-form.vue
│       │           │   └── leaveEdit.vue
│       │           ├── processDefinition/
│       │           │   ├── category-tree.vue
│       │           │   ├── constant.ts
│       │           │   ├── data.tsx
│       │           │   ├── design.vue
│       │           │   ├── index.vue
│       │           │   ├── process-definition-deploy-modal.vue
│       │           │   └── process-definition-modal.vue
│       │           ├── processInstance/
│       │           │   ├── data.tsx
│       │           │   ├── index.vue
│       │           │   ├── instance-invalid-modal.vue
│       │           │   └── instance-variable-modal.vue
│       │           ├── register.ts
│       │           ├── spel/
│       │           │   ├── common.ts
│       │           │   ├── data.tsx
│       │           │   ├── index.vue
│       │           │   ├── spel-drawer.vue
│       │           │   └── spel-previewer.vue
│       │           └── task/
│       │               ├── allTaskWaiting.vue
│       │               ├── constant.ts
│       │               ├── myDocument.vue
│       │               ├── taskCopyList.vue
│       │               ├── taskFinish.vue
│       │               └── taskWaiting.vue
│       ├── tailwind.config.mjs
│       ├── tsconfig.json
│       ├── tsconfig.node.json
│       ├── types/
│       │   ├── directive.d.ts
│       │   └── global-components.d.ts
│       └── vite.config.mts
├── docker-compose-all.yaml
├── eslint.config.mjs
├── internal/
│   ├── lint-configs/
│   │   ├── commitlint-config/
│   │   │   ├── index.mjs
│   │   │   └── package.json
│   │   ├── eslint-config/
│   │   │   ├── build.config.ts
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── configs/
│   │   │   │   │   ├── command.ts
│   │   │   │   │   ├── comments.ts
│   │   │   │   │   ├── disableds.ts
│   │   │   │   │   ├── ignores.ts
│   │   │   │   │   ├── import.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── javascript.ts
│   │   │   │   │   ├── jsdoc.ts
│   │   │   │   │   ├── jsonc.ts
│   │   │   │   │   ├── node.ts
│   │   │   │   │   ├── perfectionist.ts
│   │   │   │   │   ├── prettier.ts
│   │   │   │   │   ├── regexp.ts
│   │   │   │   │   ├── test.ts
│   │   │   │   │   ├── turbo.ts
│   │   │   │   │   ├── typescript.ts
│   │   │   │   │   ├── unicorn.ts
│   │   │   │   │   └── vue.ts
│   │   │   │   ├── custom-config.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── util.ts
│   │   │   └── tsconfig.json
│   │   ├── prettier-config/
│   │   │   ├── index.mjs
│   │   │   └── package.json
│   │   └── stylelint-config/
│   │       ├── index.mjs
│   │       └── package.json
│   ├── node-utils/
│   │   ├── build.config.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── __tests__/
│   │   │   │   ├── hash.test.ts
│   │   │   │   └── path.test.ts
│   │   │   ├── constants.ts
│   │   │   ├── date.ts
│   │   │   ├── fs.ts
│   │   │   ├── git.ts
│   │   │   ├── hash.ts
│   │   │   ├── index.ts
│   │   │   ├── monorepo.ts
│   │   │   ├── path.ts
│   │   │   ├── prettier.ts
│   │   │   └── spinner.ts
│   │   └── tsconfig.json
│   ├── tailwind-config/
│   │   ├── build.config.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   ├── module.d.ts
│   │   │   ├── plugins/
│   │   │   │   └── entry.ts
│   │   │   └── postcss.config.ts
│   │   └── tsconfig.json
│   ├── tsconfig/
│   │   ├── base.json
│   │   ├── library.json
│   │   ├── node.json
│   │   ├── package.json
│   │   ├── web-app.json
│   │   └── web.json
│   └── vite-config/
│       ├── build.config.ts
│       ├── package.json
│       ├── src/
│       │   ├── config/
│       │   │   ├── application.ts
│       │   │   ├── common.ts
│       │   │   ├── index.ts
│       │   │   └── library.ts
│       │   ├── index.ts
│       │   ├── options.ts
│       │   ├── plugins/
│       │   │   ├── archiver.ts
│       │   │   ├── extra-app-config.ts
│       │   │   ├── importmap.ts
│       │   │   ├── index.ts
│       │   │   ├── inject-app-loading/
│       │   │   │   ├── README.md
│       │   │   │   ├── default-loading-antd.html
│       │   │   │   ├── default-loading.html
│       │   │   │   └── index.ts
│       │   │   ├── inject-metadata.ts
│       │   │   ├── license.ts
│       │   │   ├── nitro-mock.ts
│       │   │   ├── print.ts
│       │   │   └── vxe-table.ts
│       │   ├── typing.ts
│       │   └── utils/
│       │       └── env.ts
│       └── tsconfig.json
├── package.json
├── packages/
│   ├── @core/
│   │   ├── README.md
│   │   ├── base/
│   │   │   ├── README.md
│   │   │   ├── design/
│   │   │   │   ├── package.json
│   │   │   │   ├── src/
│   │   │   │   │   ├── css/
│   │   │   │   │   │   ├── global.css
│   │   │   │   │   │   ├── nprogress.css
│   │   │   │   │   │   ├── transition.css
│   │   │   │   │   │   └── ui.css
│   │   │   │   │   ├── design-tokens/
│   │   │   │   │   │   ├── dark.css
│   │   │   │   │   │   ├── default.css
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── scss-bem/
│   │   │   │   │       ├── bem.scss
│   │   │   │   │       └── constants.scss
│   │   │   │   ├── tsconfig.json
│   │   │   │   └── vite.config.mts
│   │   │   ├── icons/
│   │   │   │   ├── build.config.ts
│   │   │   │   ├── package.json
│   │   │   │   ├── src/
│   │   │   │   │   ├── create-icon.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── lucide.ts
│   │   │   │   └── tsconfig.json
│   │   │   ├── shared/
│   │   │   │   ├── build.config.ts
│   │   │   │   ├── package.json
│   │   │   │   ├── src/
│   │   │   │   │   ├── cache/
│   │   │   │   │   │   ├── __tests__/
│   │   │   │   │   │   │   └── storage-manager.test.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── storage-manager.ts
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── color/
│   │   │   │   │   │   ├── __tests__/
│   │   │   │   │   │   │   └── convert.test.ts
│   │   │   │   │   │   ├── color.ts
│   │   │   │   │   │   ├── convert.ts
│   │   │   │   │   │   ├── generator.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── constants/
│   │   │   │   │   │   ├── dict-enum.ts
│   │   │   │   │   │   ├── globals.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── vben.ts
│   │   │   │   │   ├── global-state.ts
│   │   │   │   │   ├── store.ts
│   │   │   │   │   └── utils/
│   │   │   │   │       ├── __tests__/
│   │   │   │   │       │   ├── diff.test.ts
│   │   │   │   │       │   ├── dom.test.ts
│   │   │   │   │       │   ├── inference.test.ts
│   │   │   │   │       │   ├── letter.test.ts
│   │   │   │   │       │   ├── resources.test.ts
│   │   │   │   │       │   ├── state-handler.test.ts
│   │   │   │   │       │   ├── tree.test.ts
│   │   │   │   │       │   ├── unique.test.ts
│   │   │   │   │       │   ├── update-css-variables.test.ts
│   │   │   │   │       │   ├── util.test.ts
│   │   │   │   │       │   └── window.test.ts
│   │   │   │   │       ├── cn.ts
│   │   │   │   │       ├── date.ts
│   │   │   │   │       ├── diff.ts
│   │   │   │   │       ├── dom.ts
│   │   │   │   │       ├── download.ts
│   │   │   │   │       ├── index.ts
│   │   │   │   │       ├── inference.ts
│   │   │   │   │       ├── letter.ts
│   │   │   │   │       ├── merge.ts
│   │   │   │   │       ├── nprogress.ts
│   │   │   │   │       ├── resources.ts
│   │   │   │   │       ├── state-handler.ts
│   │   │   │   │       ├── to.ts
│   │   │   │   │       ├── tree.ts
│   │   │   │   │       ├── unique.ts
│   │   │   │   │       ├── update-css-variables.ts
│   │   │   │   │       ├── util.ts
│   │   │   │   │       └── window.ts
│   │   │   │   └── tsconfig.json
│   │   │   └── typings/
│   │   │       ├── build.config.ts
│   │   │       ├── package.json
│   │   │       ├── src/
│   │   │       │   ├── app.d.ts
│   │   │       │   ├── basic.d.ts
│   │   │       │   ├── helper.d.ts
│   │   │       │   ├── index.ts
│   │   │       │   ├── menu-record.ts
│   │   │       │   ├── tabs.ts
│   │   │       │   └── vue-router.d.ts
│   │   │       ├── tsconfig.json
│   │   │       └── vue-router.d.ts
│   │   ├── composables/
│   │   │   ├── build.config.ts
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── __tests__/
│   │   │   │   │   └── use-sortable.test.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── use-is-mobile.ts
│   │   │   │   ├── use-layout-style.ts
│   │   │   │   ├── use-namespace.ts
│   │   │   │   ├── use-priority-value.ts
│   │   │   │   ├── use-scroll-lock.ts
│   │   │   │   ├── use-simple-locale/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── messages.ts
│   │   │   │   └── use-sortable.ts
│   │   │   └── tsconfig.json
│   │   ├── preferences/
│   │   │   ├── __tests__/
│   │   │   │   ├── __snapshots__/
│   │   │   │   │   └── config.test.ts.snap
│   │   │   │   ├── config.test.ts
│   │   │   │   └── preferences.test.ts
│   │   │   ├── build.config.ts
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── config.ts
│   │   │   │   ├── constants.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── preferences.ts
│   │   │   │   ├── types.ts
│   │   │   │   ├── update-css-variables.ts
│   │   │   │   └── use-preferences.ts
│   │   │   └── tsconfig.json
│   │   └── ui-kit/
│   │       ├── README.md
│   │       ├── form-ui/
│   │       │   ├── __tests__/
│   │       │   │   └── form-api.test.ts
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   └── form-actions.vue
│   │       │   │   ├── config.ts
│   │       │   │   ├── form-api.ts
│   │       │   │   ├── form-render/
│   │       │   │   │   ├── context.ts
│   │       │   │   │   ├── dependencies.ts
│   │       │   │   │   ├── expandable.ts
│   │       │   │   │   ├── form-field.vue
│   │       │   │   │   ├── form-label.vue
│   │       │   │   │   ├── form.vue
│   │       │   │   │   ├── helper.ts
│   │       │   │   │   └── index.ts
│   │       │   │   ├── index.ts
│   │       │   │   ├── types.ts
│   │       │   │   ├── use-form-context.ts
│   │       │   │   ├── use-vben-form.ts
│   │       │   │   ├── vben-form.vue
│   │       │   │   └── vben-use-form.vue
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── layout-ui/
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── layout-content.vue
│   │       │   │   │   ├── layout-footer.vue
│   │       │   │   │   ├── layout-header.vue
│   │       │   │   │   ├── layout-sidebar.vue
│   │       │   │   │   ├── layout-tabbar.vue
│   │       │   │   │   └── widgets/
│   │       │   │   │       ├── index.ts
│   │       │   │   │       ├── sidebar-collapse-button.vue
│   │       │   │   │       └── sidebar-fixed-button.vue
│   │       │   │   ├── hooks/
│   │       │   │   │   └── use-layout.ts
│   │       │   │   ├── index.ts
│   │       │   │   ├── vben-layout.ts
│   │       │   │   └── vben-layout.vue
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── menu-ui/
│   │       │   ├── README.md
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   ├── collapse-transition.vue
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── menu-badge-dot.vue
│   │       │   │   │   ├── menu-badge.vue
│   │       │   │   │   ├── menu-item.vue
│   │       │   │   │   ├── menu.vue
│   │       │   │   │   ├── normal-menu/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── normal-menu.ts
│   │       │   │   │   │   └── normal-menu.vue
│   │       │   │   │   ├── sub-menu-content.vue
│   │       │   │   │   └── sub-menu.vue
│   │       │   │   ├── hooks/
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── use-menu-context.ts
│   │       │   │   │   ├── use-menu-scroll.ts
│   │       │   │   │   └── use-menu.ts
│   │       │   │   ├── index.ts
│   │       │   │   ├── menu.vue
│   │       │   │   ├── sub-menu.vue
│   │       │   │   ├── types.ts
│   │       │   │   └── utils/
│   │       │   │       └── index.ts
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── popup-ui/
│   │       │   ├── build.config.ts
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── alert/
│   │       │   │   │   ├── AlertBuilder.ts
│   │       │   │   │   ├── alert.ts
│   │       │   │   │   ├── alert.vue
│   │       │   │   │   └── index.ts
│   │       │   │   ├── drawer/
│   │       │   │   │   ├── __tests__/
│   │       │   │   │   │   └── drawer-api.test.ts
│   │       │   │   │   ├── drawer-api.ts
│   │       │   │   │   ├── drawer.ts
│   │       │   │   │   ├── drawer.vue
│   │       │   │   │   ├── index.ts
│   │       │   │   │   └── use-drawer.ts
│   │       │   │   ├── index.ts
│   │       │   │   └── modal/
│   │       │   │       ├── __tests__/
│   │       │   │       │   └── modal-api.test.ts
│   │       │   │       ├── index.ts
│   │       │   │       ├── modal-api.ts
│   │       │   │       ├── modal.ts
│   │       │   │       ├── modal.vue
│   │       │   │       ├── use-modal-draggable.ts
│   │       │   │       └── use-modal.ts
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       ├── shadcn-ui/
│   │       │   ├── build.config.ts
│   │       │   ├── components.json
│   │       │   ├── package.json
│   │       │   ├── postcss.config.mjs
│   │       │   ├── src/
│   │       │   │   ├── components/
│   │       │   │   │   ├── avatar/
│   │       │   │   │   │   ├── avatar.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── back-top/
│   │       │   │   │   │   ├── back-top.vue
│   │       │   │   │   │   ├── backtop.ts
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── use-backtop.ts
│   │       │   │   │   ├── breadcrumb/
│   │       │   │   │   │   ├── breadcrumb-background.vue
│   │       │   │   │   │   ├── breadcrumb-view.vue
│   │       │   │   │   │   ├── breadcrumb.vue
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── types.ts
│   │       │   │   │   ├── button/
│   │       │   │   │   │   ├── button-group.vue
│   │       │   │   │   │   ├── button.ts
│   │       │   │   │   │   ├── button.vue
│   │       │   │   │   │   ├── check-button-group.vue
│   │       │   │   │   │   ├── icon-button.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── checkbox/
│   │       │   │   │   │   ├── checkbox.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── context-menu/
│   │       │   │   │   │   ├── context-menu.vue
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── interface.ts
│   │       │   │   │   ├── count-to-animator/
│   │       │   │   │   │   ├── count-to-animator.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── dropdown-menu/
│   │       │   │   │   │   ├── dropdown-menu.vue
│   │       │   │   │   │   ├── dropdown-radio-menu.vue
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── interface.ts
│   │       │   │   │   ├── expandable-arrow/
│   │       │   │   │   │   ├── expandable-arrow.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── full-screen/
│   │       │   │   │   │   ├── full-screen.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── hover-card/
│   │       │   │   │   │   ├── hover-card.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── icon/
│   │       │   │   │   │   ├── icon.vue
│   │       │   │   │   │   └── index.ts
│   │       │   │   │   ├── index.ts
│   │       │   │   │   ├── input-captcha/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── input-captcha.vue
│   │       │   │   │   ├── input-password/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── input-password.vue
│   │       │   │   │   │   └── password-strength.vue
│   │       │   │   │   ├── logo/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── logo.vue
│   │       │   │   │   ├── pin-input/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── input.vue
│   │       │   │   │   │   └── types.ts
│   │       │   │   │   ├── popover/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── popover.vue
│   │       │   │   │   ├── render-content/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── render-content.vue
│   │       │   │   │   ├── scrollbar/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── scrollbar.vue
│   │       │   │   │   ├── segmented/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── segmented.vue
│   │       │   │   │   │   ├── tabs-indicator.vue
│   │       │   │   │   │   └── types.ts
│   │       │   │   │   ├── select/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── select.vue
│   │       │   │   │   ├── spine-text/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   └── spine-text.vue
│   │       │   │   │   ├── spinner/
│   │       │   │   │   │   ├── index.ts
│   │       │   │   │   │   ├── loading.vue
│   │       │   │   │   │   └── spinner.vue
│   │       │   │   │   └── tooltip/
│   │       │   │   │       ├── help-tooltip.vue
│   │       │   │   │       ├── index.ts
│   │       │   │   │       └── tooltip.vue
│   │       │   │   ├── index.ts
│   │       │   │   └── ui/
│   │       │   │       ├── accordion/
│   │       │   │       │   ├── Accordion.vue
│   │       │   │       │   ├── AccordionContent.vue
│   │       │   │       │   ├── AccordionItem.vue
│   │       │   │       │   ├── AccordionTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── alert-dialog/
│   │       │   │       │   ├── AlertDialog.vue
│   │       │   │       │   ├── AlertDialogAction.vue
│   │       │   │       │   ├── AlertDialogCancel.vue
│   │       │   │       │   ├── AlertDialogContent.vue
│   │       │   │       │   ├── AlertDialogDescription.vue
│   │       │   │       │   ├── AlertDialogOverlay.vue
│   │       │   │       │   ├── AlertDialogTitle.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── avatar/
│   │       │   │       │   ├── Avatar.vue
│   │       │   │       │   ├── AvatarFallback.vue
│   │       │   │       │   ├── AvatarImage.vue
│   │       │   │       │   ├── avatar.ts
│   │       │   │       │   └── index.ts
│   │       │   │       ├── badge/
│   │       │   │       │   ├── Badge.vue
│   │       │   │       │   ├── badge.ts
│   │       │   │       │   └── index.ts
│   │       │   │       ├── breadcrumb/
│   │       │   │       │   ├── Breadcrumb.vue
│   │       │   │       │   ├── BreadcrumbEllipsis.vue
│   │       │   │       │   ├── BreadcrumbItem.vue
│   │       │   │       │   ├── BreadcrumbLink.vue
│   │       │   │       │   ├── BreadcrumbList.vue
│   │       │   │       │   ├── BreadcrumbPage.vue
│   │       │   │       │   ├── BreadcrumbSeparator.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── button/
│   │       │   │       │   ├── Button.vue
│   │       │   │       │   ├── button.ts
│   │       │   │       │   ├── index.ts
│   │       │   │       │   └── types.ts
│   │       │   │       ├── card/
│   │       │   │       │   ├── Card.vue
│   │       │   │       │   ├── CardContent.vue
│   │       │   │       │   ├── CardDescription.vue
│   │       │   │       │   ├── CardFooter.vue
│   │       │   │       │   ├── CardHeader.vue
│   │       │   │       │   ├── CardTitle.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── checkbox/
│   │       │   │       │   ├── Checkbox.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── context-menu/
│   │       │   │       │   ├── ContextMenu.vue
│   │       │   │       │   ├── ContextMenuCheckboxItem.vue
│   │       │   │       │   ├── ContextMenuContent.vue
│   │       │   │       │   ├── ContextMenuGroup.vue
│   │       │   │       │   ├── ContextMenuItem.vue
│   │       │   │       │   ├── ContextMenuLabel.vue
│   │       │   │       │   ├── ContextMenuPortal.vue
│   │       │   │       │   ├── ContextMenuRadioGroup.vue
│   │       │   │       │   ├── ContextMenuRadioItem.vue
│   │       │   │       │   ├── ContextMenuSeparator.vue
│   │       │   │       │   ├── ContextMenuShortcut.vue
│   │       │   │       │   ├── ContextMenuSub.vue
│   │       │   │       │   ├── ContextMenuSubContent.vue
│   │       │   │       │   ├── ContextMenuSubTrigger.vue
│   │       │   │       │   ├── ContextMenuTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── dialog/
│   │       │   │       │   ├── Dialog.vue
│   │       │   │       │   ├── DialogClose.vue
│   │       │   │       │   ├── DialogContent.vue
│   │       │   │       │   ├── DialogDescription.vue
│   │       │   │       │   ├── DialogFooter.vue
│   │       │   │       │   ├── DialogHeader.vue
│   │       │   │       │   ├── DialogOverlay.vue
│   │       │   │       │   ├── DialogScrollContent.vue
│   │       │   │       │   ├── DialogTitle.vue
│   │       │   │       │   ├── DialogTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── dropdown-menu/
│   │       │   │       │   ├── DropdownMenu.vue
│   │       │   │       │   ├── DropdownMenuCheckboxItem.vue
│   │       │   │       │   ├── DropdownMenuContent.vue
│   │       │   │       │   ├── DropdownMenuGroup.vue
│   │       │   │       │   ├── DropdownMenuItem.vue
│   │       │   │       │   ├── DropdownMenuLabel.vue
│   │       │   │       │   ├── DropdownMenuRadioGroup.vue
│   │       │   │       │   ├── DropdownMenuRadioItem.vue
│   │       │   │       │   ├── DropdownMenuSeparator.vue
│   │       │   │       │   ├── DropdownMenuShortcut.vue
│   │       │   │       │   ├── DropdownMenuSub.vue
│   │       │   │       │   ├── DropdownMenuSubContent.vue
│   │       │   │       │   ├── DropdownMenuSubTrigger.vue
│   │       │   │       │   ├── DropdownMenuTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── form/
│   │       │   │       │   ├── FormControl.vue
│   │       │   │       │   ├── FormDescription.vue
│   │       │   │       │   ├── FormItem.vue
│   │       │   │       │   ├── FormLabel.vue
│   │       │   │       │   ├── FormMessage.vue
│   │       │   │       │   ├── index.ts
│   │       │   │       │   ├── injectionKeys.ts
│   │       │   │       │   └── useFormField.ts
│   │       │   │       ├── hover-card/
│   │       │   │       │   ├── HoverCard.vue
│   │       │   │       │   ├── HoverCardContent.vue
│   │       │   │       │   ├── HoverCardTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── index.ts
│   │       │   │       ├── input/
│   │       │   │       │   ├── Input.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── label/
│   │       │   │       │   ├── Label.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── number-field/
│   │       │   │       │   ├── NumberField.vue
│   │       │   │       │   ├── NumberFieldContent.vue
│   │       │   │       │   ├── NumberFieldDecrement.vue
│   │       │   │       │   ├── NumberFieldIncrement.vue
│   │       │   │       │   ├── NumberFieldInput.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── pagination/
│   │       │   │       │   ├── PaginationEllipsis.vue
│   │       │   │       │   ├── PaginationFirst.vue
│   │       │   │       │   ├── PaginationLast.vue
│   │       │   │       │   ├── PaginationNext.vue
│   │       │   │       │   ├── PaginationPrev.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── pin-input/
│   │       │   │       │   ├── PinInput.vue
│   │       │   │       │   ├── PinInputGroup.vue
│   │       │   │       │   ├── PinInputInput.vue
│   │       │   │       │   ├── PinInputSeparator.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── popover/
│   │       │   │       │   ├── Popover.vue
│   │       │   │       │   ├── PopoverContent.vue
│   │       │   │       │   ├── PopoverTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── radio-group/
│   │       │   │       │   ├── RadioGroup.vue
│   │       │   │       │   ├── RadioGroupItem.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── resizable/
│   │       │   │       │   ├── ResizableHandle.vue
│   │       │   │       │   ├── ResizablePanelGroup.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── scroll-area/
│   │       │   │       │   ├── ScrollArea.vue
│   │       │   │       │   ├── ScrollBar.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── select/
│   │       │   │       │   ├── Select.vue
│   │       │   │       │   ├── SelectContent.vue
│   │       │   │       │   ├── SelectGroup.vue
│   │       │   │       │   ├── SelectItem.vue
│   │       │   │       │   ├── SelectItemText.vue
│   │       │   │       │   ├── SelectLabel.vue
│   │       │   │       │   ├── SelectScrollDownButton.vue
│   │       │   │       │   ├── SelectScrollUpButton.vue
│   │       │   │       │   ├── SelectSeparator.vue
│   │       │   │       │   ├── SelectTrigger.vue
│   │       │   │       │   ├── SelectValue.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── separator/
│   │       │   │       │   ├── Separator.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── sheet/
│   │       │   │       │   ├── Sheet.vue
│   │       │   │       │   ├── SheetClose.vue
│   │       │   │       │   ├── SheetContent.vue
│   │       │   │       │   ├── SheetDescription.vue
│   │       │   │       │   ├── SheetFooter.vue
│   │       │   │       │   ├── SheetHeader.vue
│   │       │   │       │   ├── SheetOverlay.vue
│   │       │   │       │   ├── SheetTitle.vue
│   │       │   │       │   ├── SheetTrigger.vue
│   │       │   │       │   ├── index.ts
│   │       │   │       │   └── sheet.ts
│   │       │   │       ├── switch/
│   │       │   │       │   ├── Switch.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── tabs/
│   │       │   │       │   ├── Tabs.vue
│   │       │   │       │   ├── TabsContent.vue
│   │       │   │       │   ├── TabsList.vue
│   │       │   │       │   ├── TabsTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── textarea/
│   │       │   │       │   ├── Textarea.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── toggle/
│   │       │   │       │   ├── Toggle.vue
│   │       │   │       │   ├── index.ts
│   │       │   │       │   └── toggle.ts
│   │       │   │       ├── toggle-group/
│   │       │   │       │   ├── ToggleGroup.vue
│   │       │   │       │   ├── ToggleGroupItem.vue
│   │       │   │       │   └── index.ts
│   │       │   │       ├── tooltip/
│   │       │   │       │   ├── Tooltip.vue
│   │       │   │       │   ├── TooltipContent.vue
│   │       │   │       │   ├── TooltipProvider.vue
│   │       │   │       │   ├── TooltipTrigger.vue
│   │       │   │       │   └── index.ts
│   │       │   │       └── tree/
│   │       │   │           ├── index.ts
│   │       │   │           ├── tree.vue
│   │       │   │           └── types.ts
│   │       │   ├── tailwind.config.mjs
│   │       │   └── tsconfig.json
│   │       └── tabs-ui/
│   │           ├── build.config.ts
│   │           ├── package.json
│   │           ├── postcss.config.mjs
│   │           ├── src/
│   │           │   ├── components/
│   │           │   │   ├── index.ts
│   │           │   │   ├── tabs/
│   │           │   │   │   └── tabs.vue
│   │           │   │   ├── tabs-chrome/
│   │           │   │   │   └── tabs.vue
│   │           │   │   └── widgets/
│   │           │   │       ├── index.ts
│   │           │   │       ├── tool-more.vue
│   │           │   │       └── tool-screen.vue
│   │           │   ├── index.ts
│   │           │   ├── tabs-view.vue
│   │           │   ├── types.ts
│   │           │   ├── use-tabs-drag.ts
│   │           │   └── use-tabs-view-scroll.ts
│   │           ├── tailwind.config.mjs
│   │           └── tsconfig.json
│   ├── constants/
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── core.ts
│   │   │   └── index.ts
│   │   └── tsconfig.json
│   ├── effects/
│   │   ├── README.md
│   │   ├── access/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── access-control.vue
│   │   │   │   ├── accessible.ts
│   │   │   │   ├── directive.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── use-access.ts
│   │   │   └── tsconfig.json
│   │   ├── common-ui/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── components/
│   │   │   │   │   ├── api-component/
│   │   │   │   │   │   ├── api-component.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── captcha/
│   │   │   │   │   │   ├── hooks/
│   │   │   │   │   │   │   └── useCaptchaPoints.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── point-selection-captcha/
│   │   │   │   │   │   │   ├── index.vue
│   │   │   │   │   │   │   └── point-selection-captcha-card.vue
│   │   │   │   │   │   ├── slider-captcha/
│   │   │   │   │   │   │   ├── index.vue
│   │   │   │   │   │   │   ├── slider-captcha-action.vue
│   │   │   │   │   │   │   ├── slider-captcha-bar.vue
│   │   │   │   │   │   │   └── slider-captcha-content.vue
│   │   │   │   │   │   ├── slider-rotate-captcha/
│   │   │   │   │   │   │   └── index.vue
│   │   │   │   │   │   ├── slider-translate-captcha/
│   │   │   │   │   │   │   └── index.vue
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── code-mirror/
│   │   │   │   │   │   ├── code-mirror.vue
│   │   │   │   │   │   ├── data.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── col-page/
│   │   │   │   │   │   ├── col-page.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── count-to/
│   │   │   │   │   │   ├── count-to.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── ellipsis-text/
│   │   │   │   │   │   ├── ellipsis-text.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── icon-picker/
│   │   │   │   │   │   ├── icon-picker.vue
│   │   │   │   │   │   ├── icons.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── json-preview/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── json-preview.vue
│   │   │   │   │   ├── json-viewer/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── index.vue
│   │   │   │   │   │   ├── style.scss
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── loading/
│   │   │   │   │   │   ├── directive.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── loading.vue
│   │   │   │   │   │   └── spinner.vue
│   │   │   │   │   ├── markdown/
│   │   │   │   │   │   ├── editor.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── preview.vue
│   │   │   │   │   ├── page/
│   │   │   │   │   │   ├── __tests__/
│   │   │   │   │   │   │   └── page.test.ts
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── page.vue
│   │   │   │   │   │   └── types.ts
│   │   │   │   │   ├── resize/
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── resize.vue
│   │   │   │   │   ├── tippy/
│   │   │   │   │   │   ├── directive.ts
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   └── tree/
│   │   │   │   │       ├── index.ts
│   │   │   │   │       └── tree.vue
│   │   │   │   ├── index.ts
│   │   │   │   └── ui/
│   │   │   │       ├── about/
│   │   │   │       │   ├── about.ts
│   │   │   │       │   ├── about.vue
│   │   │   │       │   └── index.ts
│   │   │   │       ├── authentication/
│   │   │   │       │   ├── auth-title.vue
│   │   │   │       │   ├── code-login.vue
│   │   │   │       │   ├── dingding-login.vue
│   │   │   │       │   ├── forget-password.vue
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── login-expired-modal.vue
│   │   │   │       │   ├── login.vue
│   │   │   │       │   ├── qrcode-login.vue
│   │   │   │       │   ├── register.vue
│   │   │   │       │   ├── third-party-login.vue
│   │   │   │       │   └── types.ts
│   │   │   │       ├── dashboard/
│   │   │   │       │   ├── analysis/
│   │   │   │       │   │   ├── analysis-chart-card.vue
│   │   │   │       │   │   ├── analysis-charts-tabs.vue
│   │   │   │       │   │   ├── analysis-overview.vue
│   │   │   │       │   │   └── index.ts
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── typing.ts
│   │   │   │       │   └── workbench/
│   │   │   │       │       ├── index.ts
│   │   │   │       │       ├── workbench-header.vue
│   │   │   │       │       ├── workbench-project.vue
│   │   │   │       │       ├── workbench-quick-nav.vue
│   │   │   │       │       ├── workbench-todo.vue
│   │   │   │       │       └── workbench-trends.vue
│   │   │   │       ├── fallback/
│   │   │   │       │   ├── fallback.ts
│   │   │   │       │   ├── fallback.vue
│   │   │   │       │   ├── icons/
│   │   │   │       │   │   ├── icon-403.vue
│   │   │   │       │   │   ├── icon-404.vue
│   │   │   │       │   │   ├── icon-500.vue
│   │   │   │       │   │   ├── icon-coming-soon.vue
│   │   │   │       │   │   └── icon-offline.vue
│   │   │   │       │   └── index.ts
│   │   │   │       └── index.ts
│   │   │   └── tsconfig.json
│   │   ├── hooks/
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── index.ts
│   │   │   │   ├── use-app-config.ts
│   │   │   │   ├── use-content-maximize.ts
│   │   │   │   ├── use-design-tokens.ts
│   │   │   │   ├── use-hover-toggle.ts
│   │   │   │   ├── use-pagination.ts
│   │   │   │   ├── use-refresh.ts
│   │   │   │   ├── use-tabs.ts
│   │   │   │   └── use-watermark.ts
│   │   │   └── tsconfig.json
│   │   ├── layouts/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── authentication/
│   │   │   │   │   ├── authentication.vue
│   │   │   │   │   ├── form.vue
│   │   │   │   │   ├── icons/
│   │   │   │   │   │   └── slogan.vue
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── toolbar.vue
│   │   │   │   │   └── types.ts
│   │   │   │   ├── basic/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── content/
│   │   │   │   │   │   ├── content-spinner.vue
│   │   │   │   │   │   ├── content.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   └── use-content-spinner.ts
│   │   │   │   │   ├── copyright/
│   │   │   │   │   │   ├── copyright.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── footer/
│   │   │   │   │   │   ├── footer.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── header/
│   │   │   │   │   │   ├── header.vue
│   │   │   │   │   │   └── index.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── layout.vue
│   │   │   │   │   ├── menu/
│   │   │   │   │   │   ├── extra-menu.vue
│   │   │   │   │   │   ├── index.ts
│   │   │   │   │   │   ├── menu.vue
│   │   │   │   │   │   ├── mixed-menu.vue
│   │   │   │   │   │   ├── use-extra-menu.ts
│   │   │   │   │   │   ├── use-mixed-menu.ts
│   │   │   │   │   │   └── use-navigation.ts
│   │   │   │   │   └── tabbar/
│   │   │   │   │       ├── index.ts
│   │   │   │   │       ├── tabbar.vue
│   │   │   │   │       └── use-tabbar.ts
│   │   │   │   ├── iframe/
│   │   │   │   │   ├── iframe-router-view.vue
│   │   │   │   │   ├── iframe-view.vue
│   │   │   │   │   └── index.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── widgets/
│   │   │   │       ├── breadcrumb.vue
│   │   │   │       ├── check-updates/
│   │   │   │       │   ├── check-updates.vue
│   │   │   │       │   └── index.ts
│   │   │   │       ├── color-toggle.vue
│   │   │   │       ├── global-search/
│   │   │   │       │   ├── global-search.vue
│   │   │   │       │   ├── index.ts
│   │   │   │       │   └── search-panel.vue
│   │   │   │       ├── index.ts
│   │   │   │       ├── language-toggle.vue
│   │   │   │       ├── layout-toggle.vue
│   │   │   │       ├── lock-screen/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── lock-screen-modal.vue
│   │   │   │       │   └── lock-screen.vue
│   │   │   │       ├── notification/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── notification.vue
│   │   │   │       │   └── types.ts
│   │   │   │       ├── preferences/
│   │   │   │       │   ├── blocks/
│   │   │   │       │   │   ├── block.vue
│   │   │   │       │   │   ├── checkbox-item.vue
│   │   │   │       │   │   ├── general/
│   │   │   │       │   │   │   ├── animation.vue
│   │   │   │       │   │   │   └── general.vue
│   │   │   │       │   │   ├── index.ts
│   │   │   │       │   │   ├── input-item.vue
│   │   │   │       │   │   ├── layout/
│   │   │   │       │   │   │   ├── breadcrumb.vue
│   │   │   │       │   │   │   ├── content.vue
│   │   │   │       │   │   │   ├── copyright.vue
│   │   │   │       │   │   │   ├── footer.vue
│   │   │   │       │   │   │   ├── header.vue
│   │   │   │       │   │   │   ├── layout.vue
│   │   │   │       │   │   │   ├── navigation.vue
│   │   │   │       │   │   │   ├── sidebar.vue
│   │   │   │       │   │   │   ├── tabbar.vue
│   │   │   │       │   │   │   └── widget.vue
│   │   │   │       │   │   ├── number-field-item.vue
│   │   │   │       │   │   ├── select-item.vue
│   │   │   │       │   │   ├── shortcut-keys/
│   │   │   │       │   │   │   └── global.vue
│   │   │   │       │   │   ├── switch-item.vue
│   │   │   │       │   │   ├── theme/
│   │   │   │       │   │   │   ├── builtin.vue
│   │   │   │       │   │   │   ├── color-mode.vue
│   │   │   │       │   │   │   ├── radius.vue
│   │   │   │       │   │   │   └── theme.vue
│   │   │   │       │   │   └── toggle-item.vue
│   │   │   │       │   ├── icons/
│   │   │   │       │   │   ├── content-compact.vue
│   │   │   │       │   │   ├── full-content.vue
│   │   │   │       │   │   ├── header-mixed-nav.vue
│   │   │   │       │   │   ├── header-nav.vue
│   │   │   │       │   │   ├── header-sidebar-nav.vue
│   │   │   │       │   │   ├── index.ts
│   │   │   │       │   │   ├── mixed-nav.vue
│   │   │   │       │   │   ├── setting.vue
│   │   │   │       │   │   ├── sidebar-mixed-nav.vue
│   │   │   │       │   │   └── sidebar-nav.vue
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── preferences-button.vue
│   │   │   │       │   ├── preferences-drawer.vue
│   │   │   │       │   ├── preferences.vue
│   │   │   │       │   └── use-open-preferences.ts
│   │   │   │       ├── theme-toggle/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   ├── theme-button.vue
│   │   │   │       │   └── theme-toggle.vue
│   │   │   │       └── user-dropdown/
│   │   │   │           ├── index.ts
│   │   │   │           └── user-dropdown.vue
│   │   │   └── tsconfig.json
│   │   ├── plugins/
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── echarts/
│   │   │   │   │   ├── echarts-ui.vue
│   │   │   │   │   ├── echarts.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── use-echarts.ts
│   │   │   │   ├── motion/
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── types.ts
│   │   │   │   └── vxe-table/
│   │   │   │       ├── api.ts
│   │   │   │       ├── extends.ts
│   │   │   │       ├── index.ts
│   │   │   │       ├── init.ts
│   │   │   │       ├── style.css
│   │   │   │       ├── types.ts
│   │   │   │       ├── use-vxe-grid.ts
│   │   │   │       └── use-vxe-grid.vue
│   │   │   └── tsconfig.json
│   │   └── request/
│   │       ├── package.json
│   │       ├── src/
│   │       │   ├── index.ts
│   │       │   └── request-client/
│   │       │       ├── index.ts
│   │       │       ├── modules/
│   │       │       │   ├── downloader.test.ts
│   │       │       │   ├── downloader.ts
│   │       │       │   ├── interceptor.ts
│   │       │       │   ├── sse.test.ts
│   │       │       │   ├── sse.ts
│   │       │       │   ├── uploader.test.ts
│   │       │       │   └── uploader.ts
│   │       │       ├── preset-interceptors.ts
│   │       │       ├── request-client.test.ts
│   │       │       ├── request-client.ts
│   │       │       └── types.ts
│   │       └── tsconfig.json
│   ├── icons/
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── iconify/
│   │   │   │   └── index.ts
│   │   │   ├── iconify-offline/
│   │   │   │   ├── index.ts
│   │   │   │   └── menu-icons.ts
│   │   │   ├── icons/
│   │   │   │   └── empty-icon.vue
│   │   │   ├── index.ts
│   │   │   └── svg/
│   │   │       ├── index.ts
│   │   │       └── load.ts
│   │   └── tsconfig.json
│   ├── locales/
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── i18n.ts
│   │   │   ├── index.ts
│   │   │   ├── langs/
│   │   │   │   ├── en-US/
│   │   │   │   │   ├── authentication.json
│   │   │   │   │   ├── common.json
│   │   │   │   │   ├── preferences.json
│   │   │   │   │   └── ui.json
│   │   │   │   └── zh-CN/
│   │   │   │       ├── authentication.json
│   │   │   │       ├── common.json
│   │   │   │       ├── preferences.json
│   │   │   │       └── ui.json
│   │   │   └── typing.ts
│   │   └── tsconfig.json
│   ├── preferences/
│   │   ├── package.json
│   │   ├── src/
│   │   │   └── index.ts
│   │   └── tsconfig.json
│   ├── stores/
│   │   ├── package.json
│   │   ├── shim-pinia.d.ts
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   ├── modules/
│   │   │   │   ├── access.test.ts
│   │   │   │   ├── access.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── tabbar.test.ts
│   │   │   │   ├── tabbar.ts
│   │   │   │   ├── user.test.ts
│   │   │   │   └── user.ts
│   │   │   └── setup.ts
│   │   └── tsconfig.json
│   ├── styles/
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── antd/
│   │   │   │   └── index.css
│   │   │   ├── ele/
│   │   │   │   └── index.css
│   │   │   ├── global/
│   │   │   │   └── index.scss
│   │   │   ├── index.ts
│   │   │   └── naive/
│   │   │       └── index.css
│   │   └── tsconfig.json
│   ├── types/
│   │   ├── README.md
│   │   ├── global.d.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   └── user.ts
│   │   └── tsconfig.json
│   └── utils/
│       ├── README.md
│       ├── package.json
│       ├── src/
│       │   ├── encryption/
│       │   │   ├── base.ts
│       │   │   ├── crypto.ts
│       │   │   ├── impl/
│       │   │   │   ├── aes.ts
│       │   │   │   ├── rsa.ts
│       │   │   │   ├── sm2.ts
│       │   │   │   └── sm4.ts
│       │   │   └── index.ts
│       │   ├── helpers/
│       │   │   ├── __tests__/
│       │   │   │   ├── enum-options.test.ts
│       │   │   │   ├── find-menu-by-path.test.ts
│       │   │   │   ├── generate-menus.test.ts
│       │   │   │   ├── generate-routes-frontend.test.ts
│       │   │   │   └── merge-route-modules.test.ts
│       │   │   ├── enum-options.ts
│       │   │   ├── find-menu-by-path.ts
│       │   │   ├── generate-menus.ts
│       │   │   ├── generate-routes-backend.ts
│       │   │   ├── generate-routes-frontend.ts
│       │   │   ├── get-popup-container.ts
│       │   │   ├── index.ts
│       │   │   ├── merge-route-modules.ts
│       │   │   ├── mitt.ts
│       │   │   ├── request.ts
│       │   │   ├── reset-routes.ts
│       │   │   ├── safe.ts
│       │   │   ├── tree.ts
│       │   │   ├── unmount-global-loading.ts
│       │   │   └── uuid.ts
│       │   └── index.ts
│       └── tsconfig.json
├── pnpm-workspace.yaml
├── scripts/
│   ├── clean.mjs
│   ├── deploy/
│   │   ├── Dockerfile
│   │   ├── build-local-docker-image.sh
│   │   └── nginx.conf
│   ├── turbo-run/
│   │   ├── README.md
│   │   ├── bin/
│   │   │   └── turbo-run.mjs
│   │   ├── build.config.ts
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── index.ts
│   │   │   └── run.ts
│   │   └── tsconfig.json
│   └── vsh/
│       ├── README.md
│       ├── bin/
│       │   └── vsh.mjs
│       ├── build.config.ts
│       ├── package.json
│       ├── src/
│       │   ├── check-circular/
│       │   │   └── index.ts
│       │   ├── check-dep/
│       │   │   └── index.ts
│       │   ├── code-workspace/
│       │   │   └── index.ts
│       │   ├── index.ts
│       │   ├── lint/
│       │   │   └── index.ts
│       │   └── publint/
│       │       └── index.ts
│       └── tsconfig.json
├── stylelint.config.mjs
└── turbo.json
Download .txt
SYMBOL INDEX (2188 symbols across 375 files)

FILE: apps/web-antd/public/tinymce/tinymce.d.ts
  type StringPathBookmark (line 1) | interface StringPathBookmark {
  type RangeBookmark (line 6) | interface RangeBookmark {
  type IdBookmark (line 10) | interface IdBookmark {
  type IndexBookmark (line 15) | interface IndexBookmark {
  type PathBookmark (line 19) | interface PathBookmark {
  type Bookmark (line 25) | type Bookmark = StringPathBookmark | RangeBookmark | IdBookmark | IndexB...
  type NormalizedEvent (line 26) | type NormalizedEvent<E, T = any> = E & {
  type MappedEvent (line 36) | type MappedEvent<T extends {}, K extends string> = K extends keyof T ? T...
  type NativeEventMap (line 37) | interface NativeEventMap {
  type EditorEvent (line 79) | type EditorEvent<T> = NormalizedEvent<T>;
  type EventDispatcherSettings (line 80) | interface EventDispatcherSettings {
  type EventDispatcherConstructor (line 85) | interface EventDispatcherConstructor<T extends {}> {
  class EventDispatcher (line 90) | class EventDispatcher<T extends {}> {
  type UndoLevelType (line 104) | type UndoLevelType = 'fragmented' | 'complete';
  type BaseUndoLevel (line 105) | interface BaseUndoLevel {
  type FragmentedUndoLevel (line 110) | interface FragmentedUndoLevel extends BaseUndoLevel {
  type CompleteUndoLevel (line 115) | interface CompleteUndoLevel extends BaseUndoLevel {
  type NewUndoLevel (line 120) | type NewUndoLevel = CompleteUndoLevel | FragmentedUndoLevel;
  type UndoLevel (line 121) | type UndoLevel = NewUndoLevel & {
  type UndoManager (line 124) | interface UndoManager {
  type SchemaType (line 140) | type SchemaType = 'html4' | 'html5' | 'html5-strict';
  type ElementSettings (line 141) | interface ElementSettings {
  type SchemaSettings (line 154) | interface SchemaSettings extends ElementSettings {
  type Attribute (line 167) | interface Attribute {
  type DefaultAttribute (line 173) | interface DefaultAttribute {
  type AttributePattern (line 177) | interface AttributePattern extends Attribute {
  type ElementRule (line 180) | interface ElementRule {
  type SchemaElement (line 192) | interface SchemaElement extends ElementRule {
  type SchemaMap (line 197) | interface SchemaMap {
  type SchemaRegExpMap (line 200) | interface SchemaRegExpMap {
  type CustomElementSpec (line 203) | interface CustomElementSpec {
  type Schema (line 209) | interface Schema {
  type Attributes$1 (line 239) | type Attributes$1 = Array<{
  type AstNodeConstructor (line 245) | interface AstNodeConstructor {
  class AstNode (line 250) | class AstNode {
  type Content (line 279) | type Content = string | AstNode;
  type ContentFormat (line 280) | type ContentFormat = 'raw' | 'text' | 'html' | 'tree';
  type GetContentArgs (line 281) | interface GetContentArgs {
  type SetContentArgs (line 290) | interface SetContentArgs {
  type GetSelectionContentArgs (line 301) | interface GetSelectionContentArgs extends GetContentArgs {
  type SetSelectionContentArgs (line 305) | interface SetSelectionContentArgs extends SetContentArgs {
  type BlobInfoData (line 309) | interface BlobInfoData {
  type BlobInfo (line 318) | interface BlobInfo {
  type BlobCache (line 327) | interface BlobCache {
  type BlobInfoImagePair (line 340) | interface BlobInfoImagePair {
  class NodeChange (line 344) | class NodeChange {
  type SelectionOverrides (line 351) | interface SelectionOverrides {
  type Quirks (line 357) | interface Quirks {
  type DecoratorData (line 361) | type DecoratorData = Record<string, any>;
  type Decorator (line 362) | type Decorator = (uid: string, data: DecoratorData) => {
  type AnnotationListener (line 366) | type AnnotationListener = (state: boolean, name: string, data?: {
  type AnnotationListenerApi (line 370) | type AnnotationListenerApi = AnnotationListener;
  type AnnotatorSettings (line 371) | interface AnnotatorSettings {
  type Annotator (line 375) | interface Annotator {
  type IsEmptyOptions (line 383) | interface IsEmptyOptions {
  type GeomRect (line 389) | interface GeomRect {
  type Rect (line 395) | interface Rect {
  type NotificationManagerImpl (line 404) | interface NotificationManagerImpl {
  type NotificationSpec (line 409) | interface NotificationSpec {
  type NotificationApi (line 416) | interface NotificationApi {
  type NotificationManager (line 426) | interface NotificationManager {
  type UploadFailure (line 431) | interface UploadFailure {
  type ProgressFn (line 435) | type ProgressFn = (percent: number) => void;
  type UploadHandler (line 436) | type UploadHandler = (blobInfo: BlobInfo, progress: ProgressFn) => Promi...
  type UploadResult$2 (line 437) | interface UploadResult$2 {
  type BlockPatternTrigger (line 443) | type BlockPatternTrigger = 'enter' | 'space';
  type RawPattern (line 444) | interface RawPattern {
  type InlineBasePattern (line 453) | interface InlineBasePattern {
  type InlineFormatPattern (line 457) | interface InlineFormatPattern extends InlineBasePattern {
  type InlineCmdPattern (line 461) | interface InlineCmdPattern extends InlineBasePattern {
  type InlinePattern (line 466) | type InlinePattern = InlineFormatPattern | InlineCmdPattern;
  type BlockBasePattern (line 467) | interface BlockBasePattern {
  type BlockFormatPattern (line 471) | interface BlockFormatPattern extends BlockBasePattern {
  type BlockCmdPattern (line 475) | interface BlockCmdPattern extends BlockBasePattern {
  type BlockPattern (line 480) | type BlockPattern = BlockFormatPattern | BlockCmdPattern;
  type Pattern (line 481) | type Pattern = InlinePattern | BlockPattern;
  type DynamicPatternContext (line 482) | interface DynamicPatternContext {
  type DynamicPatternsLookup (line 486) | type DynamicPatternsLookup = (ctx: DynamicPatternContext) => Pattern[];
  type RawDynamicPatternsLookup (line 487) | type RawDynamicPatternsLookup = (ctx: DynamicPatternContext) => RawPatte...
  type AlertBannerSpec (line 488) | interface AlertBannerSpec {
  type ButtonSpec (line 495) | interface ButtonSpec {
  type FormComponentSpec (line 505) | interface FormComponentSpec {
  type FormComponentWithLabelSpec (line 509) | interface FormComponentWithLabelSpec extends FormComponentSpec {
  type CheckboxSpec (line 512) | interface CheckboxSpec extends FormComponentSpec {
  type CollectionSpec (line 517) | interface CollectionSpec extends FormComponentWithLabelSpec {
  type CollectionItem (line 520) | interface CollectionItem {
  type ColorInputSpec (line 525) | interface ColorInputSpec extends FormComponentWithLabelSpec {
  type ColorPickerSpec (line 529) | interface ColorPickerSpec extends FormComponentWithLabelSpec {
  type CustomEditorInit (line 532) | interface CustomEditorInit {
  type CustomEditorInitFn (line 537) | type CustomEditorInitFn = (elm: HTMLElement, settings: any) => Promise<C...
  type CustomEditorOldSpec (line 538) | interface CustomEditorOldSpec extends FormComponentSpec {
  type CustomEditorNewSpec (line 543) | interface CustomEditorNewSpec extends FormComponentSpec {
  type CustomEditorSpec (line 551) | type CustomEditorSpec = CustomEditorOldSpec | CustomEditorNewSpec;
  type DropZoneSpec (line 552) | interface DropZoneSpec extends FormComponentWithLabelSpec {
  type GridSpec (line 555) | interface GridSpec {
  type HtmlPanelSpec (line 560) | interface HtmlPanelSpec {
  type IframeSpec (line 567) | interface IframeSpec extends FormComponentWithLabelSpec {
  type ImagePreviewSpec (line 574) | interface ImagePreviewSpec extends FormComponentSpec {
  type InputSpec (line 578) | interface InputSpec extends FormComponentWithLabelSpec {
  type Alignment (line 585) | type Alignment = 'start' | 'center' | 'end';
  type LabelSpec (line 586) | interface LabelSpec {
  type ListBoxSingleItemSpec (line 593) | interface ListBoxSingleItemSpec {
  type ListBoxNestedItemSpec (line 597) | interface ListBoxNestedItemSpec {
  type ListBoxItemSpec (line 601) | type ListBoxItemSpec = ListBoxNestedItemSpec | ListBoxSingleItemSpec;
  type ListBoxSpec (line 602) | interface ListBoxSpec extends FormComponentWithLabelSpec {
  type PanelSpec (line 607) | interface PanelSpec {
  type SelectBoxItemSpec (line 612) | interface SelectBoxItemSpec {
  type SelectBoxSpec (line 616) | interface SelectBoxSpec extends FormComponentWithLabelSpec {
  type SizeInputSpec (line 622) | interface SizeInputSpec extends FormComponentWithLabelSpec {
  type SliderSpec (line 627) | interface SliderSpec extends FormComponentSpec {
  type TableSpec (line 633) | interface TableSpec {
  type TextAreaSpec (line 638) | interface TextAreaSpec extends FormComponentWithLabelSpec {
  type BaseToolbarButtonSpec (line 644) | interface BaseToolbarButtonSpec<I extends BaseToolbarButtonInstanceApi> {
  type BaseToolbarButtonInstanceApi (line 651) | interface BaseToolbarButtonInstanceApi {
  type ToolbarButtonSpec (line 657) | interface ToolbarButtonSpec extends BaseToolbarButtonSpec<ToolbarButtonI...
  type ToolbarButtonInstanceApi (line 662) | interface ToolbarButtonInstanceApi extends BaseToolbarButtonInstanceApi {
  type ToolbarGroupSetting (line 664) | interface ToolbarGroupSetting {
  type ToolbarConfig (line 668) | type ToolbarConfig = string | ToolbarGroupSetting[];
  type GroupToolbarButtonInstanceApi (line 669) | interface GroupToolbarButtonInstanceApi extends BaseToolbarButtonInstanc...
  type GroupToolbarButtonSpec (line 671) | interface GroupToolbarButtonSpec extends BaseToolbarButtonSpec<GroupTool...
  type CardImageSpec (line 675) | interface CardImageSpec {
  type CardTextSpec (line 681) | interface CardTextSpec {
  type CardItemSpec (line 687) | type CardItemSpec = CardContainerSpec | CardImageSpec | CardTextSpec;
  type CardContainerDirection (line 688) | type CardContainerDirection = 'vertical' | 'horizontal';
  type CardContainerAlign (line 689) | type CardContainerAlign = 'left' | 'right';
  type CardContainerValign (line 690) | type CardContainerValign = 'top' | 'middle' | 'bottom';
  type CardContainerSpec (line 691) | interface CardContainerSpec {
  type CommonMenuItemSpec (line 698) | interface CommonMenuItemSpec {
  type CommonMenuItemInstanceApi (line 705) | interface CommonMenuItemInstanceApi {
  type CardMenuItemInstanceApi (line 709) | interface CardMenuItemInstanceApi extends CommonMenuItemInstanceApi {
  type CardMenuItemSpec (line 711) | interface CardMenuItemSpec extends Omit<CommonMenuItemSpec, 'text' | 'sh...
  type ChoiceMenuItemSpec (line 718) | interface ChoiceMenuItemSpec extends CommonMenuItemSpec {
  type ChoiceMenuItemInstanceApi (line 722) | interface ChoiceMenuItemInstanceApi extends CommonMenuItemInstanceApi {
  type ContextMenuItem (line 726) | interface ContextMenuItem extends CommonMenuItemSpec {
  type ContextSubMenu (line 732) | interface ContextSubMenu extends CommonMenuItemSpec {
  type ContextMenuContents (line 738) | type ContextMenuContents = string | ContextMenuItem | SeparatorMenuItemS...
  type ContextMenuApi (line 739) | interface ContextMenuApi {
  type FancyActionArgsMap (line 742) | interface FancyActionArgsMap {
  type BaseFancyMenuItemSpec (line 751) | interface BaseFancyMenuItemSpec<T extends keyof FancyActionArgsMap> {
  type InsertTableMenuItemSpec (line 757) | interface InsertTableMenuItemSpec extends BaseFancyMenuItemSpec<'insertt...
  type ColorSwatchMenuItemSpec (line 761) | interface ColorSwatchMenuItemSpec extends BaseFancyMenuItemSpec<'colorsw...
  type FancyMenuItemSpec (line 770) | type FancyMenuItemSpec = InsertTableMenuItemSpec | ColorSwatchMenuItemSpec;
  type MenuItemSpec (line 771) | interface MenuItemSpec extends CommonMenuItemSpec {
  type MenuItemInstanceApi (line 777) | interface MenuItemInstanceApi extends CommonMenuItemInstanceApi {
  type SeparatorMenuItemSpec (line 779) | interface SeparatorMenuItemSpec {
  type ToggleMenuItemSpec (line 783) | interface ToggleMenuItemSpec extends CommonMenuItemSpec {
  type ToggleMenuItemInstanceApi (line 790) | interface ToggleMenuItemInstanceApi extends CommonMenuItemInstanceApi {
  type NestedMenuItemContents (line 794) | type NestedMenuItemContents = string | MenuItemSpec | NestedMenuItemSpec...
  type NestedMenuItemSpec (line 795) | interface NestedMenuItemSpec extends CommonMenuItemSpec {
  type NestedMenuItemInstanceApi (line 801) | interface NestedMenuItemInstanceApi extends CommonMenuItemInstanceApi {
  type MenuButtonItemTypes (line 805) | type MenuButtonItemTypes = NestedMenuItemContents;
  type SuccessCallback$1 (line 806) | type SuccessCallback$1 = (menu: string | MenuButtonItemTypes[]) => void;
  type MenuButtonFetchContext (line 807) | interface MenuButtonFetchContext {
  type BaseMenuButtonSpec (line 810) | interface BaseMenuButtonSpec {
  type BaseMenuButtonInstanceApi (line 820) | interface BaseMenuButtonInstanceApi {
  type ToolbarMenuButtonSpec (line 828) | interface ToolbarMenuButtonSpec extends BaseMenuButtonSpec {
  type ToolbarMenuButtonInstanceApi (line 832) | interface ToolbarMenuButtonInstanceApi extends BaseMenuButtonInstanceApi {
  type ToolbarSplitButtonItemTypes (line 834) | type ToolbarSplitButtonItemTypes = ChoiceMenuItemSpec | SeparatorMenuIte...
  type SuccessCallback (line 835) | type SuccessCallback = (menu: ToolbarSplitButtonItemTypes[]) => void;
  type SelectPredicate (line 836) | type SelectPredicate = (value: string) => boolean;
  type PresetTypes (line 837) | type PresetTypes = 'color' | 'normal' | 'listpreview';
  type ColumnTypes$1 (line 838) | type ColumnTypes$1 = number | 'auto';
  type ToolbarSplitButtonSpec (line 839) | interface ToolbarSplitButtonSpec {
  type ToolbarSplitButtonInstanceApi (line 852) | interface ToolbarSplitButtonInstanceApi {
  type BaseToolbarToggleButtonSpec (line 862) | interface BaseToolbarToggleButtonSpec<I extends BaseToolbarButtonInstanc...
  type BaseToolbarToggleButtonInstanceApi (line 865) | interface BaseToolbarToggleButtonInstanceApi extends BaseToolbarButtonIn...
  type ToolbarToggleButtonSpec (line 869) | interface ToolbarToggleButtonSpec extends BaseToolbarToggleButtonSpec<To...
  type ToolbarToggleButtonInstanceApi (line 874) | interface ToolbarToggleButtonInstanceApi extends BaseToolbarToggleButton...
  type Id (line 876) | type Id = string;
  type TreeSpec (line 877) | interface TreeSpec {
  type BaseTreeItemSpec (line 888) | interface BaseTreeItemSpec {
  type DirectorySpec (line 893) | interface DirectorySpec extends BaseTreeItemSpec {
  type LeafSpec (line 897) | interface LeafSpec extends BaseTreeItemSpec {
  type TreeItemSpec (line 900) | type TreeItemSpec = DirectorySpec | LeafSpec;
  type UrlInputSpec (line 901) | interface UrlInputSpec extends FormComponentWithLabelSpec {
  type UrlInputData (line 907) | interface UrlInputData {
  type BodyComponentSpec (line 913) | type BodyComponentSpec = BarSpec | ButtonSpec | CheckboxSpec | TextAreaS...
  type BarSpec (line 914) | interface BarSpec {
  type DialogToggleMenuItemSpec (line 918) | interface DialogToggleMenuItemSpec extends CommonMenuItemSpec {
  type DialogFooterMenuButtonItemSpec (line 922) | type DialogFooterMenuButtonItemSpec = DialogToggleMenuItemSpec;
  type BaseDialogFooterButtonSpec (line 923) | interface BaseDialogFooterButtonSpec {
  type DialogFooterNormalButtonSpec (line 931) | interface DialogFooterNormalButtonSpec extends BaseDialogFooterButtonSpec {
  type DialogFooterMenuButtonSpec (line 935) | interface DialogFooterMenuButtonSpec extends BaseDialogFooterButtonSpec {
  type DialogFooterToggleButtonSpec (line 942) | interface DialogFooterToggleButtonSpec extends BaseDialogFooterButtonSpec {
  type DialogFooterButtonSpec (line 949) | type DialogFooterButtonSpec = DialogFooterNormalButtonSpec | DialogFoote...
  type TabSpec (line 950) | interface TabSpec {
  type TabPanelSpec (line 955) | interface TabPanelSpec {
  type DialogDataItem (line 959) | type DialogDataItem = any;
  type DialogData (line 960) | type DialogData = Record<string, DialogDataItem>;
  type DialogInstanceApi (line 961) | interface DialogInstanceApi<T extends DialogData> {
  type DialogActionDetails (line 973) | interface DialogActionDetails {
  type DialogChangeDetails (line 977) | interface DialogChangeDetails<T> {
  type DialogTabChangeDetails (line 980) | interface DialogTabChangeDetails {
  type DialogActionHandler (line 984) | type DialogActionHandler<T extends DialogData> = (api: DialogInstanceApi...
  type DialogChangeHandler (line 985) | type DialogChangeHandler<T extends DialogData> = (api: DialogInstanceApi...
  type DialogSubmitHandler (line 986) | type DialogSubmitHandler<T extends DialogData> = (api: DialogInstanceApi...
  type DialogCloseHandler (line 987) | type DialogCloseHandler = () => void;
  type DialogCancelHandler (line 988) | type DialogCancelHandler<T extends DialogData> = (api: DialogInstanceApi...
  type DialogTabChangeHandler (line 989) | type DialogTabChangeHandler<T extends DialogData> = (api: DialogInstance...
  type DialogSize (line 990) | type DialogSize = 'normal' | 'medium' | 'large';
  type DialogSpec (line 991) | interface DialogSpec<T extends DialogData> {
  type UrlDialogInstanceApi (line 1004) | interface UrlDialogInstanceApi {
  type UrlDialogActionDetails (line 1010) | interface UrlDialogActionDetails {
  type UrlDialogMessage (line 1014) | interface UrlDialogMessage {
  type UrlDialogActionHandler (line 1018) | type UrlDialogActionHandler = (api: UrlDialogInstanceApi, actions: UrlDi...
  type UrlDialogCloseHandler (line 1019) | type UrlDialogCloseHandler = () => void;
  type UrlDialogCancelHandler (line 1020) | type UrlDialogCancelHandler = (api: UrlDialogInstanceApi) => void;
  type UrlDialogMessageHandler (line 1021) | type UrlDialogMessageHandler = (api: UrlDialogInstanceApi, message: UrlD...
  type UrlDialogFooterButtonSpec (line 1022) | interface UrlDialogFooterButtonSpec extends DialogFooterNormalButtonSpec {
  type UrlDialogSpec (line 1025) | interface UrlDialogSpec {
  type ColumnTypes (line 1036) | type ColumnTypes = number | 'auto';
  type SeparatorItemSpec (line 1037) | type SeparatorItemSpec = SeparatorMenuItemSpec;
  type AutocompleterItemSpec (line 1038) | interface AutocompleterItemSpec {
  type AutocompleterContents (line 1045) | type AutocompleterContents = SeparatorItemSpec | AutocompleterItemSpec |...
  type AutocompleterSpec (line 1046) | interface AutocompleterSpec {
  type AutocompleterInstanceApi (line 1057) | interface AutocompleterInstanceApi {
  type ContextPosition (line 1061) | type ContextPosition = 'node' | 'selection' | 'line';
  type ContextScope (line 1062) | type ContextScope = 'node' | 'editor';
  type ContextBarSpec (line 1063) | interface ContextBarSpec {
  type ContextFormLaunchButtonApi (line 1068) | interface ContextFormLaunchButtonApi extends BaseToolbarButtonSpec<BaseT...
  type ContextFormLaunchToggleButtonSpec (line 1071) | interface ContextFormLaunchToggleButtonSpec extends BaseToolbarToggleBut...
  type ContextFormButtonInstanceApi (line 1074) | interface ContextFormButtonInstanceApi extends BaseToolbarButtonInstance...
  type ContextFormToggleButtonInstanceApi (line 1076) | interface ContextFormToggleButtonInstanceApi extends BaseToolbarToggleBu...
  type ContextFormButtonSpec (line 1078) | interface ContextFormButtonSpec extends BaseToolbarButtonSpec<ContextFor...
  type ContextFormToggleButtonSpec (line 1083) | interface ContextFormToggleButtonSpec extends BaseToolbarToggleButtonSpe...
  type ContextFormInstanceApi (line 1088) | interface ContextFormInstanceApi {
  type ContextFormSpec (line 1092) | interface ContextFormSpec extends ContextBarSpec {
  type ContextToolbarSpec (line 1099) | interface ContextToolbarSpec extends ContextBarSpec {
  type PublicDialog_d_AlertBannerSpec (line 1103) | type PublicDialog_d_AlertBannerSpec = AlertBannerSpec;
  type PublicDialog_d_BarSpec (line 1104) | type PublicDialog_d_BarSpec = BarSpec;
  type PublicDialog_d_BodyComponentSpec (line 1105) | type PublicDialog_d_BodyComponentSpec = BodyComponentSpec;
  type PublicDialog_d_ButtonSpec (line 1106) | type PublicDialog_d_ButtonSpec = ButtonSpec;
  type PublicDialog_d_CheckboxSpec (line 1107) | type PublicDialog_d_CheckboxSpec = CheckboxSpec;
  type PublicDialog_d_CollectionItem (line 1108) | type PublicDialog_d_CollectionItem = CollectionItem;
  type PublicDialog_d_CollectionSpec (line 1109) | type PublicDialog_d_CollectionSpec = CollectionSpec;
  type PublicDialog_d_ColorInputSpec (line 1110) | type PublicDialog_d_ColorInputSpec = ColorInputSpec;
  type PublicDialog_d_ColorPickerSpec (line 1111) | type PublicDialog_d_ColorPickerSpec = ColorPickerSpec;
  type PublicDialog_d_CustomEditorSpec (line 1112) | type PublicDialog_d_CustomEditorSpec = CustomEditorSpec;
  type PublicDialog_d_CustomEditorInit (line 1113) | type PublicDialog_d_CustomEditorInit = CustomEditorInit;
  type PublicDialog_d_CustomEditorInitFn (line 1114) | type PublicDialog_d_CustomEditorInitFn = CustomEditorInitFn;
  type PublicDialog_d_DialogData (line 1115) | type PublicDialog_d_DialogData = DialogData;
  type PublicDialog_d_DialogSize (line 1116) | type PublicDialog_d_DialogSize = DialogSize;
  type PublicDialog_d_DialogSpec (line 1117) | type PublicDialog_d_DialogSpec<T extends DialogData> = DialogSpec<T>;
  type PublicDialog_d_DialogInstanceApi (line 1118) | type PublicDialog_d_DialogInstanceApi<T extends DialogData> = DialogInst...
  type PublicDialog_d_DialogFooterButtonSpec (line 1119) | type PublicDialog_d_DialogFooterButtonSpec = DialogFooterButtonSpec;
  type PublicDialog_d_DialogActionDetails (line 1120) | type PublicDialog_d_DialogActionDetails = DialogActionDetails;
  type PublicDialog_d_DialogChangeDetails (line 1121) | type PublicDialog_d_DialogChangeDetails<T> = DialogChangeDetails<T>;
  type PublicDialog_d_DialogTabChangeDetails (line 1122) | type PublicDialog_d_DialogTabChangeDetails = DialogTabChangeDetails;
  type PublicDialog_d_DropZoneSpec (line 1123) | type PublicDialog_d_DropZoneSpec = DropZoneSpec;
  type PublicDialog_d_GridSpec (line 1124) | type PublicDialog_d_GridSpec = GridSpec;
  type PublicDialog_d_HtmlPanelSpec (line 1125) | type PublicDialog_d_HtmlPanelSpec = HtmlPanelSpec;
  type PublicDialog_d_IframeSpec (line 1126) | type PublicDialog_d_IframeSpec = IframeSpec;
  type PublicDialog_d_ImagePreviewSpec (line 1127) | type PublicDialog_d_ImagePreviewSpec = ImagePreviewSpec;
  type PublicDialog_d_InputSpec (line 1128) | type PublicDialog_d_InputSpec = InputSpec;
  type PublicDialog_d_LabelSpec (line 1129) | type PublicDialog_d_LabelSpec = LabelSpec;
  type PublicDialog_d_ListBoxSpec (line 1130) | type PublicDialog_d_ListBoxSpec = ListBoxSpec;
  type PublicDialog_d_ListBoxItemSpec (line 1131) | type PublicDialog_d_ListBoxItemSpec = ListBoxItemSpec;
  type PublicDialog_d_ListBoxNestedItemSpec (line 1132) | type PublicDialog_d_ListBoxNestedItemSpec = ListBoxNestedItemSpec;
  type PublicDialog_d_ListBoxSingleItemSpec (line 1133) | type PublicDialog_d_ListBoxSingleItemSpec = ListBoxSingleItemSpec;
  type PublicDialog_d_PanelSpec (line 1134) | type PublicDialog_d_PanelSpec = PanelSpec;
  type PublicDialog_d_SelectBoxSpec (line 1135) | type PublicDialog_d_SelectBoxSpec = SelectBoxSpec;
  type PublicDialog_d_SelectBoxItemSpec (line 1136) | type PublicDialog_d_SelectBoxItemSpec = SelectBoxItemSpec;
  type PublicDialog_d_SizeInputSpec (line 1137) | type PublicDialog_d_SizeInputSpec = SizeInputSpec;
  type PublicDialog_d_SliderSpec (line 1138) | type PublicDialog_d_SliderSpec = SliderSpec;
  type PublicDialog_d_TableSpec (line 1139) | type PublicDialog_d_TableSpec = TableSpec;
  type PublicDialog_d_TabSpec (line 1140) | type PublicDialog_d_TabSpec = TabSpec;
  type PublicDialog_d_TabPanelSpec (line 1141) | type PublicDialog_d_TabPanelSpec = TabPanelSpec;
  type PublicDialog_d_TextAreaSpec (line 1142) | type PublicDialog_d_TextAreaSpec = TextAreaSpec;
  type PublicDialog_d_TreeSpec (line 1143) | type PublicDialog_d_TreeSpec = TreeSpec;
  type PublicDialog_d_TreeItemSpec (line 1144) | type PublicDialog_d_TreeItemSpec = TreeItemSpec;
  type PublicDialog_d_UrlInputData (line 1145) | type PublicDialog_d_UrlInputData = UrlInputData;
  type PublicDialog_d_UrlInputSpec (line 1146) | type PublicDialog_d_UrlInputSpec = UrlInputSpec;
  type PublicDialog_d_UrlDialogSpec (line 1147) | type PublicDialog_d_UrlDialogSpec = UrlDialogSpec;
  type PublicDialog_d_UrlDialogFooterButtonSpec (line 1148) | type PublicDialog_d_UrlDialogFooterButtonSpec = UrlDialogFooterButtonSpec;
  type PublicDialog_d_UrlDialogInstanceApi (line 1149) | type PublicDialog_d_UrlDialogInstanceApi = UrlDialogInstanceApi;
  type PublicDialog_d_UrlDialogActionDetails (line 1150) | type PublicDialog_d_UrlDialogActionDetails = UrlDialogActionDetails;
  type PublicDialog_d_UrlDialogMessage (line 1151) | type PublicDialog_d_UrlDialogMessage = UrlDialogMessage;
  type PublicInlineContent_d_AutocompleterSpec (line 1155) | type PublicInlineContent_d_AutocompleterSpec = AutocompleterSpec;
  type PublicInlineContent_d_AutocompleterItemSpec (line 1156) | type PublicInlineContent_d_AutocompleterItemSpec = AutocompleterItemSpec;
  type PublicInlineContent_d_AutocompleterContents (line 1157) | type PublicInlineContent_d_AutocompleterContents = AutocompleterContents;
  type PublicInlineContent_d_AutocompleterInstanceApi (line 1158) | type PublicInlineContent_d_AutocompleterInstanceApi = AutocompleterInsta...
  type PublicInlineContent_d_ContextPosition (line 1159) | type PublicInlineContent_d_ContextPosition = ContextPosition;
  type PublicInlineContent_d_ContextScope (line 1160) | type PublicInlineContent_d_ContextScope = ContextScope;
  type PublicInlineContent_d_ContextFormSpec (line 1161) | type PublicInlineContent_d_ContextFormSpec = ContextFormSpec;
  type PublicInlineContent_d_ContextFormInstanceApi (line 1162) | type PublicInlineContent_d_ContextFormInstanceApi = ContextFormInstanceApi;
  type PublicInlineContent_d_ContextFormButtonSpec (line 1163) | type PublicInlineContent_d_ContextFormButtonSpec = ContextFormButtonSpec;
  type PublicInlineContent_d_ContextFormButtonInstanceApi (line 1164) | type PublicInlineContent_d_ContextFormButtonInstanceApi = ContextFormBut...
  type PublicInlineContent_d_ContextFormToggleButtonSpec (line 1165) | type PublicInlineContent_d_ContextFormToggleButtonSpec = ContextFormTogg...
  type PublicInlineContent_d_ContextFormToggleButtonInstanceApi (line 1166) | type PublicInlineContent_d_ContextFormToggleButtonInstanceApi = ContextF...
  type PublicInlineContent_d_ContextToolbarSpec (line 1167) | type PublicInlineContent_d_ContextToolbarSpec = ContextToolbarSpec;
  type PublicInlineContent_d_SeparatorItemSpec (line 1168) | type PublicInlineContent_d_SeparatorItemSpec = SeparatorItemSpec;
  type PublicMenu_d_MenuItemSpec (line 1172) | type PublicMenu_d_MenuItemSpec = MenuItemSpec;
  type PublicMenu_d_MenuItemInstanceApi (line 1173) | type PublicMenu_d_MenuItemInstanceApi = MenuItemInstanceApi;
  type PublicMenu_d_NestedMenuItemContents (line 1174) | type PublicMenu_d_NestedMenuItemContents = NestedMenuItemContents;
  type PublicMenu_d_NestedMenuItemSpec (line 1175) | type PublicMenu_d_NestedMenuItemSpec = NestedMenuItemSpec;
  type PublicMenu_d_NestedMenuItemInstanceApi (line 1176) | type PublicMenu_d_NestedMenuItemInstanceApi = NestedMenuItemInstanceApi;
  type PublicMenu_d_FancyMenuItemSpec (line 1177) | type PublicMenu_d_FancyMenuItemSpec = FancyMenuItemSpec;
  type PublicMenu_d_ColorSwatchMenuItemSpec (line 1178) | type PublicMenu_d_ColorSwatchMenuItemSpec = ColorSwatchMenuItemSpec;
  type PublicMenu_d_InsertTableMenuItemSpec (line 1179) | type PublicMenu_d_InsertTableMenuItemSpec = InsertTableMenuItemSpec;
  type PublicMenu_d_ToggleMenuItemSpec (line 1180) | type PublicMenu_d_ToggleMenuItemSpec = ToggleMenuItemSpec;
  type PublicMenu_d_ToggleMenuItemInstanceApi (line 1181) | type PublicMenu_d_ToggleMenuItemInstanceApi = ToggleMenuItemInstanceApi;
  type PublicMenu_d_ChoiceMenuItemSpec (line 1182) | type PublicMenu_d_ChoiceMenuItemSpec = ChoiceMenuItemSpec;
  type PublicMenu_d_ChoiceMenuItemInstanceApi (line 1183) | type PublicMenu_d_ChoiceMenuItemInstanceApi = ChoiceMenuItemInstanceApi;
  type PublicMenu_d_SeparatorMenuItemSpec (line 1184) | type PublicMenu_d_SeparatorMenuItemSpec = SeparatorMenuItemSpec;
  type PublicMenu_d_ContextMenuApi (line 1185) | type PublicMenu_d_ContextMenuApi = ContextMenuApi;
  type PublicMenu_d_ContextMenuContents (line 1186) | type PublicMenu_d_ContextMenuContents = ContextMenuContents;
  type PublicMenu_d_ContextMenuItem (line 1187) | type PublicMenu_d_ContextMenuItem = ContextMenuItem;
  type PublicMenu_d_ContextSubMenu (line 1188) | type PublicMenu_d_ContextSubMenu = ContextSubMenu;
  type PublicMenu_d_CardMenuItemSpec (line 1189) | type PublicMenu_d_CardMenuItemSpec = CardMenuItemSpec;
  type PublicMenu_d_CardMenuItemInstanceApi (line 1190) | type PublicMenu_d_CardMenuItemInstanceApi = CardMenuItemInstanceApi;
  type PublicMenu_d_CardItemSpec (line 1191) | type PublicMenu_d_CardItemSpec = CardItemSpec;
  type PublicMenu_d_CardContainerSpec (line 1192) | type PublicMenu_d_CardContainerSpec = CardContainerSpec;
  type PublicMenu_d_CardImageSpec (line 1193) | type PublicMenu_d_CardImageSpec = CardImageSpec;
  type PublicMenu_d_CardTextSpec (line 1194) | type PublicMenu_d_CardTextSpec = CardTextSpec;
  type SidebarInstanceApi (line 1198) | interface SidebarInstanceApi {
  type SidebarSpec (line 1201) | interface SidebarSpec {
  type PublicSidebar_d_SidebarSpec (line 1208) | type PublicSidebar_d_SidebarSpec = SidebarSpec;
  type PublicSidebar_d_SidebarInstanceApi (line 1209) | type PublicSidebar_d_SidebarInstanceApi = SidebarInstanceApi;
  type PublicToolbar_d_ToolbarButtonSpec (line 1213) | type PublicToolbar_d_ToolbarButtonSpec = ToolbarButtonSpec;
  type PublicToolbar_d_ToolbarButtonInstanceApi (line 1214) | type PublicToolbar_d_ToolbarButtonInstanceApi = ToolbarButtonInstanceApi;
  type PublicToolbar_d_ToolbarSplitButtonSpec (line 1215) | type PublicToolbar_d_ToolbarSplitButtonSpec = ToolbarSplitButtonSpec;
  type PublicToolbar_d_ToolbarSplitButtonInstanceApi (line 1216) | type PublicToolbar_d_ToolbarSplitButtonInstanceApi = ToolbarSplitButtonI...
  type PublicToolbar_d_ToolbarMenuButtonSpec (line 1217) | type PublicToolbar_d_ToolbarMenuButtonSpec = ToolbarMenuButtonSpec;
  type PublicToolbar_d_ToolbarMenuButtonInstanceApi (line 1218) | type PublicToolbar_d_ToolbarMenuButtonInstanceApi = ToolbarMenuButtonIns...
  type PublicToolbar_d_ToolbarToggleButtonSpec (line 1219) | type PublicToolbar_d_ToolbarToggleButtonSpec = ToolbarToggleButtonSpec;
  type PublicToolbar_d_ToolbarToggleButtonInstanceApi (line 1220) | type PublicToolbar_d_ToolbarToggleButtonInstanceApi = ToolbarToggleButto...
  type PublicToolbar_d_GroupToolbarButtonSpec (line 1221) | type PublicToolbar_d_GroupToolbarButtonSpec = GroupToolbarButtonSpec;
  type PublicToolbar_d_GroupToolbarButtonInstanceApi (line 1222) | type PublicToolbar_d_GroupToolbarButtonInstanceApi = GroupToolbarButtonI...
  type ViewButtonApi (line 1226) | interface ViewButtonApi {
  type ViewToggleButtonApi (line 1229) | interface ViewToggleButtonApi extends ViewButtonApi {
  type BaseButtonSpec (line 1233) | interface BaseButtonSpec<Api extends ViewButtonApi> {
  type ViewNormalButtonSpec (line 1241) | interface ViewNormalButtonSpec extends BaseButtonSpec<ViewButtonApi> {
  type ViewToggleButtonSpec (line 1245) | interface ViewToggleButtonSpec extends BaseButtonSpec<ViewToggleButtonAp...
  type ViewButtonsGroupSpec (line 1250) | interface ViewButtonsGroupSpec {
  type ViewButtonSpec (line 1254) | type ViewButtonSpec = ViewNormalButtonSpec | ViewToggleButtonSpec | View...
  type ViewInstanceApi (line 1255) | interface ViewInstanceApi {
  type ViewSpec (line 1258) | interface ViewSpec {
  type PublicView_d_ViewSpec (line 1263) | type PublicView_d_ViewSpec = ViewSpec;
  type PublicView_d_ViewInstanceApi (line 1264) | type PublicView_d_ViewInstanceApi = ViewInstanceApi;
  type Registry$1 (line 1268) | interface Registry$1 {
  type AutocompleteLookupData (line 1295) | interface AutocompleteLookupData {
  type AutocompleterEventArgs (line 1302) | interface AutocompleterEventArgs {
  type RangeLikeObject (line 1305) | interface RangeLikeObject {
  type ApplyFormat (line 1311) | type ApplyFormat = BlockFormat | InlineFormat | SelectorFormat;
  type RemoveFormat (line 1312) | type RemoveFormat = RemoveBlockFormat | RemoveInlineFormat | RemoveSelec...
  type Format (line 1313) | type Format = ApplyFormat | RemoveFormat;
  type Formats (line 1314) | type Formats = Record<string, Format | Format[]>;
  type FormatAttrOrStyleValue (line 1315) | type FormatAttrOrStyleValue = string | ((vars?: FormatVars) => string | ...
  type FormatVars (line 1316) | type FormatVars = Record<string, string | null>;
  type BaseFormat (line 1317) | interface BaseFormat<T> {
  type Block (line 1333) | interface Block {
  type Inline (line 1338) | interface Inline {
  type Selector (line 1341) | interface Selector {
  type CommonFormat (line 1345) | interface CommonFormat<T> extends BaseFormat<T> {
  type BlockFormat (line 1355) | interface BlockFormat extends Block, CommonFormat<BlockFormat> {
  type InlineFormat (line 1357) | interface InlineFormat extends Inline, CommonFormat<InlineFormat> {
  type SelectorFormat (line 1359) | interface SelectorFormat extends Selector, CommonFormat<SelectorFormat> {
  type CommonRemoveFormat (line 1361) | interface CommonRemoveFormat<T> extends BaseFormat<T> {
  type RemoveBlockFormat (line 1365) | interface RemoveBlockFormat extends Block, CommonRemoveFormat<RemoveBloc...
  type RemoveInlineFormat (line 1367) | interface RemoveInlineFormat extends Inline, CommonRemoveFormat<RemoveIn...
  type RemoveSelectorFormat (line 1369) | interface RemoveSelectorFormat extends Selector, CommonRemoveFormat<Remo...
  type Filter (line 1371) | interface Filter<C extends Function> {
  type ParserArgs (line 1375) | interface ParserArgs {
  type ParserFilterCallback (line 1385) | type ParserFilterCallback = (nodes: AstNode[], name: string, args: Parse...
  type ParserFilter (line 1386) | interface ParserFilter extends Filter<ParserFilterCallback> {
  type DomParserSettings (line 1388) | interface DomParserSettings {
  type DomParser (line 1412) | interface DomParser {
  type StyleSheetLoaderSettings (line 1422) | interface StyleSheetLoaderSettings {
  type StyleSheetLoader (line 1427) | interface StyleSheetLoader {
  type Registry (line 1437) | type Registry = Registry$1;
  type EditorUiApi (line 1438) | interface EditorUiApi {
  type EditorUi (line 1444) | interface EditorUi extends EditorUiApi {
  type Ui_d_Registry (line 1448) | type Ui_d_Registry = Registry;
  type Ui_d_EditorUiApi (line 1449) | type Ui_d_EditorUiApi = EditorUiApi;
  type Ui_d_EditorUi (line 1450) | type Ui_d_EditorUi = EditorUi;
  type WindowParams (line 1454) | interface WindowParams {
  type InstanceApi (line 1459) | type InstanceApi<T extends DialogData> = UrlDialogInstanceApi | DialogIn...
  type WindowManagerImpl (line 1460) | interface WindowManagerImpl {
  type WindowManager (line 1467) | interface WindowManager {
  type ExecCommandEvent (line 1474) | interface ExecCommandEvent {
  type BeforeGetContentEvent (line 1479) | interface BeforeGetContentEvent extends GetContentArgs {
  type GetContentEvent (line 1482) | interface GetContentEvent extends BeforeGetContentEvent {
  type BeforeSetContentEvent (line 1485) | interface BeforeSetContentEvent extends SetContentArgs {
  type SetContentEvent (line 1489) | interface SetContentEvent extends BeforeSetContentEvent {
  type SaveContentEvent (line 1492) | interface SaveContentEvent extends GetContentEvent {
  type NewBlockEvent (line 1495) | interface NewBlockEvent {
  type NodeChangeEvent (line 1498) | interface NodeChangeEvent {
  type FormatEvent (line 1504) | interface FormatEvent {
  type ObjectResizeEvent (line 1509) | interface ObjectResizeEvent {
  type ObjectSelectedEvent (line 1515) | interface ObjectSelectedEvent {
  type ScrollIntoViewEvent (line 1519) | interface ScrollIntoViewEvent {
  type SetSelectionRangeEvent (line 1523) | interface SetSelectionRangeEvent {
  type ShowCaretEvent (line 1527) | interface ShowCaretEvent {
  type SwitchModeEvent (line 1532) | interface SwitchModeEvent {
  type ChangeEvent (line 1535) | interface ChangeEvent {
  type AddUndoEvent (line 1539) | interface AddUndoEvent extends ChangeEvent {
  type UndoRedoEvent (line 1542) | interface UndoRedoEvent {
  type WindowEvent (line 1545) | interface WindowEvent<T extends DialogData> {
  type ProgressStateEvent (line 1548) | interface ProgressStateEvent {
  type AfterProgressStateEvent (line 1552) | interface AfterProgressStateEvent {
  type PlaceholderToggleEvent (line 1555) | interface PlaceholderToggleEvent {
  type LoadErrorEvent (line 1558) | interface LoadErrorEvent {
  type PreProcessEvent (line 1561) | interface PreProcessEvent extends ParserArgs {
  type PostProcessEvent (line 1564) | interface PostProcessEvent extends ParserArgs {
  type PastePlainTextToggleEvent (line 1567) | interface PastePlainTextToggleEvent {
  type PastePreProcessEvent (line 1570) | interface PastePreProcessEvent {
  type PastePostProcessEvent (line 1574) | interface PastePostProcessEvent {
  type EditableRootStateChangeEvent (line 1578) | interface EditableRootStateChangeEvent {
  type NewTableRowEvent (line 1581) | interface NewTableRowEvent {
  type NewTableCellEvent (line 1584) | interface NewTableCellEvent {
  type TableEventData (line 1587) | interface TableEventData {
  type TableModifiedEvent (line 1591) | interface TableModifiedEvent extends TableEventData {
  type BeforeOpenNotificationEvent (line 1594) | interface BeforeOpenNotificationEvent {
  type OpenNotificationEvent (line 1597) | interface OpenNotificationEvent {
  type EditorEventMap (line 1600) | interface EditorEventMap extends Omit<NativeEventMap, 'blur' | 'focus'> {
  type EditorManagerEventMap (line 1697) | interface EditorManagerEventMap {
  type EventTypes_d_ExecCommandEvent (line 1708) | type EventTypes_d_ExecCommandEvent = ExecCommandEvent;
  type EventTypes_d_BeforeGetContentEvent (line 1709) | type EventTypes_d_BeforeGetContentEvent = BeforeGetContentEvent;
  type EventTypes_d_GetContentEvent (line 1710) | type EventTypes_d_GetContentEvent = GetContentEvent;
  type EventTypes_d_BeforeSetContentEvent (line 1711) | type EventTypes_d_BeforeSetContentEvent = BeforeSetContentEvent;
  type EventTypes_d_SetContentEvent (line 1712) | type EventTypes_d_SetContentEvent = SetContentEvent;
  type EventTypes_d_SaveContentEvent (line 1713) | type EventTypes_d_SaveContentEvent = SaveContentEvent;
  type EventTypes_d_NewBlockEvent (line 1714) | type EventTypes_d_NewBlockEvent = NewBlockEvent;
  type EventTypes_d_NodeChangeEvent (line 1715) | type EventTypes_d_NodeChangeEvent = NodeChangeEvent;
  type EventTypes_d_FormatEvent (line 1716) | type EventTypes_d_FormatEvent = FormatEvent;
  type EventTypes_d_ObjectResizeEvent (line 1717) | type EventTypes_d_ObjectResizeEvent = ObjectResizeEvent;
  type EventTypes_d_ObjectSelectedEvent (line 1718) | type EventTypes_d_ObjectSelectedEvent = ObjectSelectedEvent;
  type EventTypes_d_ScrollIntoViewEvent (line 1719) | type EventTypes_d_ScrollIntoViewEvent = ScrollIntoViewEvent;
  type EventTypes_d_SetSelectionRangeEvent (line 1720) | type EventTypes_d_SetSelectionRangeEvent = SetSelectionRangeEvent;
  type EventTypes_d_ShowCaretEvent (line 1721) | type EventTypes_d_ShowCaretEvent = ShowCaretEvent;
  type EventTypes_d_SwitchModeEvent (line 1722) | type EventTypes_d_SwitchModeEvent = SwitchModeEvent;
  type EventTypes_d_ChangeEvent (line 1723) | type EventTypes_d_ChangeEvent = ChangeEvent;
  type EventTypes_d_AddUndoEvent (line 1724) | type EventTypes_d_AddUndoEvent = AddUndoEvent;
  type EventTypes_d_UndoRedoEvent (line 1725) | type EventTypes_d_UndoRedoEvent = UndoRedoEvent;
  type EventTypes_d_WindowEvent (line 1726) | type EventTypes_d_WindowEvent<T extends DialogData> = WindowEvent<T>;
  type EventTypes_d_ProgressStateEvent (line 1727) | type EventTypes_d_ProgressStateEvent = ProgressStateEvent;
  type EventTypes_d_AfterProgressStateEvent (line 1728) | type EventTypes_d_AfterProgressStateEvent = AfterProgressStateEvent;
  type EventTypes_d_PlaceholderToggleEvent (line 1729) | type EventTypes_d_PlaceholderToggleEvent = PlaceholderToggleEvent;
  type EventTypes_d_LoadErrorEvent (line 1730) | type EventTypes_d_LoadErrorEvent = LoadErrorEvent;
  type EventTypes_d_PreProcessEvent (line 1731) | type EventTypes_d_PreProcessEvent = PreProcessEvent;
  type EventTypes_d_PostProcessEvent (line 1732) | type EventTypes_d_PostProcessEvent = PostProcessEvent;
  type EventTypes_d_PastePlainTextToggleEvent (line 1733) | type EventTypes_d_PastePlainTextToggleEvent = PastePlainTextToggleEvent;
  type EventTypes_d_PastePreProcessEvent (line 1734) | type EventTypes_d_PastePreProcessEvent = PastePreProcessEvent;
  type EventTypes_d_PastePostProcessEvent (line 1735) | type EventTypes_d_PastePostProcessEvent = PastePostProcessEvent;
  type EventTypes_d_EditableRootStateChangeEvent (line 1736) | type EventTypes_d_EditableRootStateChangeEvent = EditableRootStateChange...
  type EventTypes_d_NewTableRowEvent (line 1737) | type EventTypes_d_NewTableRowEvent = NewTableRowEvent;
  type EventTypes_d_NewTableCellEvent (line 1738) | type EventTypes_d_NewTableCellEvent = NewTableCellEvent;
  type EventTypes_d_TableEventData (line 1739) | type EventTypes_d_TableEventData = TableEventData;
  type EventTypes_d_TableModifiedEvent (line 1740) | type EventTypes_d_TableModifiedEvent = TableModifiedEvent;
  type EventTypes_d_BeforeOpenNotificationEvent (line 1741) | type EventTypes_d_BeforeOpenNotificationEvent = BeforeOpenNotificationEv...
  type EventTypes_d_OpenNotificationEvent (line 1742) | type EventTypes_d_OpenNotificationEvent = OpenNotificationEvent;
  type EventTypes_d_EditorEventMap (line 1743) | type EventTypes_d_EditorEventMap = EditorEventMap;
  type EventTypes_d_EditorManagerEventMap (line 1744) | type EventTypes_d_EditorManagerEventMap = EditorManagerEventMap;
  type Format_d_Formats (line 1748) | type Format_d_Formats = Formats;
  type Format_d_Format (line 1749) | type Format_d_Format = Format;
  type Format_d_ApplyFormat (line 1750) | type Format_d_ApplyFormat = ApplyFormat;
  type Format_d_BlockFormat (line 1751) | type Format_d_BlockFormat = BlockFormat;
  type Format_d_InlineFormat (line 1752) | type Format_d_InlineFormat = InlineFormat;
  type Format_d_SelectorFormat (line 1753) | type Format_d_SelectorFormat = SelectorFormat;
  type Format_d_RemoveFormat (line 1754) | type Format_d_RemoveFormat = RemoveFormat;
  type Format_d_RemoveBlockFormat (line 1755) | type Format_d_RemoveBlockFormat = RemoveBlockFormat;
  type Format_d_RemoveInlineFormat (line 1756) | type Format_d_RemoveInlineFormat = RemoveInlineFormat;
  type Format_d_RemoveSelectorFormat (line 1757) | type Format_d_RemoveSelectorFormat = RemoveSelectorFormat;
  type StyleFormat (line 1761) | type StyleFormat = BlockStyleFormat | InlineStyleFormat | SelectorStyleF...
  type AllowedFormat (line 1762) | type AllowedFormat = Separator | FormatReference | StyleFormat | NestedF...
  type Separator (line 1763) | interface Separator {
  type FormatReference (line 1766) | interface FormatReference {
  type NestedFormatting (line 1771) | interface NestedFormatting {
  type CommonStyleFormat (line 1775) | interface CommonStyleFormat {
  type BlockStyleFormat (line 1780) | interface BlockStyleFormat extends BlockFormat, CommonStyleFormat {
  type InlineStyleFormat (line 1782) | interface InlineStyleFormat extends InlineFormat, CommonStyleFormat {
  type SelectorStyleFormat (line 1784) | interface SelectorStyleFormat extends SelectorFormat, CommonStyleFormat {
  type EntityEncoding (line 1786) | type EntityEncoding = 'named' | 'numeric' | 'raw' | 'named,numeric' | 'n...
  type ContentLanguage (line 1787) | interface ContentLanguage {
  type ThemeInitFunc (line 1792) | type ThemeInitFunc = (editor: Editor, elm: HTMLElement) => {
  type SetupCallback (line 1799) | type SetupCallback = (editor: Editor) => void;
  type FilePickerCallback (line 1800) | type FilePickerCallback = (callback: (value: string, meta?: Record<strin...
  type FilePickerValidationStatus (line 1801) | type FilePickerValidationStatus = 'valid' | 'unknown' | 'invalid' | 'none';
  type FilePickerValidationCallback (line 1802) | type FilePickerValidationCallback = (info: {
  type PastePreProcessFn (line 1809) | type PastePreProcessFn = (editor: Editor, args: PastePreProcessEvent) =>...
  type PastePostProcessFn (line 1810) | type PastePostProcessFn = (editor: Editor, args: PastePostProcessEvent) ...
  type URLConverter (line 1811) | type URLConverter = (url: string, name: string, elm?: string | Element) ...
  type URLConverterCallback (line 1812) | type URLConverterCallback = (url: string, node: Node | string | undefine...
  type ToolbarGroup (line 1813) | interface ToolbarGroup {
  type ToolbarMode (line 1817) | type ToolbarMode = 'floating' | 'sliding' | 'scrolling' | 'wrap';
  type ToolbarLocation (line 1818) | type ToolbarLocation = 'top' | 'bottom' | 'auto';
  type BaseEditorOptions (line 1819) | interface BaseEditorOptions {
  type RawEditorOptions (line 2031) | interface RawEditorOptions extends BaseEditorOptions {
  type NormalizedEditorOptions (line 2036) | interface NormalizedEditorOptions extends BaseEditorOptions {
  type EditorOptions (line 2041) | interface EditorOptions extends NormalizedEditorOptions {
  type StyleMap (line 2126) | type StyleMap = Record<string, string | number>;
  type StylesSettings (line 2127) | interface StylesSettings {
  type Styles (line 2133) | interface Styles {
  type EventUtilsCallback (line 2137) | type EventUtilsCallback<T> = (event: EventUtilsEvent<T>) => void | boolean;
  type EventUtilsEvent (line 2138) | type EventUtilsEvent<T> = NormalizedEvent<T> & {
  type Callback$1 (line 2141) | interface Callback$1<T> {
  type CallbackList (line 2145) | interface CallbackList<T> extends Array<Callback$1<T>> {
  type EventUtilsConstructor (line 2150) | interface EventUtilsConstructor {
  class EventUtils (line 2155) | class EventUtils {
  type SetAttribEvent (line 2175) | interface SetAttribEvent {
  type DOMUtilsSettings (line 2180) | interface DOMUtilsSettings {
  type Target (line 2193) | type Target = Node | Window;
  type RunArguments (line 2194) | type RunArguments<T extends Node = Node> = string | T | Array<string | T...
  type BoundEvent (line 2195) | type BoundEvent = [
  type Callback (line 2201) | type Callback<K extends string> = EventUtilsCallback<MappedEvent<HTMLEle...
  type RunResult (line 2202) | type RunResult<T, R> = T extends Array<any> ? R[] : false | R;
  type DOMUtils (line 2203) | interface DOMUtils {
  type ClientRect (line 2334) | interface ClientRect {
  type BookmarkManager (line 2342) | interface BookmarkManager {
  type ControlSelection (line 2346) | interface ControlSelection {
  type WriterSettings (line 2353) | interface WriterSettings {
  type Attributes (line 2361) | type Attributes = Array<{
  type Writer (line 2365) | interface Writer {
  type HtmlSerializerSettings (line 2376) | interface HtmlSerializerSettings extends WriterSettings {
  type HtmlSerializer (line 2380) | interface HtmlSerializer {
  type DomSerializerSettings (line 2383) | interface DomSerializerSettings extends DomParserSettings, WriterSetting...
  type DomSerializerImpl (line 2388) | interface DomSerializerImpl {
  type DomSerializer (line 2407) | interface DomSerializer extends DomSerializerImpl {
  type EditorSelection (line 2409) | interface EditorSelection {
  type EditorCommandCallback (line 2464) | type EditorCommandCallback<S> = (this: S, ui: boolean, value: any) => void;
  type EditorCommandsCallback (line 2465) | type EditorCommandsCallback = (command: string, ui: boolean, value?: any...
  type Commands (line 2466) | interface Commands {
  type ExecCommandArgs (line 2471) | interface ExecCommandArgs {
  type EditorCommandsConstructor (line 2474) | interface EditorCommandsConstructor {
  class EditorCommands (line 2478) | class EditorCommands {
  type RawString (line 2495) | interface RawString {
  type Primitive (line 2498) | type Primitive = string | number | boolean | Record<string | number, any...
  type TokenisedString (line 2499) | type TokenisedString = [
  type Untranslated (line 2503) | type Untranslated = Primitive | TokenisedString | RawString | null | und...
  type TranslatedString (line 2504) | type TranslatedString = string;
  type I18n (line 2505) | interface I18n {
  type Observable (line 2514) | interface Observable<T extends {}> {
  type URISettings (line 2522) | interface URISettings {
  type URIConstructor (line 2525) | interface URIConstructor {
  type SafeUriOptions (line 2539) | interface SafeUriOptions {
  class URI (line 2544) | class URI {
  type EditorManager (line 2580) | interface EditorManager extends Observable<EditorManagerEventMap> {
  type EditorObservable (line 2609) | interface EditorObservable extends Observable<EditorEventMap> {
  type ProcessorSuccess (line 2614) | interface ProcessorSuccess<T> {
  type ProcessorError (line 2618) | interface ProcessorError {
  type SimpleProcessor (line 2622) | type SimpleProcessor = (value: unknown) => boolean;
  type Processor (line 2623) | type Processor<T> = (value: unknown) => ProcessorSuccess<T> | ProcessorE...
  type BuiltInOptionTypeMap (line 2624) | interface BuiltInOptionTypeMap {
  type BuiltInOptionType (line 2635) | type BuiltInOptionType = keyof BuiltInOptionTypeMap;
  type BaseOptionSpec (line 2636) | interface BaseOptionSpec {
  type BuiltInOptionSpec (line 2641) | interface BuiltInOptionSpec<K extends BuiltInOptionType> extends BaseOpt...
  type SimpleOptionSpec (line 2645) | interface SimpleOptionSpec<T> extends BaseOptionSpec {
  type OptionSpec (line 2649) | interface OptionSpec<T, U> extends BaseOptionSpec {
  type Options (line 2653) | interface Options {
  type UploadResult$1 (line 2670) | interface UploadResult$1 {
  type EditorUpload (line 2677) | interface EditorUpload {
  type FormatChangeCallback (line 2685) | type FormatChangeCallback = (state: boolean, data: {
  type FormatRegistry (line 2690) | interface FormatRegistry {
  type Formatter (line 2699) | interface Formatter extends FormatRegistry {
  type EditorMode (line 2713) | interface EditorMode {
  type EditorModeApi (line 2719) | interface EditorModeApi {
  type Model (line 2724) | interface Model {
  type ModelManager (line 2730) | type ModelManager = AddOnManager<Model>;
  type Plugin (line 2731) | interface Plugin {
  type PluginManager (line 2739) | type PluginManager = AddOnManager<void | Plugin>;
  type ShortcutsConstructor (line 2740) | interface ShortcutsConstructor {
  type CommandFunc (line 2744) | type CommandFunc = string | [
  class Shortcuts (line 2749) | class Shortcuts {
  type RenderResult (line 2763) | interface RenderResult {
  type Theme (line 2768) | interface Theme {
  type ThemeManager (line 2778) | type ThemeManager = AddOnManager<void | Theme>;
  type EditorConstructor (line 2779) | interface EditorConstructor {
  class Editor (line 2783) | class Editor implements EditorObservable {
  type UrlObject (line 2914) | interface UrlObject {
  type WaitState (line 2919) | type WaitState = 'added' | 'loaded';
  type AddOnConstructor (line 2920) | type AddOnConstructor<T> = (editor: Editor, url: string) => T;
  type AddOnManager (line 2921) | interface AddOnManager<T> {
  type RangeUtils (line 2935) | interface RangeUtils {
  type ScriptLoaderSettings (line 2943) | interface ScriptLoaderSettings {
  type ScriptLoaderConstructor (line 2946) | interface ScriptLoaderConstructor {
  class ScriptLoader (line 2951) | class ScriptLoader {
  type TextProcessCallback (line 2970) | type TextProcessCallback = (node: Text, offset: number, text: string) =>...
  type Spot (line 2971) | interface Spot {
  type TextSeeker (line 2975) | interface TextSeeker {
  type DomTreeWalkerConstructor (line 2979) | interface DomTreeWalkerConstructor {
  class DomTreeWalker (line 2983) | class DomTreeWalker {
  type Version (line 2994) | interface Version {
  type Env (line 2998) | interface Env {
  type FakeClipboardItem (line 3037) | interface FakeClipboardItem {
  type FakeClipboard (line 3042) | interface FakeClipboard {
  type FocusManager (line 3048) | interface FocusManager {
  type EntitiesMap (line 3051) | interface EntitiesMap {
  type Entities (line 3054) | interface Entities {
  type IconPack (line 3062) | interface IconPack {
  type IconManager (line 3065) | interface IconManager {
  type Resource (line 3070) | interface Resource {
  type TextPatterns_d_Pattern (line 3077) | type TextPatterns_d_Pattern = Pattern;
  type TextPatterns_d_RawPattern (line 3078) | type TextPatterns_d_RawPattern = RawPattern;
  type TextPatterns_d_DynamicPatternsLookup (line 3079) | type TextPatterns_d_DynamicPatternsLookup = DynamicPatternsLookup;
  type TextPatterns_d_RawDynamicPatternsLookup (line 3080) | type TextPatterns_d_RawDynamicPatternsLookup = RawDynamicPatternsLookup;
  type TextPatterns_d_DynamicPatternContext (line 3081) | type TextPatterns_d_DynamicPatternContext = DynamicPatternContext;
  type TextPatterns_d_BlockCmdPattern (line 3082) | type TextPatterns_d_BlockCmdPattern = BlockCmdPattern;
  type TextPatterns_d_BlockPattern (line 3083) | type TextPatterns_d_BlockPattern = BlockPattern;
  type TextPatterns_d_BlockFormatPattern (line 3084) | type TextPatterns_d_BlockFormatPattern = BlockFormatPattern;
  type TextPatterns_d_InlineCmdPattern (line 3085) | type TextPatterns_d_InlineCmdPattern = InlineCmdPattern;
  type TextPatterns_d_InlinePattern (line 3086) | type TextPatterns_d_InlinePattern = InlinePattern;
  type TextPatterns_d_InlineFormatPattern (line 3087) | type TextPatterns_d_InlineFormatPattern = InlineFormatPattern;
  type Delay (line 3091) | interface Delay {
  type UploadResult (line 3095) | type UploadResult = UploadResult$2;
  type ImageUploader (line 3096) | interface ImageUploader {
  type ArrayCallback$1 (line 3099) | type ArrayCallback$1<T, R> = (this: any, x: T, i: number, xs: ArrayLike<...
  type ObjCallback$1 (line 3100) | type ObjCallback$1<T, R> = (this: any, value: T, key: string, obj: Recor...
  type ArrayCallback (line 3101) | type ArrayCallback<T, R> = ArrayCallback$1<T, R>;
  type ObjCallback (line 3102) | type ObjCallback<T, R> = ObjCallback$1<T, R>;
  type WalkCallback (line 3103) | type WalkCallback<T> = (this: any, o: T, i: string, n: keyof T | undefin...
  type Tools (line 3104) | interface Tools {
  type KeyboardLikeEvent (line 3130) | interface KeyboardLikeEvent {
  type VK (line 3136) | interface VK {
  type DOMUtilsNamespace (line 3154) | interface DOMUtilsNamespace {
  type RangeUtilsNamespace (line 3159) | interface RangeUtilsNamespace {
  type AddOnManagerNamespace (line 3166) | interface AddOnManagerNamespace {
  type BookmarkManagerNamespace (line 3175) | interface BookmarkManagerNamespace {
  type TinyMCE (line 3179) | interface TinyMCE extends EditorManager {

FILE: apps/web-antd/src/adapter/component/index.ts
  type ComponentType (line 129) | type ComponentType =
  function initComponentAdapter (line 164) | async function initComponentAdapter() {

FILE: apps/web-antd/src/adapter/form.ts
  function initSetupVbenForm (line 13) | async function initSetupVbenForm() {
  type VbenFormSchema (line 54) | type VbenFormSchema = FormSchema<ComponentType>;
  type FormSchemaGetter (line 56) | type FormSchemaGetter = () => VbenFormSchema[];

FILE: apps/web-antd/src/adapter/vxe-table.ts
  method renderTableDefault (line 81) | renderTableDefault(_renderOpts, params) {
  method renderTableDefault (line 89) | renderTableDefault(renderOpts) {
  function vxeCheckboxChecked (line 114) | function vxeCheckboxChecked(
  function addSortParams (line 125) | function addSortParams(

FILE: apps/web-antd/src/api/aiflow/adapters.ts
  method httpGet (line 4) | httpGet<T = any>(url: string, config?: any) {
  method httpPost (line 8) | httpPost<T = any>(url: string, data?: any, config?: any) {
  method httpPut (line 12) | httpPut<T = any>(url: string, data?: any, config?: any) {
  method httpDelete (line 16) | httpDelete<T = any>(url: string, config?: any) {

FILE: apps/web-antd/src/api/aiflow/index.ts
  method workflowAdd (line 4) | workflowAdd<T = any>(data: { title: string; remark: string; isPublic: bo...
  method workflowCopy (line 8) | workflowCopy<T = any>(wfUuid: string) {
  method workflowUpdate (line 12) | workflowUpdate<T = any>(data: Workflow.WorkflowUpdateReq) {
  method workflowDel (line 16) | workflowDel<T = any>(uuid: string) {
  method workflowSetPublic (line 20) | workflowSetPublic<T = any>(uuid: string, isPublic?: boolean) {
  method workflowBaseInfoUpdate (line 24) | workflowBaseInfoUpdate<T = any>(data: { uuid: string; title: string; rem...
  method addNode (line 29) | addNode<T = any>(data: { name: string; title: string }) {
  method uploadFile (line 34) | uploadFile<T = any>(data: File) {
  method workflowGet (line 39) | workflowGet<T = any>(uuid: string) {
  method workflowPage (line 43) | workflowPage<T = any>(params: {
  method workflowComponents (line 58) | workflowComponents<T = any>() {
  method workflowSearchMine (line 62) | workflowSearchMine<T = any>(keyword: string, currentPage: number, pageSi...
  method workflowSearchPublic (line 67) | workflowSearchPublic<T = any>(keyword: string, currentPage: number, page...
  method workflowRuntimes (line 72) | workflowRuntimes<T = any>(wfUuid: string, currentPage: number, pageSize:...
  method workflowRuntimeNodes (line 76) | workflowRuntimeNodes<T = any>(wfRuntimeUuid: string) {
  method workflowRuntimesClear (line 80) | workflowRuntimesClear<T = any>() {
  method workflowOperators (line 84) | workflowOperators<T = any>() {
  method workflowRuntimeDelete (line 88) | workflowRuntimeDelete<T = any>(wfRuntimeUuid: string) {
  method workflowRuntimeResume (line 92) | workflowRuntimeResume<T = any>(params: {

FILE: apps/web-antd/src/api/aiflow/runtime.ts
  type WorkflowRunParams (line 5) | interface WorkflowRunParams {
  type WorkflowResumeParams (line 15) | interface WorkflowResumeParams {
  function setWorkflowRunImpl (line 23) | function setWorkflowRunImpl(fn: (p: WorkflowRunParams) => Promise<void>) {
  function setWorkflowResumeImpl (line 27) | function setWorkflowResumeImpl(fn: (p: WorkflowResumeParams) => Promise<...
  function workflowRun (line 31) | async function workflowRun(p: WorkflowRunParams) {
  function workflowRuntimeResume (line 47) | async function workflowRuntimeResume(p: WorkflowResumeParams) {
  function setUploadAction (line 55) | function setUploadAction(url: string) { uploadAction = url }
  function getUploadAction (line 56) | function getUploadAction() { return uploadAction }
  function commonSseProcess (line 59) | async function commonSseProcess(
  function workflowRuntimes (line 152) | function workflowRuntimes<T = any>(wfUuid: string, currentPage: number, ...
  function workflowRuntimeNodes (line 156) | function workflowRuntimeNodes<T = any>(wfRuntimeUuid: string) {
  function workflowRuntimesClear (line 160) | function workflowRuntimesClear<T = any>() {
  function workflowRuntimeDelete (line 164) | function workflowRuntimeDelete<T = any>(uuid: string) {

FILE: apps/web-antd/src/api/aiflow/types.d.ts
  type WorkflowUpdateReq (line 2) | interface WorkflowUpdateReq {
  type WorkflowInfo (line 11) | interface WorkflowInfo {
  type WorkflowNode (line 20) | interface WorkflowNode {
  type WorkflowEdge (line 32) | interface WorkflowEdge {
  type WorkflowComponent (line 41) | interface WorkflowComponent {
  type WorkflowRuntime (line 48) | interface WorkflowRuntime {
  type WorkflowRuntimeNode (line 56) | interface WorkflowRuntimeNode {

FILE: apps/web-antd/src/api/chat/chatconfig/index.ts
  function configList (line 13) | function configList(params?: ConfigQuery) {
  function configExport (line 24) | function configExport(params?: ConfigQuery) {
  function configInfo (line 33) | function configInfo(id: ID) {
  function configAdd (line 42) | function configAdd(data: ConfigForm) {
  function configUpdate (line 51) | function configUpdate(data: ConfigForm) {
  function configRemove (line 60) | function configRemove(id: ID | IDS) {

FILE: apps/web-antd/src/api/chat/chatconfig/model.d.ts
  type ConfigVO (line 3) | interface ConfigVO {
  type ConfigForm (line 40) | interface ConfigForm extends BaseEntity {
  type ConfigQuery (line 77) | interface ConfigQuery extends PageQuery {

FILE: apps/web-antd/src/api/chat/message/index.ts
  function messageList (line 13) | function messageList(params?: MessageQuery) {
  function messageExport (line 24) | function messageExport(params?: MessageQuery) {
  function messageInfo (line 33) | function messageInfo(id: ID) {
  function messageAdd (line 42) | function messageAdd(data: MessageForm) {
  function messageUpdate (line 51) | function messageUpdate(data: MessageForm) {
  function messageRemove (line 60) | function messageRemove(id: ID | IDS) {

FILE: apps/web-antd/src/api/chat/message/model.d.ts
  type MessageVO (line 3) | interface MessageVO {
  type MessageForm (line 45) | interface MessageForm extends BaseEntity {
  type MessageQuery (line 87) | interface MessageQuery extends PageQuery {

FILE: apps/web-antd/src/api/chat/model/index.ts
  function modelList (line 13) | function modelList(params?: ModelQuery) {
  function embeddingModelList (line 23) | function embeddingModelList() {
  function rerankModelList (line 31) | function rerankModelList() {
  function modelExport (line 40) | function modelExport(params?: ModelQuery) {
  function modelInfo (line 49) | function modelInfo(id: ID) {
  function modelAdd (line 58) | function modelAdd(data: ModelForm) {
  function modelUpdate (line 67) | function modelUpdate(data: ModelForm) {
  function modelRemove (line 76) | function modelRemove(id: ID | IDS) {

FILE: apps/web-antd/src/api/chat/model/model.d.ts
  type ModelVO (line 3) | interface ModelVO {
  type ModelForm (line 55) | interface ModelForm extends BaseEntity {
  type ModelQuery (line 107) | interface ModelQuery extends PageQuery {

FILE: apps/web-antd/src/api/chat/provider/index.ts
  function providerList (line 13) | function providerList(params?: ProviderQuery) {
  function providerExport (line 24) | function providerExport(params?: ProviderQuery) {
  function providerInfo (line 33) | function providerInfo(id: ID) {
  function providerAdd (line 42) | function providerAdd(data: ProviderForm) {
  function providerUpdate (line 51) | function providerUpdate(data: ProviderForm) {
  function providerRemove (line 60) | function providerRemove(id: ID | IDS) {

FILE: apps/web-antd/src/api/chat/provider/model.d.ts
  type ProviderVO (line 3) | interface ProviderVO {
  type ProviderForm (line 55) | interface ProviderForm extends BaseEntity {
  type ProviderQuery (line 107) | interface ProviderQuery extends PageQuery {

FILE: apps/web-antd/src/api/common.d.ts
  type ID (line 1) | type ID = number | string;
  type IDS (line 2) | type IDS = (number | string)[];
  type BaseEntity (line 4) | interface BaseEntity {
  type PageResult (line 17) | interface PageResult<T = any> {
  type PageQuery (line 36) | interface PageQuery {

FILE: apps/web-antd/src/api/core/auth.ts
  type BaseLoginParams (line 20) | interface BaseLoginParams {
  type OAuthLoginParams (line 32) | interface OAuthLoginParams extends BaseLoginParams {
  type SimpleLoginParams (line 45) | interface SimpleLoginParams extends BaseLoginParams {
  type LoginParams (line 52) | type LoginParams = OAuthLoginParams | SimpleLoginParams;
  type LoginResult (line 65) | interface LoginResult {
  type RefreshTokenResult (line 71) | interface RefreshTokenResult {
  function loginApi (line 80) | async function loginApi(data: AuthApi.LoginParams) {
  function doLogout (line 94) | function doLogout() {
  function seeConnectionClose (line 102) | function seeConnectionClose() {
  type TenantOption (line 117) | interface TenantOption {
  type TenantResp (line 127) | interface TenantResp {
  function tenantList (line 135) | function tenantList() {
  function getAccessCodesApi (line 143) | async function getAccessCodesApi() {
  function authBinding (line 152) | function authBinding(source: string, tenantId: string) {
  function authUnbinding (line 165) | function authUnbinding(id: string) {
  function authCallback (line 174) | function authCallback(data: AuthApi.OAuthLoginParams) {

FILE: apps/web-antd/src/api/core/captcha.ts
  function sendSmsCode (line 8) | function sendSmsCode(phonenumber: string) {
  function sendEmailCode (line 19) | function sendEmailCode(email: string) {
  type CaptchaResponse (line 30) | interface CaptchaResponse {
  function captchaImage (line 40) | function captchaImage() {

FILE: apps/web-antd/src/api/core/menu.ts
  type MenuMeta (line 10) | interface MenuMeta {
  type Menu (line 28) | interface Menu {
  function getAllMenusApi (line 43) | async function getAllMenusApi() {

FILE: apps/web-antd/src/api/core/upload.ts
  type AxiosProgressEvent (line 8) | type AxiosProgressEvent = AxiosRequestConfig['onUploadProgress'];
  type UploadResult (line 13) | interface UploadResult {
  function uploadApi (line 28) | function uploadApi(
  type UploadApi (line 47) | type UploadApi = typeof uploadApi;

FILE: apps/web-antd/src/api/core/user.ts
  type Role (line 3) | interface Role {
  type User (line 14) | interface User {
  type UserInfoResp (line 34) | interface UserInfoResp {
  function getUserInfoApi (line 44) | async function getUserInfoApi() {

FILE: apps/web-antd/src/api/graph/index.ts
  function graphInstanceList (line 28) | function graphInstanceList(params?: any) {
  function graphInstanceAdd (line 35) | function graphInstanceAdd(data: Partial<GraphInstance>) {
  function graphInstanceUpdate (line 42) | function graphInstanceUpdate(data: Partial<GraphInstance>) {
  function graphInstanceRemove (line 49) | function graphInstanceRemove(id: string | string[]) {
  function graphInstanceInfo (line 59) | function graphInstanceInfo(id: string) {
  function graphInstanceBuild (line 66) | function graphInstanceBuild(id: string) {
  function graphInstanceRebuild (line 73) | function graphInstanceRebuild(id: string) {
  function graphInstanceStatus (line 80) | function graphInstanceStatus(id: string) {
  function graphInstanceExport (line 87) | function graphInstanceExport(params?: any) {
  function graphQueryByKnowledge (line 98) | function graphQueryByKnowledge(knowledgeId: string, limit?: number) {
  function graphSearchEntity (line 107) | function graphSearchEntity(params: SearchParams) {
  function graphGetNeighbors (line 114) | function graphGetNeighbors(params: NeighborQueryParams) {
  function graphFindPath (line 121) | function graphFindPath(params: PathQueryParams) {
  function graphGetStats (line 128) | function graphGetStats(knowledgeId: string) {
  function graphDeleteData (line 135) | function graphDeleteData(knowledgeId: string) {
  function graphExtractEntities (line 144) | function graphExtractEntities(data: ExtractParams) {
  function graphIngestText (line 151) | function graphIngestText(data: IngestParams) {
  function graphRetrieve (line 158) | function graphRetrieve(data: RetrieveParams) {

FILE: apps/web-antd/src/api/graph/model.d.ts
  type GraphInstance (line 6) | interface GraphInstance {
  type GraphBuildTask (line 23) | interface GraphBuildTask {
  type GraphNode (line 42) | interface GraphNode {
  type GraphEdge (line 54) | interface GraphEdge {
  type GraphData (line 67) | interface GraphData {
  type GraphStats (line 73) | interface GraphStats {
  type ExtractedEntity (line 81) | interface ExtractedEntity {
  type ExtractedRelation (line 87) | interface ExtractedRelation {
  type ExtractionResult (line 94) | interface ExtractionResult {
  type GraphRetrievalResult (line 100) | interface GraphRetrievalResult {
  type GraphPath (line 107) | interface GraphPath {
  type NeighborQueryParams (line 114) | interface NeighborQueryParams {
  type PathQueryParams (line 121) | interface PathQueryParams {
  type SearchParams (line 129) | interface SearchParams {
  type ExtractParams (line 136) | interface ExtractParams {
  type IngestParams (line 142) | interface IngestParams {
  type RetrieveParams (line 150) | interface RetrieveParams {
  type GraphInstanceForm (line 157) | interface GraphInstanceForm {

FILE: apps/web-antd/src/api/helper.ts
  function commonExport (line 27) | function commonExport(url: string, data: Record<string, any>) {
  class UnauthorizedException (line 39) | class UnauthorizedException extends Error {}
  class ImpossibleReturn401Exception (line 44) | class ImpossibleReturn401Exception extends Error {}
  function handleUnauthorizedLogout (line 60) | function handleUnauthorizedLogout() {

FILE: apps/web-antd/src/api/knowledge/attach/index.ts
  function attachList (line 14) | function attachList(params?: AttachQuery) {
  function attachExport (line 23) | function attachExport(params?: AttachQuery) {
  function attachInfo (line 32) | function attachInfo(id: ID) {
  function attachAdd (line 41) | function attachAdd(data: AttachForm) {
  function attachUpdate (line 50) | function attachUpdate(data: AttachForm) {
  function attachRemove (line 59) | function attachRemove(id: ID | IDS) {
  function attachParse (line 67) | function attachParse(id: ID) {

FILE: apps/web-antd/src/api/knowledge/attach/model.d.ts
  type AttachVO (line 3) | interface AttachVO {
  type AttachForm (line 46) | interface AttachForm extends BaseEntity {
  type AttachQuery (line 84) | interface AttachQuery extends PageQuery {

FILE: apps/web-antd/src/api/knowledge/fragment/index.ts
  function fragmentList (line 14) | function fragmentList(params?: FragmentQuery) {
  function fragmentExport (line 23) | function fragmentExport(params?: FragmentQuery) {
  function fragmentInfo (line 32) | function fragmentInfo(id: ID) {
  function fragmentAdd (line 41) | function fragmentAdd(data: FragmentForm) {
  function fragmentUpdate (line 50) | function fragmentUpdate(data: FragmentForm) {
  function fragmentRemove (line 59) | function fragmentRemove(id: ID | IDS) {

FILE: apps/web-antd/src/api/knowledge/fragment/model.d.ts
  type FragmentVO (line 3) | interface FragmentVO {
  type FragmentForm (line 36) | interface FragmentForm extends BaseEntity {
  type FragmentQuery (line 69) | interface FragmentQuery extends PageQuery {

FILE: apps/web-antd/src/api/knowledge/info/index.ts
  function infoList (line 14) | function infoList(params?: InfoQuery) {
  function infoExport (line 23) | function infoExport(params?: InfoQuery) {
  function infoInfo (line 32) | function infoInfo(id: ID) {
  function infoAdd (line 41) | function infoAdd(data: InfoForm) {
  function infoUpdate (line 50) | function infoUpdate(data: InfoForm) {
  function infoRemove (line 59) | function infoRemove(id: ID | IDS) {
  function knowledgeRetrieval (line 68) | function knowledgeRetrieval(data: any) {

FILE: apps/web-antd/src/api/knowledge/info/model.d.ts
  type InfoVO (line 3) | interface InfoVO {
  type InfoForm (line 95) | interface InfoForm extends BaseEntity {
  type InfoQuery (line 187) | interface InfoQuery extends PageQuery {

FILE: apps/web-antd/src/api/mcp/market/index.ts
  type Api (line 8) | enum Api {
  function mcpMarketList (line 20) | function mcpMarketList(params?: PageQuery) {
  function mcpMarketAll (line 28) | function mcpMarketAll() {
  function mcpMarketExport (line 36) | function mcpMarketExport(data: Partial<McpMarket>) {
  function mcpMarketInfo (line 45) | function mcpMarketInfo(id: ID) {
  function mcpMarketAdd (line 53) | function mcpMarketAdd(data: Partial<McpMarket>) {
  function mcpMarketUpdate (line 61) | function mcpMarketUpdate(data: Partial<McpMarket>) {
  function mcpMarketChangeStatus (line 69) | function mcpMarketChangeStatus(data: any) {
  function mcpMarketRemove (line 79) | function mcpMarketRemove(ids: IDS) {
  function mcpMarketRefresh (line 87) | function mcpMarketRefresh(marketId: ID) {
  function mcpMarketLoadTool (line 95) | function mcpMarketLoadTool(toolId: ID) {
  function mcpMarketBatchLoadTools (line 103) | function mcpMarketBatchLoadTools(toolIds: ID[]) {
  function mcpMarketToolList (line 111) | function mcpMarketToolList(marketId: ID) {

FILE: apps/web-antd/src/api/mcp/market/model.d.ts
  type McpMarket (line 1) | interface McpMarket {
  type McpMarketTool (line 12) | interface McpMarketTool {
  type McpMarketRefreshResult (line 23) | interface McpMarketRefreshResult {

FILE: apps/web-antd/src/api/mcp/tool/index.ts
  type Api (line 8) | enum Api {
  function mcpToolList (line 21) | function mcpToolList(params?: PageQuery) {
  function mcpToolAll (line 29) | function mcpToolAll() {
  function mcpToolExport (line 37) | function mcpToolExport(data: Partial<McpTool>) {
  function mcpToolInfo (line 46) | function mcpToolInfo(id: ID) {
  function mcpToolAdd (line 54) | function mcpToolAdd(data: Partial<McpTool>) {
  function mcpToolUpdate (line 62) | function mcpToolUpdate(data: Partial<McpTool>) {
  function mcpToolChangeStatus (line 70) | function mcpToolChangeStatus(data: any) {
  function mcpToolRemove (line 80) | function mcpToolRemove(ids: IDS) {
  function mcpToolTest (line 88) | function mcpToolTest(id: ID) {

FILE: apps/web-antd/src/api/mcp/tool/model.d.ts
  type McpTool (line 1) | interface McpTool {
  type McpToolTestResult (line 12) | interface McpToolTestResult {

FILE: apps/web-antd/src/api/monitor/cache/index.ts
  type CommandStats (line 3) | interface CommandStats {
  type RedisInfo (line 8) | interface RedisInfo {
  type CacheInfo (line 12) | interface CacheInfo {
  function redisCacheInfo (line 22) | function redisCacheInfo() {

FILE: apps/web-antd/src/api/monitor/logininfo/index.ts
  type Api (line 8) | enum Api {
  function loginInfoList (line 21) | function loginInfoList(params?: PageQuery) {
  function loginInfoExport (line 30) | function loginInfoExport(data: any) {
  function loginInfoRemove (line 39) | function loginInfoRemove(infoIds: IDS) {
  function userUnlock (line 48) | function userUnlock(username: string) {
  function loginInfoClean (line 58) | function loginInfoClean() {

FILE: apps/web-antd/src/api/monitor/logininfo/model.d.ts
  type LoginLog (line 1) | interface LoginLog {

FILE: apps/web-antd/src/api/monitor/online/index.ts
  type Api (line 7) | enum Api {
  function onlineDeviceList (line 16) | function onlineDeviceList() {
  function onlineList (line 25) | function onlineList(params?: PageQuery) {
  function forceLogout (line 34) | function forceLogout(tokenId: string) {
  function forceLogout2 (line 43) | function forceLogout2(tokenId: string) {

FILE: apps/web-antd/src/api/monitor/online/model.d.ts
  type OnlineUser (line 1) | interface OnlineUser {

FILE: apps/web-antd/src/api/monitor/operlog/index.ts
  type Api (line 8) | enum Api {
  function operLogList (line 20) | function operLogList(params?: PageQuery) {
  function operLogDelete (line 30) | function operLogDelete(operIds: IDS) {
  function operLogClean (line 37) | function operLogClean() {
  function operLogExport (line 45) | function operLogExport(data: Partial<OperationLog>) {

FILE: apps/web-antd/src/api/monitor/operlog/model.d.ts
  type OperationLog (line 1) | interface OperationLog {

FILE: apps/web-antd/src/api/operator/configurationManage/index.ts
  type Api (line 3) | enum Api {
  function listConfig (line 8) | function listConfig() {
  function addConfig (line 12) | function addConfig(data: any) {

FILE: apps/web-antd/src/api/request.ts
  function createRequestClient (line 61) | function createRequestClient(baseURL: string) {

FILE: apps/web-antd/src/api/system/client/index.ts
  type Api (line 8) | enum Api {
  function clientList (line 20) | function clientList(params?: PageQuery) {
  function clientExport (line 28) | function clientExport(data: Partial<Client>) {
  function clientInfo (line 37) | function clientInfo(id: ID) {
  function clientAdd (line 45) | function clientAdd(data: Partial<Client>) {
  function clientUpdate (line 53) | function clientUpdate(data: Partial<Client>) {
  function clientChangeStatus (line 61) | function clientChangeStatus(data: any) {
  function clientRemove (line 73) | function clientRemove(ids: IDS) {

FILE: apps/web-antd/src/api/system/client/model.d.ts
  type Client (line 1) | interface Client {

FILE: apps/web-antd/src/api/system/config/index.ts
  type Api (line 8) | enum Api {
  function configList (line 21) | function configList(params?: PageQuery) {
  function configInfo (line 25) | function configInfo(configId: ID) {
  function configExport (line 33) | function configExport(data: Partial<SysConfig>) {
  function configRefreshCache (line 41) | function configRefreshCache() {
  function configUpdate (line 49) | function configUpdate(data: Partial<SysConfig>) {
  function configAdd (line 57) | function configAdd(data: Partial<SysConfig>) {
  function configRemove (line 65) | function configRemove(configIds: IDS) {
  function configInfoByKey (line 74) | function configInfoByKey(configKey: string) {

FILE: apps/web-antd/src/api/system/config/model.d.ts
  type SysConfig (line 1) | interface SysConfig {

FILE: apps/web-antd/src/api/system/dept/index.ts
  type Api (line 7) | enum Api {
  function deptList (line 17) | function deptList(params?: { deptName?: string; status?: string }) {
  function deptNodeList (line 26) | function deptNodeList(deptId: ID) {
  function deptInfo (line 35) | function deptInfo(deptId: ID) {
  function deptAdd (line 43) | function deptAdd(data: Partial<Dept>) {
  function deptUpdate (line 51) | function deptUpdate(data: Partial<Dept>) {
  function deptRemove (line 60) | function deptRemove(deptId: ID) {

FILE: apps/web-antd/src/api/system/dept/model.d.ts
  type Dept (line 1) | interface Dept {

FILE: apps/web-antd/src/api/system/dict/dict-data-model.d.ts
  type DictData (line 1) | interface DictData {

FILE: apps/web-antd/src/api/system/dict/dict-data.ts
  type Api (line 8) | enum Api {
  function dictDataInfo (line 19) | function dictDataInfo(dictType: string) {
  function dictDataList (line 28) | function dictDataList(params?: PageQuery) {
  function dictDataExport (line 37) | function dictDataExport(data: Partial<DictData>) {
  function dictDataRemove (line 46) | function dictDataRemove(dictIds: IDS) {
  function dictDataAdd (line 55) | function dictDataAdd(data: Partial<DictData>) {
  function dictDataUpdate (line 64) | function dictDataUpdate(data: Partial<DictData>) {
  function dictDetailInfo (line 73) | function dictDetailInfo(dictCode: ID) {

FILE: apps/web-antd/src/api/system/dict/dict-type-model.d.ts
  type DictType (line 1) | interface DictType {

FILE: apps/web-antd/src/api/system/dict/dict-type.ts
  type Api (line 8) | enum Api {
  function dictTypeList (line 21) | function dictTypeList(params?: PageQuery) {
  function dictTypeExport (line 30) | function dictTypeExport(data: Partial<DictType>) {
  function dictTypeRemove (line 39) | function dictTypeRemove(dictIds: IDS) {
  function refreshDictTypeCache (line 47) | function refreshDictTypeCache() {
  function dictTypeAdd (line 56) | function dictTypeAdd(data: Partial<DictType>) {
  function dictTypeUpdate (line 65) | function dictTypeUpdate(data: Partial<DictType>) {
  function dictTypeInfo (line 74) | function dictTypeInfo(dictId: ID) {
  function dictOptionSelectList (line 83) | function dictOptionSelectList() {

FILE: apps/web-antd/src/api/system/dict/index.ts
  function getDictItems (line 33) | function getDictItems(dictType: string) {

FILE: apps/web-antd/src/api/system/menu/index.ts
  type Api (line 7) | enum Api {
  function menuList (line 20) | function menuList(params?: MenuQuery) {
  function menuInfo (line 29) | function menuInfo(menuId: ID) {
  function menuAdd (line 37) | function menuAdd(data: Partial<Menu>) {
  function menuUpdate (line 45) | function menuUpdate(data: Partial<Menu>) {
  function menuRemove (line 53) | function menuRemove(menuIds: IDS) {
  function roleMenuTreeSelect (line 62) | function roleMenuTreeSelect(roleId: ID) {
  function menuTreeSelect (line 70) | function menuTreeSelect() {
  function tenantPackageMenuTreeSelect (line 79) | function tenantPackageMenuTreeSelect(packageId: ID) {
  function menuCascadeRemove (line 90) | function menuCascadeRemove(menuIds: IDS) {

FILE: apps/web-antd/src/api/system/menu/model.d.ts
  type Menu (line 1) | interface Menu {
  type MenuOption (line 29) | interface MenuOption {
  type MenuResp (line 45) | interface MenuResp {
  type MenuQuery (line 53) | interface MenuQuery {

FILE: apps/web-antd/src/api/system/notice/index.ts
  type Api (line 7) | enum Api {
  function noticeList (line 17) | function noticeList(params?: PageQuery) {
  function noticeInfo (line 26) | function noticeInfo(noticeId: ID) {
  function noticeAdd (line 34) | function noticeAdd(data: Partial<Notice>) {
  function noticeUpdate (line 42) | function noticeUpdate(data: any) {
  function noticeRemove (line 50) | function noticeRemove(noticeIds: IDS) {

FILE: apps/web-antd/src/api/system/notice/model.d.ts
  type Notice (line 1) | interface Notice {

FILE: apps/web-antd/src/api/system/oss-config/index.ts
  type Api (line 7) | enum Api {
  function ossConfigList (line 14) | function ossConfigList(params?: PageQuery) {
  function ossConfigInfo (line 19) | function ossConfigInfo(ossConfigId: ID) {
  function ossConfigAdd (line 24) | function ossConfigAdd(data: Partial<OssConfig>) {
  function ossConfigUpdate (line 29) | function ossConfigUpdate(data: Partial<OssConfig>) {
  function ossConfigRemove (line 34) | function ossConfigRemove(ossConfigIds: IDS) {
  function ossConfigChangeStatus (line 39) | function ossConfigChangeStatus(data: any) {

FILE: apps/web-antd/src/api/system/oss-config/model.d.ts
  type OssConfig (line 1) | interface OssConfig {

FILE: apps/web-antd/src/api/system/oss/index.ts
  type Api (line 10) | enum Api {
  function ossList (line 23) | function ossList(params?: PageQuery) {
  function ossInfo (line 32) | function ossInfo(ossIds: ID | IDS) {
  function ossUpload (line 41) | function ossUpload(file: Blob | File) {
  function ossDownload (line 56) | function ossDownload(
  function checkLoginBeforeDownload (line 76) | function checkLoginBeforeDownload() {
  function ossRemove (line 87) | function ossRemove(ossIds: IDS) {

FILE: apps/web-antd/src/api/system/oss/model.d.ts
  type OssFile (line 1) | interface OssFile {
  type OssConfig (line 13) | interface OssConfig {

FILE: apps/web-antd/src/api/system/post/index.ts
  type Api (line 9) | enum Api {
  function postList (line 21) | function postList(params?: PageQuery) {
  function postExport (line 30) | function postExport(data: Partial<Post>) {
  function postInfo (line 39) | function postInfo(postId: ID) {
  function postAdd (line 48) | function postAdd(data: Partial<Post>) {
  function postUpdate (line 57) | function postUpdate(data: Partial<Post>) {
  function postRemove (line 66) | function postRemove(postIds: IDS) {
  function postOptionSelect (line 75) | function postOptionSelect(deptId: ID) {
  function postDeptTreeSelect (line 83) | function postDeptTreeSelect() {

FILE: apps/web-antd/src/api/system/post/model.d.ts
  type Post (line 4) | interface Post {

FILE: apps/web-antd/src/api/system/profile/index.ts
  type Api (line 7) | enum Api {
  function userProfile (line 17) | function userProfile() {
  function userProfileUpdate (line 26) | function userProfileUpdate(data: any) {
  function userUpdatePassword (line 35) | function userUpdatePassword(data: UpdatePasswordParam) {
  function userUpdateAvatar (line 46) | function userUpdateAvatar(fileCallback: FileCallBack) {

FILE: apps/web-antd/src/api/system/profile/model.d.ts
  type Dept (line 1) | interface Dept {
  type Role (line 15) | interface Role {
  type User (line 30) | interface User {
  type UserProfile (line 60) | interface UserProfile {
  type UpdatePasswordParam (line 66) | interface UpdatePasswordParam {
  type FileCallBack (line 71) | interface FileCallBack {

FILE: apps/web-antd/src/api/system/role/index.ts
  type Api (line 9) | enum Api {
  function roleList (line 29) | function roleList(params?: PageQuery) {
  function roleExport (line 38) | function roleExport(data: Partial<Role>) {
  function roleInfo (line 47) | function roleInfo(roleId: ID) {
  function roleAdd (line 56) | function roleAdd(data: Partial<Role>) {
  function roleUpdate (line 65) | function roleUpdate(data: Partial<Role>) {
  function roleChangeStatus (line 74) | function roleChangeStatus(data: Partial<Role>) {
  function roleRemove (line 87) | function roleRemove(roleIds: IDS) {
  function roleDataScope (line 96) | function roleDataScope(data: any) {
  function roleOptionSelect (line 103) | function roleOptionSelect(params?: any) {
  function roleAllocatedList (line 112) | function roleAllocatedList(params?: PageQuery) {
  function roleUnallocatedList (line 121) | function roleUnallocatedList(params: any) {
  function roleAuthCancel (line 131) | function roleAuthCancel(data: { roleId: ID; userId: ID }) {
  function roleAuthCancelAll (line 141) | function roleAuthCancelAll(roleId: ID, userIds: IDS) {
  function roleSelectAll (line 153) | function roleSelectAll(roleId: ID, userIds: IDS) {
  function roleDeptTree (line 164) | function roleDeptTree(roleId: ID) {

FILE: apps/web-antd/src/api/system/role/model.d.ts
  type Role (line 1) | interface Role {
  type DeptOption (line 17) | interface DeptOption {
  type DeptResp (line 26) | interface DeptResp {

FILE: apps/web-antd/src/api/system/social/index.ts
  type Api (line 7) | enum Api {
  function socialList (line 16) | function socialList() {
  function socialInfo (line 23) | function socialInfo(id: ID) {

FILE: apps/web-antd/src/api/system/social/model.d.ts
  type SocialInfo (line 1) | interface SocialInfo {

FILE: apps/web-antd/src/api/system/tenant-package/index.ts
  type Api (line 8) | enum Api {
  function packageList (line 21) | function packageList(params?: PageQuery) {
  function packageSelectList (line 31) | function packageSelectList() {
  function packageExport (line 40) | function packageExport(data: Partial<TenantPackage>) {
  function packageInfo (line 49) | function packageInfo(id: ID) {
  function packageAdd (line 58) | function packageAdd(data: Partial<TenantPackage>) {
  function packageUpdate (line 67) | function packageUpdate(data: Partial<TenantPackage>) {
  function packageChangeStatus (line 76) | function packageChangeStatus(data: Partial<TenantPackage>) {
  function packageRemove (line 89) | function packageRemove(ids: IDS) {

FILE: apps/web-antd/src/api/system/tenant-package/model.d.ts
  type TenantPackage (line 10) | interface TenantPackage {

FILE: apps/web-antd/src/api/system/tenant/index.ts
  type Api (line 8) | enum Api {
  function tenantList (line 24) | function tenantList(params?: PageQuery) {
  function tenantExport (line 33) | function tenantExport(data: Partial<Tenant>) {
  function tenantInfo (line 42) | function tenantInfo(id: ID) {
  function tenantAdd (line 51) | function tenantAdd(data: Partial<Tenant>) {
  function tenantUpdate (line 60) | function tenantUpdate(data: Partial<Tenant>) {
  function tenantStatusChange (line 69) | function tenantStatusChange(data: Partial<Tenant>) {
  function tenantRemove (line 83) | function tenantRemove(ids: IDS) {
  function tenantDynamicToggle (line 92) | function tenantDynamicToggle(tenantId: string) {
  function tenantDynamicClear (line 100) | function tenantDynamicClear() {
  function tenantSyncPackage (line 110) | function tenantSyncPackage(tenantId: string, packageId: string) {
  function dictSyncTenant (line 122) | function dictSyncTenant(tenantId?: string) {
  function syncTenantConfig (line 133) | function syncTenantConfig() {

FILE: apps/web-antd/src/api/system/tenant/model.d.ts
  type Tenant (line 1) | interface Tenant {

FILE: apps/web-antd/src/api/system/user/index.ts
  type Api (line 14) | enum Api {
  function userList (line 32) | function userList(params?: PageQuery) {
  function userExport (line 41) | function userExport(data: Partial<User>) {
  function userImportData (line 50) | function userImportData(data: UserImportParam) {
  function downloadImportTemplate (line 67) | function downloadImportTemplate() {
  function findUserInfo (line 84) | function findUserInfo(userId?: ID) {
  function userAdd (line 94) | function userAdd(data: Partial<User>) {
  function userUpdate (line 103) | function userUpdate(data: Partial<User>) {
  function userStatusChange (line 112) | function userStatusChange(data: Partial<User>) {
  function userRemove (line 125) | function userRemove(userIds: IDS) {
  function userResetPassword (line 134) | function userResetPassword(data: ResetPwdParam) {
  function getUserAuthRole (line 145) | function getUserAuthRole(userId: ID) {
  function userAuthRoleUpdate (line 154) | function userAuthRoleUpdate(userId: ID, roleIds: number[]) {
  function getDeptTree (line 162) | function getDeptTree() {
  function listUserByDeptId (line 169) | function listUserByDeptId(deptId: ID) {

FILE: apps/web-antd/src/api/system/user/model.d.ts
  type UserImportParam (line 6) | interface UserImportParam {
  type ResetPwdParam (line 14) | interface ResetPwdParam {
  type Dept (line 19) | interface Dept {
  type Role (line 33) | interface Role {
  type User (line 48) | interface User {
  type Post (line 72) | interface Post {
  type UserInfoResponse (line 90) | interface UserInfoResponse {
  type DeptTree (line 101) | interface DeptTree {
  type DeptTreeData (line 113) | interface DeptTreeData {

FILE: apps/web-antd/src/api/tool/gen/index.ts
  type Api (line 8) | enum Api {
  function generatedList (line 22) | function generatedList(params?: PageQuery) {
  function genInfo (line 27) | function genInfo(tableId: ID) {
  function readyToGenList (line 32) | function readyToGenList(params?: PageQuery) {
  function columnList (line 37) | function columnList(tableId: ID) {
  function importTable (line 47) | function importTable(tables: string | string[], dataName: string) {
  function editSave (line 58) | function editSave(data: any) {
  function genRemove (line 63) | function genRemove(tableIds: IDS) {
  function previewCode (line 68) | function previewCode(tableId: ID) {
  function genDownload (line 75) | function genDownload(tableId: ID) {
  function genWithPath (line 80) | function genWithPath(tableId: ID) {
  function syncDb (line 85) | function syncDb(tableId: ID) {
  function batchGenCode (line 92) | function batchGenCode(tableIdStr: ID | IDS) {
  function getDataSourceNames (line 101) | function getDataSourceNames() {

FILE: apps/web-antd/src/api/tool/gen/model.d.ts
  type Column (line 1) | interface Column {
  type Table (line 37) | interface Table {
  type Row (line 72) | interface Row {
  type Column (line 108) | interface Column {
  type Info (line 144) | interface Info {
  type GenInfo (line 183) | interface GenInfo {

FILE: apps/web-antd/src/api/workflow/category/index.ts
  function categoryTree (line 16) | function categoryTree() {
  function categoryList (line 25) | function categoryList(params?: CategoryQuery) {
  function categoryInfo (line 34) | function categoryInfo(id: ID) {
  function categoryAdd (line 43) | function categoryAdd(data: CategoryForm) {
  function categoryUpdate (line 52) | function categoryUpdate(data: CategoryForm) {
  function categoryRemove (line 61) | function categoryRemove(id: ID | IDS) {

FILE: apps/web-antd/src/api/workflow/category/model.d.ts
  type CategoryVO (line 3) | interface CategoryVO {
  type CategoryForm (line 36) | interface CategoryForm extends BaseEntity {
  type CategoryQuery (line 63) | interface CategoryQuery {
  type CategoryTree (line 90) | interface CategoryTree {

FILE: apps/web-antd/src/api/workflow/definition/index.ts
  function workflowDefinitionList (line 12) | function workflowDefinitionList(params?: PageQuery) {
  function unPublishList (line 24) | function unPublishList(params?: PageQuery) {
  function getHisListByKey (line 36) | function getHisListByKey(flowCode: string) {
  function workflowDefinitionInfo (line 47) | function workflowDefinitionInfo(id: ID) {
  function workflowDefinitionAdd (line 55) | function workflowDefinitionAdd(data: any) {
  function workflowDefinitionUpdate (line 63) | function workflowDefinitionUpdate(data: any) {
  function workflowDefinitionPublish (line 72) | function workflowDefinitionPublish(id: ID) {
  function workflowDefinitionUnPublish (line 83) | function workflowDefinitionUnPublish(id: ID) {
  function workflowDefinitionDelete (line 93) | function workflowDefinitionDelete(ids: IDS) {
  function workflowDefinitionCopy (line 101) | function workflowDefinitionCopy(id: ID) {
  function workflowDefinitionImport (line 109) | function workflowDefinitionImport(data: {
  function workflowDefinitionExport (line 125) | function workflowDefinitionExport(id: ID) {
  function workflowDefinitionXml (line 141) | function workflowDefinitionXml(id: ID) {
  function workflowDefinitionActive (line 151) | function workflowDefinitionActive(id: ID, active: boolean) {

FILE: apps/web-antd/src/api/workflow/definition/model.d.ts
  type ProcessDefinition (line 1) | interface ProcessDefinition {

FILE: apps/web-antd/src/api/workflow/instance/index.ts
  function getTaskByBusinessId (line 12) | function getTaskByBusinessId(businessId: string) {
  function pageByRunning (line 23) | function pageByRunning(params?: PageQuery) {
  function pageByFinish (line 32) | function pageByFinish(params?: PageQuery) {
  function deleteByBusinessIds (line 40) | function deleteByBusinessIds(businessIds: IDS) {
  function deleteByInstanceIds (line 50) | function deleteByInstanceIds(instanceIds: IDS) {
  function cancelProcessApply (line 60) | function cancelProcessApply(data: { businessId: ID; message?: string }) {
  function workflowInstanceActive (line 72) | function workflowInstanceActive(instanceId: ID, active: boolean) {
  function pageByCurrent (line 83) | function pageByCurrent(params?: PageQuery) {
  function flowInfo (line 95) | function flowInfo(businessId: string) {
  function instanceVariable (line 106) | function instanceVariable(instanceId: string) {
  function workflowInstanceInvalid (line 115) | function workflowInstanceInvalid(data: {
  function updateFlowVariable (line 130) | function updateFlowVariable(data: {

FILE: apps/web-antd/src/api/workflow/instance/model.d.ts
  type Flow (line 3) | interface Flow {
  type FlowInfoResponse (line 40) | interface FlowInfoResponse {
  type FlowInstanceVariableResp (line 45) | interface FlowInstanceVariableResp {

FILE: apps/web-antd/src/api/workflow/spel/index.tsx
  function spelList (line 7) | function spelList(params?: PageQuery) {
  function spelInfo (line 11) | function spelInfo(id: ID) {
  function spelAdd (line 15) | function spelAdd(data: Partial<Spel>) {
  function spelUpdate (line 19) | function spelUpdate(data: Partial<Spel>) {
  function spelDelete (line 23) | function spelDelete(ids: ID[]) {

FILE: apps/web-antd/src/api/workflow/spel/model.d.ts
  type Spel (line 1) | interface Spel {

FILE: apps/web-antd/src/api/workflow/task/index.ts
  function startWorkFlow (line 18) | function startWorkFlow(data: StartWorkFlowReqData) {
  function completeTask (line 29) | function completeTask(data: CompleteTaskReqData) {
  function pageByTaskWait (line 37) | function pageByTaskWait(params?: PageQuery) {
  function pageByTaskFinish (line 48) | function pageByTaskFinish(params?: PageQuery) {
  function pageByAllTaskWait (line 59) | function pageByAllTaskWait(params?: PageQuery) {
  function pageByAllTaskFinish (line 70) | function pageByAllTaskFinish(params?: PageQuery) {
  function pageByTaskCopy (line 81) | function pageByTaskCopy(params?: PageQuery) {
  function getTaskByTaskId (line 93) | function getTaskByTaskId(taskId: string) {
  function terminationTask (line 100) | function terminationTask(data: { comment?: string; taskId: string }) {
  function taskOperation (line 112) | function taskOperation(
  function updateAssignee (line 127) | function updateAssignee(taskIdList: IDS, userId: ID) {
  function backProcess (line 138) | function backProcess(data: any) {
  function getBackTaskNode (line 147) | function getBackTaskNode(taskId: string, nodeCode: string) {
  function currentTaskAllUser (line 157) | function currentTaskAllUser(taskId: ID) {
  function getNextNodeList (line 167) | function getNextNodeList(data: { taskId: string }) {

FILE: apps/web-antd/src/api/workflow/task/model.d.ts
  type ButtonWithPermission (line 1) | interface ButtonWithPermission {
  type TaskInfo (line 7) | interface TaskInfo {
  type CompleteTaskReqData (line 44) | interface CompleteTaskReqData {
  type StartWorkFlowReqData (line 56) | interface StartWorkFlowReqData {
  type TaskOperationData (line 75) | interface TaskOperationData {
  type TaskOperationType (line 87) | type TaskOperationType =
  type NextNodeInfo (line 93) | interface NextNodeInfo {

FILE: apps/web-antd/src/bootstrap.ts
  function bootstrap (line 20) | async function bootstrap(namespace: string) {

FILE: apps/web-antd/src/components/cropper/src/typing.ts
  type CropendResult (line 3) | interface CropendResult {

FILE: apps/web-antd/src/components/description/src/typing.ts
  type DescItem (line 8) | interface DescItem {
  type DescriptionProps (line 24) | interface DescriptionProps extends DescriptionsProps {
  type DescInstance (line 39) | interface DescInstance {
  type Register (line 43) | type Register = (descInstance: DescInstance) => void;
  type UseDescReturnType (line 48) | type UseDescReturnType = [Register, DescInstance];

FILE: apps/web-antd/src/components/description/src/useDescription.ts
  function useDescription (line 12) | function useDescription(

FILE: apps/web-antd/src/components/dict/src/data.tsx
  type TagType (line 5) | interface TagType {
  type Options (line 27) | interface Options {
  function tagSelectOptions (line 32) | function tagSelectOptions() {

FILE: apps/web-antd/src/components/dict/src/type.d.ts
  type DictFallback (line 5) | type DictFallback =

FILE: apps/web-antd/src/components/global/button.ts
  method setup (line 13) | setup(props, { attrs, slots }) {

FILE: apps/web-antd/src/components/global/index.ts
  function setupGlobalComponent (line 10) | function setupGlobalComponent(app: App) {

FILE: apps/web-antd/src/components/global/slot.ts
  method render (line 19) | render() {

FILE: apps/web-antd/src/components/tinymce/src/helper.ts
  function contentWithOssIdTransform (line 11) | async function contentWithOssIdTransform(content: string) {

FILE: apps/web-antd/src/components/tree/src/data.tsx
  type Permission (line 9) | interface Permission {
  type MenuPermissionOption (line 15) | interface MenuPermissionOption extends MenuOption {

FILE: apps/web-antd/src/components/tree/src/helper.tsx
  function setPermissionsChecked (line 16) | function setPermissionsChecked(
  function rowAndChildrenChecked (line 33) | function rowAndChildrenChecked(
  function menusWithPermissions (line 50) | function menusWithPermissions(menus: MenuOption[]) {
  function setTableChecked (line 87) | function setTableChecked(
  function validateMenuTree (line 145) | function validateMenuTree(menu: MenuOption) {

FILE: apps/web-antd/src/components/tree/src/hook.tsx
  function useFullScreenGuide (line 13) | function useFullScreenGuide() {

FILE: apps/web-antd/src/components/upload-old/src/helper.ts
  function checkFileType (line 10) | async function checkFileType(file: File, accepts: string[]) {
  function checkImageFileType (line 35) | async function checkImageFileType(file: File, accepts: string[]) {

FILE: apps/web-antd/src/components/upload-old/src/typing.ts
  type UploadResultStatus (line 3) | enum UploadResultStatus {
  type FileItem (line 10) | interface FileItem {
  type Wrapper (line 22) | interface Wrapper {
  type BaseFileItem (line 28) | interface BaseFileItem {
  type PreviewFileItem (line 33) | interface PreviewFileItem {

FILE: apps/web-antd/src/components/upload-old/src/use-upload.ts
  function useUploadType (line 7) | function useUploadType({

FILE: apps/web-antd/src/components/upload/src/helper.ts
  function defaultFilePreview (line 24) | function defaultFilePreview(file: UploadFile) {

FILE: apps/web-antd/src/components/upload/src/hook.ts
  function useImagePreview (line 34) | function useImagePreview() {
  function useUpload (line 94) | function useUpload(

FILE: apps/web-antd/src/components/upload/src/props.d.ts
  type UploadType (line 9) | type UploadType = 'file' | 'image';
  type CustomGetter (line 15) | type CustomGetter<T extends string | undefined> = (
  type BaseUploadProps (line 21) | interface BaseUploadProps {
  type UploadEmits (line 118) | interface UploadEmits {

FILE: apps/web-antd/src/locales/index.ts
  function loadMessages (line 33) | async function loadMessages(lang: SupportedLanguagesType) {
  function loadThirdPartyMessage (line 46) | async function loadThirdPartyMessage(lang: SupportedLanguagesType) {
  function loadDayjsLocale (line 54) | async function loadDayjsLocale(lang: SupportedLanguagesType) {
  function loadAntdLocale (line 81) | async function loadAntdLocale(lang: SupportedLanguagesType) {
  function setupI18n (line 94) | async function setupI18n(app: App, options: LocaleSetupOptions = {}) {

FILE: apps/web-antd/src/main.ts
  function initApplication (line 9) | async function initApplication() {

FILE: apps/web-antd/src/packages/workflow-designer/properties/defaults.ts
  type DefaultGetter (line 4) | type DefaultGetter = (workflow: WorkflowInfo) => any
  function createUuid (line 6) | function createUuid() {

FILE: apps/web-antd/src/packages/workflow-designer/store/index.ts
  function setWorkflowDesignerNavigator (line 6) | function setWorkflowDesignerNavigator(fn: (name: string, params: any) =>...
  method getWfRuntimes (line 32) | getWfRuntimes(state: any) {
  method getStartOrFirstNode (line 41) | getStartOrFirstNode(state: any) {
  method getStartNode (line 53) | getStartNode(state: any) {
  method getStartNodeByWfId (line 61) | getStartNodeByWfId(state: any) {
  method getWorkflowInfo (line 69) | getWorkflowInfo(state: any) {
  method getWorkflowInfoById (line 77) | getWorkflowInfoById(state: any) {
  method getWfComponent (line 85) | getWfComponent(state: any) {
  method getOperatorDesc (line 90) | getOperatorDesc(state: any) {
  method getWfRuntime (line 95) | getWfRuntime(state: any) {
  method getRuntimeNode (line 110) | getRuntimeNode(state: any) {
  method setShowCreateView (line 126) | setShowCreateView(status: boolean, wfUuid: string) {
  method setOperators (line 131) | setOperators(operators: any[]) {
  method setActive (line 134) | setActive(wfUuid: string) {
  method setActiveAndGo (line 142) | setActiveAndGo(wfUuid: string, defaultViewType?: string) {
  method setLoadingMyWorkflows (line 146) | setLoadingMyWorkflows(status: boolean) {
  method setLoadingPublicWorkflows (line 149) | setLoadingPublicWorkflows(status: boolean) {
  method setLoadingRuntimes (line 152) | setLoadingRuntimes(currKbUuid: string, status: boolean) {
  method setWorkflowComponents (line 155) | setWorkflowComponents(components: any[]) {
  method addWorkflowAndActive (line 158) | addWorkflowAndActive(info: any) {
  method appendWorkflows (line 163) | appendWorkflows(infos: any[], isMine: boolean) {
  method updateBaseInfo (line 173) | updateBaseInfo(uuid: string, info: { title: string; remark: string; isPu...
  method initWorkflowFields (line 179) | initWorkflowFields(workflow: any) {
  method updateNodesAndEdges (line 196) | updateNodesAndEdges(uuid: string, info: any) {
  method updateNodesAndEdgesId (line 212) | updateNodesAndEdgesId(uuid: string, updatedWorkflow: any) {
  method setWorkflowPublic (line 232) | setWorkflowPublic(uuid: string, publicOrNot: boolean) {
  method deleteWorkflow (line 241) | deleteWorkflow(uuid: string) {
  method updateWfNodeTitle (line 246) | updateWfNodeTitle(wfUuid: string, nodeUuid: string, newNodeTitle: string) {
  method updateWfNode (line 252) | updateWfNode(wfUuid: string, nodeUuid: string, newNode: any) {
  method addRefInputToNode (line 258) | addRefInputToNode(wfUuid: string, nodeUuid: string, newInput: any) {
  method addUserInputToNode (line 264) | addUserInputToNode(wfUuid: string, nodeUuid: string, newInput: any) {
  method deleteRefInput (line 270) | deleteRefInput(wfUuid: string, nodeUuid: string, idx: number) {
  method deleteUserInput (line 276) | deleteUserInput(wfUuid: string, nodeUuid: string, idx: number) {
  method initWfRuntime (line 282) | initWfRuntime(wfRuntime: any) {
  method setWfRuntimes (line 291) | setWfRuntimes(wfUuid: string, wfRuntimes: any[]) {
  method updateWfRuntimePrologue (line 297) | updateWfRuntimePrologue(wfRuntimeUuid: string, prologue: string) {
  method setWfRuntimeNodes (line 304) | setWfRuntimeNodes(wfRuntimeUuid: string, nodes: any[]) {
  method unshiftWfRuntimes (line 331) | unshiftWfRuntimes(wfUuid: string, wfRuntimes: any[]) {
  method appendWfRuntimes (line 342) | appendWfRuntimes(wfUuid: string, wfRuntimes: any[]) {
  method appendRuntimeNode (line 354) | appendRuntimeNode(wfRuntimeUuid: string, runtimeNode: any) {
  method appendInputToRuntimeNode (line 376) | appendInputToRuntimeNode(wfRuntimeUuid: string, runtimeNodeUuid: string,...
  method appendOutputToRuntimeNode (line 384) | appendOutputToRuntimeNode(wfRuntimeUuid: string, runtimeNodeUuid: string...
  method appendChunkToRuntimeNode (line 391) | appendChunkToRuntimeNode(wfRuntimeUuid: string, runtimeNodeUuid: string,...
  method deleteWfRuntime (line 397) | deleteWfRuntime(wfUuid: string, wfRuntimeUuid: string) {
  method updateSuccess (line 405) | updateSuccess(wfUuid: string, wfRuntimeUuid: string, outputJson: string) {
  method updateErrorMsg (line 424) | updateErrorMsg(wfUuid: string, wfRuntimeUuid: string, errorMsg: string) {
  method clearWfRuntimes (line 438) | clearWfRuntimes(wfUuid: string) {
  method deleteNode (line 441) | deleteNode(wfUuid: string, nodeUuid: string) {
  method _deleteEdgesByNodeUuid (line 459) | _deleteEdgesByNodeUuid(workflow: any, deletedNodeUuid: string) {
  method deleteEdge (line 473) | deleteEdge(wfUuid: string, edgeUuid: string) {
  method _deleteUiNode (line 487) | _deleteUiNode(wfUuid: string, nodeUuid: string) {
  method _deleteUiEdge (line 497) | _deleteUiEdge(wfUuid: string, edgeId: string) {
  method reloadRoute (line 507) | async reloadRoute(uuid?: string, defaultViewType?: string) {

FILE: apps/web-antd/src/packages/workflow-designer/types/index.d.ts
  type WorkflowInfo (line 1) | interface WorkflowInfo {
  type WorkflowComponent (line 13) | interface WorkflowComponent {
  type NodeIODefinition (line 20) | interface NodeIODefinition {
  type NodeIOConfig (line 30) | interface NodeIOConfig {
  type WorkflowNode (line 35) | interface WorkflowNode {
  type WorkflowEdge (line 48) | interface WorkflowEdge {
  type UIWorkflowNodePosition (line 57) | interface UIWorkflowNodePosition { x: number; y: number }
  type UIWorkflow (line 59) | interface UIWorkflow {

FILE: apps/web-antd/src/packages/workflow-designer/utils/operators.ts
  type OperatorOption (line 5) | interface OperatorOption {
  function getOperatorLabel (line 37) | function getOperatorLabel(value: string): string {
  function getLogicOperatorLabel (line 45) | function getLogicOperatorLabel(value: string): string {

FILE: apps/web-antd/src/packages/workflow-designer/utils/workflow-util.ts
  function deepClone (line 5) | function deepClone<T>(value: T): T {
  function emptyWorkflowInfo (line 9) | function emptyWorkflowInfo(): WorkflowInfo {
  function emptyWorkflowNode (line 20) | function emptyWorkflowNode(): WorkflowNode {
  function createUuid (line 34) | function createUuid() {
  function toPropertyKey (line 40) | function toPropertyKey(path: string) {
  function getDefaultNodeConfig (line 51) | function getDefaultNodeConfig(name: string, workflow: WorkflowInfo) {
  function createNewNode (line 81) | function createNewNode(
  function createNewEdge (line 103) | function createNewEdge(params: {
  function updateEdgeBySourceHandle (line 133) | function updateEdgeBySourceHandle(params: {
  function deleteEdgesBySourceHandle (line 155) | function deleteEdgesBySourceHandle(
  function wfNodeToUiNode (line 172) | function wfNodeToUiNode(node: WorkflowNode) {
  function getNameByInputType (line 181) | function getNameByInputType(type: number) {
  function getIconByComponentName (line 191) | function getIconByComponentName(name: string) {
  function getIconClassByComponentName (line 213) | function getIconClassByComponentName(name: string) {

FILE: apps/web-antd/src/router/access.ts
  function backMenuToVbenMenu (line 62) | function backMenuToVbenMenu(
  function generateAccess (line 231) | async function generateAccess(options: GenerateMenuAndRoutesOptions) {

FILE: apps/web-antd/src/router/guard.ts
  function setupCommonGuard (line 17) | function setupCommonGuard(router: Router) {
  function setupAccessGuard (line 47) | function setupAccessGuard(router: Router) {
  function createRouterGuard (line 126) | function createRouterGuard(router: Router) {

FILE: apps/web-antd/src/store/auth.ts
  function authLogin (line 35) | async function authLogin(
  function logout (line 84) | async function logout(redirect: boolean = true) {
  function fetchUserInfo (line 114) | async function fetchUserInfo() {
  function $reset (line 145) | function $reset() {

FILE: apps/web-antd/src/store/dict.ts
  type DictOption (line 12) | interface DictOption extends DictData {
  function dictToOptions (line 24) | function dictToOptions(
  function getDictOptions (line 51) | function getDictOptions(dictName: string): DictOption[] {
  function resetCache (line 61) | function resetCache() {
  function setDictInfo (line 78) | function setDictInfo(
  function $reset (line 95) | function $reset() {

FILE: apps/web-antd/src/store/notify.ts
  function startListeningMessage (line 37) | function startListeningMessage() {
  function setAllRead (line 79) | function setAllRead() {
  function setRead (line 91) | function setRead(item: NotificationItem) {
  function clearAllMessage (line 103) | function clearAllMessage() {
  function $reset (line 113) | function $reset() {

FILE: apps/web-antd/src/store/tenant.ts
  function initTenant (line 20) | async function initTenant() {
  function setChecked (line 26) | async function setChecked(_checked: boolean) {
  function $reset (line 30) | function $reset() {

FILE: apps/web-antd/src/upload-tip.ts
  function useUploadTip (line 6) | function useUploadTip() {

FILE: apps/web-antd/src/utils/dict.ts
  function getDictOptions (line 14) | function getDictOptions(dictName: string, formatNumber = false) {

FILE: apps/web-antd/src/utils/file/base64Conver.ts
  function dataURLtoBlob (line 4) | function dataURLtoBlob(base64Buf: string): Blob {
  function urlToBase64 (line 24) | function urlToBase64(url: string, mineType?: string): Promise<string> {

FILE: apps/web-antd/src/utils/file/download.ts
  function downloadExcel (line 23) | async function downloadExcel(
  function handleRangeTimeValue (line 46) | function handleRangeTimeValue(
  type DownloadExcelOptions (line 97) | interface DownloadExcelOptions {
  function commonDownloadExcel (line 111) | async function commonDownloadExcel(
  function downloadExcelFile (line 130) | function downloadExcelFile(
  function downloadByOnlineUrl (line 149) | function downloadByOnlineUrl(
  function downloadByBase64 (line 167) | function downloadByBase64(
  function downloadByData (line 184) | function downloadByData(
  function openWindow (line 207) | function openWindow(
  function downloadByUrl (line 228) | function downloadByUrl({

FILE: apps/web-antd/src/utils/file/index.ts
  function calculateFileSize (line 13) | function calculateFileSize(size: number, isInteger = false) {

FILE: apps/web-antd/src/utils/message.ts
  function useSseMessage (line 11) | function useSseMessage() {
  function isUrl (line 37) | function isUrl(path?: string) {
  function useWebSocketMessage (line 41) | function useWebSocketMessage() {

FILE: apps/web-antd/src/utils/modal.tsx
  type ConfirmModalProps (line 9) | interface ConfirmModalProps extends Omit<ModalFuncProps, 'visible'> {
  function confirmDeleteModal (line 15) | function confirmDeleteModal(props: ConfirmModalProps) {

FILE: apps/web-antd/src/utils/popup.ts
  type BeforeCloseDiffProps (line 11) | interface BeforeCloseDiffProps {
  function useBeforeCloseDiff (line 36) | function useBeforeCloseDiff(props: BeforeCloseDiffProps) {
  function defaultFormValueGetter (line 121) | function defaultFormValueGetter(formApi: ExtendedFormApi) {

FILE: apps/web-antd/src/utils/render.tsx
  function renderTag (line 43) | function renderTag(text: string, color?: string) {
  function renderTags (line 54) | function renderTags(tags: string[], wrap = false, gap = 1) {
  function renderJsonPreview (line 72) | function renderJsonPreview(json: any) {
  function renderIcon (line 96) | function renderIcon(icon: string) {
  function renderHttpMethodTag (line 105) | function renderHttpMethodTag(type: string) {
  function renderDictTag (line 120) | function renderDictTag(value: number | string, dicts: DictData[]) {
  function renderDictTags (line 132) | function renderDictTags(
  type RenderDictOptions (line 153) | interface RenderDictOptions {
  function renderDict (line 163) | function renderDict(
  function renderIconSpan (line 173) | function renderIconSpan(
  function renderOsIcon (line 217) | function renderOsIcon(os: string, center = false) {
  function renderBrowserIcon (line 232) | function renderBrowserIcon(browser: string, center = false) {

FILE: apps/web-antd/src/views/_core/oauth-common.ts
  type ListItem (line 25) | interface ListItem {
  type BindItem (line 37) | interface BindItem extends ListItem {
  function handleAuthBinding (line 59) | async function handleAuthBinding(source: string) {

FILE: apps/web-antd/src/views/_core/profile/mitt.ts
  type Events (line 3) | type Events = {

FILE: apps/web-antd/src/views/mcp/tool/data.tsx
  method formatter (line 58) | formatter({ cellValue }) {

FILE: apps/web-antd/src/views/monitor/operlog/data.tsx
  method formatter (line 80) | formatter({ cellValue }) {

FILE: apps/web-antd/src/views/nodeManage/index.d.ts
  type NodeInfo (line 1) | interface NodeInfo {

FILE: apps/web-antd/src/views/system/client/data.tsx
  method formatter (line 75) | formatter({ row }) {
  method formatter (line 82) | formatter({ row }) {

FILE: apps/web-antd/src/views/system/dict/mitt.ts
  type Events (line 6) | type Events = {

FILE: apps/web-antd/src/views/system/tenant/data.tsx
  method renderComponentContent (line 208) | renderComponentContent(model) {
  method renderComponentContent (line 221) | renderComponentContent() {

FILE: apps/web-antd/src/views/system/user/data.tsx
  method formatter (line 68) | formatter({ cellValue }) {

FILE: apps/web-antd/src/views/tool/gen/edit-steps/gen-data.tsx
  function renderBooleanTag (line 42) | function renderBooleanTag(row: Recordable<any>, field: string) {
  function renderBooleanCheckbox (line 48) | function renderBooleanCheckbox(row: Recordable<any>, field: string) {

FILE: apps/web-antd/src/views/workflow/components/helper.tsx
  type ApproveWithReasonModalProps (line 10) | interface ApproveWithReasonModalProps {
  function approveWithReasonModal (line 20) | function approveWithReasonModal(props: ApproveWithReasonModalProps) {
  function getDiffTimeString (line 50) | function getDiffTimeString(dateTime: string) {

FILE: apps/web-antd/src/views/workflow/components/hook.ts
  function useWarmflowIframe (line 9) | function useWarmflowIframe() {

FILE: apps/web-antd/src/views/workflow/components/type.d.ts
  type ApprovalType (line 8) | type ApprovalType = 'admin' | 'approve' | 'myself' | 'readonly';

FILE: apps/web-antd/src/views/workflow/leave/api/index.ts
  function leaveList (line 13) | function leaveList(params?: LeaveQuery) {
  function leaveExport (line 24) | function leaveExport(params?: LeaveQuery) {
  function leaveInfo (line 33) | function leaveInfo(id: ID) {
  function leaveAdd (line 42) | function leaveAdd(data: LeaveForm) {
  function leaveUpdate (line 51) | function leaveUpdate(data: LeaveForm) {
  function leaveRemove (line 60) | function leaveRemove(id: ID | IDS) {
  function submitAndStartWorkflow (line 69) | function submitAndStartWorkflow(data: LeaveForm) {

FILE: apps/web-antd/src/views/workflow/leave/api/model.d.ts
  type LeaveVO (line 3) | interface LeaveVO {
  type LeaveForm (line 41) | interface LeaveForm extends BaseEntity {
  type LeaveQuery (line 78) | interface LeaveQuery extends PageQuery {

FILE: apps/web-antd/src/views/workflow/leave/data.tsx
  method componentProps (line 158) | componentProps(model) {

FILE: apps/web-antd/src/views/workflow/leave/hook.ts
  function useRouteIdEdit (line 5) | function useRouteIdEdit(callback: (id: string) => void, timeout = 500) {

FILE: apps/web-antd/src/views/workflow/register.ts
  type FlowComponentsMapMapKey (line 21) | type FlowComponentsMapMapKey = keyof typeof flowComponentsMap;

FILE: apps/web-antd/src/views/workflow/spel/common.ts
  function generateSpel (line 1) | function generateSpel(data: {

FILE: apps/web-antd/types/directive.d.ts
  type ComponentCustomProperties (line 4) | interface ComponentCustomProperties {

FILE: apps/web-antd/types/global-components.d.ts
  type GlobalComponents (line 5) | interface GlobalComponents {

FILE: internal/lint-configs/eslint-config/src/configs/command.ts
  function command (line 3) | async function command() {

FILE: internal/lint-configs/eslint-config/src/configs/comments.ts
  function comments (line 5) | async function comments(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/disableds.ts
  function disableds (line 3) | async function disableds(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/ignores.ts
  function ignores (line 3) | async function ignores(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/import.ts
  function importPluginConfig (line 5) | async function importPluginConfig(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/javascript.ts
  function javascript (line 7) | async function javascript(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/jsdoc.ts
  function jsdoc (line 5) | async function jsdoc(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/jsonc.ts
  function jsonc (line 5) | async function jsonc(): Promise<Linter.Config[]> {
  function sortPackageJson (line 54) | function sortPackageJson(): Linter.Config {
  function sortTsconfig (line 133) | function sortTsconfig(): Linter.Config {

FILE: internal/lint-configs/eslint-config/src/configs/node.ts
  function node (line 5) | async function node(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/perfectionist.ts
  function perfectionist (line 5) | async function perfectionist(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/prettier.ts
  function prettier (line 5) | async function prettier(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/regexp.ts
  function regexp (line 5) | async function regexp(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/test.ts
  function test (line 5) | async function test(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/turbo.ts
  function turbo (line 5) | async function turbo(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/typescript.ts
  function typescript (line 5) | async function typescript(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/unicorn.ts
  function unicorn (line 5) | async function unicorn(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/configs/vue.ts
  function vue (line 5) | async function vue(): Promise<Linter.Config[]> {

FILE: internal/lint-configs/eslint-config/src/index.ts
  type FlatConfig (line 24) | type FlatConfig = Linter.Config;
  type FlatConfigPromise (line 26) | type FlatConfigPromise =
  function defineConfig (line 32) | async function defineConfig(config: FlatConfig[] = []) {

FILE: internal/lint-configs/eslint-config/src/util.ts
  type Awaitable (line 1) | type Awaitable<T> = Promise<T> | T;
  function interopDefault (line 3) | async function interopDefault<T>(

FILE: internal/node-utils/src/constants.ts
  type UNICODE (line 1) | enum UNICODE {

FILE: internal/node-utils/src/fs.ts
  function outputJSON (line 4) | async function outputJSON(
  function ensureFile (line 20) | async function ensureFile(filePath: string) {
  function readJSON (line 31) | async function readJSON(filePath: string) {

FILE: internal/node-utils/src/git.ts
  function getStagedFiles (line 10) | async function getStagedFiles(): Promise<string[]> {

FILE: internal/node-utils/src/hash.ts
  function generatorContentHash (line 8) | function generatorContentHash(content: string, hashLSize?: number) {

FILE: internal/node-utils/src/monorepo.ts
  function findMonorepoRoot (line 13) | function findMonorepoRoot(cwd: string = process.cwd()) {
  function getPackagesSync (line 24) | function getPackagesSync() {
  function getPackages (line 32) | async function getPackages() {
  function getPackage (line 41) | async function getPackage(pkgName: string) {

FILE: internal/node-utils/src/path.ts
  function toPosixPath (line 7) | function toPosixPath(pathname: string) {

FILE: internal/node-utils/src/prettier.ts
  function prettierFormat (line 5) | async function prettierFormat(filepath: string) {

FILE: internal/node-utils/src/spinner.ts
  type SpinnerOptions (line 5) | interface SpinnerOptions {
  function spinner (line 10) | async function spinner<T>(

FILE: internal/tailwind-config/src/index.ts
  function createColorsPalette (line 207) | function createColorsPalette(name: string) {

FILE: internal/vite-config/src/config/application.ts
  function defineApplicationConfig (line 17) | function defineApplicationConfig(userConfigPromise?: DefineApplicationOp...
  function createCssOptions (line 103) | function createCssOptions(injectGlobalScss = true): CSSOptions {

FILE: internal/vite-config/src/config/common.ts
  function getCommonConfig (line 3) | async function getCommonConfig(): Promise<UserConfig> {

FILE: internal/vite-config/src/config/index.ts
  function defineConfig (line 12) | function defineConfig(

FILE: internal/vite-config/src/config/library.ts
  function defineLibraryConfig (line 12) | function defineLibraryConfig(userConfigPromise?: DefineLibraryOptions) {

FILE: internal/vite-config/src/plugins/archiver.ts
  method handler (line 17) | handler() {
  function zipFolder (line 46) | async function zipFolder(

FILE: internal/vite-config/src/plugins/extra-app-config.ts
  type PluginOptions (line 11) | interface PluginOptions {
  constant GLOBAL_CONFIG_FILE_NAME (line 16) | const GLOBAL_CONFIG_FILE_NAME = '_app.config.js';
  constant VBEN_ADMIN_PRO_APP_CONF (line 17) | const VBEN_ADMIN_PRO_APP_CONF = '_VBEN_ADMIN_PRO_APP_CONF_';
  function viteExtraAppConfigPlugin (line 24) | async function viteExtraAppConfigPlugin({
  function getConfigSource (line 73) | async function getConfigSource() {
  function ensureTrailingSlash (line 88) | function ensureTrailingSlash(path: string) {

FILE: internal/vite-config/src/plugins/importmap.ts
  constant DEFAULT_PROVIDER (line 11) | const DEFAULT_PROVIDER = 'jspm.io';
  type pluginOptions (line 13) | type pluginOptions = {
  function getShimsUrl (line 25) | async function getShimsUrl(provide: string) {
  function viteImportMapPlugin (line 44) | async function viteImportMapPlugin(
  function injectShimsToHtml (line 194) | async function injectShimsToHtml(html: string, esModuleShimUrl: string) {

FILE: internal/vite-config/src/plugins/index.ts
  function loadConditionPlugins (line 34) | async function loadConditionPlugins(conditionPlugins: ConditionPlugin[]) {
  function loadCommonPlugins (line 48) | async function loadCommonPlugins(
  function loadApplicationPlugins (line 88) | async function loadApplicationPlugins(
  function loadLibraryPlugins (line 222) | async function loadLibraryPlugins(

FILE: internal/vite-config/src/plugins/inject-app-loading/index.ts
  function viteInjectAppLoadingPlugin (line 14) | async function viteInjectAppLoadingPlugin(
  function getLoadingRawByHtmlTemplate (line 54) | async function getLoadingRawByHtmlTemplate(loadingTemplate: string) {

FILE: internal/vite-config/src/plugins/inject-metadata.ts
  function resolvePackageVersion (line 12) | function resolvePackageVersion(
  function resolveMonorepoDependencies (line 29) | async function resolveMonorepoDependencies() {
  function viteMetadataPlugin (line 70) | async function viteMetadataPlugin(

FILE: internal/vite-config/src/plugins/license.ts
  function viteLicensePlugin (line 17) | async function viteLicensePlugin(

FILE: internal/vite-config/src/plugins/nitro-mock.ts
  method configureServer (line 18) | async configureServer(server) {
  function runNitroServer (line 48) | async function runNitroServer(rootDir: string, port: number, verbose: bo...

FILE: internal/vite-config/src/plugins/print.ts
  method configureServer (line 13) | configureServer(server) {

FILE: internal/vite-config/src/plugins/vxe-table.ts
  function viteVxeTableImportsPlugin (line 5) | async function viteVxeTableImportsPlugin(): Promise<PluginOption> {

FILE: internal/vite-config/src/typing.ts
  type IImportMap (line 23) | interface IImportMap {
  type PrintPluginOptions (line 36) | interface PrintPluginOptions {
  type NitroMockPluginOptions (line 55) | interface NitroMockPluginOptions {
  type ArchiverPluginOptions (line 79) | interface ArchiverPluginOptions {
  type ImportmapPluginOptions (line 96) | interface ImportmapPluginOptions {
  type ConditionPlugin (line 126) | interface ConditionPlugin {
  type CommonPluginOptions (line 143) | interface CommonPluginOptions {
  type ApplicationPluginOptions (line 181) | interface ApplicationPluginOptions extends CommonPluginOptions {
  type LibraryPluginOptions (line 283) | interface LibraryPluginOptions extends CommonPluginOptions {
  type ApplicationOptions (line 295) | type ApplicationOptions = ApplicationPluginOptions;
  type LibraryOptions (line 300) | type LibraryOptions = LibraryPluginOptions;
  type DefineApplicationOptions (line 306) | type DefineApplicationOptions = (config?: ConfigEnv) => Promise<{
  type DefineLibraryOptions (line 317) | type DefineLibraryOptions = (config?: ConfigEnv) => Promise<{
  type DefineConfig (line 328) | type DefineConfig = DefineApplicationOptions | DefineLibraryOptions;

FILE: internal/vite-config/src/utils/env.ts
  function getConfFiles (line 20) | function getConfFiles() {
  function loadEnv (line 36) | async function loadEnv<T = Record<string, string>>(
  function loadAndConvertEnv (line 65) | async function loadAndConvertEnv(

FILE: packages/@core/base/icons/src/create-icon.ts
  function createIconifyIcon (line 5) | function createIconifyIcon(icon: string) {
  function createIconifyOfflineIcon (line 20) | function createIconifyOfflineIcon(icon: string, iconComponent: IconifyIc...

FILE: packages/@core/base/shared/src/cache/storage-manager.ts
  type StorageType (line 1) | type StorageType = 'localStorage' | 'sessionStorage';
  type StorageManagerOptions (line 3) | interface StorageManagerOptions {
  type StorageItem (line 8) | interface StorageItem<T> {
  class StorageManager (line 13) | class StorageManager {
    method constructor (line 17) | constructor({
    method getFullKey (line 33) | private getFullKey(key: string): string {
    method clear (line 40) | clear(): void {
    method clearExpiredItems (line 54) | clearExpiredItems(): void {
    method getItem (line 70) | getItem<T>(key: string, defaultValue: null | T = null): null | T {
    method removeItem (line 95) | removeItem(key: string): void {
    method setItem (line 106) | setItem<T>(key: string, value: T, ttl?: number): void {

FILE: packages/@core/base/shared/src/cache/types.ts
  type StorageType (line 1) | type StorageType = 'localStorage' | 'sessionStorage';
  type StorageValue (line 3) | interface StorageValue<T> {
  type IStorageCache (line 8) | interface IStorageCache {

FILE: packages/@core/base/shared/src/color/color.ts
  function isDarkColor (line 3) | function isDarkColor(color: string) {
  function isLightColor (line 7) | function isLightColor(color: string) {

FILE: packages/@core/base/shared/src/color/convert.ts
  function convertToHsl (line 11) | function convertToHsl(color: string): string {
  function convertToHslCssVar (line 26) | function convertToHslCssVar(color: string): string {
  function convertToRgb (line 40) | function convertToRgb(str: string): string {
  function isValidColor (line 49) | function isValidColor(color?: string) {

FILE: packages/@core/base/shared/src/color/generator.ts
  type ColorItem (line 5) | interface ColorItem {
  function generatorColorVariables (line 11) | function generatorColorVariables(colorItems: ColorItem[]) {

FILE: packages/@core/base/shared/src/constants/dict-enum.ts
  type DictEnumKey (line 20) | type DictEnumKey = keyof typeof DictEnum;

FILE: packages/@core/base/shared/src/constants/globals.ts
  constant CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT (line 2) | const CSS_VARIABLE_LAYOUT_CONTENT_HEIGHT = `--vben-content-height`;
  constant CSS_VARIABLE_LAYOUT_CONTENT_WIDTH (line 4) | const CSS_VARIABLE_LAYOUT_CONTENT_WIDTH = `--vben-content-width`;
  constant CSS_VARIABLE_LAYOUT_HEADER_HEIGHT (line 6) | const CSS_VARIABLE_LAYOUT_HEADER_HEIGHT = `--vben-header-height`;
  constant CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT (line 8) | const CSS_VARIABLE_LAYOUT_FOOTER_HEIGHT = `--vben-footer-height`;
  constant ELEMENT_ID_MAIN_CONTENT (line 11) | const ELEMENT_ID_MAIN_CONTENT = `__vben_main_content`;
  constant DEFAULT_NAMESPACE (line 16) | const DEFAULT_NAMESPACE = 'vben';

FILE: packages/@core/base/shared/src/constants/vben.ts
  constant VBEN_GITHUB_URL (line 4) | const VBEN_GITHUB_URL = 'https://github.com/vbenjs/vue-vben-admin';
  constant VBEN_DOC_URL (line 9) | const VBEN_DOC_URL = 'https://doc.vben.pro';
  constant VBEN_LOGO_URL (line 14) | const VBEN_LOGO_URL =
  constant VBEN_PREVIEW_URL (line 20) | const VBEN_PREVIEW_URL = 'https://www.vben.pro';
  constant VBEN_ELE_PREVIEW_URL (line 22) | const VBEN_ELE_PREVIEW_URL = 'https://ele.vben.pro';
  constant VBEN_NAIVE_PREVIEW_URL (line 24) | const VBEN_NAIVE_PREVIEW_URL = 'https://naive.vben.pro';

FILE: packages/@core/base/shared/src/global-state.ts
  type ComponentsState (line 6) | interface ComponentsState {
  type MessageState (line 10) | interface MessageState {
  type IGlobalSharedState (line 14) | interface IGlobalSharedState {
  class GlobalShareState (line 19) | class GlobalShareState {
    method defineMessage (line 26) | public defineMessage({ copyPreferencesSuccess }: MessageState) {
    method getComponents (line 32) | public getComponents(): ComponentsState {
    method getMessage (line 36) | public getMessage(): MessageState {
    method setComponents (line 40) | public setComponents(value: ComponentsState) {

FILE: packages/@core/base/shared/src/utils/__tests__/tree.test.ts
  type Node (line 6) | interface Node {
  type NodeValue (line 11) | type NodeValue = string;

FILE: packages/@core/base/shared/src/utils/__tests__/util.test.ts
  class TestClass (line 5) | class TestClass {
    method constructor (line 8) | constructor(value: string) {
    method getValue (line 13) | getValue() {
    method setValue (line 17) | setValue(newValue: string) {
  class TestWithGetterSetter (line 58) | class TestWithGetterSetter {
    method constructor (line 61) | constructor() {
    method value (line 65) | get value() {
    method value (line 69) | set value(newValue: string) {
  type UserProfile (line 83) | interface UserProfile {
  type UserSettings (line 88) | interface UserSettings {
  type Data (line 92) | interface Data {

FILE: packages/@core/base/shared/src/utils/cn.ts
  function cn (line 6) | function cn(...inputs: ClassValue[]) {

FILE: packages/@core/base/shared/src/utils/date.ts
  function formatDate (line 3) | function formatDate(time: number | string, format = 'YYYY-MM-DD') {
  function formatDateTime (line 16) | function formatDateTime(time: number | string) {
  function isDate (line 20) | function isDate(value: any): value is Date {
  function isDayjsObject (line 24) | function isDayjsObject(value: any): value is dayjs.Dayjs {

FILE: packages/@core/base/shared/src/utils/diff.ts
  function arraysEqual (line 5) | function arraysEqual<T>(a: T[], b: T[]): boolean {
  type DiffResult (line 58) | type DiffResult<T> = Partial<{
  function diff (line 62) | function diff<T extends Record<string, any>>(obj1: T, obj2: T): DiffResu...

FILE: packages/@core/base/shared/src/utils/dom.ts
  type VisibleDomRect (line 1) | interface VisibleDomRect {
  function getElementVisibleRect (line 14) | function getElementVisibleRect(
  function getScrollbarWidth (line 54) | function getScrollbarWidth() {
  function needsScrollbar (line 73) | function needsScrollbar() {
  function triggerWindowResize (line 89) | function triggerWindowResize(): void {

FILE: packages/@core/base/shared/src/utils/download.ts
  type DownloadOptions (line 3) | interface DownloadOptions<T = string> {
  constant DEFAULT_FILENAME (line 9) | const DEFAULT_FILENAME = 'downloaded_file';
  function downloadFileFromUrl (line 15) | async function downloadFileFromUrl({
  function downloadFileFromBase64 (line 46) | function downloadFileFromBase64({ fileName, source }: DownloadOptions) {
  function downloadFileFromImageUrl (line 58) | async function downloadFileFromImageUrl({
  function downloadFileFromBlob (line 69) | function downloadFileFromBlob({
  function downloadFileFromBlobPart (line 84) | function downloadFileFromBlobPart({
  function urlToBase64 (line 103) | function urlToBase64(url: string, mineType?: string): Promise<string> {
  function triggerDownload (line 130) | function triggerDownload(
  function resolveFileName (line 155) | function resolveFileName(url: string, fileName?: string): string {

FILE: packages/@core/base/shared/src/utils/inference.ts
  function isUndefined (line 10) | function isUndefined(value?: unknown): value is undefined {
  function isBoolean (line 19) | function isBoolean(value: unknown): value is boolean {
  function isEmpty (line 37) | function isEmpty<T = unknown>(value?: T): value is T {
  function isHttpUrl (line 63) | function isHttpUrl(url?: string): boolean {
  function isWindow (line 78) | function isWindow(value: any): value is Window {
  function isMacOs (line 92) | function isMacOs(): boolean {
  function isWindowsOs (line 105) | function isWindowsOs(): boolean {
  function isNumber (line 114) | function isNumber(value: any): value is number {
  function getFirstNonNullOrUndefined (line 141) | function getFirstNonNullOrUndefined<T>(

FILE: packages/@core/base/shared/src/utils/letter.ts
  function capitalizeFirstLetter (line 5) | function capitalizeFirstLetter(string: string): string {
  function toLowerCaseFirstLetter (line 15) | function toLowerCaseFirstLetter(str: string): string {
  function toCamelCase (line 25) | function toCamelCase(key: string, parentKey: string): string {
  function kebabToCamelCase (line 32) | function kebabToCamelCase(str: string): string {

FILE: packages/@core/base/shared/src/utils/nprogress.ts
  function loadNprogress (line 13) | async function loadNprogress() {
  function startProgress (line 29) | async function startProgress() {
  function stopProgress (line 38) | async function stopProgress() {

FILE: packages/@core/base/shared/src/utils/resources.ts
  function loadScript (line 5) | function loadScript(src: string) {

FILE: packages/@core/base/shared/src/utils/state-handler.ts
  class StateHandler (line 1) | class StateHandler {
    method clearPromises (line 7) | private clearPromises() {
    method isConditionTrue (line 12) | isConditionTrue(): boolean {
    method reset (line 16) | reset() {
    method setConditionFalse (line 22) | setConditionFalse() {
    method setConditionTrue (line 31) | setConditionTrue() {
    method waitForCondition (line 40) | waitForCondition(): Promise<void> {

FILE: packages/@core/base/shared/src/utils/to.ts
  function to (line 6) | async function to<T, U = Error>(

FILE: packages/@core/base/shared/src/utils/tree.ts
  type TreeConfigOptions (line 1) | interface TreeConfigOptions {
  function traverseTreeValues (line 13) | function traverseTreeValues<T, V>(
  function filterTree (line 50) | function filterTree<T extends Record<string, any>>(
  function mapTree (line 80) | function mapTree<T, V extends Record<string, any>>(

FILE: packages/@core/base/shared/src/utils/unique.ts
  function uniqueByField (line 7) | function uniqueByField<T>(arr: T[], key: keyof T): T[] {

FILE: packages/@core/base/shared/src/utils/update-css-variables.ts
  function updateCSSVariables (line 5) | function updateCSSVariables(

FILE: packages/@core/base/shared/src/utils/util.ts
  function bindMethods (line 1) | function bindMethods<T extends object>(instance: T): void {
  function getNestedValue (line 27) | function getNestedValue<T>(obj: T, path: string): any {

FILE: packages/@core/base/shared/src/utils/window.ts
  type OpenWindowOptions (line 1) | interface OpenWindowOptions {
  function openWindow (line 13) | function openWindow(url: string, options: OpenWindowOptions = {}): void {
  function openRouteInNewWindow (line 30) | function openRouteInNewWindow(path: string) {

FILE: packages/@core/base/typings/src/app.d.ts
  type LayoutType (line 1) | type LayoutType =
  type ThemeModeType (line 10) | type ThemeModeType = 'auto' | 'dark' | 'light';
  type PreferencesButtonPositionType (line 18) | type PreferencesButtonPositionType = 'auto' | 'fixed' | 'header';
  type BuiltinThemeType (line 20) | type BuiltinThemeType =
  type ContentCompactType (line 40) | type ContentCompactType = 'compact' | 'wide';
  type LayoutHeaderModeType (line 42) | type LayoutHeaderModeType = 'auto' | 'auto-scroll' | 'fixed' | 'static';
  type LayoutHeaderMenuAlignType (line 43) | type LayoutHeaderMenuAlignType = 'center' | 'end' | 'start';
  type LoginExpiredModeType (line 50) | type LoginExpiredModeType = 'modal' | 'page';
  type BreadcrumbStyleType (line 57) | type BreadcrumbStyleType = 'background' | 'normal';
  type AccessModeType (line 65) | type AccessModeType = 'backend' | 'frontend' | 'mixed';
  type NavigationStyleType (line 72) | type NavigationStyleType = 'plain' | 'rounded';
  type TabsStyleType (line 81) | type TabsStyleType = 'brisk' | 'card' | 'chrome' | 'plain';
  type PageTransitionType (line 86) | type PageTransitionType = 'fade' | 'fade-down' | 'fade-slide' | 'fade-up';
  type AuthPageLayoutType (line 94) | type AuthPageLayoutType = 'panel-center' | 'panel-left' | 'panel-right';

FILE: packages/@core/base/typings/src/basic.d.ts
  type BasicOption (line 1) | interface BasicOption {
  type SelectOption (line 6) | type SelectOption = BasicOption;
  type TabOption (line 8) | type TabOption = BasicOption;
  type BasicUserInfo (line 10) | interface BasicUserInfo {
  type ClassType (line 41) | type ClassType = Array<object | string> | object | string;

FILE: packages/@core/base/typings/src/helper.d.ts
  type DeepPartial (line 6) | type DeepPartial<T> = T extends object
  type DeepReadonly (line 15) | type DeepReadonly<T> = {
  type AnyPromiseFunction (line 23) | type AnyPromiseFunction<T extends any[] = any[], R = void> = (
  type AnyNormalFunction (line 30) | type AnyNormalFunction<T extends any[] = any[], R = void> = (...arg: T) ...
  type AnyFunction (line 35) | type AnyFunction<T extends any[] = any[], R = void> =
  type Nullable (line 42) | type Nullable<T> = null | T;
  type NonNullable (line 47) | type NonNullable<T> = T extends null | undefined ? never : T;
  type Recordable (line 52) | type Recordable<T> = Record<string, T>;
  type ReadonlyRecordable (line 57) | interface ReadonlyRecordable<T = any> {
  type TimeoutHandle (line 64) | type TimeoutHandle = ReturnType<typeof setTimeout>;
  type IntervalHandle (line 69) | type IntervalHandle = ReturnType<typeof setInterval>;
  type MaybeReadonlyRef (line 75) | type MaybeReadonlyRef<T> = (() => T) | ComputedRef<T>;
  type MaybeComputedRef (line 81) | type MaybeComputedRef<T> = MaybeReadonlyRef<T> | MaybeRef<T>;
  type Merge (line 83) | type Merge<O extends object, T extends object> = {
  type MergeAll (line 103) | type MergeAll<
  type EmitType (line 110) | type EmitType = (name: Name, ...args: any[]) => void;
  type MaybePromise (line 112) | type MaybePromise<T> = Promise<T> | T;

FILE: packages/@core/base/typings/src/menu-record.ts
  type ExRouteRecordRaw (line 7) | type ExRouteRecordRaw = {
  type MenuRecordBadgeRaw (line 13) | interface MenuRecordBadgeRaw {
  type MenuRecordRaw (line 31) | interface MenuRecordRaw extends MenuRecordBadgeRaw {

FILE: packages/@core/base/typings/src/tabs.ts
  type TabDefinition (line 3) | interface TabDefinition extends RouteLocationNormalized {

FILE: packages/@core/base/typings/src/vue-router.d.ts
  type RouteMeta (line 4) | interface RouteMeta {
  type RouteRecordStringComponent (line 133) | type RouteRecordStringComponent<T = string> = Omit<
  type ComponentRecordType (line 141) | type ComponentRecordType = Record<string, () => Promise<Component>>;
  type GenerateMenuAndRoutesOptions (line 143) | interface GenerateMenuAndRoutesOptions {

FILE: packages/@core/base/typings/vue-router.d.ts
  type RouteMeta (line 8) | interface RouteMeta extends IRouteMeta {}

FILE: packages/@core/composables/src/use-is-mobile.ts
  function useIsMobile (line 3) | function useIsMobile() {

FILE: packages/@core/composables/src/use-layout-style.ts
  function useLayoutContentStyle (line 17) | function useLayoutContentStyle() {
  function useLayoutHeaderStyle (line 60) | function useLayoutHeaderStyle() {
  function useLayoutFooterStyle (line 73) | function useLayoutFooterStyle() {

FILE: packages/@core/composables/src/use-namespace.ts
  type UseNamespaceReturn (line 103) | type UseNamespaceReturn = ReturnType<typeof useNamespace>;

FILE: packages/@core/composables/src/use-priority-value.ts
  function usePriorityValue (line 15) | function usePriorityValue<
  function usePriorityValues (line 54) | function usePriorityValues<
  function useForwardPriorityValues (line 72) | function useForwardPriorityValues<

FILE: packages/@core/composables/src/use-scroll-lock.ts
  constant SCROLL_FIXED_CLASS (line 9) | const SCROLL_FIXED_CLASS = `_scroll__fixed_`;
  function useScrollLock (line 11) | function useScrollLock() {

FILE: packages/@core/composables/src/use-simple-locale/messages.ts
  type Locale (line 1) | type Locale = 'en-US' | 'zh-CN';

FILE: packages/@core/composables/src/use-sortable.ts
  function useSortable (line 4) | function useSortable<T extends HTMLElement>(

FILE: packages/@core/preferences/src/constants.ts
  type BuiltinThemePreset (line 3) | interface BuiltinThemePreset {
  constant BUILT_IN_THEME_PRESETS (line 10) | const BUILT_IN_THEME_PRESETS: BuiltinThemePreset[] = [
  constant COLOR_PRESETS (line 84) | const COLOR_PRESETS = [...BUILT_IN_THEME_PRESETS].slice(0, 7);

FILE: packages/@core/preferences/src/preferences.ts
  constant STORAGE_KEY (line 19) | const STORAGE_KEY = 'preferences';
  constant STORAGE_KEY_LOCALE (line 20) | const STORAGE_KEY_LOCALE = `${STORAGE_KEY}-locale`;
  constant STORAGE_KEY_THEME (line 21) | const STORAGE_KEY_THEME = `${STORAGE_KEY}-theme`;
  class PreferenceManager (line 23) | class PreferenceManager {
    method constructor (line 32) | constructor() {
    method clearCache (line 42) | clearCache() {
    method getInitialPreferences (line 48) | public getInitialPreferences() {
    method getPreferences (line 52) | public getPreferences() {
    method initPreferences (line 61) | public async initPreferences({ namespace, overrides }: InitialOptions) {
    method resetPreferences (line 100) | resetPreferences() {
    method updatePreferences (line 116) | public updatePreferences(updates: DeepPartial<Preferences>) {
    method _savePreferences (line 130) | private _savePreferences(preference: Preferences) {
    method handleUpdates (line 141) | private handleUpdates(updates: DeepPartial<Preferences>) {
    method initPlatform (line 156) | private initPlatform() {
    method loadCachedPreferences (line 164) | private loadCachedPreferences() {
    method loadPreferences (line 172) | private loadPreferences(): Preferences {
    method setupWatcher (line 179) | private setupWatcher() {
    method updateColorMode (line 218) | private updateColorMode(preference: Preferences) {

FILE: packages/@core/preferences/src/types.ts
  type SupportedLanguagesType (line 19) | type SupportedLanguagesType = 'en-US' | 'zh-CN';
  type AppPreferences (line 21) | interface AppPreferences {
  type BreadcrumbPreferences (line 90) | interface BreadcrumbPreferences {
  type CopyrightPreferences (line 103) | interface CopyrightPreferences {
  type FooterPreferences (line 120) | interface FooterPreferences {
  type HeaderPreferences (line 129) | interface HeaderPreferences {
  type LogoPreferences (line 142) | interface LogoPreferences {
  type NavigationPreferences (line 151) | interface NavigationPreferences {
  type SidebarPreferences (line 160) | interface SidebarPreferences {
  type ShortcutKeyPreferences (line 189) | interface ShortcutKeyPreferences {
  type TabbarPreferences (line 202) | interface TabbarPreferences {
  type ThemePreferences (line 229) | interface ThemePreferences {
  type TransitionPreferences (line 250) | interface TransitionPreferences {
  type WidgetPreferences (line 261) | interface WidgetPreferences {
  type Preferences (line 280) | interface Preferences {
  type PreferencesKeys (line 309) | type PreferencesKeys = keyof Preferences;
  type InitialOptions (line 311) | interface InitialOptions {

FILE: packages/@core/preferences/src/update-css-variables.ts
  function updateCSSVariables (line 12) | function updateCSSVariables(preferences: Preferences) {
  function updateMainColorVariables (line 75) | function updateMainColorVariables(preference: Preferences) {
  function isDarkTheme (line 108) | function isDarkTheme(theme: string) {

FILE: packages/@core/preferences/src/use-preferences.ts
  function usePreferences (line 7) | function usePreferences() {

FILE: packages/@core/ui-kit/form-ui/src/config.ts
  constant DEFAULT_MODEL_PROP_NAME (line 22) | const DEFAULT_MODEL_PROP_NAME = 'modelValue';
  constant DEFAULT_FORM_COMMON_CONFIG (line 24) | const DEFAULT_FORM_COMMON_CONFIG: FormCommonConfig = {};
  constant COMPONENT_MAP (line 26) | const COMPONENT_MAP: Record<BaseFormComponentType, Component> = {
  constant COMPONENT_BIND_EVENT_MAP (line 37) | const COMPONENT_BIND_EVENT_MAP: Partial<
  function setupVbenForm (line 43) | function setupVbenForm<

FILE: packages/@core/ui-kit/form-ui/src/form-api.ts
  function getDefaultState (line 29) | function getDefaultState(): VbenFormProps {
  class FormApi (line 52) | class FormApi {
    method constructor (line 72) | constructor(options: VbenFormProps = {}) {
    method getFieldComponentRef (line 101) | getFieldComponentRef<T = ComponentPublicInstance>(
    method getFocusedField (line 129) | getFocusedField() {
    method getLatestSubmissionValues (line 153) | getLatestSubmissionValues() {
    method getState (line 157) | getState() {
    method getValues (line 161) | async getValues<T = Recordable<any>>() {
    method isFieldValid (line 166) | async isFieldValid(fieldName: string) {
    method merge (line 171) | merge(formApi: FormApi) {
    method mount (line 211) | mount(formActions: FormActions, componentRefMap: Map<string, unknown>) {
    method removeSchemaByFields (line 227) | async removeSchemaByFields(fields: string[]) {
    method resetForm (line 241) | async resetForm(
    method resetValidate (line 249) | async resetValidate() {
    method scrollToFirstError (line 261) | scrollToFirstError(errors: Record<string, any> | string) {
    method setFieldValue (line 292) | async setFieldValue(field: string, value: any, shouldValidate?: boolea...
    method setLatestSubmissionValues (line 297) | setLatestSubmissionValues(values: null | Recordable<any>) {
    method setState (line 301) | setState(
    method setValues (line 321) | async setValues(
    method submitForm (line 354) | async submitForm(e?: Event) {
    method unmount (line 365) | unmount() {
    method updateSchema (line 373) | updateSchema(schema: Partial<FormSchema>[]) {
    method validate (line 407) | async validate(opts?: Partial<ValidationOptions>) {
    method validateAndSubmitForm (line 422) | async validateAndSubmitForm() {
    method validateField (line 434) | async validateField(fieldName: string, opts?: Partial<ValidationOption...
    method getForm (line 448) | private async getForm() {
    method updateState (line 580) | private updateState() {

FILE: packages/@core/ui-kit/form-ui/src/form-render/dependencies.ts
  function useDependencies (line 15) | function useDependencies(

FILE: packages/@core/ui-kit/form-ui/src/form-render/expandable.ts
  function useExpandable (line 14) | function useExpandable(props: FormRenderProps) {

FILE: packages/@core/ui-kit/form-ui/src/form-render/helper.ts
  function getBaseRules (line 16) | function getBaseRules<
  function getDefaultValueInZodStack (line 32) | function getDefaultValueInZodStack(schema: ZodTypeAny): any {
  function isEventObjectLike (line 55) | function isEventObjectLike(obj: any) {

FILE: packages/@core/ui-kit/form-ui/src/types.ts
  type FormLayout (line 11) | type FormLayout = 'horizontal' | 'inline' | 'vertical';
  type BaseFormComponentType (line 13) | type BaseFormComponentType =
  type Breakpoints (line 23) | type Breakpoints = '2xl:' | '3xl:' | '' | 'lg:' | 'md:' | 'sm:' | 'xl:';
  type GridCols (line 25) | type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13;
  type WrapperClassType (line 27) | type WrapperClassType =
  type FormItemClassType (line 31) | type FormItemClassType =
  type FormFieldOptions (line 38) | type FormFieldOptions = Partial<
  type FormShape (line 47) | interface FormShape {
  type MaybeComponentPropKey (line 57) | type MaybeComponentPropKey =
  type MaybeComponentProps (line 64) | type MaybeComponentProps = { [K in MaybeComponentPropKey]?: any };
  type FormActions (line 66) | type FormActions = FormContext<GenericObject>;
  type CustomRenderType (line 68) | type CustomRenderType = (() => Component | string) | string;
  type FormSchemaRuleType (line 70) | type FormSchemaRuleType =
  type FormItemDependenciesCondition (line 77) | type FormItemDependenciesCondition<T = boolean | PromiseLike<boolean>> = (
  type FormItemDependenciesConditionWithRules (line 82) | type FormItemDependenciesConditionWithRules = (
  type FormItemDependenciesConditionWithProps (line 87) | type FormItemDependenciesConditionWithProps = (
  type FormItemDependencies (line 92) | interface FormItemDependencies {
  type ComponentProps (line 132) | type ComponentProps =
  type FormCommonConfig (line 139) | interface FormCommonConfig {
  type RenderComponentContentType (line 211) | type RenderComponentContentType = (
  type HandleSubmitFn (line 216) | type HandleSubmitFn = (
  type HandleResetFn (line 220) | type HandleResetFn = (
  type FieldMappingTime (line 224) | type FieldMappingTime = [
  type ArrayToStringFields (line 235) | type ArrayToStringFields = Array<
  type FormSchema (line 241) | interface FormSchema<
  type FormFieldProps (line 270) | interface FormFieldProps extends FormSchema {
  type FormRenderProps (line 274) | interface FormRenderProps<
  type ActionButtonOptions (line 344) | interface ActionButtonOptions extends VbenButtonProps {
  type VbenFormProps (line 350) | interface VbenFormProps<
  type ExtendedFormApi (line 432) | type ExtendedFormApi = FormApi & {
  type VbenFormAdapterOptions (line 438) | interface VbenFormAdapterOptions<

FILE: packages/@core/ui-kit/form-ui/src/use-form-context.ts
  type ExtendFormProps (line 16) | type ExtendFormProps = VbenFormProps & { formApi: ExtendedFormApi };
  function useFormInitial (line 26) | function useFormInitial(

FILE: packages/@core/ui-kit/form-ui/src/use-vben-form.ts
  function useVbenForm (line 14) | function useVbenForm<

FILE: packages/@core/ui-kit/layout-ui/src/hooks/use-layout.ts
  function useLayout (line 7) | function useLayout(props: VbenLayoutProps) {

FILE: packages/@core/ui-kit/layout-ui/src/vben-layout.ts
  type VbenLayoutProps (line 8) | interface VbenLayoutProps {

FILE: packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.ts
  type NormalMenuProps (line 3) | interface NormalMenuProps {

FILE: packages/@core/ui-kit/menu-ui/src/hooks/use-menu-context.ts
  function createMenuContext (line 12) | function createMenuContext(injectMenuData: MenuProvider) {
  function createSubMenuContext (line 19) | function createSubMenuContext(injectSubMenuData: SubMenuProvider) {
  function useMenuContext (line 28) | function useMenuContext() {
  function useSubMenuContext (line 40) | function useSubMenuContext() {

FILE: packages/@core/ui-kit/menu-ui/src/hooks/use-menu-scroll.ts
  type UseMenuScrollOptions (line 7) | interface UseMenuScrollOptions {
  function useMenuScroll (line 12) | function useMenuScroll(

FILE: packages/@core/ui-kit/menu-ui/src/hooks/use-menu.ts
  function useMenu (line 7) | function useMenu() {
  function useMenuStyle (line 39) | function useMenuStyle(menu?: SubMenuProvider) {

FILE: packages/@core/ui-kit/menu-ui/src/types.ts
  type MenuProps (line 4) | interface MenuProps {
  type SubMenuProps (line 57) | interface SubMenuProps extends MenuRecordBadgeRaw {
  type MenuItemProps (line 76) | interface MenuItemProps extends MenuRecordBadgeRaw {
  type MenuItemRegistered (line 95) | interface MenuItemRegistered {
  type MenuItemClicked (line 101) | interface MenuItemClicked {
  type MenuProvider (line 106) | interface MenuProvider {
  type SubMenuProvider (line 128) | interface SubMenuProvider {

FILE: packages/@core/ui-kit/menu-ui/src/utils/index.ts
  type VNodeChildAtom (line 10) | type VNodeChildAtom = Exclude<VNodeChild, Array<any>>;
  type RawSlots (line 11) | type RawSlots = Exclude<VNodeNormalizedChildren, Array<any> | null | str...
  type FlattenVNodes (line 13) | type FlattenVNodes = Array<RawSlots | VNodeChildAtom>;
  function findComponentUpward (line 20) | function findComponentUpward(

FILE: packages/@core/ui-kit/popup-ui/src/alert/AlertBuilder.ts
  function vbenAlert (line 30) | function vbenAlert(
  function vbenConfirm (line 109) | function vbenConfirm(
  function vbenPrompt (line 132) | async function vbenPrompt<T = any>(
  function clearAllAlerts (line 235) | function clearAllAlerts() {

FILE: packages/@core/ui-kit/popup-ui/src/alert/alert.ts
  type IconType (line 7) | type IconType = 'error' | 'info' | 'question' | 'success' | 'warning';
  type BeforeCloseScope (line 9) | type BeforeCloseScope = {
  type AlertProps (line 13) | type AlertProps = {
  type PromptProps (line 54) | type PromptProps<T = any> = {
  type AlertContext (line 79) | type AlertContext = {
  function useAlertContext (line 93) | function useAlertContext() {

FILE: packages/@core/ui-kit/popup-ui/src/drawer/__tests__/drawer-api.test.ts
  method state (line 12) | get state() {
  method constructor (line 19) | constructor(initialState: DrawerState, options: any) {
  method batch (line 24) | batch(cb: () => void) {
  method setState (line 28) | setState(fn: (prev: DrawerState) => DrawerState) {

FILE: packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts
  class DrawerApi (line 6) | class DrawerApi {
    method constructor (line 26) | constructor(options: DrawerApiOptions = {}) {
    method close (line 92) | async close() {
    method drawerLoading (line 111) | drawerLoading(loading: boolean) {
    method getData (line 115) | getData<T extends object = Record<string, any>>() {
    method lock (line 124) | lock(isLocked: boolean = true) {
    method onCancel (line 131) | onCancel() {
    method onClosed (line 142) | onClosed() {
    method onConfirm (line 151) | onConfirm() {
    method onOpened (line 158) | onOpened() {
    method open (line 164) | open() {
    method setData (line 168) | setData<T>(payload: T) {
    method setState (line 173) | setState(
    method unlock (line 190) | unlock() {

FILE: packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts
  type DrawerPlacement (line 7) | type DrawerPlacement = 'bottom' | 'left' | 'right' | 'top';
  type CloseIconPlacement (line 9) | type CloseIconPlacement = 'left' | 'right';
  type DrawerProps (line 11) | interface DrawerProps {
  type DrawerState (line 130) | interface DrawerState extends DrawerProps {
  type ExtendedDrawerApi (line 139) | type ExtendedDrawerApi = DrawerApi & {
  type DrawerApiOptions (line 145) | interface DrawerApiOptions extends DrawerState {

FILE: packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts
  constant USER_DRAWER_INJECT_KEY (line 22) | const USER_DRAWER_INJECT_KEY = Symbol('VBEN_DRAWER_INJECT');
  constant DEFAULT_DRAWER_PROPS (line 24) | const DEFAULT_DRAWER_PROPS: Partial<DrawerProps> = {};
  function setDefaultDrawerProps (line 26) | function setDefaultDrawerProps(props: Partial<DrawerProps>) {
  function useVbenDrawer (line 30) | function useVbenDrawer<
  function checkProps (line 120) | async function checkProps(api: ExtendedDrawerApi, attrs: Record<string, ...

FILE: packages/@core/ui-kit/popup-ui/src/modal/__tests__/modal-api.test.ts
  method constructor (line 14) | constructor(initialState: ModalState, options: any) {
  method batch (line 19) | batch(cb: () => void) {
  method setState (line 23) | setState(fn: (prev: ModalState) => ModalState) {
  method state (line 28) | get state() {

FILE: packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts
  class ModalApi (line 6) | class ModalApi {
    method constructor (line 26) | constructor(options: ModalApiOptions = {}) {
    method close (line 102) | async close() {
    method getData (line 114) | getData<T extends object = Record<string, any>>() {
    method lock (line 123) | lock(isLocked = true) {
    method modalLoading (line 133) | modalLoading(loading: boolean) {
    method onCancel (line 140) | onCancel() {
    method onClosed (line 151) | onClosed() {
    method onConfirm (line 160) | onConfirm() {
    method onOpened (line 167) | onOpened() {
    method open (line 173) | open() {
    method setData (line 181) | setData<T>(payload: T) {
    method setState (line 186) | setState(
    method unlock (line 203) | unlock() {

FILE: packages/@core/ui-kit/popup-ui/src/modal/modal.ts
  type ModalProps (line 7) | interface ModalProps {
  type ModalState (line 145) | interface ModalState extends ModalProps {
  type ExtendedModalApi (line 154) | type ExtendedModalApi = ModalApi & {
  type ModalApiOptions (line 160) | interface ModalApiOptions extends ModalState {

FILE: packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts
  function useModalDraggable (line 11) | function useModalDraggable(

FILE: packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts
  constant USER_MODAL_INJECT_KEY (line 18) | const USER_MODAL_INJECT_KEY = Symbol('VBEN_MODAL_INJECT');
  constant DEFAULT_MODAL_PROPS (line 20) | const DEFAULT_MODAL_PROPS: Partial<ModalProps> = {};
  function setDefaultModalProps (line 22) | function setDefaultModalProps(props: Partial<ModalProps>) {
  function useVbenModal (line 26) | function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
  function checkProps (line 129) | async function checkProps(api: ExtendedModalApi, attrs: Record<string, a...

FILE: packages/@core/ui-kit/shadcn-ui/src/components/back-top/backtop.ts
  type BacktopProps (line 32) | interface BacktopProps {

FILE: packages/@core/ui-kit/shadcn-ui/src/components/breadcrumb/types.ts
  type IBreadcrumb (line 4) | interface IBreadcrumb {
  type BreadcrumbProps (line 12) | interface BreadcrumbProps {

FILE: packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts
  type VbenButtonProps (line 7) | interface VbenButtonProps {
  type CustomRenderType (line 26) | type CustomRenderType = (() => Component | string) | string;
  type ValueType (line 28) | type ValueType = boolean | number | string;
  type VbenButtonGroupProps (line 30) | interface VbenButtonGroupProps

FILE: packages/@core/ui-kit/shadcn-ui/src/components/context-menu/interface.ts
  type IContextMenuItem (line 3) | interface IContextMenuItem {

FILE: packages/@core/ui-kit/shadcn-ui/src/components/dropdown-menu/interface.ts
  type VbenDropdownMenuItem (line 3) | interface VbenDropdownMenuItem {
  type DropdownMenuProps (line 28) | interface DropdownMenuProps {

FILE: packages/@core/ui-kit/shadcn-ui/src/components/pin-input/types.ts
  type PinInputProps (line 1) | interface PinInputProps {

FILE: packages/@core/ui-kit/shadcn-ui/src/components/segmented/types.ts
  type SegmentedItem (line 1) | interface SegmentedItem {

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/avatar/avatar.ts
  type AvatarVariants (line 22) | type AvatarVariants = VariantProps<typeof avatarVariant>;

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/badge/badge.ts
  type BadgeVariants (line 25) | type BadgeVariants = VariantProps<typeof badgeVariants>;

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/button/types.ts
  type ButtonVariantSize (line 1) | type ButtonVariantSize =
  type ButtonVariants (line 10) | type ButtonVariants =

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/form/injectionKeys.ts
  constant FORM_ITEM_INJECTION_KEY (line 4) | const FORM_ITEM_INJECTION_KEY = Symbol() as InjectionKey<string>;

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/form/useFormField.ts
  function useFormField (line 13) | function useFormField() {

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/sheet/sheet.ts
  type SheetVariants (line 24) | type SheetVariants = VariantProps<typeof sheetVariants>;

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/toggle/toggle.ts
  type ToggleVariants (line 27) | type ToggleVariants = VariantProps<typeof toggleVariants>;

FILE: packages/@core/ui-kit/shadcn-ui/src/ui/tree/types.ts
  type TreeProps (line 6) | interface TreeProps {
  function treePropsDefaults (line 44) | function treePropsDefaults() {

FILE: packages/@core/ui-kit/tabs-ui/src/types.ts
  type TabsEmits (line 4) | type TabsEmits = {
  type TabsProps (line 10) | interface TabsProps {
  type TabConfig (line 67) | interface TabConfig extends TabDefinition {

FILE: packages/@core/ui-kit/tabs-ui/src/use-tabs-drag.ts
  function findParentElement (line 10) | function findParentElement(element: HTMLElement) {
  function useTabsDrag (line 17) | function useTabsDrag(props: TabsProps, emit: EmitType) {

FILE: packages/@core/ui-kit/tabs-ui/src/use-tabs-view-scroll.ts
  type DomElement (line 9) | type DomElement = Element | null | undefined;
  function useTabsViewScroll (line 11) | function useTabsViewScroll(props: TabsProps) {

FILE: packages/constants/src/core.ts
  constant LOGIN_PATH (line 4) | const LOGIN_PATH = '/auth/login';
  type LanguageOption (line 6) | interface LanguageOption {
  constant SUPPORT_LANGUAGES (line 14) | const SUPPORT_LANGUAGES: LanguageOption[] = [
  constant DEFAULT_TENANT_ID (line 28) | const DEFAULT_TENANT_ID = '000000';
  constant BUSINESS_SUCCESS_CODE (line 33) | const BUSINESS_SUCCESS_CODE = 200;
  constant UNAUTHORIZED_CODE (line 38) | const UNAUTHORIZED_CODE = 401;

FILE: packages/effects/access/src/accessible.ts
  function generateAccessible (line 22) | async function generateAccessible(
  function generateRoutes (line 87) | async function generateRoutes(

FILE: packages/effects/access/src/directive.ts
  function isAccessible (line 11) | function isAccessible(
  function registerAccessDirective (line 38) | function registerAccessDirective(app: App) {

FILE: packages/effects/access/src/use-access.ts
  function useAccess (line 6) | function useAccess() {

FILE: packages/effects/common-ui/src/components/captcha/hooks/useCaptchaPoints.ts
  function useCaptchaPoints (line 5) | function useCaptchaPoints() {

FILE: packages/effects/common-ui/src/components/captcha/types.ts
  type CaptchaData (line 4) | interface CaptchaData {
  type CaptchaPoint (line 18) | interface CaptchaPoint extends CaptchaData {
  type PointSelectionCaptchaCardProps (line 24) | interface PointSelectionCaptchaCardProps {
  type PointSelectionCaptchaProps (line 56) | interface PointSelectionCaptchaProps
  type SliderCaptchaProps (line 75) | interface SliderCaptchaProps {
  type SliderRotateCaptchaProps (line 120) | interface SliderRotateCaptchaProps {
  type SliderTranslateCaptchaProps (line 161) | interface SliderTranslateCaptchaProps {
  type CaptchaVerifyPassingData (line 197) | interface CaptchaVerifyPassingData {
  type SliderCaptchaActionType (line 202) | interface SliderCaptchaActionType {
  type SliderRotateVerifyPassingData (line 206) | interface SliderRotateVerifyPassingData {

FILE: packages/effects/common-ui/src/components/code-mirror/data.ts
  type LanguageSupport (line 24) | type LanguageSupport = keyof typeof languageSupportMap;

FILE: packages/effects/common-ui/src/components/col-page/types.ts
  type ColPageProps (line 3) | interface ColPageProps extends PageProps {

FILE: packages/effects/common-ui/src/components/count-to/types.ts
  type TransitionPresets (line 7) | type TransitionPresets = keyof typeof TransitionPresetsData;
  type CountToProps (line 13) | interface CountToProps {

FILE: packages/effects/common-ui/src/components/icon-picker/icons.ts
  constant ICONS_MAP (line 6) | const ICONS_MAP: Recordable<string[]> = {};
  type IconifyResponse (line 8) | interface IconifyResponse {
  constant PENDING_REQUESTS (line 17) | const PENDING_REQUESTS: Recordable<Promise<string[]>> = {};
  function fetchIconsData (line 26) | async function fetchIconsData(prefix: string): Promise<string[]> {

FILE: packages/effects/common-ui/src/components/json-viewer/types.ts
  type JsonViewerProps (line 1) | interface JsonViewerProps {
  type JsonViewerAction (line 26) | interface JsonViewerAction {
  type JsonViewerValue (line 32) | interface JsonViewerValue {
  type JsonViewerToggle (line 39) | interface JsonViewerToggle {

FILE: packages/effects/common-ui/src/components/loading/directive.ts
  constant LOADING_INSTANCE_KEY (line 8) | const LOADING_INSTANCE_KEY = Symbol('loading');
  constant SPINNER_INSTANCE_KEY (line 9) | const SPINNER_INSTANCE_KEY = Symbol('spinner');
  constant CLASS_NAME_RELATIVE (line 11) | const CLASS_NAME_RELATIVE = 'spinner-parent--relative';
  method mounted (line 14) | mounted(el, binding) {
  method unmounted (line 21) | unmounted(el) {
  method updated (line 30) | updated(el, binding) {
  function getOptions (line 49) | function getOptions(binding: DirectiveBinding) {
  method mounted (line 60) | mounted(el, binding) {
  method unmounted (line 67) | unmounted(el) {
  method updated (line 76) | updated(el, binding) {
  type loadingDirectiveParams (line 95) | type loadingDirectiveParams = {
  function registerLoadingDirective (line 107) | function registerLoadingDirective(

FILE: packages/effects/common-ui/src/components/page/types.ts
  type PageProps (line 1) | interface PageProps {

FILE: packages/effects/common-ui/src/components/tippy/directive.ts
  function useTippyDirective (line 5) | function useTippyDirective(isDark: ComputedRef<boolean>) {

FILE: packages/effects/common-ui/src/components/tippy/index.ts
  type TippyProps (line 21) | type TippyProps = Partial<
  function initTippy (line 34) | function initTippy(app: App<Element>, options?: DefaultProps) {

FILE: packages/effects/common-ui/src/ui/about/about.ts
  type AboutProps (line 3) | interface AboutProps {
  type DescriptionItem (line 9) | interface DescriptionItem {

FILE: packages/effects/common-ui/src/ui/authentication/types.ts
  type AuthenticationProps (line 1) | interface AuthenticationProps {
  type GrantType (line 80) | type GrantType = 'email' | 'password' | 'sms' | 'social' | 'xcx';
  type LoginAndRegisterParams (line 82) | interface LoginAndRegisterParams {
  type LoginCodeParams (line 91) | interface LoginCodeParams {
  type LoginEmits (line 97) | interface LoginEmits {
  type LoginCodeEmits (line 101) | interface LoginCodeEmits {
  type RegisterEmits (line 105) | interface RegisterEmits {

FILE: packages/effects/common-ui/src/ui/dashboard/typing.ts
  type AnalysisOverviewItem (line 3) | interface AnalysisOverviewItem {
  type WorkbenchProjectItem (line 11) | interface WorkbenchProjectItem {
  type WorkbenchTrendItem (line 21) | interface WorkbenchTrendItem {
  type WorkbenchTodoItem (line 28) | interface WorkbenchTodoItem {
  type WorkbenchQuickNavItem (line 35) | interface WorkbenchQuickNavItem {

FILE: packages/effects/common-ui/src/ui/fallback/fallback.ts
  type FallbackProps (line 1) | interface FallbackProps {

FILE: packages/effects/hooks/src/use-app-config.ts
  function useAppConfig (line 9) | function useAppConfig(

FILE: packages/effects/hooks/src/use-content-maximize.ts
  function useContentMaximize (line 5) | function useContentMaximize() {

FILE: packages/effects/hooks/src/use-design-tokens.ts
  function useAntdDesignTokens (line 10) | function useAntdDesignTokens() {
  function useNaiveDesignTokens (line 77) | function useNaiveDesignTokens() {
  function useElementPlusDesignTokens (line 163) | function useElementPlusDesignTokens() {

FILE: packages/effects/hooks/src/use-hover-toggle.ts
  type HoverDelayOptions (line 11) | interface HoverDelayOptions {
  constant DEFAULT_LEAVE_DELAY (line 18) | const DEFAULT_LEAVE_DELAY = 500;
  constant DEFAULT_ENTER_DELAY (line 19) | const DEFAULT_ENTER_DELAY = 0;
  function useHoverToggle (line 27) | function useHoverToggle(

FILE: packages/effects/hooks/src/use-pagination.ts
  function pagination (line 13) | function pagination<T = any>(list: T[], pageNo: number, pageSize: number...
  function usePagination (line 25) | function usePagination<T = any>(list: Ref<T[]>, pageSize: number) {

FILE: packages/effects/hooks/src/use-refresh.ts
  function useRefresh (line 5) | function useRefresh() {

FILE: packages/effects/hooks/src/use-tabs.ts
  function useTabs (line 7) | function useTabs() {

FILE: packages/effects/hooks/src/use-watermark.ts
  function useWatermark (line 40) | function useWatermark() {

FILE: packages/effects/layouts/src/authentication/types.ts
  type ToolbarType (line 1) | type ToolbarType = 'color' | 'language' | 'layout' | 'theme';

FILE: packages/effects/layouts/src/basic/content/use-content-spinner.ts
  function useContentSpinner (line 6) | function useContentSpinner() {

FILE: packages/effects/layouts/src/basic/menu/use-extra-menu.ts
  function useExtraMenu (line 14) | function useExtraMenu(useRootMenus?: ComputedRef<MenuRecordRaw[]>) {

FILE: packages/effects/layouts/src/basic/menu/use-mixed-menu.ts
  function useMixedMenu (line 12) | function useMixedMenu() {

FILE: packages/effects/layouts/src/basic/menu/use-navigation.ts
  function useNavigation (line 7) | function useNavigation() {

FILE: packages/effects/layouts/src/basic/tabbar/use-tabbar.ts
  function useTabbar (line 28) | function useTabbar() {

FILE: packages/effects/layouts/src/widgets/notification/types.ts
  type NotificationItem (line 1) | interface NotificationItem {

FILE: packages/effects/layouts/src/widgets/preferences/use-open-preferences.ts
  function useOpenPreferences (line 5) | function useOpenPreferences() {

FILE: packages/effects/plugins/src/echarts/echarts.ts
  type ECOption (line 40) | type ECOption = ComposeOption<

FILE: packages/effects/plugins/src/echarts/use-echarts.ts
  type EchartsUIType (line 23) | type EchartsUIType = typeof EchartsUI | undefined;
  type EchartsThemeType (line 25) | type EchartsThemeType = 'dark' | 'light' | null;
  function useEcharts (line 27) | function useEcharts(chartRef: Ref<EchartsUIType>) {

FILE: packages/effects/plugins/src/motion/types.ts
  type MotionPreset (line 26) | type MotionPreset = (typeof MotionPresets)[number];

FILE: packages/effects/plugins/src/vxe-table/api.ts
  function getDefaultState (line 18) | function getDefaultState(): VxeGridProps {
  class VxeGridApi (line 29) | class VxeGridApi<T extends Record<string, any> = any> {
    method constructor (line 42) | constructor(options: VxeGridProps = {}) {
    method mount (line 61) | mount(instance: null | VxeGridInstance, formApi: ExtendedFormApi) {
    method query (line 70) | async query(params: Record<string, any> = {}) {
    method reload (line 78) | async reload(params: Record<string, any> = {}) {
    method setGridOptions (line 86) | setGridOptions(options: Partial<VxeGridProps['gridOptions']>) {
    method setLoading (line 92) | setLoading(isLoading: boolean) {
    method setState (line 100) | setState(
    method toggleSearchForm (line 114) | toggleSearchForm(show?: boolean) {
    method unmount (line 124) | unmount() {

FILE: packages/effects/plugins/src/vxe-table/extends.ts
  function extendProxyOptions (line 8) | function extendProxyOptions(
  function extendProxyOption (line 25) | function extendProxyOption(
  function extendsDefaultFormatter (line 68) | function extendsDefaultFormatter(vxeUI: VxeUIExport) {

FILE: packages/effects/plugins/src/vxe-table/init.ts
  function initVxeTable (line 74) | function initVxeTable() {
  function setupVbenVxeTable (line 115) | function setupVbenVxeTable(setupOptions: SetupVxeTable) {

FILE: packages/effects/plugins/src/vxe-table/types.ts
  type VxePaginationInfo (line 18) | interface VxePaginationInfo {
  type ToolbarConfigOptions (line 24) | interface ToolbarConfigOptions extends VxeGridPropTypes.ToolbarConfig {
  type VxeTableGridOptions (line 29) | interface VxeTableGridOptions<T = any> extends VxeTableGridProps<T> {
  type SeparatorOptions (line 34) | interface SeparatorOptions {
  type VxeGridProps (line 39) | interface VxeGridProps<
  type ExtendedVxeGridApi (line 81) | type ExtendedVxeGridApi<
  type SetupVxeTable (line 90) | interface SetupVxeTable {

FILE: packages/effects/plugins/src/vxe-table/use-vxe-grid.ts
  type FilteredSlots (line 16) | type FilteredSlots<T> = {
  function useVbenVxeGrid (line 22) | function useVbenVxeGrid<
  type UseVbenVxeGrid (line 70) | type UseVbenVxeGrid = typeof useVbenVxeGrid;

FILE: packages/effects/request/src/request-client/modules/downloader.ts
  type DownloadRequestConfig (line 4) | type DownloadRequestConfig = {
  class FileDownloader (line 13) | class FileDownloader {
    method constructor (line 16) | constructor(client: RequestClient) {
    method download (line 25) | public async download<T = Blob>(

FILE: packages/effects/request/src/request-client/modules/interceptor.ts
  class InterceptorManager (line 18) | class InterceptorManager {
    method constructor (line 21) | constructor(instance: AxiosInstance) {
    method addRequestInterceptor (line 25) | addRequestInterceptor({
    method addResponseInterceptor (line 32) | addResponseInterceptor<T = any>({

FILE: packages/effects/request/src/request-client/modules/sse.test.ts
  method decode (line 15) | decode(value: Uint8Array, opts?: any) {

FILE: packages/effects/request/src/request-client/modules/sse.ts
  class SSE (line 9) | class SSE {
    method constructor (line 12) | constructor(client: RequestClient) {
    method postSSE (line 16) | public async postSSE(
    method requestSSE (line 33) | public async requestSSE(
  function safeJoinUrl (line 117) | function safeJoinUrl(baseUrl: string | undefined, url: string): string {

FILE: packages/effects/request/src/request-client/modules/uploader.ts
  class FileUploader (line 6) | class FileUploader {
    method constructor (line 9) | constructor(client: RequestClient) {
    method upload (line 13) | public async upload<T = any>(

FILE: packages/effects/request/src/request-client/request-client.ts
  function getParamsSerializer (line 15) | function getParamsSerializer(
  class RequestClient (line 39) | class RequestClient {
    method constructor (line 58) | constructor(options: RequestClientOptions = {}) {
    method delete (line 99) | public delete<T = any>(
    method deleteWithMsg (line 109) | public deleteWithMsg<T = any>(
    method get (line 123) | public get<T = any>(url: string, config?: RequestClientConfig): Promis...
    method getBaseUrl (line 130) | public getBaseUrl() {
    method post (line 137) | public post<T = any>(
    method postWithMsg (line 148) | public postWithMsg<T = any>(
    method put (line 164) | public put<T = any>(
    method putWithMsg (line 175) | public putWithMsg<T = any>(
    method request (line 191) | public async request<T>(

FILE: packages/effects/request/src/request-client/types.ts
  type ExtendOptions (line 8) | type ExtendOptions<T = any> = {
  type RequestClientConfig (line 30) | type RequestClientConfig<T = any> = AxiosRequestConfig<T> & ExtendOption...
  type RequestResponse (line 32) | type RequestResponse<T = any> = AxiosResponse<T> & {
  type RequestContentType (line 36) | type RequestContentType =
  type RequestClientOptions (line 42) | type RequestClientOptions = CreateAxiosDefaults & ExtendOptions;
  type SseRequestOptions (line 47) | interface SseRequestOptions extends RequestInit {
  type RequestInterceptorConfig (line 52) | interface RequestInterceptorConfig {
  type ResponseInterceptorConfig (line 61) | interface ResponseInterceptorConfig<T = any> {
  type MakeErrorMessageFn (line 68) | type MakeErrorMessageFn = (message: string, error: any) => void;
  type HttpResponse (line 70) | interface HttpResponse<T = any> {
  type ErrorMessageMode (line 88) | type ErrorMessageMode = 'message' | 'modal' | 'none' | undefined;
  type SuccessMessageMode (line 89) | type SuccessMessageMode = ErrorMessageMode;
  type AxiosRequestConfig (line 95) | interface AxiosRequestConfig {

FILE: packages/icons/src/svg/load.ts
  function parseSvg (line 11) | function parseSvg(svgData: string): IconifyIconStructure {
  function loadSvgIcons (line 41) | async function loadSvgIcons() {

FILE: packages/locales/src/i18n.ts
  function loadLocalesMap (line 36) | function loadLocalesMap(modules: Record<string, () => Promise<unknown>>) {
  function loadLocalesMapFromDir (line 54) | function loadLocalesMapFromDir(
  function setI18nLanguage (line 95) | function setI18nLanguage(locale: Locale) {
  function setupI18n (line 101) | async function setupI18n(app: App, options: LocaleSetupOptions = {}) {
  function loadLocaleMessages (line 122) | async function loadLocaleMessages(lang: SupportedLanguagesType) {

FILE: packages/locales/src/typing.ts
  type SupportedLanguagesType (line 1) | type SupportedLanguagesType = 'en-US' | 'zh-CN';
  type ImportLocaleFn (line 3) | type ImportLocaleFn = () => Promise<{ default: Record<string, string> }>;
  type LoadMessageFn (line 5) | type LoadMessageFn = (
  type LocaleSetupOptions (line 9) | interface LocaleSetupOptions {

FILE: packages/preferences/src/index.ts
  function defineOverridesPreferences (line 11) | function defineOverridesPreferences(preferences: DeepPartial<Preferences...

FILE: packages/stores/src/modules/access.ts
  type AccessToken (line 7) | type AccessToken = null | string;
  type AccessState (line 9) | interface AccessState {
  method getMenuByPath (line 53) | getMenuByPath(path: string) {
  method lockScreen (line 72) | lockScreen(password: string) {
  method setAccessCodes (line 76) | setAccessCodes(codes: string[]) {
  method setAccessMenus (line 79) | setAccessMenus(menus: MenuRecordRaw[]) {
  method setAccessRoutes (line 82) | setAccessRoutes(routes: RouteRecordRaw[]) {
  method setAccessToken (line 85) | setAccessToken(token: AccessToken) {
  method setIsAccessChecked (line 88) | setIsAccessChecked(isAccessChecked: boolean) {
  method setLoginExpired (line 91) | setLoginExpired(loginExpired: boolean) {
  method setRefreshToken (line 94) | setRefreshToken(token: AccessToken) {
  method unlockScreen (line 97) | unlockScreen() {

FILE: packages/stores/src/modules/tabbar.ts
  type TabbarState (line 21) | interface TabbarState {
  method _bulkCloseByKeys (line 60) | async _bulkCloseByKeys(keys: string[]) {
  method _close (line 72) | _close(tab: TabDefinition) {
  method _goToDefaultTab (line 82) | async _goToDefaultTab(router: Router) {
  method _goToTab (line 96) | async _goToTab(tab: TabDefinition, router: Router) {
  method addTab (line 109) | addTab(routeTab: TabDefinition): TabDefinition {
  method closeAllTabs (line 174) | async closeAllTabs(router: Router) {
  method closeLeftTabs (line 184) | async closeLeftTabs(tab: TabDefinition) {
  method closeOtherTabs (line 205) | async closeOtherTabs(tab: TabDefinition) {
  method closeRightTabs (line 229) | async closeRightTabs(tab: TabDefinition) {
  method closeTab (line 250) | async closeTab(tab: TabDefinition, router: Router) {
  method closeTabByKey (line 283) | async closeTabByKey(key: string, router: Router) {
  method getTabByKey (line 302) | getTabByKey(key: string) {
  method openTabInNewWindow (line 311) | async openTabInNewWindow(tab: TabDefinition) {
  method pinTab (line 319) | async pinTab(tab: TabDefinition) {
  method refresh (line 340) | async refresh(router: Router | string) {
  method refreshByName (line 364) | async refreshByName(name: string) {
  method resetTabTitle (line 373) | async resetTabTitle(tab: TabDefinition) {
  method setAffixTabs (line 388) | setAffixTabs(tabs: RouteRecordNormalized[]) {
  method setMenuList (line 399) | setMenuList(list: string[]) {
  method setTabTitle (line 421) | async setTabTitle(tab: TabDefinition, title: ComputedRef<string> | strin...
  method setUpdateTime (line 430) | setUpdateTime() {
  method sortTabs (line 438) | async sortTabs(oldIndex: number, newIndex: number) {
  method toggleTabPin (line 452) | async toggleTabPin(tab: TabDefinition) {
  method unpinTab (line 462) | async unpinTab(tab: TabDefinition) {
  method updateCacheTabs (line 482) | async updateCacheTabs() {
  method affixTabs (line 504) | affixTabs(): TabDefinition[] {
  method getCachedTabs (line 513) | getCachedTabs(): string[] {
  method getExcludeCachedTabs (line 516) | getExcludeCachedTabs(): string[] {
  method getMenuList (line 519) | getMenuList(): string[] {
  method getTabs (line 522) | getTabs(): TabDefinition[] {
  function cloneTab (line 565) | function cloneTab(route: TabDefinition): TabDefinition {
  function isAffixTab (line 590) | function isAffixTab(tab: TabDefinition) {
  function isTabShown (line 598) | function isTabShown(tab: TabDefinition) {
  function getTabKey (line 607) | function getTabKey(tab: RouteLocationNormalized | RouteRecordNormalized) {
  function getTabKeyFromTab (line 636) | function getTabKeyFromTab(tab: TabDefinition): string {
  function equalTab (line 645) | function equalTab(a: TabDefinition, b: TabDefinition) {
  function routeToTab (line 649) | function routeToTab(route: RouteRecordNormalized) {

FILE: packages/stores/src/modules/user.ts
  type BasicUserInfo (line 3) | interface BasicUserInfo {
  type AccessState (line 35) | interface AccessState {
  method setUserInfo (line 51) | setUserInfo(userInfo: BasicUserInfo | null) {
  method setUserRoles (line 58) | setUserRoles(roles: string[]) {

FILE: packages/stores/src/setup.ts
  type InitStoreOptions (line 10) | interface InitStoreOptions {
  function initStores (line 20) | async function initStores(app: App, options: InitStoreOptions) {
  function resetAllStores (line 51) | function resetAllStores() {

FILE: packages/types/global.d.ts
  type RouteMeta (line 7) | interface RouteMeta extends IRouteMeta {}
  type VbenAdminProAppConfigRaw (line 10) | interface VbenAdminProAppConfigRaw {
  type ApplicationConfig (line 27) | interface ApplicationConfig {
  type Window (line 45) | interface Window {

FILE: packages/types/src/user.ts
  type UserInfo (line 4) | interface UserInfo extends BasicUserInfo {

FILE: packages/utils/src/encryption/base.ts
  type EncryptionOptions (line 1) | interface EncryptionOptions {
  method constructor (line 32) | constructor(options: EncryptionOptions) {

FILE: packages/utils/src/encryption/crypto.ts
  function randomStr (line 8) | function randomStr(length = 32) {
  function encodeBase64 (line 21) | function encodeBase64(str: string) {
  function decodeBase64 (line 28) | function decodeBase64(str: string) {

FILE: packages/utils/src/encryption/impl/aes.ts
  class AesEncryption (line 8) | class AesEncryption extends BaseSymmetricEncryption {
    method decrypt (line 9) | override decrypt(data: string, key: string): string {
    method encrypt (line 19) | override encrypt(data: string, key: string): string {

FILE: packages/utils/src/encryption/impl/rsa.ts
  class RsaEncryption (line 8) | class RsaEncryption extends BaseAsymmetricEncryption {
    method decrypt (line 9) | override decrypt(str: string): string {
    method encrypt (line 21) | override encrypt(str: string): string {

FILE: packages/utils/src/encryption/impl/sm2.ts
  class Sm2Encryption (line 12) | class Sm2Encryption extends BaseAsymmetricEncryption {
    method decrypt (line 13) | override decrypt(hexStr: string): string {
    method encrypt (line 27) | override encrypt(str: string): string {
  function generateSm2KeyPair (line 38) | function generateSm2KeyPair() {
  function logSm2KeyPair (line 46) | function logSm2KeyPair() {

FILE: packages/utils/src/encryption/impl/sm4.ts
  class Sm4Encryption (line 9) | class Sm4Encryption extends BaseSymmetricEncryption {
    method decrypt (line 16) | override decrypt(hexString: string, key: string): string {
    method encrypt (line 22) | override encrypt(data: string, key: string): string {
    method checkKey (line 38) | private checkKey(key: string) {

FILE: packages/utils/src/helpers/enum-options.ts
  type EnumsOption (line 9) | interface EnumsOption {
  type EnumResult (line 24) | type EnumResult<T extends readonly EnumsOption[]> = {
  function optionsToEnum (line 38) | function optionsToEnum<T extends readonly EnumsOption[]>(

FILE: packages/utils/src/helpers/find-menu-by-path.ts
  function findMenuByPath (line 3) | function findMenuByPath(
  function findRootMenuByPath (line 24) | function findRootMenuByPath(menus: MenuRecordRaw[], path?: string, level...

FILE: packages/utils/src/helpers/generate-menus.ts
  function generateMenus (line 17) | function generateMenus(

FILE: packages/utils/src/helpers/generate-routes-backend.ts
  function generateRoutesByBackend (line 14) | async function generateRoutesByBackend(
  function convertRoutes (line 40) | function convertRoutes(
  function normalizeViewPath (line 77) | function normalizeViewPath(path: string): string {

FILE: packages/utils/src/helpers/generate-routes-frontend.ts
  function generateRoutesByFrontend (line 8) | async function generateRoutesByFrontend(
  function hasAuthority (line 36) | function hasAuthority(route: RouteRecordRaw, access: string[]) {
  function menuHasVisibleWithForbidden (line 50) | function menuHasVisibleWithForbidden(route: RouteRecordRaw) {

FILE: packages/utils/src/helpers/get-popup-container.ts
  function getPopupContainer (line 6) | function getPopupContainer(node?: HTMLElement): HTMLElement {
  function getVxePopupContainer (line 19) | function getVxePopupContainer(

FILE: packages/utils/src/helpers/merge-route-modules.ts
  type RouteModuleType (line 4) | interface RouteModuleType {
  function mergeRouteModules (line 13) | function mergeRouteModules(

FILE: packages/utils/src/helpers/mitt.ts
  type EventType (line 5) | type EventType = string | symbol;
  type Handler (line 9) | type Handler<T = unknown> = (event: T) => void;
  type WildcardHandler (line 10) | type WildcardHandler<T = Record<string, unknown>> = (
  type EventHandlerList (line 16) | type EventHandlerList<T = unknown> = Array<Handler<T>>;
  type WildCardEventHandlerList (line 17) | type WildCardEventHandlerList<T = Record<string, unknown>> = Array<
  type EventHandlerMap (line 22) | type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<
  type Emitter (line 27) | interface Emitter<Events extends Record<EventType, unknown>> {
  function mitt (line 51) | function mitt<Events extends Record<EventType, unknown>>(

FILE: packages/utils/src/helpers/request.ts
  function setObjToUrlParams (line 15) | function setObjToUrlParams(baseUrl: string, obj: any): string {

FILE: packages/utils/src/helpers/reset-routes.ts
  function resetStaticRoutes (line 8) | function resetStaticRoutes(router: Router, routes: RouteRecordRaw[]) {

FILE: packages/utils/src/helpers/safe.ts
  function safeParseNumber (line 7) | function safeParseNumber(str: string): number | string {

FILE: packages/utils/src/helpers/tree.ts
  type TreeHelperConfig (line 2) | interface TreeHelperConfig {
  type Fn (line 8) | type Fn = (node: any, parentNode?: any) => any;
  constant DEFAULT_CONFIG (line 11) | const DEFAULT_CONFIG: TreeHelperConfig = {
  function listToTree (line 23) | function listToTree<T = any>(
  function treeToList (line 43) | function treeToList<T = any>(
  function findNode (line 57) | function findNode<T = any>(
  function findNodeAll (line 72) | function findNodeAll<T = any>(
  function findPath (line 88) | function findPath<T = any>(
  function findPathAll (line 115) | function findPathAll(
  function filter (line 141) | function filter<T = any>(
  function forEach (line 165) | function forEach<T = any>(
  function treeMap (line 188) | function treeMap<T = any>(
  function treeMapEach (line 199) | function treeMapEach(
  function eachTree (line 227) | function eachTree(treeDatas: any[], callBack: Fn, parentNode = {}) {
  function removeEmptyChildren (line 237) | function removeEmptyChildren(data: any[], childrenField = 'children') {
  function addFullName (line 259) | function addFullName(
  function findParentsIds (line 287) | function findParentsIds(
  function findGroupParentIds (line 332) | function findGroupParentIds(
  function findAllIds (line 355) | function findAllIds(
  function findIdsByLevel (line 378) | function findIdsByLevel(

FILE: packages/utils/src/helpers/unmount-global-loading.ts
  function unmountGlobalLoading (line 8) | function unmountGlobalLoading() {

FILE: packages/utils/src/helpers/uuid.ts
  function buildUUID (line 6) | function buildUUID(): string {
  function buildShortUUID (line 37) | function buildShortUUID(prefix = ''): string {

FILE: scripts/clean.mjs
  constant CONCURRENCY_LIMIT (line 7) | const CONCURRENCY_LIMIT = 10;
  constant SKIP_DIRS (line 10) | const SKIP_DIRS = new Set(['.DS_Store', '.git', '.idea', '.vscode']);
  function processItem (line 20) | async function processItem(currentDir, item, targets, _depth) {
  function cleanTargetsRecursively (line 60) | async function cleanTargetsRecursively(currentDir, targets, depth = 0) {

FILE: scripts/turbo-run/src/run.ts
  type RunOptions (line 5) | interface RunOptions {
  function run (line 9) | async function run(options: RunOptions) {

FILE: scripts/vsh/src/check-circular/index.ts
  constant DEFAULT_CONFIG (line 10) | const DEFAULT_CONFIG = {
  type CircularDependencyResult (line 27) | type CircularDependencyResult = string[];
  type CheckCircularConfig (line 29) | interface CheckCircularConfig {
  type CommandOptions (line 35) | interface CommandOptions {
  function formatCircles (line 48) | function formatCircles(circles: CircularDependencyResult[]): void {
  function checkCircular (line 69) | async function checkCircular({
  function defineCheckCircularCommand (line 146) | function defineCheckCircularCommand(cac: CAC): void {

FILE: scripts/vsh/src/check-dep/index.ts
  constant DEFAULT_CONFIG (line 8) | const DEFAULT_CONFIG = {
  type DepcheckResult (line 37) | interface DepcheckResult {
  type DepcheckConfig (line 43) | interface DepcheckConfig {
  type PackageInfo (line 49) | interface PackageInfo {
  function cleanDepcheckResult (line 60) | function cleanDepcheckResult(unused: DepcheckResult): void {
  function formatDepcheckResult (line 80) | function formatDepcheckResult(pkgName: string, unused: DepcheckResult): ...
  function runDepcheck (line 115) | async function runDepcheck(config: DepcheckConfig = {}): Promise<void> {
  function defineDepcheckCommand (line 167) | function defineDepcheckCommand(cac: CAC): void {

FILE: scripts/vsh/src/code-workspace/index.ts
  constant CODE_WORKSPACE_FILE (line 16) | const CODE_WORKSPACE_FILE = join('vben-admin.code-workspace');
  type CodeWorkspaceCommandOptions (line 18) | interface CodeWorkspaceCommandOptions {
  function createCodeWorkspace (line 23) | async function createCodeWorkspace({
  function runCodeWorkspace (line 49) | async function runCodeWorkspace({
  function defineCodeWorkspaceCommand (line 65) | function defineCodeWorkspaceCommand(cac: CAC) {

FILE: scripts/vsh/src/index.ts
  constant COMMAND_DESCRIPTIONS (line 13) | const COMMAND_DESCRIPTIONS = {
  function main (line 24) | async function main(): Promise<void> {

FILE: scripts/vsh/src/lint/index.ts
  type LintCommandOptions (line 5) | interface LintCommandOptions {
  function runLint (line 12) | async function runLint({ format }: LintCommandOptions) {
  function defineLintCommand (line 40) | function defineLintCommand(cac: CAC) {

FILE: scripts/vsh/src/publint/index.ts
  constant CACHE_FILE (line 20) | const CACHE_FILE = join(
  type PubLintCommandOptions (line 27) | interface PubLintCommandOptions {
  function getLintFiles (line 38) | async function getLintFiles(files: string[] = []) {
  function getCacheFile (line 53) | function getCacheFile() {
  function readCache (line 58) | async function readCache(cacheFile: string) {
  function runPublint (line 67) | async function runPublint(files: string[], { check }: PubLintCommandOpti...
  function printResult (line 114) | function printResult(
  function definePubLintCommand (line 176) | function definePubLintCommand(cac: CAC) {
Condensed preview — 1431 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,841K chars).
[
  {
    "path": ".browserslistrc",
    "chars": 40,
    "preview": "> 1%\nlast 2 versions\nnot dead\nnot ie 11\n"
  },
  {
    "path": ".commitlintrc.js",
    "chars": 51,
    "preview": "export { default } from '@vben/commitlint-config';\n"
  },
  {
    "path": ".dockerignore",
    "chars": 327,
    "preview": "# Git\n.git\n.gitignore\n\n# IDE\n.idea\n.vscode\n*.iml\n\n# Logs\n*.log\nlogs\n\n# Node\nnode_modules\n.pnpm-store\n.turbo\n\n# Build out"
  },
  {
    "path": ".editorconfig",
    "chars": 278,
    "preview": "root = true\n\n[*]\ncharset=utf-8\nend_of_line=lf\ninsert_final_newline=true\nindent_style=space\nindent_size=2\nmax_line_length"
  },
  {
    "path": ".gitattributes",
    "chars": 459,
    "preview": "# https://docs.github.com/cn/get-started/getting-started-with-git/configuring-git-to-handle-line-endings\n\n# Automaticall"
  },
  {
    "path": ".gitconfig",
    "chars": 30,
    "preview": "[core]\n    ignorecase = false\n"
  },
  {
    "path": ".gitignore",
    "chars": 648,
    "preview": "node_modules\n.DS_Store\ndist\ndist-ssr\ndist.zip\ndist.tar\ndist.war\n.nitro\n.output\n*-dist.zip\n*-dist.tar\n*-dist.war\ncoverage"
  },
  {
    "path": ".npmrc",
    "chars": 403,
    "preview": "registry = \"https://registry.npmmirror.com\"\npublic-hoist-pattern[]=lefthook\npublic-hoist-pattern[]=eslint\npublic-hoist-p"
  },
  {
    "path": ".prettierignore",
    "chars": 133,
    "preview": "dist\ndev-dist\n.local\n.output.js\nnode_modules\n.nvmrc\ncoverage\nCODEOWNERS\n.nitro\n.output\n\n\n**/*.svg\n**/*.sh\n\npublic\n.npmrc"
  },
  {
    "path": ".prettierrc.mjs",
    "chars": 144,
    "preview": "// .prettierrc.mjs 是 Prettier 代码格式化工具的配置文件。\n// 作用:\n// 统一代码风格(缩进、引号、分号等)\n// 在保存文件或提交代码时自动格式化\nexport { default } from '@vb"
  },
  {
    "path": ".stylelintignore",
    "chars": 31,
    "preview": "dist\npublic\n__tests__\ncoverage\n"
  },
  {
    "path": "LICENSE",
    "chars": 1075,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2026 ruoyi-ai\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "README.md",
    "chars": 2297,
    "preview": "# RuoYi-AI 管理端\n\n<div align=\"center\">\n\n<img src=\"https://github.com/ageerle/ruoyi-ai/raw/main/docs/image/logo.png\" alt=\"R"
  },
  {
    "path": "apps/web-antd/Dockerfile",
    "chars": 1917,
    "preview": "# 构建阶段\nFROM node:22-alpine AS builder\n\n# 接收后端 API 地址(docker-compose 传入)\nARG VITE_GLOB_API_URL=http://localhost:6039\nENV "
  },
  {
    "path": "apps/web-antd/docker-compose.yml",
    "chars": 916,
    "preview": "services:\n  # ==================== RuoYi-AI 前端服务 ====================\n  frontend:\n    image: ruoyi-ai-admin:latest\n    b"
  },
  {
    "path": "apps/web-antd/docker-entrypoint.sh",
    "chars": 196,
    "preview": "#!/bin/sh\n# Nginx 启动脚本 - 支持运行时环境变量\n\n# 使用 envsubst 替换 nginx.conf 中的环境变量\nenvsubst '${UPSTREAM_HOST}' < /etc/nginx/nginx.co"
  },
  {
    "path": "apps/web-antd/index.html",
    "chars": 766,
    "preview": "<!doctype html>\n<html lang=\"zh\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"I"
  },
  {
    "path": "apps/web-antd/nginx.conf",
    "chars": 1338,
    "preview": "worker_processes 1;\n\nevents {\n  worker_connections 1024;\n}\n\nhttp {\n  include /etc/nginx/mime.types;\n  default_type appli"
  },
  {
    "path": "apps/web-antd/package.json",
    "chars": 1901,
    "preview": "{\n  \"name\": \"@vben/web-antd\",\n  \"version\": \"1.5.2\",\n  \"homepage\": \"https://vben.pro\",\n  \"bugs\": \"https://github.com/vben"
  },
  {
    "path": "apps/web-antd/postcss.config.mjs",
    "chars": 57,
    "preview": "export { default } from '@vben/tailwind-config/postcss';\n"
  },
  {
    "path": "apps/web-antd/public/tinymce/langs/README.md",
    "chars": 150,
    "preview": "This is where language files should be placed.\n\nPlease DO NOT translate these directly, use this service instead: https:"
  },
  {
    "path": "apps/web-antd/public/tinymce/langs/zh_CN.js",
    "chars": 18872,
    "preview": "tinymce.addI18n(\"zh_CN\",{\"#\":\"#\",\"Accessibility\":\"\\u8f85\\u52a9\\u529f\\u80fd\",\"Accordion\":\"\",\"Accordion body...\":\"\",\"Accor"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/emoticons/js/emojiimages.js",
    "chars": 403751,
    "preview": "window.tinymce.Resource.add(\"tinymce.plugins.emoticons\",{100:{keywords:[\"score\",\"perfect\",\"numbers\",\"century\",\"exam\",\"qu"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/emoticons/js/emojis.js",
    "chars": 180560,
    "preview": "window.tinymce.Resource.add(\"tinymce.plugins.emoticons\",{grinning:{keywords:[\"face\",\"smile\",\"happy\",\"joy\",\":D\",\"grin\"],c"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ar.js",
    "chars": 4374,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar',\n'<h1>بدء التنقل بواسطة لوحة المفاتيح</h1>\\n' +\n  '\\n' +\n  '<dl>"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/bg_BG.js",
    "chars": 4804,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG',\n'<h1>Начало на навигацията с клавиатурата</h1>\\n' +\n  '\\n' +"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ca.js",
    "chars": 4978,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca',\n'<h1>Inici de la navegació amb el teclat</h1>\\n' +\n  '\\n' +\n  '"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/cs.js",
    "chars": 4653,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs',\n'<h1>Začínáme navigovat pomocí klávesnice</h1>\\n' +\n  '\\n' +\n  "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/da.js",
    "chars": 4337,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.da',\n'<h1>Start tastaturnavigation</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/de.js",
    "chars": 5036,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.de',\n'<h1>Grundlagen der Tastaturnavigation</h1>\\n' +\n  '\\n' +\n  '<d"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/el.js",
    "chars": 5087,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.el',\n'<h1>Έναρξη πλοήγησης μέσω πληκτρολογίου</h1>\\n' +\n  '\\n' +\n  '"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/en.js",
    "chars": 4062,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.en',\n'<h1>Begin keyboard navigation</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/es.js",
    "chars": 4946,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.es',\n'<h1>Iniciar la navegación con el teclado</h1>\\n' +\n  '\\n' +\n  "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/eu.js",
    "chars": 4413,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu',\n'<h1>Hasi teklatuaren nabigazioa</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fa.js",
    "chars": 4064,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa',\n'<h1>شروع پیمایش صفحه‌کلید</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  ' "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fi.js",
    "chars": 4765,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi',\n'<h1>Näppäimistönavigoinnin aloittaminen</h1>\\n' +\n  '\\n' +\n  '"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/fr_FR.js",
    "chars": 4986,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR',\n'<h1>Débuter la navigation au clavier</h1>\\n' +\n  '\\n' +\n  '"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/he_IL.js",
    "chars": 3848,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL',\n'<h1>התחל ניווט במקלדת</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hi.js",
    "chars": 4059,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi',\n'<h1>कीबोर्ड नेविगेशन शुरू करें</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hr.js",
    "chars": 4879,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr',\n'<h1>Početak navigacije na tipkovnici</h1>\\n' +\n  '\\n' +\n  '<dl"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/hu_HU.js",
    "chars": 4621,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU',\n'<h1>Billentyűzetes navigáció indítása</h1>\\n' +\n  '\\n' +\n  "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/id.js",
    "chars": 4336,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.id',\n'<h1>Memulai navigasi keyboard</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/it.js",
    "chars": 5212,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.it',\n'<h1>Iniziare la navigazione tramite tastiera</h1>\\n' +\n  '\\n' "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ja.js",
    "chars": 3100,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja',\n'<h1>キーボード ナビゲーションの開始</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/kk.js",
    "chars": 4669,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk',\n'<h1>Пернетақта навигациясын бастау</h1>\\n' +\n  '\\n' +\n  '<dl>\\"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ko_KR.js",
    "chars": 3192,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR',\n'<h1>키보드 탐색 시작</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>메뉴 모"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ms.js",
    "chars": 4227,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms',\n'<h1>Mulakan navigasi papan kekunci</h1>\\n' +\n  '\\n' +\n  '<dl>\\"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nb_NO.js",
    "chars": 4617,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO',\n'<h1>Starte tastaturnavigering</h1>\\n' +\n  '\\n' +\n  '<dl>\\n'"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/nl.js",
    "chars": 4609,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl',\n'<h1>Toetsenbordnavigatie starten</h1>\\n' +\n  '\\n' +\n  '<dl>\\n'"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pl.js",
    "chars": 4929,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl',\n'<h1>Początek nawigacji przy użyciu klawiatury</h1>\\n' +\n  '\\n'"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_BR.js",
    "chars": 4396,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR',\n'<h1>Iniciar navegação pelo teclado</h1>\\n' +\n  '\\n' +\n  '<d"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/pt_PT.js",
    "chars": 4485,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT',\n'<h1>Iniciar navegação com teclado</h1>\\n' +\n  '\\n' +\n  '<dl"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ro.js",
    "chars": 4930,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro',\n'<h1>Începeți navigarea de la tastatură</h1>\\n' +\n  '\\n' +\n  '<"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/ru.js",
    "chars": 4754,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru',\n'<h1>Начните управление с помощью клавиатуры</h1>\\n' +\n  '\\n' +"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sk.js",
    "chars": 4784,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk',\n'<h1>Začíname s navigáciou pomocou klávesnice</h1>\\n' +\n  '\\n' "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sl_SI.js",
    "chars": 4712,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI',\n'<h1>Začetek krmarjenja s tipkovnico</h1>\\n' +\n  '\\n' +\n  '<"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/sv_SE.js",
    "chars": 4319,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE',\n'<h1>Påbörja tangentbordsnavigering</h1>\\n' +\n  '\\n' +\n  '<d"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/th_TH.js",
    "chars": 3987,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH',\n'<h1>เริ่มต้นการนำทางด้วยแป้นพิมพ์</h1>\\n' +\n  '\\n' +\n  '<dl"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/tr.js",
    "chars": 4428,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr',\n'<h1>Klavyeyle gezintiyi başlatma</h1>\\n' +\n  '\\n' +\n  '<dl>\\n'"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/uk.js",
    "chars": 5015,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk',\n'<h1>Початок роботи з навігацією за допомогою клавіатури</h1>\\n"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/vi.js",
    "chars": 4470,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi',\n'<h1>Bắt đầu điều hướng bàn phím</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' "
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_CN.js",
    "chars": 2660,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN',\n'<h1>开始键盘导航</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>使菜单栏处于焦"
  },
  {
    "path": "apps/web-antd/public/tinymce/plugins/help/js/i18n/keynav/zh_TW.js",
    "chars": 2739,
    "preview": "tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW',\n'<h1>開始鍵盤瀏覽</h1>\\n' +\n  '\\n' +\n  '<dl>\\n' +\n  '  <dt>跳至功能表列<"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/content/dark/content.js",
    "chars": 1316,
    "preview": "tinymce.Resource.add('content/dark/content.css', \"body{background-color:#222f3e;color:#fff;font-family:-apple-system,Bli"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/content/default/content.js",
    "chars": 1252,
    "preview": "tinymce.Resource.add('content/default/content.css', \"body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/content/document/content.js",
    "chars": 1352,
    "preview": "tinymce.Resource.add('content/document/content.css', \"@media screen{html{background:#f4f4f4;min-height:100%}}body{font-f"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/content/tinymce-5/content.js",
    "chars": 1254,
    "preview": "tinymce.Resource.add('content/tinymce-5/content.css', \"body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Robo"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/content/tinymce-5-dark/content.js",
    "chars": 1329,
    "preview": "tinymce.Resource.add('content/tinymce-5-dark/content.css', \"body{background-color:#2f3742;color:#dfe0e4;font-family:-app"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/content/writer/content.js",
    "chars": 1272,
    "preview": "tinymce.Resource.add('content/writer/content.css', \"body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide/content.inline.js",
    "chars": 23829,
    "preview": "tinymce.Resource.add('ui/default/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"d"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide/content.js",
    "chars": 23874,
    "preview": "tinymce.Resource.add('ui/default/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:ima"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide/skin.js",
    "chars": 91570,
    "preview": "tinymce.Resource.add('ui/default/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide/skin.shadowdom.js",
    "chars": 608,
    "preview": "tinymce.Resource.add('ui/default/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{b"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide-dark/content.inline.js",
    "chars": 23826,
    "preview": "tinymce.Resource.add('ui/dark/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide-dark/content.js",
    "chars": 23482,
    "preview": "tinymce.Resource.add('ui/dark/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:image/"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide-dark/skin.js",
    "chars": 91549,
    "preview": "tinymce.Resource.add('ui/dark/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-fam"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js",
    "chars": 605,
    "preview": "tinymce.Resource.add('ui/dark/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{bord"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5/content.inline.js",
    "chars": 23831,
    "preview": "tinymce.Resource.add('ui/tinymce-5/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5/content.js",
    "chars": 23876,
    "preview": "tinymce.Resource.add('ui/tinymce-5/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"data:i"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5/skin.js",
    "chars": 94701,
    "preview": "tinymce.Resource.add('ui/tinymce-5/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;fon"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js",
    "chars": 610,
    "preview": "tinymce.Resource.add('ui/tinymce-5/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/content.inline.js",
    "chars": 23836,
    "preview": "tinymce.Resource.add('ui/tinymce-5-dark/content.inline.css', \".mce-content-body .mce-item-anchor{background:transparent "
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/content.js",
    "chars": 23492,
    "preview": "tinymce.Resource.add('ui/tinymce-5-dark/content.css', \".mce-content-body .mce-item-anchor{background:transparent url(\\\"d"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/skin.js",
    "chars": 94581,
    "preview": "tinymce.Resource.add('ui/tinymce-5-dark/skin.css', \".tox{box-shadow:none;box-sizing:content-box;color:#2a3746;cursor:aut"
  },
  {
    "path": "apps/web-antd/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js",
    "chars": 615,
    "preview": "tinymce.Resource.add('ui/tinymce-5-dark/skin.shadowdom.css', \"body.tox-dialog__disable-scroll{overflow:hidden}.tox-fulls"
  },
  {
    "path": "apps/web-antd/public/tinymce/tinymce.d.ts",
    "chars": 125846,
    "preview": "interface StringPathBookmark {\n    start: string;\n    end?: string;\n    forward?: boolean;\n}\ninterface RangeBookmark {\n "
  },
  {
    "path": "apps/web-antd/src/adapter/component/index.ts",
    "chars": 7260,
    "preview": "/**\n * 通用组件共同的使用的基础组件,原先放在 adapter/form 内部,限制了使用范围,这里提取出来,方便其他地方使用\n * 可用于 vben-form、vben-modal、vben-drawer 等组件使用,\n */\n\ni"
  },
  {
    "path": "apps/web-antd/src/adapter/form.ts",
    "chars": 1505,
    "preview": "import type {\n  VbenFormSchema as FormSchema,\n  VbenFormProps,\n} from '@vben/common-ui';\n\nimport type { ComponentType } "
  },
  {
    "path": "apps/web-antd/src/adapter/vxe-table.ts",
    "chars": 3269,
    "preview": "import type { VxeGridPropTypes } from '@vben/plugins/vxe-table';\n\nimport { h } from 'vue';\n\nimport { setupVbenVxeTable, "
  },
  {
    "path": "apps/web-antd/src/api/aiflow/API文档.md",
    "chars": 7341,
    "preview": "# 工作流管理 API 接口文档\n\n## 1. 获取工作流详情\n\n### 基本信息\n\n- **接口URL**: `/workflow/get/{uuid}`\n- **请求方式**: `GET`\n- **接口描述**: 根据工作流UUID获取"
  },
  {
    "path": "apps/web-antd/src/api/aiflow/adapters.ts",
    "chars": 513,
    "preview": "import { requestClient } from '#/api/request'\n\nexport const adapters = {\n  httpGet<T = any>(url: string, config?: any) {"
  },
  {
    "path": "apps/web-antd/src/api/aiflow/index.ts",
    "chars": 3349,
    "preview": "import { adapters } from './adapters'\n\nexport const workflowApi = {\n  workflowAdd<T = any>(data: { title: string; remark"
  },
  {
    "path": "apps/web-antd/src/api/aiflow/runtime.ts",
    "chars": 5698,
    "preview": "// 运行时相关接口(提供注入能力,避免与应用层 API 耦合)\nimport { adapters } from './adapters'\nimport { useAccessStore } from '@vben/stores'\n\nex"
  },
  {
    "path": "apps/web-antd/src/api/aiflow/types.d.ts",
    "chars": 1183,
    "preview": "declare namespace Workflow {\n  interface WorkflowUpdateReq {\n    uuid: string\n    title: string\n    remark: string\n    i"
  },
  {
    "path": "apps/web-antd/src/api/chat/chatconfig/index.ts",
    "chars": 1249,
    "preview": "import type { ConfigForm, ConfigQuery, ConfigVO } from './model';\n\nimport type { ID, IDS, PageResult } from '#/api/commo"
  },
  {
    "path": "apps/web-antd/src/api/chat/chatconfig/model.d.ts",
    "chars": 1067,
    "preview": "import type { BaseEntity, PageQuery } from '#/api/common';\n\nexport interface ConfigVO {\n  /**\n   * 主键\n   */\n  id: number"
  },
  {
    "path": "apps/web-antd/src/api/chat/message/index.ts",
    "chars": 1270,
    "preview": "import type { MessageForm, MessageQuery, MessageVO } from './model';\n\nimport type { ID, IDS, PageResult } from '#/api/co"
  },
  {
    "path": "apps/web-antd/src/api/chat/message/model.d.ts",
    "chars": 1252,
    "preview": "import type { BaseEntity, PageQuery } from '#/api/common';\n\nexport interface MessageVO {\n  /**\n   * 主键\n   */\n  id: numbe"
  },
  {
    "path": "apps/web-antd/src/api/chat/model/index.ts",
    "chars": 1509,
    "preview": "import type { ModelForm, ModelQuery, ModelVO } from './model';\n\nimport type { ID, IDS, PageResult } from '#/api/common';"
  },
  {
    "path": "apps/web-antd/src/api/chat/model/model.d.ts",
    "chars": 1511,
    "preview": "import type { BaseEntity, PageQuery } from '#/api/common';\n\nexport interface ModelVO {\n  /**\n   * 主键\n   */\n  id: number "
  },
  {
    "path": "apps/web-antd/src/api/chat/provider/index.ts",
    "chars": 1291,
    "preview": "import type { ProviderForm, ProviderQuery, ProviderVO } from './model';\n\nimport type { ID, IDS, PageResult } from '#/api"
  },
  {
    "path": "apps/web-antd/src/api/chat/provider/model.d.ts",
    "chars": 1622,
    "preview": "import type { BaseEntity, PageQuery } from '#/api/common';\n\nexport interface ProviderVO {\n  /**\n   * 主键\n   */\n  id: numb"
  },
  {
    "path": "apps/web-antd/src/api/common.d.ts",
    "chars": 914,
    "preview": "export type ID = number | string;\nexport type IDS = (number | string)[];\n\nexport interface BaseEntity {\n  createBy?: str"
  },
  {
    "path": "apps/web-antd/src/api/core/auth.ts",
    "chars": 3438,
    "preview": "import type { GrantType } from '@vben/common-ui';\nimport type { HttpResponse } from '@vben/request';\n\nimport { useAppCon"
  },
  {
    "path": "apps/web-antd/src/api/core/captcha.ts",
    "chars": 764,
    "preview": "import { requestClient } from '#/api/request';\n\n/**\n * 发送短信验证码\n * @param phonenumber 手机号\n * @returns void\n */\nexport fun"
  },
  {
    "path": "apps/web-antd/src/api/core/index.ts",
    "chars": 98,
    "preview": "export * from './auth';\nexport * from './menu';\nexport * from './upload';\nexport * from './user';\n"
  },
  {
    "path": "apps/web-antd/src/api/core/menu.ts",
    "chars": 812,
    "preview": "import { requestClient } from '#/api/request';\n\n/**\n * @description: 菜单meta\n * @param title 菜单名\n * @param icon 菜单图标\n * @"
  },
  {
    "path": "apps/web-antd/src/api/core/upload.ts",
    "chars": 981,
    "preview": "import type { AxiosRequestConfig } from '@vben/request';\n\nimport { requestClient } from '#/api/request';\n\n/**\n * Axios上传"
  },
  {
    "path": "apps/web-antd/src/api/core/user.ts",
    "chars": 844,
    "preview": "import { requestClient } from '#/api/request';\n\nexport interface Role {\n  dataScope: string;\n  flag: boolean;\n  roleId: "
  },
  {
    "path": "apps/web-antd/src/api/graph/index.ts",
    "chars": 3374,
    "preview": "import { requestClient } from '#/api/request';\nimport type {\n  ExtractParams,\n  GraphData,\n  GraphInstance,\n  GraphStats"
  },
  {
    "path": "apps/web-antd/src/api/graph/model.d.ts",
    "chars": 3087,
    "preview": "/**\n * 知识图谱相关类型定义\n */\n\n// 图谱实例\nexport interface GraphInstance {\n  id?: string;\n  instanceName: string;\n  knowledgeId: st"
  },
  {
    "path": "apps/web-antd/src/api/helper.ts",
    "chars": 2303,
    "preview": "import { $t } from '@vben/locales';\n\nimport { message, Modal } from 'ant-design-vue';\n\nimport { useAuthStore } from '#/s"
  },
  {
    "path": "apps/web-antd/src/api/index.ts",
    "chars": 24,
    "preview": "export * from './core';\n"
  },
  {
    "path": "apps/web-antd/src/api/knowledge/attach/index.ts",
    "chars": 1432,
    "preview": "import type { AttachVO, AttachForm, AttachQuery } from './model';\n\nimport type { ID, IDS } from '#/api/common';\nimport t"
  },
  {
    "path": "apps/web-antd/src/api/knowledge/attach/model.d.ts",
    "chars": 1132,
    "preview": "import type { PageQuery, BaseEntity } from '#/api/common';\n\nexport interface AttachVO {\n  /**\n   * \n   */\n  id: string |"
  },
  {
    "path": "apps/web-antd/src/api/knowledge/fragment/index.ts",
    "chars": 1316,
    "preview": "import type { FragmentVO, FragmentForm, FragmentQuery } from './model';\n\nimport type { ID, IDS } from '#/api/common';\nim"
  },
  {
    "path": "apps/web-antd/src/api/knowledge/fragment/model.d.ts",
    "chars": 963,
    "preview": "import type { PageQuery, BaseEntity } from '#/api/common';\n\nexport interface FragmentVO {\n  /**\n   * \n   */\n  id: string"
  },
  {
    "path": "apps/web-antd/src/api/knowledge/info/index.ts",
    "chars": 1394,
    "preview": "import type { InfoVO, InfoForm, InfoQuery } from './model';\n\nimport type { ID, IDS } from '#/api/common';\nimport type { "
  },
  {
    "path": "apps/web-antd/src/api/knowledge/info/model.d.ts",
    "chars": 2528,
    "preview": "import type { PageQuery, BaseEntity } from '#/api/common';\n\nexport interface InfoVO {\n  /**\n   * 主键\n   */\n  id: string |"
  },
  {
    "path": "apps/web-antd/src/api/mcp/market/index.ts",
    "chars": 2428,
    "preview": "import type { McpMarket, McpMarketRefreshResult, McpMarketTool } from './model';\n\nimport type { ID, IDS, PageQuery, Page"
  },
  {
    "path": "apps/web-antd/src/api/mcp/market/model.d.ts",
    "chars": 521,
    "preview": "export interface McpMarket {\n  id: number;\n  name: string;\n  url: string;\n  description: string;\n  authConfig: string;\n "
  },
  {
    "path": "apps/web-antd/src/api/mcp/tool/index.ts",
    "chars": 1812,
    "preview": "import type { McpTool, McpToolTestResult } from './model';\n\nimport type { ID, IDS, PageQuery, PageResult } from '#/api/c"
  },
  {
    "path": "apps/web-antd/src/api/mcp/tool/model.d.ts",
    "chars": 275,
    "preview": "export interface McpTool {\n  id: number;\n  name: string;\n  description: string;\n  type: string;\n  status: string;\n  conf"
  },
  {
    "path": "apps/web-antd/src/api/monitor/cache/index.ts",
    "chars": 399,
    "preview": "import { requestClient } from '#/api/request';\n\nexport interface CommandStats {\n  name: string;\n  value: string;\n}\n\nexpo"
  },
  {
    "path": "apps/web-antd/src/api/monitor/logininfo/index.ts",
    "chars": 1324,
    "preview": "import type { LoginLog } from './model';\n\nimport type { IDS, PageQuery, PageResult } from '#/api/common';\n\nimport { comm"
  },
  {
    "path": "apps/web-antd/src/api/monitor/logininfo/model.d.ts",
    "chars": 239,
    "preview": "export interface LoginLog {\n  infoId: string;\n  tenantId: string;\n  userName: string;\n  status: string;\n  ipaddr: string"
  },
  {
    "path": "apps/web-antd/src/api/monitor/online/index.ts",
    "chars": 969,
    "preview": "import type { OnlineUser } from './model';\n\nimport type { PageQuery, PageResult } from '#/api/common';\n\nimport { request"
  },
  {
    "path": "apps/web-antd/src/api/monitor/online/model.d.ts",
    "chars": 210,
    "preview": "export interface OnlineUser {\n  tokenId: string;\n  deptName: string;\n  userName: string;\n  ipaddr: string;\n  loginLocati"
  },
  {
    "path": "apps/web-antd/src/api/monitor/operlog/index.ts",
    "chars": 1005,
    "preview": "import type { OperationLog } from './model';\n\nimport type { IDS, PageQuery, PageResult } from '#/api/common';\n\nimport { "
  },
  {
    "path": "apps/web-antd/src/api/monitor/operlog/model.d.ts",
    "chars": 425,
    "preview": "export interface OperationLog {\n  operId: string;\n  tenantId: string;\n  title: string;\n  businessType: string;\n  busines"
  },
  {
    "path": "apps/web-antd/src/api/operator/configurationManage/index.ts",
    "chars": 320,
    "preview": "import { requestClient } from '#/api/request';\n\nenum Api {\n  addConfig = '/chat/config/saveOrUpdate',\n  listConfig = '/c"
  },
  {
    "path": "apps/web-antd/src/api/request.ts",
    "chars": 9417,
    "preview": "/**\n * 该文件可自行根据业务逻辑进行调整\n */\n\nimport type { HttpResponse } from '@vben/request';\nimport type {\n  BaseAsymmetricEncryption"
  },
  {
    "path": "apps/web-antd/src/api/system/client/index.ts",
    "chars": 1544,
    "preview": "import type { Client } from './model';\n\nimport type { ID, IDS, PageQuery, PageResult } from '#/api/common';\n\nimport { co"
  },
  {
    "path": "apps/web-antd/src/api/system/client/model.d.ts",
    "chars": 239,
    "preview": "export interface Client {\n  id: number;\n  clientId: string;\n  clientKey: string;\n  clientSecret: string;\n  grantTypeList"
  },
  {
    "path": "apps/web-antd/src/api/system/config/index.ts",
    "chars": 1672,
    "preview": "import type { SysConfig } from './model';\n\nimport type { ID, IDS, PageQuery, PageResult } from '#/api/common';\n\nimport {"
  },
  {
    "path": "apps/web-antd/src/api/system/config/model.d.ts",
    "chars": 179,
    "preview": "export interface SysConfig {\n  configId: number;\n  configName: string;\n  configKey: string;\n  configValue: string;\n  con"
  },
  {
    "path": "apps/web-antd/src/api/system/dept/index.ts",
    "chars": 1211,
    "preview": "import type { Dept } from './model';\n\nimport type { ID } from '#/api/common';\n\nimport { requestClient } from '#/api/requ"
  },
  {
    "path": "apps/web-antd/src/api/system/dept/model.d.ts",
    "chars": 363,
    "preview": "export interface Dept {\n  createBy: string;\n  createTime: string;\n  updateBy?: string;\n  updateTime?: string;\n  remark?:"
  },
  {
    "path": "apps/web-antd/src/api/system/dict/dict-data-model.d.ts",
    "chars": 330,
    "preview": "export interface DictData {\n  createBy: string;\n  createTime: string;\n  cssClass: string;\n  default: boolean;\n  dictCode"
  },
  {
    "path": "apps/web-antd/src/api/system/dict/dict-data.ts",
    "chars": 1564,
    "preview": "import type { DictData } from './dict-data-model';\n\nimport type { ID, IDS, PageQuery } from '#/api/common';\n\nimport { co"
  },
  {
    "path": "apps/web-antd/src/api/system/dict/dict-type-model.d.ts",
    "chars": 146,
    "preview": "export interface DictType {\n  createTime: string;\n  dictId: number;\n  dictName: string;\n  dictType: string;\n  remark: st"
  },
  {
    "path": "apps/web-antd/src/api/system/dict/dict-type.ts",
    "chars": 1831,
    "preview": "import type { DictType } from './dict-type-model';\n\nimport type { ID, IDS, PageQuery, PageResult } from '#/api/common';\n"
  },
  {
    "path": "apps/web-antd/src/api/system/dict/index.ts",
    "chars": 677,
    "preview": "import type { DictData } from './dict-data-model';\nimport type { DictType } from './dict-type-model';\nimport { dictDataI"
  },
  {
    "path": "apps/web-antd/src/api/system/menu/index.ts",
    "chars": 1909,
    "preview": "import type { Menu, MenuOption, MenuQuery, MenuResp } from './model';\n\nimport type { ID, IDS } from '#/api/common';\n\nimp"
  },
  {
    "path": "apps/web-antd/src/api/system/menu/model.d.ts",
    "chars": 938,
    "preview": "export interface Menu {\n  createBy?: any;\n  createTime: string;\n  updateBy?: any;\n  updateTime?: any;\n  remark?: any;\n  "
  },
  {
    "path": "apps/web-antd/src/api/system/notice/index.ts",
    "chars": 1012,
    "preview": "import type { Notice } from './model';\n\nimport type { ID, IDS, PageQuery } from '#/api/common';\n\nimport { requestClient "
  },
  {
    "path": "apps/web-antd/src/api/system/notice/model.d.ts",
    "chars": 220,
    "preview": "export interface Notice {\n  noticeId: number;\n  noticeTitle: string;\n  noticeType: string;\n  noticeContent: string;\n  st"
  },
  {
    "path": "apps/web-antd/src/api/system/oss/index.ts",
    "chars": 2035,
    "preview": "import type { AxiosRequestConfig } from '@vben/request';\n\nimport type { OssFile } from './model';\n\nimport type { ID, IDS"
  },
  {
    "path": "apps/web-antd/src/api/system/oss/model.d.ts",
    "chars": 521,
    "preview": "export interface OssFile {\n  ossId: string;\n  fileName: string;\n  originalName: string;\n  fileSuffix: string;\n  url: str"
  },
  {
    "path": "apps/web-antd/src/api/system/oss-config/index.ts",
    "chars": 1269,
    "preview": "import type { OssConfig } from './model';\n\nimport type { ID, IDS, PageQuery } from '#/api/common';\n\nimport { requestClie"
  },
  {
    "path": "apps/web-antd/src/api/system/oss-config/model.d.ts",
    "chars": 308,
    "preview": "export interface OssConfig {\n  ossConfigId: number;\n  configKey: string;\n  accessKey: string;\n  secretKey: string;\n  buc"
  },
  {
    "path": "apps/web-antd/src/api/system/post/index.ts",
    "chars": 1694,
    "preview": "import type { DeptTree } from '../user/model';\nimport type { Post } from './model';\n\nimport type { ID, IDS, PageQuery } "
  },
  {
    "path": "apps/web-antd/src/api/system/post/model.d.ts",
    "chars": 202,
    "preview": "/**\n * @description: Post interface\n */\nexport interface Post {\n  postId: number;\n  postCode: string;\n  postName: string"
  },
  {
    "path": "apps/web-antd/src/api/system/profile/index.ts",
    "chars": 1444,
    "preview": "import type { FileCallBack, UpdatePasswordParam, UserProfile } from './model';\n\nimport { buildUUID } from '@vben/utils';"
  },
  {
    "path": "apps/web-antd/src/api/system/profile/model.d.ts",
    "chars": 1294,
    "preview": "export interface Dept {\n  deptId: number;\n  parentId: number;\n  parentName?: any;\n  ancestors: string;\n  deptName: strin"
  },
  {
    "path": "apps/web-antd/src/api/system/role/index.ts",
    "chars": 3691,
    "preview": "import type { User } from '../user/model';\nimport type { DeptResp, Role } from './model';\n\nimport type { ID, IDS, PageQu"
  },
  {
    "path": "apps/web-antd/src/api/system/role/model.d.ts",
    "chars": 543,
    "preview": "export interface Role {\n  roleId: number;\n  roleName: string;\n  roleKey: string;\n  roleSort: number;\n  dataScope: string"
  },
  {
    "path": "apps/web-antd/src/api/system/social/index.ts",
    "chars": 465,
    "preview": "import type { SocialInfo } from './model';\n\nimport type { ID } from '#/api/common';\n\nimport { requestClient } from '#/ap"
  },
  {
    "path": "apps/web-antd/src/api/system/social/model.d.ts",
    "chars": 492,
    "preview": "export interface SocialInfo {\n  id: string;\n  userId: number;\n  tenantId: string;\n  authId: string;\n  source: string;\n  "
  },
  {
    "path": "apps/web-antd/src/api/system/tenant/index.ts",
    "chars": 2874,
    "preview": "import type { Tenant } from './model';\n\nimport type { ID, IDS, PageQuery } from '#/api/common';\n\nimport { commonExport }"
  },
  {
    "path": "apps/web-antd/src/api/system/tenant/model.d.ts",
    "chars": 320,
    "preview": "export interface Tenant {\n  accountCount: number;\n  address?: string;\n  companyName: string;\n  contactPhone: string;\n  c"
  },
  {
    "path": "apps/web-antd/src/api/system/tenant-package/index.ts",
    "chars": 1948,
    "preview": "import type { TenantPackage } from './model';\n\nimport type { ID, IDS, PageQuery, PageResult } from '#/api/common';\n\nimpo"
  },
  {
    "path": "apps/web-antd/src/api/system/tenant-package/model.d.ts",
    "chars": 379,
    "preview": "/**\n * @description 租户套餐\n * @param packageId id\n * @param packageName 名称\n * @param menuIds 菜单id  格式为[1,2,3] 返回为string 提交"
  },
  {
    "path": "apps/web-antd/src/api/system/user/index.ts",
    "chars": 3481,
    "preview": "import type {\n  DeptTree,\n  ResetPwdParam,\n  User,\n  UserImportParam,\n  UserInfoResponse,\n} from './model';\n\nimport type"
  },
  {
    "path": "apps/web-antd/src/api/system/user/model.d.ts",
    "chars": 1989,
    "preview": "/**\n * @description: 用户导入\n * @param updateSupport 是否覆盖数据\n * @param file excel文件\n */\nexport interface UserImportParam {\n "
  },
  {
    "path": "apps/web-antd/src/api/tool/gen/index.ts",
    "chars": 2535,
    "preview": "import type { GenInfo } from './model';\n\nimport type { ID, IDS, PageQuery } from '#/api/common';\n\nimport { ContentTypeEn"
  },
  {
    "path": "apps/web-antd/src/api/tool/gen/model.d.ts",
    "chars": 3586,
    "preview": "export interface Column {\n  createDept?: any;\n  createBy?: any;\n  createTime?: any;\n  updateBy?: any;\n  updateTime?: any"
  },
  {
    "path": "apps/web-antd/src/api/workflow/category/index.ts",
    "chars": 1223,
    "preview": "import type {\n  CategoryForm,\n  CategoryQuery,\n  CategoryTree,\n  CategoryVO,\n} from './model';\n\nimport type { ID, IDS } "
  },
  {
    "path": "apps/web-antd/src/api/workflow/category/model.d.ts",
    "chars": 1074,
    "preview": "import type { BaseEntity } from '#/api/common';\n\nexport interface CategoryVO {\n  /**\n   * 主键\n   */\n  id: number | string"
  },
  {
    "path": "apps/web-antd/src/api/workflow/definition/index.ts",
    "chars": 3142,
    "preview": "import type { ProcessDefinition } from './model';\n\nimport type { ID, IDS, PageQuery, PageResult } from '#/api/common';\n\n"
  },
  {
    "path": "apps/web-antd/src/api/workflow/definition/model.d.ts",
    "chars": 385,
    "preview": "export interface ProcessDefinition {\n  id: string;\n  createTime: string;\n  updateTime: string;\n  tenantId: string;\n  del"
  },
  {
    "path": "apps/web-antd/src/api/workflow/instance/index.ts",
    "chars": 2934,
    "preview": "import type { TaskInfo } from '../task/model';\nimport type { FlowInfoResponse, FlowInstanceVariableResp } from './model'"
  },
  {
    "path": "apps/web-antd/src/api/workflow/instance/model.d.ts",
    "chars": 991,
    "preview": "export {};\n\nexport interface Flow {\n  id: string;\n  createTime: string;\n  updateTime: string;\n  tenantId: string;\n  delF"
  },
  {
    "path": "apps/web-antd/src/api/workflow/spel/index.tsx",
    "chars": 722,
    "preview": "import type { Spel } from './model';\n\nimport type { ID, PageQuery, PageResult } from '#/api/common';\n\nimport { requestCl"
  },
  {
    "path": "apps/web-antd/src/api/workflow/spel/model.d.ts",
    "chars": 189,
    "preview": "export interface Spel {\n  id: number;\n  componentName: string;\n  methodName: string;\n  methodParams: string;\n  viewSpel:"
  },
  {
    "path": "apps/web-antd/src/api/workflow/task/index.ts",
    "chars": 3555,
    "preview": "import type {\n  CompleteTaskReqData,\n  NextNodeInfo,\n  StartWorkFlowReqData,\n  TaskInfo,\n  TaskOperationData,\n  TaskOper"
  },
  {
    "path": "apps/web-antd/src/api/workflow/task/model.d.ts",
    "chars": 2248,
    "preview": "export interface ButtonWithPermission {\n  code: string;\n  value: null | string;\n  show: boolean;\n}\n\nexport interface Tas"
  },
  {
    "path": "apps/web-antd/src/app.vue",
    "chars": 1053,
    "preview": "<script lang=\"ts\" setup>\nimport { computed } from 'vue';\n\nimport { useAntdDesignTokens } from '@vben/hooks';\nimport { pr"
  },
  {
    "path": "apps/web-antd/src/bootstrap.ts",
    "chars": 1872,
    "preview": "import { createApp, watchEffect } from 'vue';\n\nimport { registerAccessDirective } from '@vben/access';\nimport { register"
  },
  {
    "path": "apps/web-antd/src/components/cropper/index.ts",
    "chars": 175,
    "preview": "export { default as CropperAvatar } from './src/cropper-avatar.vue';\nexport { default as CropperImage } from './src/crop"
  },
  {
    "path": "apps/web-antd/src/components/cropper/src/cropper-avatar.vue",
    "chars": 3865,
    "preview": "<script lang=\"ts\" setup>\nimport type { ButtonProps } from 'ant-design-vue';\n\nimport type { CSSProperties, PropType } fro"
  },
  {
    "path": "apps/web-antd/src/components/cropper/src/cropper-modal.vue",
    "chars": 10433,
    "preview": "<script lang=\"ts\" setup>\nimport type { PropType } from 'vue';\n\nimport type { CropendResult, Cropper } from './typing';\n\n"
  },
  {
    "path": "apps/web-antd/src/components/cropper/src/cropper.vue",
    "chars": 4845,
    "preview": "<script lang=\"ts\" setup>\nimport type { CSSProperties, PropType } from 'vue';\n\nimport { computed, onMounted, onUnmounted,"
  },
  {
    "path": "apps/web-antd/src/components/cropper/src/typing.ts",
    "chars": 146,
    "preview": "import type Cropper from 'cropperjs';\n\nexport interface CropendResult {\n  imgBase64: string;\n  imgInfo: Cropper.Data;\n}\n"
  },
  {
    "path": "apps/web-antd/src/components/description/index.ts",
    "chars": 149,
    "preview": "export { default as Description } from './src/description.vue';\nexport * from './src/typing';\nexport { useDescription } "
  },
  {
    "path": "apps/web-antd/src/components/description/src/description.vue",
    "chars": 5565,
    "preview": "<script lang=\"tsx\">\nimport type { CardSize } from 'ant-design-vue/es/card/Card';\nimport type { DescriptionsProps } from "
  },
  {
    "path": "apps/web-antd/src/components/description/src/typing.ts",
    "chars": 1126,
    "preview": "import type { DescriptionsProps } from 'ant-design-vue/es/descriptions';\nimport type { JSX } from 'vue/jsx-runtime';\n\nim"
  },
  {
    "path": "apps/web-antd/src/components/description/src/useDescription.ts",
    "chars": 1103,
    "preview": "import type {\n  DescInstance,\n  DescriptionProps,\n  UseDescReturnType,\n} from './typing';\n\nimport { getCurrentInstance, "
  },
  {
    "path": "apps/web-antd/src/components/dict/index.ts",
    "chars": 111,
    "preview": "export { tagSelectOptions, tagTypes } from './src/data';\nexport { default as DictTag } from './src/index.vue';\n"
  },
  {
    "path": "apps/web-antd/src/components/dict/src/data.tsx",
    "chars": 1298,
    "preview": "import type { VNode } from 'vue';\n\nimport { Tag } from 'ant-design-vue';\n\ninterface TagType {\n  [key: string]: { color: "
  },
  {
    "path": "apps/web-antd/src/components/dict/src/index.vue",
    "chars": 3019,
    "preview": "<!-- eslint-disable eqeqeq -->\n<script lang=\"tsx\">\nimport type { PropType } from 'vue';\n\nimport type { DictFallback } fr"
  },
  {
    "path": "apps/web-antd/src/components/dict/src/type.d.ts",
    "chars": 130,
    "preview": "/**\n * fallback的渲染\n * 可返回 字符串/Vnode\n */\nexport type DictFallback =\n  | ((current: number | string) => string | VNode)\n  "
  },
  {
    "path": "apps/web-antd/src/components/global/button.ts",
    "chars": 516,
    "preview": "import { defineComponent, h } from 'vue';\n\nimport { Button } from 'ant-design-vue';\nimport buttonProps from 'ant-design-"
  },
  {
    "path": "apps/web-antd/src/components/global/index.ts",
    "chars": 276,
    "preview": "import type { App } from 'vue';\n\nimport { Button as AButton } from 'ant-design-vue';\n\nimport { GhostButton } from './but"
  },
  {
    "path": "apps/web-antd/src/components/global/slot.ts",
    "chars": 485,
    "preview": "import { defineComponent, h } from 'vue';\n\n/**\n * 使用默认插槽来自定义组件\n * 给vbenForm的components使用\n */\nexport const DefaultSlot = "
  },
  {
    "path": "apps/web-antd/src/components/table/index.ts",
    "chars": 128,
    "preview": "export { default as OptionsTag } from './src/options-tag.vue';\nexport { default as TableSwitch } from './src/table-switc"
  },
  {
    "path": "apps/web-antd/src/components/table/src/options-tag.vue",
    "chars": 487,
    "preview": "<script setup lang=\"tsx\">\nimport { computed } from 'vue';\n\nimport { Tag } from 'ant-design-vue';\n\ndefineOptions({ name: "
  },
  {
    "path": "apps/web-antd/src/components/table/src/table-switch.vue",
    "chars": 2913,
    "preview": "<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\n\nimport { $t } from '@vben/locales';\n\nimport { Modal, Swit"
  },
  {
    "path": "apps/web-antd/src/components/tenant-toggle/index.ts",
    "chars": 59,
    "preview": "export { default as TenantToggle } from './src/index.vue';\n"
  },
  {
    "path": "apps/web-antd/src/components/tenant-toggle/src/index.vue",
    "chars": 4045,
    "preview": "<script setup lang=\"ts\">\nimport type { MessageType } from 'ant-design-vue/es/message';\nimport type { SelectHandler } fro"
  }
]

// ... and 1231 more files (download for full content)

About this extraction

This page contains the full source code of the ageerle/ruoyi-admin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1431 files (4.1 MB), approximately 1.2M tokens, and a symbol index with 2188 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!