diff --git a/packages/inula2-ui2/README.en.md b/packages/inula2-ui2/README.en.md
new file mode 100644
index 0000000000000000000000000000000000000000..6352abc7390c6e3c17a7a53fa86a5dcf14c0a09b
--- /dev/null
+++ b/packages/inula2-ui2/README.en.md
@@ -0,0 +1,36 @@
+# inula2-ui
+
+#### Description
+基于openInula2.0的UI组件库
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Instructions
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Contribution
+
+1. Fork the repository
+2. Create Feat_xxx branch
+3. Commit your code
+4. Create Pull Request
+
+
+#### Gitee Feature
+
+1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4. The most valuable open source project [GVP](https://gitee.com/gvp)
+5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/packages/inula2-ui2/README.md b/packages/inula2-ui2/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..41bf3f5622aaaa5d9bebfe39160bab45d032d86d
--- /dev/null
+++ b/packages/inula2-ui2/README.md
@@ -0,0 +1,65 @@
+# openinula2.0 组件库
+
+[](https://npmjs.org/package/inulaUI)
+[](https://npmjs.org/package/inulaUI)
+
+## 项目简介
+openinula2.0 组件库是基于 [openinula](https://github.com/openinula/openinula) 的现代化 React UI 组件库,包含丰富的基础组件,适用于企业级中后台和移动端应用开发。组件库采用现代化设计风格,支持亮暗主题切换,具备良好的可扩展性和易用性。
+
+## 开发说明
+进入library目录
+```bash
+npm install
+npm run dev
+```
+组件统一小写并放在components目录下,目录结构为(以Button组件为例):
+
+```
+button/
+├── demos/ # 按钮示例(不同功能的放不同文件)
+├── demo.jsx # 按钮示例整体文件
+├── index.jsx # 按钮组件
+└── index.css # 按钮样式
+```
+
+
+## 目录结构
+
+```
+openInula2.0_Library/
+├── inulaUI/ # 组件库主包
+│ ├── docs/ # 文档与指南
+│ ├── src/ # 组件源码
+│ │ ├── button/ # 按钮组件
+│ │ │ ├── demos/ # 按钮组件演示
+│ │ │ ├── index.jsx # 按钮组件实现
+│ │ │ ├── index.md # 按钮组件文档
+│ │ │ └── index.css # 按钮样式
+│ │ ├── index.ts # 入口文件
+│ │ └── global.d.ts # 全局类型声明
+│ ├── package.json # 组件库包配置
+│ └── ...
+├── library_code/ # 组件库演示/测试项目
+│ ├── src/
+│ │ ├── components/
+│ │ │ └── button/
+│ │ │ ├── demos/ # 按钮演示
+│ │ │ ├── demo.jsx
+│ │ │ ├── index.jsx
+│ │ │ └── index.css
+│ │ ├── index.jsx # 入口
+│ │ └── index.css
+│ ├── index.html
+│ └── ...
+└── README.md # 项目说明文档
+```
+
+## 贡献指南
+1. Fork 本仓库并创建分支。
+2. 提交代码前请确保通过 lint 检查和单元测试。
+3. 提交 PR 时请详细描述变更内容。
+4. 欢迎补充文档、修复 bug 或新增组件。
+
+
+## License
+MIT
diff --git a/packages/inula2-ui2/inulaUI/.dumirc.ts b/packages/inula2-ui2/inulaUI/.dumirc.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4b90f0a18986a481d77aa1dd9719ca2815be5539
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.dumirc.ts
@@ -0,0 +1,71 @@
+import { defineConfig } from 'dumi';
+export default defineConfig({
+ outputPath: 'docs-dist',
+ themeConfig: ({
+ name: 'InulaUI',
+ nav: [
+ {
+ title: '指南',
+ link: '/guide',
+ },
+ {
+ title: '组件',
+ link: '/components/button',
+ },
+ {
+ title: '更新日志',
+ link: '/changelog',
+ },
+ {
+ title: '贡献指南',
+ link: '/contributing',
+ },
+ ],
+ sidebar: {
+ '/components': [
+ {
+ title: '通用',
+ children: [
+ { title: 'Button 按钮', link: '/components/button' },
+ { title: 'Icon 图标', link: '/components/icon' },
+ ],
+ },
+ {
+ title: '导航',
+ children: [
+ { title: 'Tabs 标签页', link: '/components/tabs' },
+ ],
+ },
+ {
+ title: '数据录入',
+ children: [
+ { title: 'Checkbox 多选框', link: '/components/checkbox' },
+ { title: 'DataPicker 日期选择器', link: '/components/datapicker' },
+ { title: 'Form 表单', link: '/components/form' },
+ { title: 'Input 输入框', link: '/components/input' },
+ { title: 'Radio 单选框', link: '/components/radio' },
+ { title: 'Select 选择器', link: '/components/select' },
+ { title: 'Switch 开关', link: '/components/switch' },
+ ],
+ },
+ {
+ title: '数据展示',
+ children: [
+ { title: 'Card 卡片', link: '/components/card' },
+ { title: 'Tooltip 文字提示', link: '/components/tooltip' },
+ { title: 'Tag 标签', link: '/components/tag' },
+ { title: 'Tree 树形控件', link: '/components/tree' },
+ ],
+ },
+ {
+ title: '反馈',
+ children: [
+ { title: 'Modal 对话框', link: '/components/dialog' },
+ { title: 'Spin 加载中', link: '/components/spin' },
+ { title: 'Notification 通知提示框', link: '/components/notification' },
+ ],
+ },
+ ],
+ },
+ }),
+});
diff --git a/packages/inula2-ui2/inulaUI/.editorconfig b/packages/inula2-ui2/inulaUI/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..e717f5eb6387be229227ad8eba6a56f4cd904ade
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.editorconfig
@@ -0,0 +1,13 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/packages/inula2-ui2/inulaUI/.eslintrc.js b/packages/inula2-ui2/inulaUI/.eslintrc.js
new file mode 100644
index 0000000000000000000000000000000000000000..28983409455cb5f31b65d20feb08096fedd3be09
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.eslintrc.js
@@ -0,0 +1,3 @@
+module.exports = {
+ extends: require.resolve('@umijs/lint/dist/config/eslint'),
+};
diff --git a/packages/inula2-ui2/inulaUI/.fatherrc.ts b/packages/inula2-ui2/inulaUI/.fatherrc.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dae25c88b1a4d6ccb903b44bb04cd6c60f1db328
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.fatherrc.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from 'father';
+
+export default defineConfig({
+ // more father config: https://github.com/umijs/father/blob/master/docs/config.md
+ esm: { output: 'dist' },
+});
diff --git a/packages/inula2-ui2/inulaUI/.gitignore b/packages/inula2-ui2/inulaUI/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..cf89318df8a56faf24d3ea7f5237d38b21e27b6b
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.gitignore
@@ -0,0 +1,6 @@
+node_modules
+/dist
+.dumi/tmp
+.dumi/tmp-test
+.dumi/tmp-production
+.DS_Store
diff --git a/packages/inula2-ui2/inulaUI/.prettierignore b/packages/inula2-ui2/inulaUI/.prettierignore
new file mode 100644
index 0000000000000000000000000000000000000000..6a50e206c7f7445fdc8f3e2beb97101e7a9a6eb2
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.prettierignore
@@ -0,0 +1,2 @@
+/dist
+*.yaml
diff --git a/packages/inula2-ui2/inulaUI/.prettierrc.js b/packages/inula2-ui2/inulaUI/.prettierrc.js
new file mode 100644
index 0000000000000000000000000000000000000000..e6df093da701493005c466ea6c7988a76caf364e
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.prettierrc.js
@@ -0,0 +1,19 @@
+module.exports = {
+ pluginSearchDirs: false,
+ plugins: [
+ require.resolve('prettier-plugin-organize-imports'),
+ require.resolve('prettier-plugin-packagejson'),
+ ],
+ printWidth: 80,
+ proseWrap: 'never',
+ singleQuote: true,
+ trailingComma: 'all',
+ overrides: [
+ {
+ files: '*.md',
+ options: {
+ proseWrap: 'preserve',
+ },
+ },
+ ],
+};
diff --git a/packages/inula2-ui2/inulaUI/.stylelintrc b/packages/inula2-ui2/inulaUI/.stylelintrc
new file mode 100644
index 0000000000000000000000000000000000000000..e3621944ffb91d709242262861bc0c016a4c7754
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/.stylelintrc
@@ -0,0 +1,3 @@
+{
+ "extends": "@umijs/lint/dist/config/stylelint"
+}
diff --git a/packages/inula2-ui2/inulaUI/LICENSE b/packages/inula2-ui2/inulaUI/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7dd6caf49d44eb306288ce09fc2fa9bd081d9d0a
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) chenhaibin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/inula2-ui2/inulaUI/README.md b/packages/inula2-ui2/inulaUI/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e9cbbfeebd8dad73be5ea95264240b92cfd93fc3
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/README.md
@@ -0,0 +1,43 @@
+# inulaUI
+
+[](https://npmjs.org/package/inulaUI)
+[](https://npmjs.org/package/inulaUI)
+
+A react library developed with dumi
+
+## Usage
+
+TODO
+
+## Options
+
+TODO
+
+## Development
+
+```bash
+# install dependencies
+$ npm install
+
+# develop library by docs demo
+$ npm start
+
+# build library source code
+$ npm run build
+
+# build library source code in watch mode
+$ npm run build:watch
+
+# build docs
+$ npm run docs:build
+
+# Locally preview the production build.
+$ npm run docs:preview
+
+# check your project for potential problems
+$ npm run doctor
+```
+
+## LICENSE
+
+MIT
diff --git a/packages/inula2-ui2/inulaUI/docs/guide.md b/packages/inula2-ui2/inulaUI/docs/guide.md
new file mode 100644
index 0000000000000000000000000000000000000000..5504ddf6ab57cec0fe2eae5ee3972e0062aa555c
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/docs/guide.md
@@ -0,0 +1 @@
+This is a guide example.
diff --git a/packages/inula2-ui2/inulaUI/docs/index.md b/packages/inula2-ui2/inulaUI/docs/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..dd7b0e17dcbea3f0c348ab7d0acbc549f0d53492
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/docs/index.md
@@ -0,0 +1,49 @@
+---
+hero:
+ title: inula-UI
+ description: 一个基于 openinula 的 UI 组件库
+ actions:
+ - text: 立即上手
+ link: /guide/quick-start
+ - text: Github
+ link: https://github.com/cychenhaibin/cube
+features:
+ - title: 现代化主题风格
+ image: 💠
+ description: 本主题包采用了流动色、毛玻璃、光影质感、自然动效等现代化的设计表现手法,将界面以更加简约、美观的方式呈现,使得文档更加直观、易读、易用
+ row: 6
+
+ - title: 基于 Ant Design 与 CSSinJS
+ description: 本主题包使用 antd 作为基础组件库,并使用了 CSSinJS 实现样式方案,帮助更好地控制样式的细节,提高样式的复用性和可维护性。底层使用了 antd-style 样式库,在书写样式上更加灵活、可读、易于维护。本主题包算是开发 antd-style 时的一个副产物
+ link: /guide/style
+ imageType: light
+ image: https://gw.alipayobjects.com/zos/hitu-asset/c88e3678-6900-4289-8538-31367c2d30f2/hitu-1609235995955-image.png
+ row: 9
+
+ - title: 亮暗色主题模式一键切换
+ link: /guide/theme
+ description: 本文档基于 antd v5 自定义了亮色与暗色主题算法,默认提供美观易用的亮暗色主题。用户可以根据自己的喜好选择主题模式,在不同的光线环境下都能获得良好的阅读体验。
+ image: https://mdn.alipayobjects.com/huamei_rqvucu/afts/img/A*8KE7T7l39J0AAAAAAAAAAAAADoN6AQ/original
+ imageType: primary
+
+ - title: 精美的语法高亮
+ description: 本主题包提供准确、精美的语法高亮特性。底层采用了现代化的语法高亮库 Shiki 与 Prism,并提供了丰富的代码高亮方案,帮助用户更好地阅读代码 后续会考虑支持代码块片段高亮、关键词高亮等特性
+ link: /guide/syntax-highlighter
+ image: https://mdn.alipayobjects.com/huamei_rqvucu/afts/img/A*1qLNRrRGFsQAAAAAAAAAAAAADoN6AQ/original
+ imageType: primary
+ row: 9
+
+ - title: 组件灵活复用
+ description: 本主题包为本地主题定制提供了很高的灵活度,默认导出了主题包中的精品组件,可以将组件作为独立的模块进行复用,开发者可以在 dumi 本地主题包中自由组合使用
+ image: https://mdn.alipayobjects.com/huamei_rqvucu/afts/img/A*6sjjRa7lLhAAAAAAAAAAAAAADoN6AQ/original
+ imageType: primary
+ link: /components
+ row: 8
+
+ - title: 移动端适配良好
+ description: 本主题包对移动端适配良好,基于 CSSinJS 的灵活样式方案,多套布局实现轻而易举。用户多端操作体验一致且顺滑
+ image: 📱
+ imageType: light
+ row: 6
+ hero: true
+---
diff --git a/packages/inula2-ui2/inulaUI/package.json b/packages/inula2-ui2/inulaUI/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..faa1b4579b56a5d3d81476856ccc9f2e69bbef38
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "inulaUI",
+ "version": "0.0.1",
+ "description": "A react library developed with dumi",
+ "module": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "scripts": {
+ "start": "npm run dev",
+ "dev": "dumi dev",
+ "build": "father build",
+ "build:watch": "father dev",
+ "docs:build": "dumi build",
+ "docs:preview": "dumi preview",
+ "prepare": "dumi setup",
+ "doctor": "father doctor",
+ "lint": "npm run lint:es && npm run lint:css",
+ "lint:css": "stylelint \"{src,test}/**/*.{css,less}\"",
+ "lint:es": "eslint \"{src,test}/**/*.{js,jsx,ts,tsx}\"",
+ "prepublishOnly": "father doctor && npm run build"
+ },
+ "authors": [
+ "chenhaibin"
+ ],
+ "license": "MIT",
+ "files": [
+ "dist"
+ ],
+ "commitlint": {
+ "extends": [
+ "@commitlint/config-conventional"
+ ]
+ },
+ "lint-staged": {
+ "*.{md,json}": [
+ "prettier --write --no-error-on-unmatched-pattern"
+ ],
+ "*.{css,less}": [
+ "stylelint --fix",
+ "prettier --write"
+ ],
+ "*.{js,jsx}": [
+ "eslint --fix",
+ "prettier --write"
+ ],
+ "*.{ts,tsx}": [
+ "eslint --fix",
+ "prettier --parser=typescript --write"
+ ]
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^17.1.2",
+ "@commitlint/config-conventional": "^17.1.0",
+ "@openinula/unplugin": "^0.0.3",
+ "@umijs/lint": "^4.0.0",
+ "dumi": "^2.4.13",
+ "eslint": "^8.23.0",
+ "father": "^4.1.0",
+ "husky": "^8.0.1",
+ "lint-staged": "^13.0.3",
+ "prettier": "^2.7.1",
+ "prettier-plugin-organize-imports": "^3.0.0",
+ "prettier-plugin-packagejson": "^2.2.18",
+ "stylelint": "^14.9.1"
+ },
+ "dependencies": {
+ "@openinula/next": "^0.0.5",
+ "inula-ui": "^0.0.7",
+ "pnpm": "^10.12.4"
+ }
+}
diff --git a/packages/inula2-ui2/inulaUI/pnpm-lock.yaml b/packages/inula2-ui2/inulaUI/pnpm-lock.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a4a93971475b7e35eff7953630dd472658025d9d
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/pnpm-lock.yaml
@@ -0,0 +1,16297 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ pnpm:
+ specifier: ^10.12.4
+ version: 10.12.4
+ devDependencies:
+ '@commitlint/cli':
+ specifier: ^17.1.2
+ version: 17.8.1(@swc/core@1.9.2(@swc/helpers@0.5.1))
+ '@commitlint/config-conventional':
+ specifier: ^17.1.0
+ version: 17.8.1
+ '@types/react':
+ specifier: ^18.0.0
+ version: 18.3.23
+ '@types/react-dom':
+ specifier: ^18.0.0
+ version: 18.3.7(@types/react@18.3.23)
+ '@umijs/lint':
+ specifier: ^4.0.0
+ version: 4.4.11(eslint@8.57.1)(stylelint@14.16.1)(typescript@5.4.2)
+ dumi:
+ specifier: ^2.4.13
+ version: 2.4.21(@babel/core@7.27.7)(@swc/helpers@0.5.1)(@types/node@20.5.1)(@types/react@18.3.23)(eslint@8.57.1)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ dumi-theme-antd:
+ specifier: ^0.4.4
+ version: 0.4.4(@babel/core@7.27.7)(@types/react@18.3.23)(antd@5.26.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(dumi@2.4.21(@babel/core@7.27.7)(@swc/helpers@0.5.1)(@types/node@20.5.1)(@types/react@18.3.23)(eslint@8.57.1)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ eslint:
+ specifier: ^8.23.0
+ version: 8.57.1
+ father:
+ specifier: ^4.1.0
+ version: 4.5.6(@babel/core@7.27.7)(@types/node@20.5.1)(styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@1.4.0)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ husky:
+ specifier: ^8.0.1
+ version: 8.0.3
+ lint-staged:
+ specifier: ^13.0.3
+ version: 13.3.0
+ prettier:
+ specifier: ^2.7.1
+ version: 2.8.8
+ prettier-plugin-organize-imports:
+ specifier: ^3.0.0
+ version: 3.2.4(prettier@2.8.8)(typescript@5.4.2)
+ prettier-plugin-packagejson:
+ specifier: ^2.2.18
+ version: 2.5.17(prettier@2.8.8)
+ react:
+ specifier: ^18.0.0
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.0.0
+ version: 18.3.1(react@18.3.1)
+ stylelint:
+ specifier: ^14.9.1
+ version: 14.16.1
+
+packages:
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@ant-design/colors@6.0.0':
+ resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==}
+
+ '@ant-design/colors@7.2.1':
+ resolution: {integrity: sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==}
+
+ '@ant-design/cssinjs-utils@1.1.3':
+ resolution: {integrity: sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@ant-design/cssinjs@1.20.0':
+ resolution: {integrity: sha512-uG3iWzJxgNkADdZmc6W0Ci3iQAUOvLMcM8SnnmWq3r6JeocACft4ChnY/YWvI2Y+rG/68QBla/O+udke1yH3vg==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@ant-design/cssinjs@1.23.0':
+ resolution: {integrity: sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@ant-design/fast-color@2.0.6':
+ resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==}
+ engines: {node: '>=8.x'}
+
+ '@ant-design/icons-svg@4.4.2':
+ resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
+
+ '@ant-design/icons@4.8.3':
+ resolution: {integrity: sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@ant-design/icons@5.3.6':
+ resolution: {integrity: sha512-JeWsgNjvkTTC73YDPgWOgdScRku/iHN9JU0qk39OSEmJSCiRghQMLlxGTCY5ovbRRoXjxHXnUKgQEgBDnQfKmA==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@ant-design/icons@5.6.1':
+ resolution: {integrity: sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ '@ant-design/react-slick@1.1.2':
+ resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==}
+ peerDependencies:
+ react: '>=16.9.0'
+
+ '@antfu/install-pkg@0.1.1':
+ resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==}
+
+ '@antfu/utils@0.7.10':
+ resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
+
+ '@arvinxu/layout-kit@1.4.0':
+ resolution: {integrity: sha512-dEsmFwZa/NJ2XvDBL4sCPbgFPvCvpxP+G+90Ay9zqN92vc4YbgVo4NjpjsDihiNqwDQjWhasGCC3+v4w7bdYqg==}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.27.7':
+ resolution: {integrity: sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.23.6':
+ resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.27.7':
+ resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/eslint-parser@7.23.3':
+ resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==}
+ engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0
+ eslint: ^7.5.0 || ^8.0.0
+
+ '@babel/generator@7.2.0':
+ resolution: {integrity: sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==}
+
+ '@babel/generator@7.27.5':
+ resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.27.3':
+ resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-simple-access@7.27.1':
+ resolution: {integrity: sha512-OU4zVQrJgFBNXMjrHs1yFSdlTgufO4tefcUZoqNhukVfw0p8x1Asht/gcGZ3bpHbi8gu/76m4JhrlKPqkrs/WQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.27.6':
+ resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.27.7':
+ resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-attributes@7.27.1':
+ resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.27.1':
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.23.3':
+ resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.22.3':
+ resolution: {integrity: sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/runtime@7.23.6':
+ resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/runtime@7.27.6':
+ resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.27.7':
+ resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.27.7':
+ resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==}
+ engines: {node: '>=6.9.0'}
+
+ '@bloomberg/record-tuple-polyfill@0.0.4':
+ resolution: {integrity: sha512-h0OYmPR3A5Dfbetra/GzxBAzQk8sH7LhRkRUTdagX6nrtlUgJGYCTv4bBK33jsTQw9HDd8PE2x1Ma+iRKEDUsw==}
+
+ '@commitlint/cli@17.8.1':
+ resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==}
+ engines: {node: '>=v14'}
+ hasBin: true
+
+ '@commitlint/config-conventional@17.8.1':
+ resolution: {integrity: sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/config-validator@17.8.1':
+ resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/ensure@17.8.1':
+ resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/execute-rule@17.8.1':
+ resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/format@17.8.1':
+ resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/is-ignored@17.8.1':
+ resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/lint@17.8.1':
+ resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/load@17.8.1':
+ resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/message@17.8.1':
+ resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/parse@17.8.1':
+ resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/read@17.8.1':
+ resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/resolve-extends@17.8.1':
+ resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/rules@17.8.1':
+ resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/to-lines@17.8.1':
+ resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/top-level@17.8.1':
+ resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==}
+ engines: {node: '>=v14'}
+
+ '@commitlint/types@17.8.1':
+ resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==}
+ engines: {node: '>=v14'}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@csstools/postcss-color-function@1.1.1':
+ resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-font-format-keywords@1.0.1':
+ resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-hwb-function@1.0.2':
+ resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-ic-unit@1.0.1':
+ resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-is-pseudo-class@2.0.7':
+ resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-normalize-display-values@1.0.1':
+ resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-oklab-function@1.1.1':
+ resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-progressive-custom-properties@1.3.0':
+ resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.3
+
+ '@csstools/postcss-stepped-value-functions@1.0.1':
+ resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/postcss-unset-value@1.0.2':
+ resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ '@csstools/selector-specificity@2.2.0':
+ resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss-selector-parser: ^6.0.10
+
+ '@ctrl/tinycolor@3.6.0':
+ resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==}
+ engines: {node: '>=10'}
+
+ '@emotion/babel-plugin@11.13.5':
+ resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==}
+
+ '@emotion/cache@11.14.0':
+ resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==}
+
+ '@emotion/css@11.11.2':
+ resolution: {integrity: sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew==}
+
+ '@emotion/hash@0.8.0':
+ resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
+
+ '@emotion/hash@0.9.2':
+ resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
+
+ '@emotion/is-prop-valid@1.3.1':
+ resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==}
+
+ '@emotion/memoize@0.9.0':
+ resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==}
+
+ '@emotion/react@11.11.0':
+ resolution: {integrity: sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: '>=16.8.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@emotion/serialize@1.3.3':
+ resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==}
+
+ '@emotion/server@11.11.0':
+ resolution: {integrity: sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==}
+ peerDependencies:
+ '@emotion/css': ^11.0.0-rc.0
+ peerDependenciesMeta:
+ '@emotion/css':
+ optional: true
+
+ '@emotion/sheet@1.4.0':
+ resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==}
+
+ '@emotion/stylis@0.8.5':
+ resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==}
+
+ '@emotion/unitless@0.10.0':
+ resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==}
+
+ '@emotion/unitless@0.7.5':
+ resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
+
+ '@emotion/use-insertion-effect-with-fallbacks@1.2.0':
+ resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==}
+ peerDependencies:
+ react: '>=16.8.0'
+
+ '@emotion/utils@1.4.2':
+ resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==}
+
+ '@emotion/weak-memoize@0.3.1':
+ resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
+
+ '@emotion/weak-memoize@0.4.0':
+ resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==}
+
+ '@esbuild-kit/cjs-loader@2.4.4':
+ resolution: {integrity: sha512-NfsJX4PdzhwSkfJukczyUiZGc7zNNWZcEAyqeISpDnn0PTfzMJR1aR8xAIPskBejIxBJbIgCCMzbaYa9SXepIg==}
+ deprecated: 'Merged into tsx: https://tsx.is'
+
+ '@esbuild-kit/core-utils@3.3.2':
+ resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
+ deprecated: 'Merged into tsx: https://tsx.is'
+
+ '@esbuild-kit/esm-loader@2.6.5':
+ resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
+ deprecated: 'Merged into tsx: https://tsx.is'
+
+ '@esbuild/aix-ppc64@0.21.4':
+ resolution: {integrity: sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.17.19':
+ resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.18.20':
+ resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.21.4':
+ resolution: {integrity: sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.17.19':
+ resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.18.20':
+ resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.4':
+ resolution: {integrity: sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.17.19':
+ resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.18.20':
+ resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.4':
+ resolution: {integrity: sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.17.19':
+ resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.18.20':
+ resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.21.4':
+ resolution: {integrity: sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.17.19':
+ resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.18.20':
+ resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.4':
+ resolution: {integrity: sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.17.19':
+ resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.21.4':
+ resolution: {integrity: sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.17.19':
+ resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.18.20':
+ resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.4':
+ resolution: {integrity: sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.17.19':
+ resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.18.20':
+ resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.21.4':
+ resolution: {integrity: sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.17.19':
+ resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.18.20':
+ resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.4':
+ resolution: {integrity: sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.17.19':
+ resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.18.20':
+ resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.4':
+ resolution: {integrity: sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.17.19':
+ resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.18.20':
+ resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.4':
+ resolution: {integrity: sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.17.19':
+ resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.18.20':
+ resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.4':
+ resolution: {integrity: sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.17.19':
+ resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.18.20':
+ resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.4':
+ resolution: {integrity: sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.17.19':
+ resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.18.20':
+ resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.4':
+ resolution: {integrity: sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.17.19':
+ resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.18.20':
+ resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.4':
+ resolution: {integrity: sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.17.19':
+ resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.18.20':
+ resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.4':
+ resolution: {integrity: sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.17.19':
+ resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.18.20':
+ resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.21.4':
+ resolution: {integrity: sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.17.19':
+ resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.18.20':
+ resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.4':
+ resolution: {integrity: sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.17.19':
+ resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.18.20':
+ resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.21.4':
+ resolution: {integrity: sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.17.19':
+ resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.18.20':
+ resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.21.4':
+ resolution: {integrity: sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.17.19':
+ resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.18.20':
+ resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.4':
+ resolution: {integrity: sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.17.19':
+ resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.18.20':
+ resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.4':
+ resolution: {integrity: sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.7.0':
+ resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/eslintrc@2.1.4':
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@eslint/js@8.57.1':
+ resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@floating-ui/core@0.6.2':
+ resolution: {integrity: sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==}
+
+ '@floating-ui/dom@0.4.5':
+ resolution: {integrity: sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==}
+
+ '@floating-ui/react-dom-interactions@0.3.1':
+ resolution: {integrity: sha512-tP2KEh7EHJr5hokSBHcPGojb+AorDNUf0NYfZGg/M+FsMvCOOsSEeEF0O1NDfETIzDnpbHnCs0DuvCFhSMSStg==}
+ deprecated: Package renamed to @floating-ui/react
+
+ '@floating-ui/react-dom@0.6.3':
+ resolution: {integrity: sha512-hC+pS5D6AgS2wWjbmSQ6UR6Kpy+drvWGJIri6e1EDGADTPsCaa4KzCgmCczHrQeInx9tqs81EyDmbKJYY2swKg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@formatjs/ecma402-abstract@2.3.4':
+ resolution: {integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==}
+
+ '@formatjs/fast-memoize@2.2.7':
+ resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==}
+
+ '@formatjs/icu-messageformat-parser@2.11.2':
+ resolution: {integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==}
+
+ '@formatjs/icu-skeleton-parser@1.8.14':
+ resolution: {integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==}
+
+ '@formatjs/intl-localematcher@0.6.1':
+ resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==}
+
+ '@formatjs/intl@3.1.6':
+ resolution: {integrity: sha512-tDkXnA4qpIFcDWac8CyVJq6oW8DR7W44QDUBsfXWIIJD/FYYen0QoH46W7XsVMFfPOVKkvbufjboZrrWbEfmww==}
+ peerDependencies:
+ typescript: ^5.6.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@humanwhocodes/config-array@0.13.0':
+ resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
+ engines: {node: '>=10.10.0'}
+ deprecated: Use @eslint/config-array instead
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/object-schema@2.0.3':
+ resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+ deprecated: Use @eslint/object-schema instead
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@iconify/utils@2.1.1':
+ resolution: {integrity: sha512-H8xz74JDzDw8f0qLxwIaxFMnFkbXTZNWEufOk3WxaLFHV4h0A2FjIDgNk5LzC0am4jssnjdeJJdRs3UFu3582Q==}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/transform@29.7.0':
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@24.9.0':
+ resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==}
+ engines: {node: '>= 6'}
+
+ '@jest/types@27.5.1':
+ resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==}
+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jridgewell/gen-mapping@0.3.10':
+ resolution: {integrity: sha512-HM2F4B9N4cA0RH2KQiIZOHAZqtP4xGS4IZ+SFe1SIbO4dyjf9MTY2Bo3vHYnm0hglWfXqBrzUBSa+cJfl3Xvrg==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.8':
+ resolution: {integrity: sha512-3EDAPd0B8X1gsQQgGHU8vyxSp2MB414z3roN67fY7nI0GV3GDthHfaWcbCfrC95tpAzA5xUvAuoO9Dxx/ywwRQ==}
+
+ '@jridgewell/sourcemap-codec@1.5.2':
+ resolution: {integrity: sha512-gKYheCylLIedI+CSZoDtGkFV9YEBxRRVcfCH7OfAqh4TyUyRjEE6WVE/aXDXX0p8BIe/QgLcaAoI0220KRRFgg==}
+
+ '@jridgewell/trace-mapping@0.3.27':
+ resolution: {integrity: sha512-VO95AxtSFMelbg3ouljAYnfvTEwSWVt/2YLf+U5Ejd8iT5mXE2Sa/1LGyvySMne2CGsepGLI7KpF3EzE3Aq9Mg==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@loadable/component@5.15.2':
+ resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.3.0'
+
+ '@makotot/ghostui@2.0.0':
+ resolution: {integrity: sha512-LD6OeMv+yGjpYZNjh34yDTCIE1NegqOtJq5gm4wX6op3QL7K5psTVzMjkWzseBoYj0XOD4g+UJVIZTprfoOPGg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: '>=16'
+
+ '@microsoft/api-extractor-model@7.28.17':
+ resolution: {integrity: sha512-b2AfLP33oEVtWLeNavSBRdyDa8sKlXjN4pdhBnC4HLontOtjILhL1ERAmZObF4PWSyChnnC2vjb47C9WKCFRGg==}
+
+ '@microsoft/api-extractor@7.43.7':
+ resolution: {integrity: sha512-t5M8BdnS+TmroUA/Z9HJXExS9iL4pK9I3yGu9PsXVTXPmcVXlBlA1CVI7TjRa1jwm+vusG/+sbX1/t5UkJhQMg==}
+ hasBin: true
+
+ '@microsoft/tsdoc-config@0.16.2':
+ resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
+
+ '@microsoft/tsdoc@0.14.2':
+ resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
+
+ '@module-federation/error-codes@0.8.12':
+ resolution: {integrity: sha512-K+F4iiV62KY+IpjK6ggn3vI5Yt/T/LUb6xuazY78bhAGwLaHe1DYr7BfSutKMpiB+Dcs6U4dYOBogSMnnl0j4Q==}
+
+ '@module-federation/runtime-core@0.6.20':
+ resolution: {integrity: sha512-rX7sd/i7tpkAbfMD4TtFt/57SWNC/iv7UYS8g+ad7mnCJggWE1YEKsKSFgcvp4zU3thwR+j2y+kOCwd1sQvxEA==}
+
+ '@module-federation/runtime@0.8.12':
+ resolution: {integrity: sha512-eYohRfambj/qzxz6tEakDn459ROcixWO4zL5gmTEOmwG+jCDnxGR14j1guopyrrpjb6EKFNrPVWtYZTPPfGdQQ==}
+
+ '@module-federation/sdk@0.8.12':
+ resolution: {integrity: sha512-zFgXYBHbzwIqlrLfn6ewIRXDZCctDDQT2nFhbsZr29yWQgpmW1fm2kJCxQsG0DENGGN1KpzfDoxjjvSKJS/ZHA==}
+
+ '@module-federation/webpack-bundler-runtime@0.8.12':
+ resolution: {integrity: sha512-zd343RO7/R7Xjh5ym5KdnYQ70z4LBmMxWsa44FS0nyNv04sOq6V1eZSCGKbEhbfqqhbS5Wfj8OzJyedeVvV/OQ==}
+
+ '@napi-rs/nice-android-arm-eabi@1.0.1':
+ resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [android]
+
+ '@napi-rs/nice-android-arm64@1.0.1':
+ resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@napi-rs/nice-darwin-arm64@1.0.1':
+ resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@napi-rs/nice-darwin-x64@1.0.1':
+ resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@napi-rs/nice-freebsd-x64@1.0.1':
+ resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@napi-rs/nice-linux-arm-gnueabihf@1.0.1':
+ resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@napi-rs/nice-linux-arm64-gnu@1.0.1':
+ resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@napi-rs/nice-linux-arm64-musl@1.0.1':
+ resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@napi-rs/nice-linux-ppc64-gnu@1.0.1':
+ resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==}
+ engines: {node: '>= 10'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@napi-rs/nice-linux-riscv64-gnu@1.0.1':
+ resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==}
+ engines: {node: '>= 10'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@napi-rs/nice-linux-s390x-gnu@1.0.1':
+ resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==}
+ engines: {node: '>= 10'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@napi-rs/nice-linux-x64-gnu@1.0.1':
+ resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@napi-rs/nice-linux-x64-musl@1.0.1':
+ resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@napi-rs/nice-win32-arm64-msvc@1.0.1':
+ resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@napi-rs/nice-win32-ia32-msvc@1.0.1':
+ resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@napi-rs/nice-win32-x64-msvc@1.0.1':
+ resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@napi-rs/nice@1.0.1':
+ resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==}
+ engines: {node: '>= 10'}
+
+ '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
+ resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@parcel/watcher-android-arm64@2.5.1':
+ resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.5.1':
+ resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
+ engines: {node: '>= 10.0.0'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@pkgr/core@0.2.7':
+ resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
+ '@pkgr/utils@2.4.2':
+ resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
+ '@rc-component/async-validator@5.0.4':
+ resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==}
+ engines: {node: '>=14.x'}
+
+ '@rc-component/color-picker@2.0.1':
+ resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/context@1.4.0':
+ resolution: {integrity: sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/mini-decimal@1.1.0':
+ resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==}
+ engines: {node: '>=8.x'}
+
+ '@rc-component/mutate-observer@1.1.0':
+ resolution: {integrity: sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/portal@1.1.2':
+ resolution: {integrity: sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/qrcode@1.0.0':
+ resolution: {integrity: sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/tour@1.15.1':
+ resolution: {integrity: sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/trigger@1.18.3':
+ resolution: {integrity: sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@rc-component/trigger@2.2.7':
+ resolution: {integrity: sha512-Qggj4Z0AA2i5dJhzlfFSmg1Qrziu8dsdHOihROL5Kl18seO2Eh/ZaTYt2c8a/CyGaTChnFry7BEYew1+/fhSbA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ '@reactflow/background@11.3.14':
+ resolution: {integrity: sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==}
+ peerDependencies:
+ react: '>=17'
+ react-dom: '>=17'
+
+ '@reactflow/controls@11.2.14':
+ resolution: {integrity: sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==}
+ peerDependencies:
+ react: '>=17'
+ react-dom: '>=17'
+
+ '@reactflow/core@11.11.4':
+ resolution: {integrity: sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==}
+ peerDependencies:
+ react: '>=17'
+ react-dom: '>=17'
+
+ '@reactflow/minimap@11.7.14':
+ resolution: {integrity: sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==}
+ peerDependencies:
+ react: '>=17'
+ react-dom: '>=17'
+
+ '@reactflow/node-resizer@2.2.14':
+ resolution: {integrity: sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==}
+ peerDependencies:
+ react: '>=17'
+ react-dom: '>=17'
+
+ '@reactflow/node-toolbar@1.3.14':
+ resolution: {integrity: sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==}
+ peerDependencies:
+ react: '>=17'
+ react-dom: '>=17'
+
+ '@rushstack/node-core-library@4.3.0':
+ resolution: {integrity: sha512-JuNZ7lwaYQ4R1TugpryyWBn4lIxK+L7fF+muibFp0by5WklG22nsvH868fuBoZMLo5FqAs6WFOifNos4PJjWSA==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/rig-package@0.5.2':
+ resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==}
+
+ '@rushstack/terminal@0.11.0':
+ resolution: {integrity: sha512-LKz7pv0G9Py5uULahNSixK1pTqIIKd103pAGhDW51YfzPojvmO5wfITe0PEUNAJZjuufN/KgeRW83dJo1gL2rQ==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@rushstack/ts-command-line@4.21.0':
+ resolution: {integrity: sha512-z38FLUCn8M9FQf19gJ9eltdwkvc47PxvJmVZS6aKwbBAa3Pis3r3A+ZcBCVPNb9h/Tbga+i0tHdzoSGUoji9GQ==}
+
+ '@selderee/plugin-htmlparser2@0.11.0':
+ resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
+
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
+ '@sketch-hq/sketch-file-format-ts@6.5.0':
+ resolution: {integrity: sha512-shaGl4ttFDpHjYBoMaZpciOtsi/lKvJ3VfcBYk6+PjjbFs6H5GxPAyhbiSqy3Vmx30aos284pd88QzD3rE6iag==}
+
+ '@stackblitz/sdk@1.11.0':
+ resolution: {integrity: sha512-DFQGANNkEZRzFk1/rDP6TcFdM82ycHE+zfl9C/M/jXlH68jiqHWHFMQURLELoD8koxvu/eW5uhg94NSAZlYrUQ==}
+
+ '@stylelint/postcss-css-in-js@0.38.0':
+ resolution: {integrity: sha512-XOz5CAe49kS95p5yRd+DAIWDojTjfmyAQ4bbDlXMdbZTQ5t0ThjSLvWI6JI2uiS7MFurVBkZ6zUqcimzcLTBoQ==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+ peerDependencies:
+ postcss: '>=7.0.0'
+ postcss-syntax: '>=0.36.2'
+
+ '@svgr/babel-plugin-add-jsx-attribute@6.5.1':
+ resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0':
+ resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0':
+ resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1':
+ resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-svg-dynamic-title@6.5.1':
+ resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-svg-em-dimensions@6.5.1':
+ resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-transform-react-native-svg@6.5.1':
+ resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-plugin-transform-svg-component@6.5.1':
+ resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/babel-preset@6.5.1':
+ resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@svgr/core@6.5.1':
+ resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==}
+ engines: {node: '>=10'}
+
+ '@svgr/hast-util-to-babel-ast@6.5.1':
+ resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==}
+ engines: {node: '>=10'}
+
+ '@svgr/plugin-jsx@6.5.1':
+ resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@svgr/core': ^6.0.0
+
+ '@svgr/plugin-svgo@6.5.1':
+ resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@svgr/core': '*'
+
+ '@swc/core-darwin-arm64@1.9.2':
+ resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@swc/core-darwin-x64@1.9.2':
+ resolution: {integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@swc/core-linux-arm-gnueabihf@1.9.2':
+ resolution: {integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@swc/core-linux-arm64-gnu@1.9.2':
+ resolution: {integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-arm64-musl@1.9.2':
+ resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@swc/core-linux-x64-gnu@1.9.2':
+ resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-linux-x64-musl@1.9.2':
+ resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@swc/core-win32-arm64-msvc@1.9.2':
+ resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@swc/core-win32-ia32-msvc@1.9.2':
+ resolution: {integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@swc/core-win32-x64-msvc@1.9.2':
+ resolution: {integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@swc/core@1.9.2':
+ resolution: {integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@swc/helpers': '*'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@swc/counter@0.1.3':
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+
+ '@swc/helpers@0.5.1':
+ resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
+
+ '@swc/types@0.1.23':
+ resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==}
+
+ '@trysound/sax@0.2.0':
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
+ '@types/argparse@1.0.38':
+ resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.20.7':
+ resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
+
+ '@types/d3-array@3.2.1':
+ resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
+
+ '@types/d3-axis@3.0.6':
+ resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
+
+ '@types/d3-brush@3.0.6':
+ resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
+
+ '@types/d3-chord@3.0.6':
+ resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
+
+ '@types/d3-color@3.1.3':
+ resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
+
+ '@types/d3-contour@3.0.6':
+ resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
+
+ '@types/d3-delaunay@6.0.4':
+ resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
+
+ '@types/d3-dispatch@3.0.6':
+ resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==}
+
+ '@types/d3-drag@3.0.7':
+ resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
+
+ '@types/d3-dsv@3.0.7':
+ resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
+
+ '@types/d3-ease@3.0.2':
+ resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
+
+ '@types/d3-fetch@3.0.7':
+ resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
+
+ '@types/d3-force@3.0.10':
+ resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
+
+ '@types/d3-format@3.0.4':
+ resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
+
+ '@types/d3-geo@3.1.0':
+ resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
+
+ '@types/d3-hierarchy@3.1.7':
+ resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
+
+ '@types/d3-interpolate@3.0.4':
+ resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
+
+ '@types/d3-path@3.1.1':
+ resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
+
+ '@types/d3-polygon@3.0.2':
+ resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
+
+ '@types/d3-quadtree@3.0.6':
+ resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
+
+ '@types/d3-random@3.0.3':
+ resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
+
+ '@types/d3-scale-chromatic@3.1.0':
+ resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
+
+ '@types/d3-scale@4.0.9':
+ resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
+
+ '@types/d3-selection@3.0.11':
+ resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
+
+ '@types/d3-shape@3.1.7':
+ resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==}
+
+ '@types/d3-time-format@4.0.3':
+ resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
+
+ '@types/d3-time@3.0.4':
+ resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
+
+ '@types/d3-timer@3.0.2':
+ resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
+
+ '@types/d3-transition@3.0.9':
+ resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
+
+ '@types/d3-zoom@3.0.8':
+ resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
+
+ '@types/d3@7.4.3':
+ resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/eslint-scope@3.7.7':
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+
+ '@types/eslint@9.6.1':
+ resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
+
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/fs-extra@11.0.1':
+ resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==}
+
+ '@types/geojson@7946.0.16':
+ resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
+
+ '@types/graceful-fs@4.1.9':
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+
+ '@types/hapi__joi@17.1.9':
+ resolution: {integrity: sha512-oOMFT8vmCTFncsF1engrs04jatz8/Anwx3De9uxnOK4chgSEgWBvFtpSoJo8u3784JNO+ql5tzRR6phHoRnscQ==}
+
+ '@types/hast@2.3.10':
+ resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+
+ '@types/hoist-non-react-statics@3.3.6':
+ resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==}
+
+ '@types/html-minifier-terser@6.1.0':
+ resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@1.1.2':
+ resolution: {integrity: sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mdast@3.0.15':
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+
+ '@types/minimist@1.2.5':
+ resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
+
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
+ '@types/node@17.0.45':
+ resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
+
+ '@types/node@20.5.1':
+ resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==}
+
+ '@types/node@24.0.7':
+ resolution: {integrity: sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==}
+
+ '@types/normalize-package-data@2.4.4':
+ resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+
+ '@types/parse-json@4.0.2':
+ resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
+
+ '@types/parse5@6.0.3':
+ resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
+
+ '@types/prismjs@1.26.5':
+ resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==}
+
+ '@types/prop-types@15.7.15':
+ resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
+
+ '@types/q@1.5.8':
+ resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==}
+
+ '@types/ramda@0.29.3':
+ resolution: {integrity: sha512-Yh/RHkjN0ru6LVhSQtTkCRo6HXkfL9trot/2elzM/yXLJmbLm2v6kJc8yftTnwv1zvUob6TEtqI2cYjdqG3U0Q==}
+
+ '@types/react-dom@18.3.7':
+ resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
+ peerDependencies:
+ '@types/react': ^18.0.0
+
+ '@types/react@18.3.23':
+ resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==}
+
+ '@types/resolve@1.20.6':
+ resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+
+ '@types/sax@1.2.7':
+ resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
+
+ '@types/semver@7.7.0':
+ resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==}
+
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@13.0.12':
+ resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==}
+
+ '@types/yargs@16.0.9':
+ resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==}
+
+ '@types/yargs@17.0.33':
+ resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+
+ '@typescript-eslint/eslint-plugin@5.62.0':
+ resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/parser@5.62.0':
+ resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/scope-manager@5.62.0':
+ resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@typescript-eslint/type-utils@5.62.0':
+ resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/types@5.62.0':
+ resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@typescript-eslint/typescript-estree@5.62.0':
+ resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/utils@5.62.0':
+ resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ '@typescript-eslint/visitor-keys@5.62.0':
+ resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@umijs/ast@4.4.11':
+ resolution: {integrity: sha512-TeOYsiFS4SdKd9MpeeL1C4hD8ht3WV/6F43vqhbS5I1hyoV999euuFECnKevcd9tXI72HOMPKqa3e+AxRTinoA==}
+
+ '@umijs/babel-preset-umi@4.4.11':
+ resolution: {integrity: sha512-hod7QZ9Kx2lDup0W1RrhJkTVUkH8tR3DWiGwzcyVCB1ArGmOzyfVUj2CyxfM3p5e1Iz8sfrc8WiArrdQtw77Jg==}
+
+ '@umijs/bundler-esbuild@4.4.11':
+ resolution: {integrity: sha512-8gNB7hZtA1iRZcHYFwopmrNFrtkzd2yAGxBkdxAXd+Ntcsr6GY/3AF/VInn21mTNFRaQnu5qJKENnIAxKNl8Yg==}
+ hasBin: true
+
+ '@umijs/bundler-mako@0.11.10':
+ resolution: {integrity: sha512-RNop0kmMXJUOLQYp61ZW3NVdD8ikOPW0zoCmgkN+nIUVw+QKcA+9tSPEcT6Rr8id9+Ed3lMjLqktev20guRp1g==}
+
+ '@umijs/bundler-utils@4.4.11':
+ resolution: {integrity: sha512-H9XNvR8d45Zh7efzhRkSkcDcqVJUWji2Df9rXrxQA/VBUQkk87RTQlfpoIzfgfsWFZTQ3NC+ggRAoQUGMeUySA==}
+
+ '@umijs/bundler-vite@4.4.11':
+ resolution: {integrity: sha512-7Qex4G1bWTEsyW9OoWn73MPdmBBRXUo5qDj2e0/HYejSfaT7mSoIpaq9JML5pPW0FSv+trrs8l3cc0fJNM9n1Q==}
+ hasBin: true
+
+ '@umijs/bundler-webpack@4.4.11':
+ resolution: {integrity: sha512-2u2WlR/WtNxeOnjGFUMV0az2ekQVeTbVYnTkvIHGslCUnhZ8YpgiUkMHIdqviPUgCANA+u9vH1mZzELCyod2PA==}
+ hasBin: true
+
+ '@umijs/case-sensitive-paths-webpack-plugin@1.0.1':
+ resolution: {integrity: sha512-kDKJ8yTarxwxGJDInG33hOpaQRZ//XpNuuznQ/1Mscypw6kappzFmrBr2dOYave++K7JHouoANF354UpbEQw0Q==}
+
+ '@umijs/core@4.4.11':
+ resolution: {integrity: sha512-gND+hLhnvjOKH/vQJ/llPfD4Ogde3TP4fgJUVjHk3kNF3DbBiHqYKhViH5SMamGyPhhrun4A3Mic3YQvmjVtBg==}
+
+ '@umijs/did-you-know@1.0.3':
+ resolution: {integrity: sha512-9EZ+rgY9+2HEaE+Z9dGkal2ccw8L4uuz77tCB5WpskW7NBZX5nOj82sqF/shEtA5tU3SWO/Mi4n35K3iONvDtw==}
+
+ '@umijs/es-module-parser-darwin-arm64@0.0.7':
+ resolution: {integrity: sha512-1QeNupekuVYVvL4UHyCRq4ISP2PNk4rDd9UOPONW+KpqTyP9p7RfgGpwB0VLPaFSu2ADtm0XZyIaYEGPY6zuDw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@umijs/es-module-parser-darwin-x64@0.0.7':
+ resolution: {integrity: sha512-FBFmfigmToPc9qBCW7wHiTYpqnLdPbAvoMGOydzAu2NspdPEF7TfILcr8vCPNbNe3vCobS+T/YM1dP+SagERlA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@umijs/es-module-parser-linux-arm-gnueabihf@0.0.7':
+ resolution: {integrity: sha512-AXfmg3htkadLGsXUyiyrTig4omGCWIN4l+HS7Qapqv0wlfFYSpC0KPemjyBQgzXO70tDcT+1FNhGjIy+yr2pIQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@umijs/es-module-parser-linux-arm64-gnu@0.0.7':
+ resolution: {integrity: sha512-2wSdChFc39fPJwvS8tRq+jx8qNlIwrjRk1hb3N5o0rJR+rqt+ceAyNPbYwpNBmUHW7xtmDQvJUeinvr7hIBP+w==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@umijs/es-module-parser-linux-arm64-musl@0.0.7':
+ resolution: {integrity: sha512-cqQffARWkmQ3n1RYNKZR3aD6X8YaP6u1maASjDgPQOpZMAlv/OSDrM/7iGujWTs0PD0haockNG9/DcP6lgPHMw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@umijs/es-module-parser-linux-x64-gnu@0.0.7':
+ resolution: {integrity: sha512-PHrKHtT665Za0Ydjch4ACrNpRU+WIIden12YyF1CtMdhuLDSoU6UfdhF3NoDbgEUcXVDX/ftOqmj0SbH3R1uew==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@umijs/es-module-parser-linux-x64-musl@0.0.7':
+ resolution: {integrity: sha512-cyZvUK5lcECLWzLp/eU1lFlCETcz+LEb+wrdARQSST1dgoIGZsT4cqM1WzYmdZNk3o883tiZizLt58SieEiHBQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@umijs/es-module-parser-win32-arm64-msvc@0.0.7':
+ resolution: {integrity: sha512-V7WxnUI88RboSl0RWLNQeKBT7EDW35fW6Tn92zqtoHHxrhAIL9DtDyvC8REP4qTxeZ6Oej/Ax5I6IjsLx3yTOg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@umijs/es-module-parser-win32-x64-msvc@0.0.7':
+ resolution: {integrity: sha512-X3Pqy0l38hg6wMPquPeMHuoHU+Cx+wzyz32SVYCta+RPJQ7n9PjrEBiIuVAw5+GJZjSABN7LVr8u/n0RZT9EQA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@umijs/es-module-parser@0.0.7':
+ resolution: {integrity: sha512-x47CMi/Hw7Nkz3RXTUqlldH/UM+Tcmw2PziV3k+itJqTFJc8oVx3lzdUgCnG+eL3ZtmLPbOEBhPb30V0NytNDQ==}
+ engines: {node: '>= 10'}
+
+ '@umijs/history@5.3.1':
+ resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==}
+
+ '@umijs/lint@4.4.11':
+ resolution: {integrity: sha512-vzbladpPXc740mE4Ru+h7PiwDxSSOf0F7Qjd3PggFk7DQ9tfQYJmub0/GMnHm6/hPANt0Oyn4JEDzoA5R5oZdg==}
+
+ '@umijs/mako-darwin-arm64@0.11.10':
+ resolution: {integrity: sha512-kCn0mJx2Hq4RIkMNIzMDOdO4JSWq120auFmSEleHkfrFFFqSWX2qgz5mR5VI7kaPH0GUh0+hwfRkjEVGysJGjA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@umijs/mako-darwin-x64@0.11.10':
+ resolution: {integrity: sha512-SKgadN/mAU8YxrQnsGQ2lFuR8I12EQSsaei41Ke5qBtXhbSxAxt5MMxBKWdB+dUe74dh6dXnllwAk/ts34vCog==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@umijs/mako-linux-arm64-gnu@0.11.10':
+ resolution: {integrity: sha512-h6TEyMe9zIuH6w5to+XeZciWDD99RaMdfwvqdcHHyJaLH9wfGwSsiHuf/z3Evwkxy8xoNAvBOngwUD35RGYa/A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@umijs/mako-linux-arm64-musl@0.11.10':
+ resolution: {integrity: sha512-kqI1Jw6IHtDwrcsqPZrYxsV3pHzZyOR+6fCFnF5MSURnXbUbJb6Rk66VsKKpMqbyfsEO6nt0WT9FrRBlFvRU2A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@umijs/mako-linux-x64-gnu@0.11.10':
+ resolution: {integrity: sha512-jlhXVvWJuumMmiE3z3ViugOMx9ZasNM1anng0PsusCgDwfy0IOfGzfwfwagqtzfsC5MwyRcfnRQyDdbfbroaSA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@umijs/mako-linux-x64-musl@0.11.10':
+ resolution: {integrity: sha512-SLV/PRdL12dFEKlQGenW3OboZXmdYi25y+JblgVJLBhpdxZrHFqpCsTZn4L3hVEhyl0/ksR1iY0wtfK3urR29g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@umijs/mako-win32-ia32-msvc@0.11.10':
+ resolution: {integrity: sha512-quCWpVl7yQjG+ccGhkF81GxO3orXdPW1OZWXWxJgOI0uPk7Hczh2EYMEVqqQGbi/83eJ1e3iE1jRTl/+2eHryQ==}
+ engines: {node: '>= 10'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@umijs/mako-win32-x64-msvc@0.11.10':
+ resolution: {integrity: sha512-NjUfV1vwUeDk5IXyleGb+pa/DZkGpjkclY/TJcK/X2OQ0Yh7Cr3sfZykhCoTEN2Y74k5rEKWYNQA0nTb6akj9Q==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@umijs/mako@0.11.10':
+ resolution: {integrity: sha512-qh0DzCtwwYjxey7Hn6B+66KVwDhMa/cIZQYgaeUVs76Ut5WDuUlfkFfJh4VA9k1F9YLBHXMaW2IeKIWTTIPVDg==}
+ engines: {node: '>= 16'}
+ hasBin: true
+
+ '@umijs/mfsu@4.4.11':
+ resolution: {integrity: sha512-FDT2162gdBrDga3obwijuqe+2PC7w/5Al4C+W+vi9tlbK28rrgn0ZYXWK7dvidbcSrzekVqB8b1jkfAAj4KOcQ==}
+
+ '@umijs/plugin-run@4.4.11':
+ resolution: {integrity: sha512-IFHcwX5fQO+/CDhdJv/qVtJECa7WCQi8pmKn81EQ39bmsgitio9WarRu3Mr46rA5FchRRjVVagdjaTXsriEACg==}
+
+ '@umijs/preset-umi@4.4.11':
+ resolution: {integrity: sha512-Ea3IM3ZI0hsIQo9mY7dr2zRTXRzmltJD8OWGuQFVi/sb3g4ViKwEaukvTI91yY7v60qP5kDP9SyHoZsFoMxJ9w==}
+
+ '@umijs/react-refresh-webpack-plugin@0.5.11':
+ resolution: {integrity: sha512-RtFvB+/GmjRhpHcqNgnw8iWZpTlxOnmNxi8eDcecxMmxmSgeDj25LV0jr4Q6rOhv3GTIfVGBhkwz+khGT5tfmg==}
+ engines: {node: '>= 10.13'}
+ peerDependencies:
+ '@types/webpack': 4.x || 5.x
+ react-refresh: '>=0.10.0 <1.0.0'
+ sockjs-client: ^1.4.0
+ type-fest: '>=0.17.0 <5.0.0'
+ webpack: '>=4.43.0 <6.0.0'
+ webpack-dev-server: 3.x || 4.x
+ webpack-hot-middleware: 2.x
+ webpack-plugin-serve: 0.x || 1.x
+ peerDependenciesMeta:
+ '@types/webpack':
+ optional: true
+ sockjs-client:
+ optional: true
+ type-fest:
+ optional: true
+ webpack-dev-server:
+ optional: true
+ webpack-hot-middleware:
+ optional: true
+ webpack-plugin-serve:
+ optional: true
+
+ '@umijs/renderer-react@4.4.11':
+ resolution: {integrity: sha512-+K2wY1LgpSZIs/Vz2tZ2nKkUNCTf+M43yb1bwTirLy+WQ2VZTB+qM0ti2abhXjZvwzq+WJKkCxhn9s3oJRKDpA==}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+
+ '@umijs/server@4.4.11':
+ resolution: {integrity: sha512-W6e7fOWZRMogB46IrIK1bgUvK5+9OVuFiCcwgISmof22anqvvrs9BdgUyMJSyrsDzXoXAUIo8lODOAMDg3mRfQ==}
+
+ '@umijs/test@4.4.11':
+ resolution: {integrity: sha512-RkYsfqPg7VKQwoR/prAV3CQ95VD2PGooGXJ5ZNc00Ej/5iOi8LUAOTuSCRkGd0Zhm3ZoH7xAphPyqxg0/pU00w==}
+
+ '@umijs/ui@3.0.1':
+ resolution: {integrity: sha512-zcz37AJH0xt/6XVVbyO/hmsK9Hq4vH23HZ4KYVi5A8rbM9KeJkJigTS7ELOdArawZhVNGe+h3a5Oixs4a2QsWw==}
+
+ '@umijs/utils@4.4.11':
+ resolution: {integrity: sha512-xhXia0yU8JZzpW75TIKDc0tlzvvDGPuuUUXaN3F6FlSSfR13bCCzX+fOTzjo95M4Sz43Vsgub0MK27hXwpCHlQ==}
+
+ '@umijs/zod2ts@4.4.11':
+ resolution: {integrity: sha512-B4CGKU6N9Qws5zNEu8TJjQgp61xAEdrBEmXGStXLl32f3zz0oUcIq/N4vBYciCDbwjHQKviqGcl3iSy2pbn7BA==}
+
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@vercel/ncc@0.33.3':
+ resolution: {integrity: sha512-JGZ11QV+/ZcfudW2Cz2JVp54/pJNXbsuWRgSh2ZmmZdQBKXqBtIGrwI1Wyx8nlbzAiEFe7FHi4K1zX4//jxTnQ==}
+ hasBin: true
+
+ '@vitejs/plugin-react@4.0.0':
+ resolution: {integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0
+
+ '@webassemblyjs/ast@1.14.1':
+ resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2':
+ resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
+
+ '@webassemblyjs/helper-api-error@1.13.2':
+ resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
+
+ '@webassemblyjs/helper-buffer@1.14.1':
+ resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2':
+ resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
+
+ '@webassemblyjs/ieee754@1.13.2':
+ resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
+
+ '@webassemblyjs/leb128@1.13.2':
+ resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
+
+ '@webassemblyjs/utf8@1.13.2':
+ resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+
+ '@xtuc/ieee754@1.2.0':
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ '@xtuc/long@4.2.2':
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-keywords@3.5.2:
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+
+ ajv-keywords@5.1.0:
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ animated-scroll-to@2.3.2:
+ resolution: {integrity: sha512-GBX6+V06anH2rRt1sGmYXvAVpBo0tMmJxVvGuMcd+KV+EzMnYFSYBnccCa5IYWJvEigI+vFLKKLLEeO6SyfjcQ==}
+
+ ansi-escapes@5.0.0:
+ resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==}
+ engines: {node: '>=12'}
+
+ ansi-html-community@0.0.8:
+ resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
+ engines: {'0': node >= 0.8.0}
+ hasBin: true
+
+ ansi-regex@4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ antd-token-previewer@2.0.0-alpha.6:
+ resolution: {integrity: sha512-I2C+c5g6irJO6XGnkVaF5uKxPwThXz1OxESPDjHc26OFLaJ894YkjK8N+7/jKEohuTUZfKLdauJF79Z0PgOmZA==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ antd@5.26.3:
+ resolution: {integrity: sha512-M/s9Q39h/+G7AWnS6fbNxmAI9waTH4ti022GVEXBLq2j810V1wJ3UOQps13nEilzDNcyxnFN/EIbqIgS7wSYaA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
+
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
+
+ array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+
+ array-ify@1.0.0:
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+
+ array-includes@3.1.9:
+ resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
+ engines: {node: '>= 0.4'}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ array.prototype.flat@1.3.3:
+ resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flatmap@1.3.3:
+ resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.reduce@1.0.8:
+ resolution: {integrity: sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.tosorted@1.1.4:
+ resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
+ engines: {node: '>= 0.4'}
+
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
+
+ arrify@1.0.1:
+ resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+ engines: {node: '>=0.10.0'}
+
+ asn1.js@4.10.1:
+ resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==}
+
+ assert-okam@1.5.0:
+ resolution: {integrity: sha512-pchhPo40i8GsTj/7h6P8LSSzwRErnh2nCEiwXNTxy4VYw6lSesSac4rTKqwsA+fOZdj6FT81Mb9U1vIZEua1EQ==}
+
+ assert@1.5.1:
+ resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==}
+
+ astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
+ atob@2.1.2:
+ resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
+ engines: {node: '>= 4.5.0'}
+ hasBin: true
+
+ atomic-sleep@1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+
+ autoprefixer@10.4.21:
+ resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ babel-jest@29.7.0:
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.8.0
+
+ babel-plugin-dynamic-import-node@2.3.3:
+ resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==}
+
+ babel-plugin-istanbul@6.1.1:
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
+
+ babel-plugin-jest-hoist@29.6.3:
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ babel-plugin-macros@3.1.0:
+ resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+ engines: {node: '>=10', npm: '>=6'}
+
+ babel-plugin-module-resolver@4.1.0:
+ resolution: {integrity: sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==}
+ engines: {node: '>= 8.0.0'}
+
+ babel-plugin-react-compiler@0.0.0-experimental-c23de8d-20240515:
+ resolution: {integrity: sha512-0XN2gmpT55QtAz5n7d5g91y1AuO9tRhWBaLgCRyc4ExHrlr7+LfxW+YTb3mOwxngkkiggwM8HyYsaEK9MqhnlQ==}
+
+ babel-plugin-styled-components@2.1.4:
+ resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==}
+ peerDependencies:
+ styled-components: '>= 2'
+
+ babel-plugin-transform-define@2.0.1:
+ resolution: {integrity: sha512-7lDR1nFGSJHmhq/ScQtp9LTDmNE2yKPoLtwfiu+WQZnj84XL/J/5AZWZXwYcOwbDtUPhtg+y0yxTiP/oGDU6Kw==}
+ engines: {node: '>= 8.x.x'}
+
+ babel-preset-current-node-syntax@1.1.0:
+ resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ babel-preset-jest@29.6.3:
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ balanced-match@2.0.0:
+ resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ big-integer@1.6.52:
+ resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
+ engines: {node: '>=0.6'}
+
+ big.js@5.2.2:
+ resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ binaryextensions@2.3.0:
+ resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==}
+ engines: {node: '>=0.8'}
+
+ bn.js@4.12.2:
+ resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==}
+
+ bn.js@5.2.2:
+ resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+
+ body-parser@1.20.3:
+ resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ bplist-parser@0.2.0:
+ resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
+ engines: {node: '>= 5.10.0'}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ brorand@1.1.0:
+ resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
+
+ browserify-aes@1.2.0:
+ resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==}
+
+ browserify-cipher@1.0.1:
+ resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==}
+
+ browserify-des@1.0.2:
+ resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==}
+
+ browserify-rsa@4.1.1:
+ resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==}
+ engines: {node: '>= 0.10'}
+
+ browserify-sign@4.2.3:
+ resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==}
+ engines: {node: '>= 0.12'}
+
+ browserify-zlib@0.2.0:
+ resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
+
+ browserslist@4.25.1:
+ resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-from@0.1.2:
+ resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer-okam@4.9.2:
+ resolution: {integrity: sha512-t+vozme+an7flUs6GXHGMiP3PdodTse1NgRHSDWioIFJAtmMlj3pj7qD20Mkr9hZy0+9HA4R0xcumpMewrRdZQ==}
+
+ buffer-xor@1.0.3:
+ resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
+
+ buffer@4.9.2:
+ resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==}
+
+ builtin-status-codes@3.0.0:
+ resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
+
+ bundle-name@3.0.0:
+ resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
+ engines: {node: '>=12'}
+
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camel-case@4.1.2:
+ resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
+
+ camelcase-keys@6.2.2:
+ resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
+ engines: {node: '>=8'}
+
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ camelize@1.0.1:
+ resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
+
+ caniuse-lite@1.0.30001726:
+ resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==}
+
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ cipher-base@1.0.6:
+ resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==}
+ engines: {node: '>= 0.10'}
+
+ classcat@5.0.5:
+ resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==}
+
+ classnames@2.3.2:
+ resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==}
+
+ classnames@2.5.1:
+ resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
+
+ clean-css@5.3.3:
+ resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
+ engines: {node: '>= 10.0'}
+
+ cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ cli-truncate@3.1.0:
+ resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ click-to-react-component@1.1.0:
+ resolution: {integrity: sha512-/DjZemufS1BkxyRgZL3r7HXVVOFRWVQi5Xd4EBnjxZMwrHEh0OlUVA2N9CjXkZ0x8zMf8dL1cKnnx+xUWUg4VA==}
+ peerDependencies:
+ react: '>=16.8.0'
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ coa@2.0.2:
+ resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==}
+ engines: {node: '>= 4.0'}
+
+ codesandbox-import-util-types@2.2.3:
+ resolution: {integrity: sha512-Qj00p60oNExthP2oR3vvXmUGjukij+rxJGuiaKM6tyUmSyimdZsqHI/TUvFFClAffk9s7hxGnQgWQ8KCce27qQ==}
+
+ codesandbox-import-utils@2.2.3:
+ resolution: {integrity: sha512-ymtmcgZKU27U+nM2qUb21aO8Ut/u2S9s6KorOgG81weP+NA0UZkaHKlaRqbLJ9h4i/4FLvwmEXYAnTjNmp6ogg==}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@3.2.1:
+ resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
+
+ colord@2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+
+ colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+
+ comlink@4.4.2:
+ resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==}
+
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+ commander@11.0.0:
+ resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==}
+ engines: {node: '>=16'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
+ commander@9.5.0:
+ resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+ engines: {node: ^12.20.0 || >=14}
+
+ common-path-prefix@3.0.0:
+ resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
+
+ compare-func@2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+
+ compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+
+ compression@1.8.0:
+ resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==}
+ engines: {node: '>= 0.8.0'}
+
+ compute-scroll-into-view@3.1.1:
+ resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ connect-history-api-fallback@2.0.0:
+ resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
+ engines: {node: '>=0.8'}
+
+ console-browserify@1.2.0:
+ resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
+
+ constants-browserify@1.0.0:
+ resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
+
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ conventional-changelog-angular@6.0.0:
+ resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==}
+ engines: {node: '>=14'}
+
+ conventional-changelog-conventionalcommits@6.1.0:
+ resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==}
+ engines: {node: '>=14'}
+
+ conventional-commits-parser@4.0.0:
+ resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ convert-source-map@1.9.0:
+ resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+
+ cookie@0.7.1:
+ resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
+ engines: {node: '>= 0.6'}
+
+ copy-anything@2.0.6:
+ resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
+
+ copy-to-clipboard@3.3.3:
+ resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
+
+ core-js-pure@3.43.0:
+ resolution: {integrity: sha512-i/AgxU2+A+BbJdMxh3v7/vxi2SbFqxiFmg6VsDwYB4jkucrd1BZNA9a9gphC0fYMG5IBSgQcbQnk865VCLe7xA==}
+
+ core-js@3.34.0:
+ resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
+ cosmiconfig-typescript-loader@4.4.0:
+ resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==}
+ engines: {node: '>=v14.21.3'}
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=7'
+ ts-node: '>=10'
+ typescript: '>=4'
+
+ cosmiconfig@7.1.0:
+ resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+ engines: {node: '>=10'}
+
+ cosmiconfig@8.3.6:
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ cosmiconfig@9.0.0:
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ create-ecdh@4.0.4:
+ resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
+
+ create-hash@1.1.3:
+ resolution: {integrity: sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==}
+
+ create-hash@1.2.0:
+ resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
+
+ create-hmac@1.1.7:
+ resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==}
+
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ crypto-browserify@3.12.1:
+ resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==}
+ engines: {node: '>= 0.10'}
+
+ css-blank-pseudo@3.0.3:
+ resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.4
+
+ css-color-keywords@1.0.0:
+ resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
+ engines: {node: '>=4'}
+
+ css-functions-list@3.2.3:
+ resolution: {integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==}
+ engines: {node: '>=12 || >=16'}
+
+ css-has-pseudo@3.0.4:
+ resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==}
+ engines: {node: ^12 || ^14 || >=16}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.4
+
+ css-loader@6.7.1:
+ resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==}
+ engines: {node: '>= 12.13.0'}
+ peerDependencies:
+ webpack: ^5.0.0
+
+ css-prefers-color-scheme@6.0.3:
+ resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==}
+ engines: {node: ^12 || ^14 || >=16}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.4
+
+ css-select-base-adapter@0.1.1:
+ resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==}
+
+ css-select@2.1.0:
+ resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==}
+
+ css-select@4.3.0:
+ resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
+
+ css-to-react-native@3.2.0:
+ resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
+
+ css-tree@1.0.0-alpha.37:
+ resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==}
+ engines: {node: '>=8.0.0'}
+
+ css-tree@1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+
+ css-what@3.4.2:
+ resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==}
+ engines: {node: '>= 6'}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
+
+ css@3.0.0:
+ resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==}
+
+ cssdb@6.6.3:
+ resolution: {integrity: sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ csso@4.2.0:
+ resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
+ engines: {node: '>=8.0.0'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ current-script-polyfill@1.0.0:
+ resolution: {integrity: sha512-qv8s+G47V6Hq+g2kRE5th+ASzzrL7b6l+tap1DHKK25ZQJv3yIFhH96XaQ7NGL+zRW3t/RDbweJf/dJDe5Z5KA==}
+
+ d3-color@3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
+ engines: {node: '>=12'}
+
+ d3-dispatch@3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
+ engines: {node: '>=12'}
+
+ d3-drag@3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
+ engines: {node: '>=12'}
+
+ d3-ease@3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
+ engines: {node: '>=12'}
+
+ d3-interpolate@3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
+ engines: {node: '>=12'}
+
+ d3-selection@3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
+ engines: {node: '>=12'}
+
+ d3-timer@3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
+ engines: {node: '>=12'}
+
+ d3-transition@3.0.1:
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ d3-selection: 2 - 3
+
+ d3-zoom@3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
+ engines: {node: '>=12'}
+
+ dargs@7.0.0:
+ resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+ engines: {node: '>=8'}
+
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+
+ data-view-buffer@1.0.2:
+ resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.2:
+ resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.1:
+ resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
+ engines: {node: '>= 0.4'}
+
+ dayjs@1.11.13:
+ resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
+
+ dayjs@1.11.7:
+ resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.4.1:
+ resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decamelize-keys@1.1.1:
+ resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
+ engines: {node: '>=0.10.0'}
+
+ decamelize@1.2.0:
+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+ engines: {node: '>=0.10.0'}
+
+ decimal.js@10.5.0:
+ resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
+
+ decode-named-character-reference@1.2.0:
+ resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
+
+ decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ deep-rename-keys@0.2.1:
+ resolution: {integrity: sha512-RHd9ABw4Fvk+gYDWqwOftG849x0bYOySl/RgX0tLI9i27ZIeSO91mLZJEp7oPHOMFqHvpgu21YptmDt0FYD/0A==}
+ engines: {node: '>=0.10.0'}
+
+ deepmerge@1.5.2:
+ resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==}
+ engines: {node: '>=0.10.0'}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ default-browser-id@3.0.0:
+ resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
+ engines: {node: '>=12'}
+
+ default-browser@4.0.0:
+ resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
+ engines: {node: '>=14.16'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ des.js@1.1.0:
+ resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==}
+
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-indent@7.0.1:
+ resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==}
+ engines: {node: '>=12.20'}
+
+ detect-libc@1.0.3:
+ resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ detect-newline@4.0.1:
+ resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ diffie-hellman@5.0.3:
+ resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
+
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
+ dom-converter@0.2.0:
+ resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
+
+ dom-serializer@0.2.2:
+ resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
+
+ dom-serializer@1.4.1:
+ resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domain-browser@1.2.0:
+ resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==}
+ engines: {node: '>=0.4', npm: '>=1.2'}
+
+ domelementtype@1.3.1:
+ resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@4.3.1:
+ resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
+ engines: {node: '>= 4'}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@1.7.0:
+ resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
+
+ domutils@2.8.0:
+ resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+ dot-case@3.0.4:
+ resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
+
+ dot-prop@5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
+
+ dumi-afx-deps@1.0.0-alpha.20:
+ resolution: {integrity: sha512-PRSJlHuJkyHDET7Hukykx/hLULkgUBX5q2CutMG5EDI3eJLzJlX634wNll10m3at1uomcDAVudL7Dgh5UOJ7IQ==}
+
+ dumi-assets-types@2.4.14:
+ resolution: {integrity: sha512-k2Z3z7/IcHOYASP/nDjocShdzXatmOuhkAwgYw/4KNiq36gpAKjn5MlrPkzdGH70TbcHGLGEul9b/4sYJLoS9A==}
+
+ dumi-theme-antd@0.4.4:
+ resolution: {integrity: sha512-d1zPPBi/na6ErYfVx2Syk0nrmz9s5wLhiiDkzN8kxrgdiSst7GLQdjohlpH40q+XmnLj9RjHesjkBAaA3pTkow==}
+ peerDependencies:
+ antd: ^5.17.0
+ dumi: ^2.4.18
+ react: ^18.0.0
+ react-dom: ^18.0.0
+
+ dumi@2.4.21:
+ resolution: {integrity: sha512-UM6M8B9pRxPbS4CT5DZpIOtQ8j+xH1d28PL1QNxzzK3SdbI7Ww+B+fSS/10KXLi9mPt+9/xlW7eUGCTRAwfjcg==}
+ hasBin: true
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ duplexer2@0.1.4:
+ resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==}
+
+ duplexify@4.1.3:
+ resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ editions@2.3.1:
+ resolution: {integrity: sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==}
+ engines: {node: '>=0.8'}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.177:
+ resolution: {integrity: sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==}
+
+ elliptic@6.6.1:
+ resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ emojis-list@3.0.0:
+ resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
+ engines: {node: '>= 4'}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ enhanced-resolve@5.18.2:
+ resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==}
+ engines: {node: '>=10.13.0'}
+
+ enhanced-resolve@5.9.3:
+ resolution: {integrity: sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==}
+ engines: {node: '>=10.13.0'}
+
+ entities@2.2.0:
+ resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ entities@6.0.1:
+ resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+ engines: {node: '>=0.12'}
+
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ errlop@2.2.0:
+ resolution: {integrity: sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==}
+ engines: {node: '>=0.8'}
+
+ errno@0.1.8:
+ resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
+ hasBin: true
+
+ error-ex@1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+ error-stack-parser@2.1.4:
+ resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+
+ es-abstract@1.24.0:
+ resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
+ engines: {node: '>= 0.4'}
+
+ es-array-method-boxes-properly@1.0.0:
+ resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-get-iterator@1.1.3:
+ resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
+
+ es-iterator-helpers@1.2.1:
+ resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
+ engines: {node: '>= 0.4'}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es-shim-unscopables@1.1.0:
+ resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
+ engines: {node: '>= 0.4'}
+
+ es-to-primitive@1.3.0:
+ resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
+ engines: {node: '>= 0.4'}
+
+ es5-imcompatible-versions@0.1.90:
+ resolution: {integrity: sha512-2MPI0t/VV4j/oz1qbMekb4gCW81dewTpM2XJHKnPpZiPGu+1rVWmhTnwcq1vt8AFwWrkNF4RE7OZ9ibnKFYKwg==}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ esbuild@0.17.19:
+ resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.18.20:
+ resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.21.4:
+ resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ eslint-plugin-jest@27.2.3:
+ resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0
+ eslint: ^7.0.0 || ^8.0.0
+ jest: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/eslint-plugin':
+ optional: true
+ jest:
+ optional: true
+
+ eslint-plugin-react-hooks@4.6.0:
+ resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+
+ eslint-plugin-react@7.33.2:
+ resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
+ eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@2.1.0:
+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+ engines: {node: '>=10'}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint@8.57.1:
+ resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
+ hasBin: true
+
+ espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ estree-util-attach-comments@2.1.1:
+ resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==}
+
+ estree-util-is-identifier-name@2.1.0:
+ resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==}
+
+ estree-util-to-js@1.2.0:
+ resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==}
+
+ estree-util-visit@1.2.1:
+ resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ eventemitter3@2.0.3:
+ resolution: {integrity: sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ events-okam@3.3.0:
+ resolution: {integrity: sha512-6iR7z9hAJEwrT+D2Ywg6Fx62HSmN86OlcvPdrnq1JBeFr30dMF6l+j7M3VabjHfIi2KMtF8rO0J1rIZEfwMAwg==}
+ engines: {node: '>=0.8.x'}
+
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ evp_bytestokey@1.0.3:
+ resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ execa@7.2.0:
+ resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
+ engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+
+ express-http-proxy@2.1.1:
+ resolution: {integrity: sha512-4aRQRqDQU7qNPV5av0/hLcyc0guB9UP71nCYrQEYml7YphTo8tmWf3nDZWdTJMMjFikyz9xKXaURor7Chygdwg==}
+ engines: {node: '>=6.0.0'}
+
+ express@4.21.2:
+ resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
+ engines: {node: '>= 0.10.0'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-glob@3.2.12:
+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
+ engines: {node: '>=8.6.0'}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-redact@3.5.0:
+ resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
+ engines: {node: '>=6'}
+
+ fast-uri@3.0.6:
+ resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
+
+ fastest-levenshtein@1.0.16:
+ resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
+ engines: {node: '>= 4.9.1'}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ father@4.5.6:
+ resolution: {integrity: sha512-o/GRqxKrnd8b/BHvqqqCTq9ZN+9caO56EX1RvSoDSHlSgV5JiDdE+Uyu1GYaNSK0409yMgHsXjZlnJeFIwYzCg==}
+ hasBin: true
+
+ fault@2.0.1:
+ resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
+
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
+ fdir@6.4.6:
+ resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fetch-blob@3.2.0:
+ resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+ engines: {node: ^12.20 || >= 14.13}
+
+ file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ file-system-cache@2.0.0:
+ resolution: {integrity: sha512-QlYut2ZtxRgdW/dboSmiKZWM8FsnpLaLI549hN/RWgwn3FawSil7Jc2n7nFHheclvYxa4LJqwEOvNUYv9VsCXg==}
+
+ file-system-cache@2.4.4:
+ resolution: {integrity: sha512-vCYhn8pb5nlC3Gs2FFCOkmf4NEg2Ym3ulJwkmS9o6p9oRShGj6CwTMFvpgZihBlsh373NaM0XgAgDHXQIlS4LQ==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ filter-obj@1.1.0:
+ resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==}
+ engines: {node: '>=0.10.0'}
+
+ finalhandler@1.3.1:
+ resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
+ engines: {node: '>= 0.8'}
+
+ find-babel-config@1.2.2:
+ resolution: {integrity: sha512-oK59njMyw2y3yxto1BCfVK7MQp/OYf4FleHu0RgosH3riFJ1aOuo/7naLDLAObfrgn3ueFhw5sAT/cp0QuJI3Q==}
+ engines: {node: '>=4.0.0'}
+
+ find-root@1.1.0:
+ resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
+
+ find-up@3.0.0:
+ resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+ engines: {node: '>=6'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ fork-ts-checker-webpack-plugin@8.0.0:
+ resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==}
+ engines: {node: '>=12.13.0', yarn: '>=1.0.0'}
+ peerDependencies:
+ typescript: '>3.6.0'
+ webpack: ^5.11.0
+
+ format@0.2.2:
+ resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+ engines: {node: '>=0.4.x'}
+
+ formdata-polyfill@4.0.10:
+ resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+ engines: {node: '>=12.20.0'}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+
+ fs-extra@11.1.1:
+ resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@11.3.0:
+ resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@7.0.1:
+ resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
+ engines: {node: '>=6 <7 || >=8'}
+
+ fs-monkey@1.0.6:
+ resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.8:
+ resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-symbol-description@1.1.0:
+ resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
+ engines: {node: '>= 0.4'}
+
+ get-tsconfig@4.10.1:
+ resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
+
+ get-tsconfig@4.7.5:
+ resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==}
+
+ get-value@2.0.6:
+ resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
+ engines: {node: '>=0.10.0'}
+
+ git-hooks-list@3.2.0:
+ resolution: {integrity: sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==}
+
+ git-hooks-list@4.1.1:
+ resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==}
+
+ git-raw-commits@2.0.11:
+ resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ github-slugger@1.5.0:
+ resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ global-dirs@0.1.1:
+ resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
+ engines: {node: '>=4'}
+
+ global-modules@2.0.0:
+ resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
+ engines: {node: '>=6'}
+
+ global-prefix@3.0.0:
+ resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
+ engines: {node: '>=6'}
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ globby@13.2.2:
+ resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ globjoin@0.1.4:
+ resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+ handle-thing@2.0.1:
+ resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
+
+ hard-rejection@2.1.0:
+ resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
+ engines: {node: '>=6'}
+
+ harmony-reflect@1.6.2:
+ resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==}
+
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.2.0:
+ resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ has-value@0.3.1:
+ resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==}
+ engines: {node: '>=0.10.0'}
+
+ has-values@0.1.4:
+ resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==}
+ engines: {node: '>=0.10.0'}
+
+ hash-base@2.0.2:
+ resolution: {integrity: sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==}
+
+ hash-base@3.0.5:
+ resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==}
+ engines: {node: '>= 0.10'}
+
+ hash.js@1.1.7:
+ resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hast-util-from-parse5@7.1.2:
+ resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==}
+
+ hast-util-has-property@2.0.1:
+ resolution: {integrity: sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==}
+
+ hast-util-heading-rank@2.1.1:
+ resolution: {integrity: sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==}
+
+ hast-util-is-conditional-comment@2.0.0:
+ resolution: {integrity: sha512-U66gW8ZWQdxP4ZjTEZ3xZT72y6rIKJqV4At5QmC1ItBbQyZyVkuTp8QkQwhxsbkHdzpifiZdQWrDipc9ByqhRg==}
+
+ hast-util-is-element@2.1.3:
+ resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==}
+
+ hast-util-parse-selector@3.1.1:
+ resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
+
+ hast-util-raw@7.2.3:
+ resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==}
+
+ hast-util-raw@8.0.0:
+ resolution: {integrity: sha512-bKbaUxMNLjZMMowgcrc4l3aQSPiMLiceZD+mp+AKF8Si0mtyR2DYVdxzS2XBxXYDeW/VvfZy40lNxHRiY6MMTg==}
+
+ hast-util-to-estree@2.3.3:
+ resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==}
+
+ hast-util-to-html@8.0.4:
+ resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==}
+
+ hast-util-to-parse5@7.1.0:
+ resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==}
+
+ hast-util-to-string@2.0.0:
+ resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==}
+
+ hast-util-whitespace@2.0.1:
+ resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+
+ hastscript@7.2.0:
+ resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
+
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ heti-findandreplacedomtext@0.5.0:
+ resolution: {integrity: sha512-GFZjqU8LAdu1uR72GqrReI+lzNLMlcWtvdz1TKNJiofyo1mfTecFYSZEoEbcLcRMl+KwEldnNQoS4BwO8wtg0A==}
+
+ heti@0.9.5:
+ resolution: {integrity: sha512-oVWQiQ8nvtfU9vc64ftAv+ylSwoeIJGOSm+LRpZz/XMlhFOtzybcpplmRTHxpz8X9vINlWVlniKCvF0LRo7s0Q==}
+
+ history@5.3.0:
+ resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==}
+
+ hmac-drbg@1.0.1:
+ resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
+
+ hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+
+ hosted-git-info@2.8.9:
+ resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+
+ hosted-git-info@4.1.0:
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
+
+ hosted-git-info@6.1.3:
+ resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ hpack.js@2.1.6:
+ resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
+
+ htm@3.1.1:
+ resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==}
+
+ html-entities@2.6.0:
+ resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
+
+ html-minifier-terser@6.1.0:
+ resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ html-tags@3.3.1:
+ resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+ engines: {node: '>=8'}
+
+ html-to-text@9.0.5:
+ resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==}
+ engines: {node: '>=14'}
+
+ html-tokenize@2.0.1:
+ resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==}
+ hasBin: true
+
+ html-void-elements@2.0.1:
+ resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
+
+ html-webpack-plugin@5.5.0:
+ resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==}
+ engines: {node: '>=10.13.0'}
+ peerDependencies:
+ webpack: ^5.20.0
+
+ html2sketch@1.0.2:
+ resolution: {integrity: sha512-/P9NcVH9yBhrOkcnaFkAbWJifDO8Ii+CTIxy9gE6trSQvo2OH++TKQIP5MICEoWvgXpVhZ6botj7P63Krl1/gg==}
+ engines: {node: '>=14.0.0'}
+
+ htmlparser2@6.1.0:
+ resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
+
+ htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+
+ http-deceiver@1.2.7:
+ resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ https-browserify@1.0.0:
+ resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ human-signals@4.3.1:
+ resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
+ engines: {node: '>=14.18.0'}
+
+ husky@8.0.3:
+ resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ icss-utils@5.1.0:
+ resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ identity-obj-proxy@3.0.0:
+ resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==}
+ engines: {node: '>=4'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ image-size@0.5.5:
+ resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ immutable@5.1.3:
+ resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ import-lazy@4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.1:
+ resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==}
+
+ inherits@2.0.3:
+ resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ inline-style-parser@0.1.1:
+ resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
+
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
+
+ intl-messageformat@10.7.16:
+ resolution: {integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==}
+
+ invariant@2.2.4:
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+ is-arrayish@0.3.2:
+ resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+
+ is-arrow-function@2.0.3:
+ resolution: {integrity: sha512-iDStzcT1FJMzx+TjCOK//uDugSe/Mif/8a+T0htydQ3qkJGvSweTZpVYz4hpJH0baloSPiAFQdA8WslAgJphvQ==}
+ engines: {node: '>= 0.4'}
+
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
+ engines: {node: '>= 0.4'}
+
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
+ engines: {node: '>= 0.4'}
+
+ is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+
+ is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.2:
+ resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
+ is-equal@1.7.0:
+ resolution: {integrity: sha512-hErktGR9jmoYXNWlbrwGjc8eHh09mbY6TWSTTFtnMcKaCuSMN8z+Ni5ma/8mkbVpe4CbB7V6kN1MkCg9bCx5bA==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finalizationregistry@1.1.1:
+ resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
+ engines: {node: '>= 0.4'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-generator-function@1.1.0:
+ resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-obj@2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+
+ is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+
+ is-plain-obj@1.1.0:
+ resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
+
+ is-text-path@1.0.1:
+ resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
+ engines: {node: '>=0.10.0'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
+ engines: {node: '>= 0.4'}
+
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
+
+ is-what@3.14.1:
+ resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isarray@0.0.1:
+ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isobject@2.1.0:
+ resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
+ engines: {node: '>=0.10.0'}
+
+ isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+
+ isomorphic-rslog@0.0.7:
+ resolution: {integrity: sha512-n6/XnKnZ5eLEj6VllG4XmamXG7/F69nls8dcynHyhcTpsPUYgcgx4ifEaCo4lQJ2uzwfmIT+F0KBGwBcMKmt5g==}
+ engines: {node: '>=14.17.6'}
+
+ isomorphic-unfetch@4.0.2:
+ resolution: {integrity: sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
+
+ istextorbinary@2.6.0:
+ resolution: {integrity: sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==}
+ engines: {node: '>=0.12'}
+
+ iterator.prototype@1.1.5:
+ resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
+ engines: {node: '>= 0.4'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ javascript-stringify@2.1.0:
+ resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==}
+
+ jest-haste-map@29.7.0:
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-regex-util@29.6.3:
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-util@29.7.0:
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+
+ jest-worker@29.4.3:
+ resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ jju@1.4.0:
+ resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-parse-even-better-errors@2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json2mq@0.2.0:
+ resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==}
+
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
+ jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kind-of@3.2.2:
+ resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
+ engines: {node: '>=0.10.0'}
+
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
+ known-css-properties@0.26.0:
+ resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==}
+
+ kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+
+ leac@0.6.0:
+ resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
+
+ less-loader@12.3.0:
+ resolution: {integrity: sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ '@rspack/core': 0.x || 1.x
+ less: ^3.5.0 || ^4.0.0
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
+ webpack:
+ optional: true
+
+ less-plugin-resolve@1.0.2:
+ resolution: {integrity: sha512-e1AHq0XNTU8S3d9JCc8CFYajoUBr0EK3pcuLT5PogyBBeE0knzZJL105kKKSZWfq2lQLq3/uEDrMK3JPq+fHaA==}
+
+ less@4.1.3:
+ resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ less@4.3.0:
+ resolution: {integrity: sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lightningcss-darwin-arm64@1.22.1:
+ resolution: {integrity: sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.22.1:
+ resolution: {integrity: sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.22.1:
+ resolution: {integrity: sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.22.1:
+ resolution: {integrity: sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.22.1:
+ resolution: {integrity: sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.22.1:
+ resolution: {integrity: sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.22.1:
+ resolution: {integrity: sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.22.1:
+ resolution: {integrity: sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-x64-msvc@1.22.1:
+ resolution: {integrity: sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.22.1:
+ resolution: {integrity: sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==}
+ engines: {node: '>= 12.0.0'}
+
+ lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ lint-staged@13.3.0:
+ resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ hasBin: true
+
+ listr2@6.6.1:
+ resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ enquirer: '>= 2.3.0 < 3'
+ peerDependenciesMeta:
+ enquirer:
+ optional: true
+
+ loader-runner@4.2.0:
+ resolution: {integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==}
+ engines: {node: '>=6.11.5'}
+
+ loader-runner@4.3.0:
+ resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+ engines: {node: '>=6.11.5'}
+
+ loader-utils@2.0.4:
+ resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
+ engines: {node: '>=8.9.0'}
+
+ loader-utils@3.3.1:
+ resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
+ engines: {node: '>= 12.13.0'}
+
+ local-pkg@0.4.3:
+ resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
+ engines: {node: '>=14'}
+
+ locate-path@3.0.0:
+ resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+ engines: {node: '>=6'}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+ lodash.clonedeep@4.5.0:
+ resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
+
+ lodash.get@4.4.2:
+ resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+ deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
+
+ lodash.isfunction@3.0.9:
+ resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+ lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.mergewith@4.6.2:
+ resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
+
+ lodash.snakecase@4.1.1:
+ resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+
+ lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+
+ lodash.truncate@4.4.2:
+ resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ lodash.upperfirst@4.3.1:
+ resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-update@5.0.1:
+ resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+
+ lz-string@1.5.0:
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
+ hasBin: true
+
+ make-dir@2.1.0:
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+ engines: {node: '>=6'}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
+ map-obj@1.0.1:
+ resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+ engines: {node: '>=0.10.0'}
+
+ map-obj@4.3.0:
+ resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
+ engines: {node: '>=8'}
+
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ mathml-tag-names@2.1.3:
+ resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}
+
+ md5.js@1.3.5:
+ resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+
+ mdast-util-definitions@5.1.2:
+ resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+
+ mdast-util-directive@2.2.4:
+ resolution: {integrity: sha512-sK3ojFP+jpj1n7Zo5ZKvoxP1MvLyzVG63+gm40Z/qI00avzdPCYxt7RBMgofwAva9gBjbDBWVRB/i+UD+fUCzQ==}
+
+ mdast-util-find-and-replace@2.2.2:
+ resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
+
+ mdast-util-from-markdown@1.3.1:
+ resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+
+ mdast-util-frontmatter@1.0.1:
+ resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==}
+
+ mdast-util-gfm-autolink-literal@1.0.3:
+ resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
+
+ mdast-util-gfm-footnote@1.0.2:
+ resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
+
+ mdast-util-gfm-strikethrough@1.0.3:
+ resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
+
+ mdast-util-gfm-table@1.0.7:
+ resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
+
+ mdast-util-gfm-task-list-item@1.0.2:
+ resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
+
+ mdast-util-gfm@2.0.2:
+ resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
+
+ mdast-util-mdx-expression@1.3.2:
+ resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==}
+
+ mdast-util-mdxjs-esm@1.3.1:
+ resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==}
+
+ mdast-util-phrasing@3.0.1:
+ resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+
+ mdast-util-to-hast@12.3.0:
+ resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+
+ mdast-util-to-markdown@1.5.0:
+ resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
+
+ mdast-util-to-string@3.2.0:
+ resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
+
+ mdn-data@2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+
+ mdn-data@2.0.4:
+ resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==}
+
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ memfs@3.5.3:
+ resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
+ engines: {node: '>= 4.0.0'}
+
+ meow@8.1.2:
+ resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
+ engines: {node: '>=10'}
+
+ meow@9.0.0:
+ resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==}
+ engines: {node: '>=10'}
+
+ merge-descriptors@1.0.3:
+ resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
+ micromark-core-commonmark@1.1.0:
+ resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
+
+ micromark-extension-directive@2.2.1:
+ resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==}
+
+ micromark-extension-frontmatter@1.1.1:
+ resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==}
+
+ micromark-extension-gfm-autolink-literal@1.0.5:
+ resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==}
+
+ micromark-extension-gfm-footnote@1.1.2:
+ resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==}
+
+ micromark-extension-gfm-strikethrough@1.0.7:
+ resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==}
+
+ micromark-extension-gfm-table@1.0.7:
+ resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==}
+
+ micromark-extension-gfm-tagfilter@1.0.2:
+ resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==}
+
+ micromark-extension-gfm-task-list-item@1.0.5:
+ resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==}
+
+ micromark-extension-gfm@2.0.3:
+ resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==}
+
+ micromark-factory-destination@1.1.0:
+ resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
+
+ micromark-factory-label@1.1.0:
+ resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
+
+ micromark-factory-space@1.1.0:
+ resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
+
+ micromark-factory-title@1.1.0:
+ resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
+
+ micromark-factory-whitespace@1.1.0:
+ resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
+
+ micromark-util-character@1.2.0:
+ resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
+
+ micromark-util-chunked@1.1.0:
+ resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
+
+ micromark-util-classify-character@1.1.0:
+ resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
+
+ micromark-util-combine-extensions@1.1.0:
+ resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
+
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
+
+ micromark-util-decode-string@1.1.0:
+ resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
+
+ micromark-util-encode@1.1.0:
+ resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+
+ micromark-util-html-tag-name@1.2.0:
+ resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
+
+ micromark-util-normalize-identifier@1.1.0:
+ resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
+
+ micromark-util-resolve-all@1.1.0:
+ resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
+
+ micromark-util-sanitize-uri@1.2.0:
+ resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
+
+ micromark-util-subtokenize@1.1.0:
+ resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
+
+ micromark-util-symbol@1.1.0:
+ resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+
+ micromark-util-types@1.1.0:
+ resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+
+ micromark@3.2.0:
+ resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
+
+ micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ miller-rabin@4.0.1:
+ resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
+ hasBin: true
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+
+ min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+
+ minimalistic-assert@1.0.1:
+ resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
+
+ minimalistic-crypto-utils@1.0.1:
+ resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+
+ minimatch@3.0.8:
+ resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist-options@4.1.0:
+ resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
+ engines: {node: '>= 6'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ multipipe@1.0.2:
+ resolution: {integrity: sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ natural-compare-lite@1.4.0:
+ resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ needle@3.3.1:
+ resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
+ engines: {node: '>= 4.4.x'}
+ hasBin: true
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@0.6.4:
+ resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
+ engines: {node: '>= 0.6'}
+
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-abort-controller@3.1.1:
+ resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
+
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
+ node-domexception@1.0.0:
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+ engines: {node: '>=10.5.0'}
+ deprecated: Use your platform's native DOMException instead
+
+ node-fetch@3.3.2:
+ resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
+ node-libs-browser-okam@2.2.5:
+ resolution: {integrity: sha512-kD+WXACEThc6C5DA146KoCNbubjpXeYzXDrukvtXWr6MRzV3uvHCI0eb/GuugWVYnMoD4g3/uaIzvDYOpC4QWw==}
+
+ node-libs-browser@2.2.1:
+ resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==}
+
+ node-releases@2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+
+ normalize-package-data@2.5.0:
+ resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+
+ normalize-package-data@3.0.3:
+ resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
+ engines: {node: '>=10'}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ nprogress@0.2.0:
+ resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==}
+
+ nth-check@1.0.2:
+ resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@0.4.0:
+ resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ object.entries@1.1.9:
+ resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
+ engines: {node: '>= 0.4'}
+
+ object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+ engines: {node: '>= 0.4'}
+
+ object.getownpropertydescriptors@2.1.8:
+ resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==}
+ engines: {node: '>= 0.8'}
+
+ object.getprototypeof@1.0.7:
+ resolution: {integrity: sha512-AS2h2hzryA95Z5SCy8DykYpdv82hHysDeMTBV5uWII4ljKiS0y2TC5aBQ+tHpCj0PfOy2/IPPY/O86F8uxx2gg==}
+ engines: {node: '>= 0.4'}
+
+ object.hasown@1.1.4:
+ resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==}
+ engines: {node: '>= 0.4'}
+
+ object.values@1.2.1:
+ resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
+ engines: {node: '>= 0.4'}
+
+ obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+
+ omit-deep@0.3.0:
+ resolution: {integrity: sha512-Lbl/Ma59sss2b15DpnWnGmECBRL8cRl/PjPbPMVW+Y8zIQzRrwMaI65Oy6HvxyhYeILVKBJb2LWeG81bj5zbMg==}
+ engines: {node: '>=0.10.0'}
+
+ on-exit-leak-free@0.2.0:
+ resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ open@9.1.0:
+ resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
+ engines: {node: '>=14.16'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ os-browserify@0.3.0:
+ resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
+
+ own-keys@1.0.1:
+ resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
+ engines: {node: '>= 0.4'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@3.0.0:
+ resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+ engines: {node: '>=6'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ pako@1.0.11:
+ resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
+
+ param-case@3.0.4:
+ resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-asn1@5.1.7:
+ resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==}
+ engines: {node: '>= 0.10'}
+
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
+ parse-json@5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+
+ parse-node-version@1.0.1:
+ resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
+ engines: {node: '>= 0.10'}
+
+ parse5@6.0.1:
+ resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
+
+ parse5@7.3.0:
+ resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
+ parseley@0.12.1:
+ resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ pascal-case@3.1.2:
+ resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
+
+ path-browserify@0.0.1:
+ resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==}
+
+ path-exists@3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-to-regexp@0.1.12:
+ resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
+
+ path-to-regexp@1.7.0:
+ resolution: {integrity: sha512-nifX1uj4S9IrK/w3Xe7kKvNEepXivANs9ng60Iq7PU/BlouV3yL/VUhFqTuTq33ykwUqoNcTeGo5vdOBP4jS/Q==}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pbkdf2@3.1.3:
+ resolution: {integrity: sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==}
+ engines: {node: '>=0.12'}
+
+ peberminta@0.9.0:
+ resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pify@4.0.1:
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+ engines: {node: '>=6'}
+
+ pino-abstract-transport@0.5.0:
+ resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==}
+
+ pino-std-serializers@4.0.0:
+ resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==}
+
+ pino@7.11.0:
+ resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==}
+ hasBin: true
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ piscina@4.9.2:
+ resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==}
+
+ pkg-up@3.1.0:
+ resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
+ engines: {node: '>=8'}
+
+ pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+
+ pnpm@10.12.4:
+ resolution: {integrity: sha512-Xqiw3u2U7WhpHJutTJVUknBcXuuKh++GvGLHSiawN7CP+VcPEIsuTb0d0akYb+qSXlJ/FBxkjoWvRWMQdGgBhA==}
+ engines: {node: '>=18.12'}
+ hasBin: true
+
+ point-in-polygon@1.1.0:
+ resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ postcss-attribute-case-insensitive@5.0.2:
+ resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-clamp@4.1.0:
+ resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
+ engines: {node: '>=7.6.0'}
+ peerDependencies:
+ postcss: ^8.4.6
+
+ postcss-color-functional-notation@4.2.4:
+ resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-color-hex-alpha@8.0.4:
+ resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.4
+
+ postcss-color-rebeccapurple@7.1.1:
+ resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-custom-media@8.0.2:
+ resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.3
+
+ postcss-custom-properties@12.1.11:
+ resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-custom-selectors@6.0.3:
+ resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.3
+
+ postcss-dir-pseudo-class@6.0.5:
+ resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-double-position-gradients@3.1.2:
+ resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-env-function@4.0.6:
+ resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.4
+
+ postcss-flexbugs-fixes@5.0.2:
+ resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==}
+ peerDependencies:
+ postcss: ^8.1.4
+
+ postcss-focus-visible@6.0.4:
+ resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.4
+
+ postcss-focus-within@5.0.4:
+ resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.4
+
+ postcss-font-variant@5.0.0:
+ resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-gap-properties@3.0.5:
+ resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-image-set-function@4.0.7:
+ resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-initial@4.0.1:
+ resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-lab-function@4.2.1:
+ resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-loader@8.1.1:
+ resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ '@rspack/core': 0.x || 1.x
+ postcss: ^7.0.0 || ^8.0.1
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
+ webpack:
+ optional: true
+
+ postcss-logical@5.0.4:
+ resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.4
+
+ postcss-media-minmax@5.0.0:
+ resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-media-query-parser@0.2.3:
+ resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==}
+
+ postcss-modules-extract-imports@3.1.0:
+ resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-local-by-default@4.2.0:
+ resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-scope@3.2.1:
+ resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-values@4.0.0:
+ resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-nesting@10.2.0:
+ resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-opacity-percentage@1.1.3:
+ resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-overflow-shorthand@3.0.4:
+ resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-page-break@3.0.4:
+ resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==}
+ peerDependencies:
+ postcss: ^8
+
+ postcss-place@7.0.5:
+ resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-prefix-selector@1.16.0:
+ resolution: {integrity: sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==}
+ peerDependencies:
+ postcss: '>4 <9'
+
+ postcss-preset-env@7.5.0:
+ resolution: {integrity: sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.4
+
+ postcss-pseudo-class-any-link@7.1.6:
+ resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==}
+ engines: {node: ^12 || ^14 || >=16}
+ peerDependencies:
+ postcss: ^8.2
+
+ postcss-replace-overflow-wrap@4.0.0:
+ resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
+ peerDependencies:
+ postcss: ^8.0.3
+
+ postcss-resolve-nested-selector@0.1.6:
+ resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==}
+
+ postcss-safe-parser@6.0.0:
+ resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.3.3
+
+ postcss-selector-not@5.0.0:
+ resolution: {integrity: sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-selector-parser@7.1.0:
+ resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
+ engines: {node: '>=4'}
+
+ postcss-syntax@0.36.2:
+ resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==}
+ peerDependencies:
+ postcss: '>=5.0.0'
+ postcss-html: '*'
+ postcss-jsx: '*'
+ postcss-less: '*'
+ postcss-markdown: '*'
+ postcss-scss: '*'
+ peerDependenciesMeta:
+ postcss-html:
+ optional: true
+ postcss-jsx:
+ optional: true
+ postcss-less:
+ optional: true
+ postcss-markdown:
+ optional: true
+ postcss-scss:
+ optional: true
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier-plugin-organize-imports@3.2.4:
+ resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==}
+ peerDependencies:
+ '@volar/vue-language-plugin-pug': ^1.0.4
+ '@volar/vue-typescript': ^1.0.4
+ prettier: '>=2.0'
+ typescript: '>=2.9'
+ peerDependenciesMeta:
+ '@volar/vue-language-plugin-pug':
+ optional: true
+ '@volar/vue-typescript':
+ optional: true
+
+ prettier-plugin-packagejson@2.4.3:
+ resolution: {integrity: sha512-kPeeviJiwy0BgOSk7No8NmzzXfW4R9FYWni6ziA5zc1kGVVrKnBzMZdu2TUhI+I7h8/5Htt3vARYOk7KKJTTNQ==}
+ peerDependencies:
+ prettier: '>= 1.16.0'
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+
+ prettier-plugin-packagejson@2.5.17:
+ resolution: {integrity: sha512-1WYvhTix+4EMYZQYSjAxb6+KTCULINuHUTBcxYa2ipoUS9Y2zJVjE3kuZ5I7ZWIFqyK8xpwYIunXqN5eiT7Hew==}
+ peerDependencies:
+ prettier: '>= 1.16.0'
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ pretty-error@4.0.0:
+ resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}
+
+ pretty-format@24.9.0:
+ resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==}
+ engines: {node: '>= 6'}
+
+ prism-react-renderer@1.3.5:
+ resolution: {integrity: sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==}
+ peerDependencies:
+ react: '>=0.14.9'
+
+ prism-react-renderer@2.3.1:
+ resolution: {integrity: sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==}
+ peerDependencies:
+ react: '>=16.0.0'
+
+ prism-themes@1.9.0:
+ resolution: {integrity: sha512-tX2AYsehKDw1EORwBps+WhBFKc2kxfoFpQAjxBndbZKr4fRmMkv47XN0BghC/K1qwodB1otbe4oF23vUTFDokw==}
+
+ prismjs@1.30.0:
+ resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
+ engines: {node: '>=6'}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ process-okam@0.11.10:
+ resolution: {integrity: sha512-p8e5nl6/OCeMalVb9dSojND5B9m/nq64WsyUfRmrTdLMKcNYcDN++/2I8WV1mTQDqrh2PQ6tIIb2A7/A38eSvw==}
+ engines: {node: '>= 0.6.0'}
+
+ process-warning@1.0.0:
+ resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==}
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
+ prr@1.0.1:
+ resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
+
+ public-encrypt@4.0.3:
+ resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
+
+ punycode-okam@1.4.1:
+ resolution: {integrity: sha512-e4mSfzGfrVBJmhjp+8PHjXIz5WrvEEWB2FT+RJ6YS/ozGttTcnocuj0CtMo3dujWYe2708bTd79zeIrKBtRzCg==}
+
+ punycode@1.4.1:
+ resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ q@1.5.1:
+ resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
+ engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
+ deprecated: |-
+ You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.
+
+ (For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
+
+ qs@6.13.0:
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
+ engines: {node: '>=0.6'}
+
+ qs@6.14.0:
+ resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+ engines: {node: '>=0.6'}
+
+ query-string@6.14.1:
+ resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==}
+ engines: {node: '>=6'}
+
+ querystring-es3@0.2.1:
+ resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==}
+ engines: {node: '>=0.4.x'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ quick-format-unescaped@4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
+ quick-lru@4.0.1:
+ resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
+ engines: {node: '>=8'}
+
+ ramda@0.28.0:
+ resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==}
+
+ ramda@0.29.0:
+ resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==}
+
+ randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+ randomfill@1.0.4:
+ resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+
+ raw-loader@4.0.2:
+ resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ webpack: ^4.0.0 || ^5.0.0
+
+ rc-cascader@3.34.0:
+ resolution: {integrity: sha512-KpXypcvju9ptjW9FaN2NFcA2QH9E9LHKq169Y0eWtH4e/wHQ5Wh5qZakAgvb8EKZ736WZ3B0zLLOBsrsja5Dag==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-checkbox@3.5.0:
+ resolution: {integrity: sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-collapse@3.9.0:
+ resolution: {integrity: sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-dialog@9.6.0:
+ resolution: {integrity: sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-drawer@6.2.0:
+ resolution: {integrity: sha512-spPkZ3WvP0U0vy5dyzSwlUJ/+vLFtjP/cTwSwejhQRoDBaexSZHsBhELoCZcEggI7LQ7typmtG30lAue2HEhvA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-drawer@7.3.0:
+ resolution: {integrity: sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-dropdown@4.1.0:
+ resolution: {integrity: sha512-VZjMunpBdlVzYpEdJSaV7WM7O0jf8uyDjirxXLZRNZ+tAC+NzD3PXPEtliFwGzVwBBdCmGuSqiS9DWcOLxQ9tw==}
+ peerDependencies:
+ react: '>=16.11.0'
+ react-dom: '>=16.11.0'
+
+ rc-dropdown@4.2.1:
+ resolution: {integrity: sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==}
+ peerDependencies:
+ react: '>=16.11.0'
+ react-dom: '>=16.11.0'
+
+ rc-field-form@2.7.0:
+ resolution: {integrity: sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-footer@0.6.8:
+ resolution: {integrity: sha512-JBZ+xcb6kkex8XnBd4VHw1ZxjV6kmcwUumSHaIFdka2qzMCo7Klcy4sI6G0XtUpG/vtpislQCc+S9Bc+NLHYMg==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ rc-image@7.12.0:
+ resolution: {integrity: sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-input-number@9.5.0:
+ resolution: {integrity: sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-input@1.8.0:
+ resolution: {integrity: sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ rc-mentions@2.20.0:
+ resolution: {integrity: sha512-w8HCMZEh3f0nR8ZEd466ATqmXFCMGMN5UFCzEUL0bM/nGw/wOS2GgRzKBcm19K++jDyuWCOJOdgcKGXU3fXfbQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-menu@9.12.4:
+ resolution: {integrity: sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-menu@9.16.1:
+ resolution: {integrity: sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-motion@2.9.5:
+ resolution: {integrity: sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-notification@5.6.4:
+ resolution: {integrity: sha512-KcS4O6B4qzM3KH7lkwOB7ooLPZ4b6J+VMmQgT51VZCeEcmghdeR4IrMcFq0LG+RPdnbe/ArT086tGM8Snimgiw==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-overflow@1.4.1:
+ resolution: {integrity: sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-pagination@5.1.0:
+ resolution: {integrity: sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-picker@4.11.3:
+ resolution: {integrity: sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ date-fns: '>= 2.x'
+ dayjs: '>= 1.x'
+ luxon: '>= 3.x'
+ moment: '>= 2.x'
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+ peerDependenciesMeta:
+ date-fns:
+ optional: true
+ dayjs:
+ optional: true
+ luxon:
+ optional: true
+ moment:
+ optional: true
+
+ rc-progress@4.0.0:
+ resolution: {integrity: sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-rate@2.13.1:
+ resolution: {integrity: sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-resize-observer@1.4.3:
+ resolution: {integrity: sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-segmented@2.7.0:
+ resolution: {integrity: sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==}
+ peerDependencies:
+ react: '>=16.0.0'
+ react-dom: '>=16.0.0'
+
+ rc-select@14.16.8:
+ resolution: {integrity: sha512-NOV5BZa1wZrsdkKaiK7LHRuo5ZjZYMDxPP6/1+09+FB4KoNi8jcG1ZqLE3AVCxEsYMBe65OBx71wFoHRTP3LRg==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ rc-slider@11.1.8:
+ resolution: {integrity: sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-steps@6.0.1:
+ resolution: {integrity: sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-switch@4.1.0:
+ resolution: {integrity: sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-table@7.51.1:
+ resolution: {integrity: sha512-5iq15mTHhvC42TlBLRCoCBLoCmGlbRZAlyF21FonFnS/DIC8DeRqnmdyVREwt2CFbPceM0zSNdEeVfiGaqYsKw==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-tabs@12.15.0:
+ resolution: {integrity: sha512-aXFLRo7jo531Jed1LgRqrF0VmRnzM/Qki25PknM3S04gqyxpDaHNFpPba05pHhn+d1N+54qIi0IcY1odrCrF2A==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-tabs@15.6.1:
+ resolution: {integrity: sha512-/HzDV1VqOsUWyuC0c6AkxVYFjvx9+rFPKZ32ejxX0Uc7QCzcEjTA9/xMgv4HemPKwzBNX8KhGVbbumDjnj92aA==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-textarea@1.10.0:
+ resolution: {integrity: sha512-ai9IkanNuyBS4x6sOL8qu/Ld40e6cEs6pgk93R+XLYg0mDSjNBGey6/ZpDs5+gNLD7urQ14po3V6Ck2dJLt9SA==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-tooltip@6.4.0:
+ resolution: {integrity: sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-tree-select@5.27.0:
+ resolution: {integrity: sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ rc-tree@5.13.1:
+ resolution: {integrity: sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==}
+ engines: {node: '>=10.x'}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ rc-upload@4.9.2:
+ resolution: {integrity: sha512-nHx+9rbd1FKMiMRYsqQ3NkXUv7COHPBo3X1Obwq9SWS6/diF/A0aJ5OHubvwUAIDs+4RMleljV0pcrNUc823GQ==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-util@5.41.0:
+ resolution: {integrity: sha512-xtlCim9RpmVv0Ar2Nnc3WfJCxjQkTf3xHPWoFdjp1fSs2NirQwqiQrfqdU9HUe0kdfb168M/T8Dq0IaX50xeKg==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-util@5.44.4:
+ resolution: {integrity: sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ rc-virtual-list@3.19.1:
+ resolution: {integrity: sha512-DCapO2oyPqmooGhxBuXHM4lFuX+sshQwWqqkuyFA+4rShLe//+GEPVwiDgO+jKtKHtbeYwZoNvetwfHdOf+iUQ==}
+ engines: {node: '>=8.x'}
+ peerDependencies:
+ react: '>=16.9.0'
+ react-dom: '>=16.9.0'
+
+ react-colorful@5.6.1:
+ resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ react-copy-to-clipboard@5.1.0:
+ resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==}
+ peerDependencies:
+ react: ^15.3.0 || 16 || 17 || 18
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-error-boundary@4.1.2:
+ resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==}
+ peerDependencies:
+ react: '>=16.13.1'
+
+ react-error-overlay@6.0.9:
+ resolution: {integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==}
+
+ react-fast-compare@3.2.2:
+ resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
+
+ react-helmet-async@1.3.0:
+ resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==}
+ peerDependencies:
+ react: ^16.6.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0
+
+ react-intersection-observer@9.8.2:
+ resolution: {integrity: sha512-901naEiiZmse3p+AmtbQ3NL9xx+gQ8TXLiGDc+8GiE3JKJkNV3vP737aGuWTAXBA+1QqxPrDDE+fIEgYpGDlrQ==}
+ peerDependencies:
+ react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ react-dom:
+ optional: true
+
+ react-intl@7.1.11:
+ resolution: {integrity: sha512-tnVoRCWvW5Ie2ikYSdPF7z3+880yCe/9xPmitFeRPw3RYDcCfR4m8ZYa4MBq19W4adt9Z+PQA4FaMBCJ7E+HCQ==}
+ peerDependencies:
+ react: 16 || 17 || 18 || 19
+ typescript: ^5.6.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ react-loading-skeleton@3.5.0:
+ resolution: {integrity: sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==}
+ peerDependencies:
+ react: '>=16.8.0'
+
+ react-merge-refs@1.1.0:
+ resolution: {integrity: sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==}
+
+ react-refresh@0.14.0:
+ resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+ engines: {node: '>=0.10.0'}
+
+ react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+
+ react-router-dom@6.3.0:
+ resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+
+ react-router@6.3.0:
+ resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==}
+ peerDependencies:
+ react: '>=16.8'
+
+ react-simple-code-editor@0.13.1:
+ resolution: {integrity: sha512-XYeVwRZwgyKtjNIYcAEgg2FaQcCZwhbarnkJIV20U2wkCU9q/CPFBo8nRXrK4GXUz3AvbqZFsZRrpUTkqqEYyQ==}
+ peerDependencies:
+ react: '*'
+ react-dom: '*'
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
+ reactflow@11.11.4:
+ resolution: {integrity: sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==}
+ peerDependencies:
+ react: '>=17'
+ react-dom: '>=17'
+
+ read-pkg-up@7.0.1:
+ resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+ engines: {node: '>=8'}
+
+ read-pkg@5.2.0:
+ resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+ engines: {node: '>=8'}
+
+ readable-stream@1.0.34:
+ resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ real-require@0.1.0:
+ resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==}
+ engines: {node: '>= 12.13.0'}
+
+ redent@3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
+ engines: {node: '>= 0.4'}
+
+ regenerate-unicode-properties@10.1.1:
+ resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regenerator-runtime@0.13.11:
+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
+
+ rehype-autolink-headings@6.1.1:
+ resolution: {integrity: sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==}
+
+ rehype-remove-comments@5.0.0:
+ resolution: {integrity: sha512-sfiVT+u1in19sxo9vv/SDQVbHE2mADScNrpeVsUxBFl14zOMZnfPb6l4hR+lXqe10G13UFVqv5pt8zDbCR4JYQ==}
+
+ rehype-stringify@9.0.4:
+ resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==}
+
+ relateurl@0.2.7:
+ resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
+ engines: {node: '>= 0.10'}
+
+ remark-directive@2.0.1:
+ resolution: {integrity: sha512-oosbsUAkU/qmUE78anLaJePnPis4ihsE7Agp0T/oqTzvTea8pOiaYEtfInU/+xMOVTS9PN5AhGOiaIVe4GD8gw==}
+
+ remark-frontmatter@4.0.1:
+ resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==}
+
+ remark-gfm@3.0.1:
+ resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
+
+ remark-parse@10.0.2:
+ resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
+
+ remark-rehype@10.1.0:
+ resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
+
+ rename-keys@1.2.0:
+ resolution: {integrity: sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==}
+ engines: {node: '>= 0.8.0'}
+
+ renderkid@3.0.0:
+ resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ reselect@4.1.8:
+ resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==}
+
+ resize-observer-polyfill@1.5.1:
+ resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-global@1.0.0:
+ resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
+ engines: {node: '>=8'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ resolve@1.19.0:
+ resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
+
+ resolve@1.22.10:
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ resolve@2.0.0-next.5:
+ resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ hasBin: true
+
+ restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ rimraf@5.0.1:
+ resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ ripemd160@2.0.1:
+ resolution: {integrity: sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==}
+
+ ripemd160@2.0.2:
+ resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==}
+
+ rollup-plugin-visualizer@5.9.0:
+ resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==}
+ engines: {node: '>=14'}
+ hasBin: true
+ peerDependencies:
+ rollup: 2.x || 3.x
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ rollup@3.29.5:
+ resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-applescript@5.0.0:
+ resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
+ engines: {node: '>=12'}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
+ safe-array-concat@1.1.3:
+ resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
+ engines: {node: '>=0.4'}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-push-apply@1.0.0:
+ resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
+ engines: {node: '>= 0.4'}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ sass-loader@16.0.5:
+ resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==}
+ engines: {node: '>= 18.12.0'}
+ peerDependencies:
+ '@rspack/core': 0.x || 1.x
+ node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
+ sass: ^1.3.0
+ sass-embedded: '*'
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ '@rspack/core':
+ optional: true
+ node-sass:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ webpack:
+ optional: true
+
+ sass@1.89.2:
+ resolution: {integrity: sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ sax@1.2.4:
+ resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
+
+ sax@1.4.1:
+ resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ schema-utils@3.3.0:
+ resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+ engines: {node: '>= 10.13.0'}
+
+ schema-utils@4.3.2:
+ resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
+ engines: {node: '>= 10.13.0'}
+
+ scroll-into-view-if-needed@3.1.0:
+ resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
+
+ selderee@0.11.0:
+ resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
+
+ select-hose@2.0.0:
+ resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
+
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.19.0:
+ resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
+ engines: {node: '>= 0.8.0'}
+
+ serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+
+ serve-static@1.16.2:
+ resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
+ engines: {node: '>= 0.8.0'}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ set-proto@1.0.0:
+ resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
+ engines: {node: '>= 0.4'}
+
+ setimmediate@1.0.5:
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sha.js@2.4.11:
+ resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
+ hasBin: true
+
+ shallowequal@1.1.0:
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ simple-swizzle@0.2.2:
+ resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+
+ sitemap@7.1.2:
+ resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==}
+ engines: {node: '>=12.0.0', npm: '>=5.6.0'}
+ hasBin: true
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slash@4.0.0:
+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+ engines: {node: '>=12'}
+
+ slice-ansi@4.0.0:
+ resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
+ engines: {node: '>=10'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ sonic-boom@2.8.0:
+ resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==}
+
+ sort-object-keys@1.1.3:
+ resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==}
+
+ sort-package-json@2.4.1:
+ resolution: {integrity: sha512-Nd3rgLBJcZ4iw7tpuOhwBupG6SvUDU0Fy1cZGAMorA2JmDUb+29Dg5phJK9gapa2Ak9d15w/RuMl/viwX+nKwQ==}
+ hasBin: true
+
+ sort-package-json@3.3.1:
+ resolution: {integrity: sha512-awjhQR2Iy5UN3NuguAK5+RezcEuUg9Ra4O8y2Aj+DlJa7MywyHaipAPf9bu4qqFj0hsYHHoT9sS3aV7Ucu728g==}
+ engines: {node: '>=20'}
+ hasBin: true
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-resolve@0.6.0:
+ resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==}
+ deprecated: See https://github.com/lydell/source-map-resolve#deprecated
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+ spdx-license-ids@3.0.21:
+ resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
+
+ spdy-transport@3.0.0:
+ resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
+
+ spdy@4.0.2:
+ resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
+ engines: {node: '>=6.0.0'}
+
+ split-on-first@1.1.0:
+ resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
+ engines: {node: '>=6'}
+
+ split2@3.2.2:
+ resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stable@0.1.8:
+ resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
+ deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
+
+ stackframe@1.3.4:
+ resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
+ stream-browserify@2.0.2:
+ resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==}
+
+ stream-http@2.8.3:
+ resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==}
+
+ stream-shift@1.0.3:
+ resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
+
+ strict-uri-encode@2.0.0:
+ resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
+ engines: {node: '>=4'}
+
+ string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+
+ string-convert@0.2.1:
+ resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string.prototype.matchall@4.0.12:
+ resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trim@1.2.10:
+ resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.9:
+ resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+
+ string_decoder-okam@1.3.0:
+ resolution: {integrity: sha512-N5lJgLJ02sIs9xNyqPgIywlGaLUW6s5cYRpnmM3gbfhGA3sggW0+E2go26D7oZgEH7jHpXDe+ArDrBXeCaP9QA==}
+
+ string_decoder@0.10.31:
+ resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+
+ strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ style-search@0.1.0:
+ resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
+
+ style-to-object@0.4.4:
+ resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
+
+ styled-components@5.3.11:
+ resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: '>= 16.8.0'
+ react-dom: '>= 16.8.0'
+ react-is: '>= 16.8.0'
+
+ stylelint-config-recommended@7.0.0:
+ resolution: {integrity: sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==}
+ peerDependencies:
+ stylelint: ^14.4.0
+
+ stylelint-config-standard@25.0.0:
+ resolution: {integrity: sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==}
+ peerDependencies:
+ stylelint: ^14.4.0
+
+ stylelint@14.16.1:
+ resolution: {integrity: sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
+ stylis@4.2.0:
+ resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
+
+ stylis@4.3.6:
+ resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-hyperlinks@2.3.0:
+ resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==}
+ engines: {node: '>=8'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ svg-parser@2.0.4:
+ resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
+
+ svg-pathdata@5.0.5:
+ resolution: {integrity: sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow==}
+ engines: {node: '>=6.9.5'}
+
+ svg-tags@1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+
+ svgo-browser@1.3.8:
+ resolution: {integrity: sha512-yOgDNIcewFZN3+jXdWeh/rQzbWJjCq1dTHphLz2r4T4AfTm+nqCxZ5B89v9bjQbFKA/s/k7TUc7J90+pP2HTyw==}
+ engines: {node: '>=4.0.0'}
+ hasBin: true
+
+ svgo@2.8.0:
+ resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ svgson@4.1.0:
+ resolution: {integrity: sha512-DodISxHtdLKUghDYA+PGK4Qq350+CbBAkdvGLkBFSmWd9WKSg4dijgjB1IiRPTmsUCd+a7KYe+ILHtklYgQyzQ==}
+
+ synckit@0.11.8:
+ resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ synckit@0.8.5:
+ resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ systemjs@6.15.1:
+ resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==}
+
+ table@6.9.0:
+ resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==}
+ engines: {node: '>=10.0.0'}
+
+ tapable@2.2.2:
+ resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
+ engines: {node: '>=6'}
+
+ terser-webpack-plugin@5.3.14:
+ resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+
+ terser@5.43.1:
+ resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
+ text-extensions@1.9.0:
+ resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
+ engines: {node: '>=0.10'}
+
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+ textextensions@2.6.0:
+ resolution: {integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==}
+ engines: {node: '>=0.8'}
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ thread-stream@0.15.2:
+ resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==}
+
+ throttle-debounce@5.0.2:
+ resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
+ engines: {node: '>=12.22'}
+
+ through2@0.4.2:
+ resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==}
+
+ through2@4.0.2:
+ resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ timers-browserify@2.0.12:
+ resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==}
+ engines: {node: '>=0.6.0'}
+
+ tinyglobby@0.2.14:
+ resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
+ engines: {node: '>=12.0.0'}
+
+ titleize@3.0.0:
+ resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
+ engines: {node: '>=12'}
+
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
+ to-arraybuffer@1.0.1:
+ resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==}
+
+ to-buffer@1.2.1:
+ resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==}
+ engines: {node: '>= 0.4'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toggle-selection@1.0.6:
+ resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ transformation-matrix@2.16.1:
+ resolution: {integrity: sha512-tdtC3wxVEuzU7X/ydL131Q3JU5cPMEn37oqVLITjRDSDsnSHVFzW2JiCLfZLIQEgWzZHdSy3J6bZzvKEN24jGA==}
+
+ traverse@0.6.6:
+ resolution: {integrity: sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==}
+
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ trim-newlines@3.0.1:
+ resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
+ engines: {node: '>=8'}
+
+ trim-right@1.0.1:
+ resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==}
+ engines: {node: '>=0.10.0'}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
+ ts-toolbelt@9.6.0:
+ resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==}
+
+ tsconfig-paths@4.0.0:
+ resolution: {integrity: sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==}
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tsutils@3.21.0:
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+
+ tsx@3.12.2:
+ resolution: {integrity: sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==}
+ hasBin: true
+
+ tty-browserify@0.0.0:
+ resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-fest@0.18.1:
+ resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
+ engines: {node: '>=10'}
+
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+
+ type-fest@0.6.0:
+ resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+ engines: {node: '>=8'}
+
+ type-fest@0.8.1:
+ resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+ engines: {node: '>=8'}
+
+ type-fest@1.4.0:
+ resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
+ engines: {node: '>=10'}
+
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.3:
+ resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.4:
+ resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.7:
+ resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
+ engines: {node: '>= 0.4'}
+
+ types-ramda@0.29.10:
+ resolution: {integrity: sha512-5PJiW/eiTPyXXBYGZOYGezMl6qj7keBiZheRwfjJZY26QPHsNrjfJnz0mru6oeqqoTHOni893Jfd6zyUXfQRWg==}
+
+ typescript-transform-paths@3.4.7:
+ resolution: {integrity: sha512-1Us1kdkdfKd2unbkBAOV2HHRmbRBYpSuk9nJ7cLD2hP4QmfToiM/VpxNlhJc1eezVwVqSKSBjNSzZsK/fWR/9A==}
+ peerDependencies:
+ typescript: '>=3.6.5'
+
+ typescript@5.4.2:
+ resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ umi@4.4.11:
+ resolution: {integrity: sha512-KWPe91DJOyuNurSjzFTbEUypxrFjV0wVEdEXFid6m2IhM2iOepvkfeqk37GpvE9rMoLwo+i/1MIZm2xKhZATbQ==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ unbox-primitive@1.1.0:
+ resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
+ engines: {node: '>= 0.4'}
+
+ undici-types@7.8.0:
+ resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
+
+ unfetch@5.0.0:
+ resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==}
+
+ unified@10.1.2:
+ resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+
+ unist-util-filter@4.0.1:
+ resolution: {integrity: sha512-RynicUM/vbOSTSiUK+BnaK9XMfmQUh6gyi7L6taNgc7FIf84GukXVV3ucGzEN/PhUUkdP5hb1MmXc+3cvPUm5Q==}
+
+ unist-util-generated@2.0.1:
+ resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
+
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
+ unist-util-position@4.0.4:
+ resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+
+ unist-util-stringify-position@3.0.3:
+ resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
+ unist-util-visit@4.1.2:
+ resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
+ universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ unquote@1.1.1:
+ resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==}
+
+ unset-value@0.1.2:
+ resolution: {integrity: sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg==}
+ engines: {node: '>=0.10.0'}
+
+ untildify@4.0.0:
+ resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
+ engines: {node: '>=8'}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ url-okam@0.11.1:
+ resolution: {integrity: sha512-AM6OVeZNwKiirK3IwKxHuopgjX1jB0F8srK9OlCXN+wdmTNg6vgnN9xyQ5abhxq8Oj/kTleLU8OCfZ1FaEW37w==}
+
+ url@0.11.4:
+ resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
+ engines: {node: '>= 0.4'}
+
+ use-debouncy@4.6.0:
+ resolution: {integrity: sha512-5N3n/oQYMuU3QKLXDa9p/xtdPKBcNbGQdLqJJPrkT164IMpHdke5xqoehDZCmgDciy+wJC+iqyE3g8c+k03lGg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ use-isomorphic-layout-effect@1.2.1:
+ resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ use-sync-external-store@1.5.0:
+ resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ util-okam@0.11.1:
+ resolution: {integrity: sha512-e2bG47F03vYx2MbA6znK6t6dwffnXGsVzh8BLpi0pcQ7dDRQf0zSAQ9IR7M+aoozALNibw8eCY53gEK8bBpSjg==}
+
+ util.promisify@1.0.1:
+ resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==}
+
+ util@0.10.3:
+ resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==}
+
+ util@0.10.4:
+ resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
+
+ util@0.11.1:
+ resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==}
+
+ utila@0.4.0:
+ resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ uvu@0.5.6:
+ resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ v8-compile-cache@2.3.0:
+ resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
+
+ v8-compile-cache@2.4.0:
+ resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==}
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ validator@13.15.15:
+ resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==}
+ engines: {node: '>= 0.10'}
+
+ vanilla-jsoneditor@0.16.1:
+ resolution: {integrity: sha512-Wirg6DoCrJpYwMHxkwyvgQ16gr4kgH9zzueHSSSovzQDvlg/XSqpY/stVsI5lz1vqJW1RAtr0Ilyyg1AbokRXA==}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ vfile-location@4.1.0:
+ resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==}
+
+ vfile-message@3.1.4:
+ resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+
+ vfile@5.3.7:
+ resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+
+ vite@4.5.2:
+ resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': '>= 14'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vm-browserify@1.1.2:
+ resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
+
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ watchpack@2.4.4:
+ resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
+ engines: {node: '>=10.13.0'}
+
+ wbuf@1.7.3:
+ resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
+
+ web-namespaces@2.0.1:
+ resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+
+ web-streams-polyfill@3.3.3:
+ resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
+ engines: {node: '>= 8'}
+
+ webpack-5-chain@8.0.1:
+ resolution: {integrity: sha512-Tu1w80WA2Z+X6e7KzGy+cc0A0z+npVJA/fh55q2azMJ030gqz343Kx+yNAstDCeugsepmtDWY2J2IBRW/O+DEA==}
+ engines: {node: '>=10'}
+
+ webpack-sources@3.3.3:
+ resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
+ engines: {node: '>=10.13.0'}
+
+ webpack@5.99.9:
+ resolution: {integrity: sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
+
+ which-builtin-type@1.2.1:
+ resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
+
+ which@1.3.1:
+ resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
+ hasBin: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
+ xml-lexer@0.2.2:
+ resolution: {integrity: sha512-G0i98epIwiUEiKmMcavmVdhtymW+pCAohMRgybyIME9ygfVu8QheIi+YoQh3ngiThsT0SQzJT4R0sKDEv8Ou0w==}
+
+ xml-reader@2.4.3:
+ resolution: {integrity: sha512-xWldrIxjeAMAu6+HSf9t50ot1uL5M+BtOidRCWHXIeewvSeIpscWCsp4Zxjk8kHHhdqFBrfK8U0EJeCcnyQ/gA==}
+
+ xtend@2.1.2:
+ resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==}
+ engines: {node: '>=0.4'}
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+
+ yaml@2.3.1:
+ resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==}
+ engines: {node: '>= 14'}
+
+ yargs-parser@20.2.9:
+ resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+ engines: {node: '>=10'}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ z-schema@5.0.5:
+ resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
+ engines: {node: '>=8.0.0'}
+ hasBin: true
+
+ zod-validation-error@2.1.0:
+ resolution: {integrity: sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ zod: ^3.18.0
+
+ zod@3.25.67:
+ resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==}
+
+ zustand@4.5.7:
+ resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==}
+ engines: {node: '>=12.7.0'}
+ peerDependencies:
+ '@types/react': '>=16.8'
+ immer: '>=9.0.6'
+ react: '>=16.8'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ immer:
+ optional: true
+ react:
+ optional: true
+
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.10
+ '@jridgewell/trace-mapping': 0.3.27
+
+ '@ant-design/colors@6.0.0':
+ dependencies:
+ '@ctrl/tinycolor': 3.6.0
+
+ '@ant-design/colors@7.2.1':
+ dependencies:
+ '@ant-design/fast-color': 2.0.6
+
+ '@ant-design/cssinjs-utils@1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@ant-design/cssinjs': 1.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@babel/runtime': 7.27.6
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@ant-design/cssinjs@1.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.22.3
+ '@emotion/hash': 0.8.0
+ '@emotion/unitless': 0.7.5
+ classnames: 2.3.2
+ csstype: 3.1.3
+ rc-util: 5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ stylis: 4.3.6
+
+ '@ant-design/cssinjs@1.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@emotion/hash': 0.8.0
+ '@emotion/unitless': 0.7.5
+ classnames: 2.5.1
+ csstype: 3.1.3
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ stylis: 4.3.6
+
+ '@ant-design/fast-color@2.0.6':
+ dependencies:
+ '@babel/runtime': 7.27.6
+
+ '@ant-design/icons-svg@4.4.2': {}
+
+ '@ant-design/icons@4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@ant-design/colors': 6.0.0
+ '@ant-design/icons-svg': 4.4.2
+ '@babel/runtime': 7.22.3
+ classnames: 2.3.2
+ lodash: 4.17.21
+ rc-util: 5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@ant-design/icons@5.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@ant-design/colors': 7.2.1
+ '@ant-design/icons-svg': 4.4.2
+ '@babel/runtime': 7.22.3
+ classnames: 2.3.2
+ rc-util: 5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@ant-design/icons@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@ant-design/colors': 7.2.1
+ '@ant-design/icons-svg': 4.4.2
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@ant-design/react-slick@1.1.2(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ json2mq: 0.2.0
+ react: 18.3.1
+ resize-observer-polyfill: 1.5.1
+ throttle-debounce: 5.0.2
+
+ '@antfu/install-pkg@0.1.1':
+ dependencies:
+ execa: 5.1.1
+ find-up: 5.0.0
+
+ '@antfu/utils@0.7.10': {}
+
+ '@arvinxu/layout-kit@1.4.0(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)':
+ dependencies:
+ styled-components: 5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - react
+ - react-dom
+ - react-is
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.27.1
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.27.7': {}
+
+ '@babel/core@7.23.6':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.23.6)
+ '@babel/helpers': 7.27.6
+ '@babel/parser': 7.27.7
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.7(supports-color@5.5.0)
+ '@babel/types': 7.27.7
+ convert-source-map: 2.0.0
+ debug: 4.4.1(supports-color@5.5.0)
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/core@7.27.7':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7)
+ '@babel/helpers': 7.27.6
+ '@babel/parser': 7.27.7
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.7(supports-color@5.5.0)
+ '@babel/types': 7.27.7
+ convert-source-map: 2.0.0
+ debug: 4.4.1(supports-color@5.5.0)
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/eslint-parser@7.23.3(@babel/core@7.23.6)(eslint@8.57.1)':
+ dependencies:
+ '@babel/core': 7.23.6
+ '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
+ eslint: 8.57.1
+ eslint-visitor-keys: 2.1.0
+ semver: 6.3.1
+
+ '@babel/generator@7.2.0':
+ dependencies:
+ '@babel/types': 7.27.7
+ jsesc: 2.5.2
+ lodash: 4.17.21
+ source-map: 0.5.7
+ trim-right: 1.0.1
+
+ '@babel/generator@7.27.5':
+ dependencies:
+ '@babel/parser': 7.27.7
+ '@babel/types': 7.27.7
+ '@jridgewell/gen-mapping': 0.3.10
+ '@jridgewell/trace-mapping': 0.3.27
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ dependencies:
+ '@babel/types': 7.27.7
+
+ '@babel/helper-compilation-targets@7.27.2':
+ dependencies:
+ '@babel/compat-data': 7.27.7
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.25.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-module-imports@7.27.1(supports-color@5.5.0)':
+ dependencies:
+ '@babel/traverse': 7.27.7(supports-color@5.5.0)
+ '@babel/types': 7.27.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.27.3(@babel/core@7.23.6)':
+ dependencies:
+ '@babel/core': 7.23.6
+ '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0)
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.7(supports-color@5.5.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0)
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.7(supports-color@5.5.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.27.1': {}
+
+ '@babel/helper-simple-access@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.27.7(supports-color@5.5.0)
+ '@babel/types': 7.27.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.27.6':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.7
+
+ '@babel/parser@7.27.7':
+ dependencies:
+ '@babel/types': 7.27.7
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-simple-access': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/runtime@7.22.3':
+ dependencies:
+ regenerator-runtime: 0.13.11
+
+ '@babel/runtime@7.23.6':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@babel/runtime@7.27.6': {}
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.27.7
+ '@babel/types': 7.27.7
+
+ '@babel/traverse@7.27.7(supports-color@5.5.0)':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.5
+ '@babel/parser': 7.27.7
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.7
+ debug: 4.4.1(supports-color@5.5.0)
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.27.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+
+ '@bloomberg/record-tuple-polyfill@0.0.4': {}
+
+ '@commitlint/cli@17.8.1(@swc/core@1.9.2(@swc/helpers@0.5.1))':
+ dependencies:
+ '@commitlint/format': 17.8.1
+ '@commitlint/lint': 17.8.1
+ '@commitlint/load': 17.8.1(@swc/core@1.9.2(@swc/helpers@0.5.1))
+ '@commitlint/read': 17.8.1
+ '@commitlint/types': 17.8.1
+ execa: 5.1.1
+ lodash.isfunction: 3.0.9
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+
+ '@commitlint/config-conventional@17.8.1':
+ dependencies:
+ conventional-changelog-conventionalcommits: 6.1.0
+
+ '@commitlint/config-validator@17.8.1':
+ dependencies:
+ '@commitlint/types': 17.8.1
+ ajv: 8.17.1
+
+ '@commitlint/ensure@17.8.1':
+ dependencies:
+ '@commitlint/types': 17.8.1
+ lodash.camelcase: 4.3.0
+ lodash.kebabcase: 4.1.1
+ lodash.snakecase: 4.1.1
+ lodash.startcase: 4.4.0
+ lodash.upperfirst: 4.3.1
+
+ '@commitlint/execute-rule@17.8.1': {}
+
+ '@commitlint/format@17.8.1':
+ dependencies:
+ '@commitlint/types': 17.8.1
+ chalk: 4.1.2
+
+ '@commitlint/is-ignored@17.8.1':
+ dependencies:
+ '@commitlint/types': 17.8.1
+ semver: 7.5.4
+
+ '@commitlint/lint@17.8.1':
+ dependencies:
+ '@commitlint/is-ignored': 17.8.1
+ '@commitlint/parse': 17.8.1
+ '@commitlint/rules': 17.8.1
+ '@commitlint/types': 17.8.1
+
+ '@commitlint/load@17.8.1(@swc/core@1.9.2(@swc/helpers@0.5.1))':
+ dependencies:
+ '@commitlint/config-validator': 17.8.1
+ '@commitlint/execute-rule': 17.8.1
+ '@commitlint/resolve-extends': 17.8.1
+ '@commitlint/types': 17.8.1
+ '@types/node': 20.5.1
+ chalk: 4.1.2
+ cosmiconfig: 8.3.6(typescript@5.4.2)
+ cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.8.3))(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@20.5.1)(typescript@5.8.3))(typescript@5.8.3)
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ lodash.uniq: 4.5.0
+ resolve-from: 5.0.0
+ ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@20.5.1)(typescript@5.4.2)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+
+ '@commitlint/message@17.8.1': {}
+
+ '@commitlint/parse@17.8.1':
+ dependencies:
+ '@commitlint/types': 17.8.1
+ conventional-changelog-angular: 6.0.0
+ conventional-commits-parser: 4.0.0
+
+ '@commitlint/read@17.8.1':
+ dependencies:
+ '@commitlint/top-level': 17.8.1
+ '@commitlint/types': 17.8.1
+ fs-extra: 11.3.0
+ git-raw-commits: 2.0.11
+ minimist: 1.2.8
+
+ '@commitlint/resolve-extends@17.8.1':
+ dependencies:
+ '@commitlint/config-validator': 17.8.1
+ '@commitlint/types': 17.8.1
+ import-fresh: 3.3.1
+ lodash.mergewith: 4.6.2
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+
+ '@commitlint/rules@17.8.1':
+ dependencies:
+ '@commitlint/ensure': 17.8.1
+ '@commitlint/message': 17.8.1
+ '@commitlint/to-lines': 17.8.1
+ '@commitlint/types': 17.8.1
+ execa: 5.1.1
+
+ '@commitlint/to-lines@17.8.1': {}
+
+ '@commitlint/top-level@17.8.1':
+ dependencies:
+ find-up: 5.0.0
+
+ '@commitlint/types@17.8.1':
+ dependencies:
+ chalk: 4.1.2
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@csstools/postcss-color-function@1.1.1(postcss@8.5.6)':
+ dependencies:
+ '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-font-format-keywords@1.0.1(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-hwb-function@1.0.2(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-ic-unit@1.0.1(postcss@8.5.6)':
+ dependencies:
+ '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.5.6)':
+ dependencies:
+ '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2)
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ '@csstools/postcss-normalize-display-values@1.0.1(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-oklab-function@1.1.1(postcss@8.5.6)':
+ dependencies:
+ '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ '@csstools/postcss-unset-value@1.0.2(postcss@8.5.6)':
+ dependencies:
+ postcss: 8.5.6
+
+ '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.2)':
+ dependencies:
+ postcss-selector-parser: 6.1.2
+
+ '@ctrl/tinycolor@3.6.0': {}
+
+ '@emotion/babel-plugin@11.13.5':
+ dependencies:
+ '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0)
+ '@babel/runtime': 7.22.3
+ '@emotion/hash': 0.9.2
+ '@emotion/memoize': 0.9.0
+ '@emotion/serialize': 1.3.3
+ babel-plugin-macros: 3.1.0
+ convert-source-map: 1.9.0
+ escape-string-regexp: 4.0.0
+ find-root: 1.1.0
+ source-map: 0.5.7
+ stylis: 4.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/cache@11.14.0':
+ dependencies:
+ '@emotion/memoize': 0.9.0
+ '@emotion/sheet': 1.4.0
+ '@emotion/utils': 1.4.2
+ '@emotion/weak-memoize': 0.4.0
+ stylis: 4.2.0
+
+ '@emotion/css@11.11.2':
+ dependencies:
+ '@emotion/babel-plugin': 11.13.5
+ '@emotion/cache': 11.14.0
+ '@emotion/serialize': 1.3.3
+ '@emotion/sheet': 1.4.0
+ '@emotion/utils': 1.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/hash@0.8.0': {}
+
+ '@emotion/hash@0.9.2': {}
+
+ '@emotion/is-prop-valid@1.3.1':
+ dependencies:
+ '@emotion/memoize': 0.9.0
+
+ '@emotion/memoize@0.9.0': {}
+
+ '@emotion/react@11.11.0(@types/react@18.3.23)(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.22.3
+ '@emotion/babel-plugin': 11.13.5
+ '@emotion/cache': 11.14.0
+ '@emotion/serialize': 1.3.3
+ '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1)
+ '@emotion/utils': 1.4.2
+ '@emotion/weak-memoize': 0.3.1
+ hoist-non-react-statics: 3.3.2
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.23
+ transitivePeerDependencies:
+ - supports-color
+
+ '@emotion/serialize@1.3.3':
+ dependencies:
+ '@emotion/hash': 0.9.2
+ '@emotion/memoize': 0.9.0
+ '@emotion/unitless': 0.10.0
+ '@emotion/utils': 1.4.2
+ csstype: 3.1.3
+
+ '@emotion/server@11.11.0(@emotion/css@11.11.2)':
+ dependencies:
+ '@emotion/utils': 1.4.2
+ html-tokenize: 2.0.1
+ multipipe: 1.0.2
+ through: 2.3.8
+ optionalDependencies:
+ '@emotion/css': 11.11.2
+
+ '@emotion/sheet@1.4.0': {}
+
+ '@emotion/stylis@0.8.5': {}
+
+ '@emotion/unitless@0.10.0': {}
+
+ '@emotion/unitless@0.7.5': {}
+
+ '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@emotion/utils@1.4.2': {}
+
+ '@emotion/weak-memoize@0.3.1': {}
+
+ '@emotion/weak-memoize@0.4.0': {}
+
+ '@esbuild-kit/cjs-loader@2.4.4':
+ dependencies:
+ '@esbuild-kit/core-utils': 3.3.2
+ get-tsconfig: 4.10.1
+
+ '@esbuild-kit/core-utils@3.3.2':
+ dependencies:
+ esbuild: 0.18.20
+ source-map-support: 0.5.21
+
+ '@esbuild-kit/esm-loader@2.6.5':
+ dependencies:
+ '@esbuild-kit/core-utils': 3.3.2
+ get-tsconfig: 4.10.1
+
+ '@esbuild/aix-ppc64@0.21.4':
+ optional: true
+
+ '@esbuild/android-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/android-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.4':
+ optional: true
+
+ '@esbuild/android-arm@0.17.19':
+ optional: true
+
+ '@esbuild/android-arm@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm@0.21.4':
+ optional: true
+
+ '@esbuild/android-x64@0.17.19':
+ optional: true
+
+ '@esbuild/android-x64@0.18.20':
+ optional: true
+
+ '@esbuild/android-x64@0.21.4':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.4':
+ optional: true
+
+ '@esbuild/darwin-x64@0.17.19':
+ optional: true
+
+ '@esbuild/darwin-x64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.4':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.4':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.17.19':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.4':
+ optional: true
+
+ '@esbuild/linux-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.4':
+ optional: true
+
+ '@esbuild/linux-arm@0.17.19':
+ optional: true
+
+ '@esbuild/linux-arm@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.4':
+ optional: true
+
+ '@esbuild/linux-ia32@0.17.19':
+ optional: true
+
+ '@esbuild/linux-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.4':
+ optional: true
+
+ '@esbuild/linux-loong64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-loong64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.4':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.17.19':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.18.20':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.4':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.4':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.4':
+ optional: true
+
+ '@esbuild/linux-s390x@0.17.19':
+ optional: true
+
+ '@esbuild/linux-s390x@0.18.20':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.4':
+ optional: true
+
+ '@esbuild/linux-x64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-x64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.4':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.17.19':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.4':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.17.19':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.4':
+ optional: true
+
+ '@esbuild/sunos-x64@0.17.19':
+ optional: true
+
+ '@esbuild/sunos-x64@0.18.20':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.4':
+ optional: true
+
+ '@esbuild/win32-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/win32-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.4':
+ optional: true
+
+ '@esbuild/win32-ia32@0.17.19':
+ optional: true
+
+ '@esbuild/win32-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.4':
+ optional: true
+
+ '@esbuild/win32-x64@0.17.19':
+ optional: true
+
+ '@esbuild/win32-x64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.4':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
+ dependencies:
+ eslint: 8.57.1
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/eslintrc@2.1.4':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.1(supports-color@5.5.0)
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@8.57.1': {}
+
+ '@floating-ui/core@0.6.2': {}
+
+ '@floating-ui/dom@0.4.5':
+ dependencies:
+ '@floating-ui/core': 0.6.2
+
+ '@floating-ui/react-dom-interactions@0.3.1(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/react-dom': 0.6.3(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ aria-hidden: 1.2.6
+ point-in-polygon: 1.1.0
+ use-isomorphic-layout-effect: 1.2.1(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - react
+ - react-dom
+
+ '@floating-ui/react-dom@0.6.3(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/dom': 0.4.5
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ use-isomorphic-layout-effect: 1.2.1(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+
+ '@formatjs/ecma402-abstract@2.3.4':
+ dependencies:
+ '@formatjs/fast-memoize': 2.2.7
+ '@formatjs/intl-localematcher': 0.6.1
+ decimal.js: 10.5.0
+ tslib: 2.8.1
+
+ '@formatjs/fast-memoize@2.2.7':
+ dependencies:
+ tslib: 2.8.1
+
+ '@formatjs/icu-messageformat-parser@2.11.2':
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.4
+ '@formatjs/icu-skeleton-parser': 1.8.14
+ tslib: 2.8.1
+
+ '@formatjs/icu-skeleton-parser@1.8.14':
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.4
+ tslib: 2.8.1
+
+ '@formatjs/intl-localematcher@0.6.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@formatjs/intl@3.1.6(typescript@5.4.2)':
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.4
+ '@formatjs/fast-memoize': 2.2.7
+ '@formatjs/icu-messageformat-parser': 2.11.2
+ intl-messageformat: 10.7.16
+ tslib: 2.8.1
+ optionalDependencies:
+ typescript: 5.4.2
+
+ '@humanwhocodes/config-array@0.13.0':
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.3
+ debug: 4.4.1(supports-color@5.5.0)
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/object-schema@2.0.3': {}
+
+ '@iconify/types@2.0.0': {}
+
+ '@iconify/utils@2.1.1':
+ dependencies:
+ '@antfu/install-pkg': 0.1.1
+ '@antfu/utils': 0.7.10
+ '@iconify/types': 2.0.0
+ debug: 4.4.1(supports-color@5.5.0)
+ kolorist: 1.8.0
+ local-pkg: 0.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.1
+ resolve-from: 5.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.27
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@24.9.0':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 1.1.2
+ '@types/yargs': 13.0.12
+
+ '@jest/types@27.5.1':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 24.0.7
+ '@types/yargs': 16.0.9
+ chalk: 4.1.2
+
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 24.0.7
+ '@types/yargs': 17.0.33
+ chalk: 4.1.2
+
+ '@jridgewell/gen-mapping@0.3.10':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.2
+ '@jridgewell/trace-mapping': 0.3.27
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.8':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.10
+ '@jridgewell/trace-mapping': 0.3.27
+
+ '@jridgewell/sourcemap-codec@1.5.2': {}
+
+ '@jridgewell/trace-mapping@0.3.27':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.2
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.2
+
+ '@loadable/component@5.15.2(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.23.6
+ hoist-non-react-statics: 3.3.2
+ react: 18.3.1
+ react-is: 16.13.1
+
+ '@makotot/ghostui@2.0.0(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@microsoft/api-extractor-model@7.28.17(@types/node@20.5.1)':
+ dependencies:
+ '@microsoft/tsdoc': 0.14.2
+ '@microsoft/tsdoc-config': 0.16.2
+ '@rushstack/node-core-library': 4.3.0(@types/node@20.5.1)
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@microsoft/api-extractor@7.43.7(@types/node@20.5.1)':
+ dependencies:
+ '@microsoft/api-extractor-model': 7.28.17(@types/node@20.5.1)
+ '@microsoft/tsdoc': 0.14.2
+ '@microsoft/tsdoc-config': 0.16.2
+ '@rushstack/node-core-library': 4.3.0(@types/node@20.5.1)
+ '@rushstack/rig-package': 0.5.2
+ '@rushstack/terminal': 0.11.0(@types/node@20.5.1)
+ '@rushstack/ts-command-line': 4.21.0(@types/node@20.5.1)
+ lodash: 4.17.21
+ minimatch: 3.0.8
+ resolve: 1.22.10
+ semver: 7.5.4
+ source-map: 0.6.1
+ typescript: 5.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@microsoft/tsdoc-config@0.16.2':
+ dependencies:
+ '@microsoft/tsdoc': 0.14.2
+ ajv: 6.12.6
+ jju: 1.4.0
+ resolve: 1.19.0
+
+ '@microsoft/tsdoc@0.14.2': {}
+
+ '@module-federation/error-codes@0.8.12': {}
+
+ '@module-federation/runtime-core@0.6.20':
+ dependencies:
+ '@module-federation/error-codes': 0.8.12
+ '@module-federation/sdk': 0.8.12
+
+ '@module-federation/runtime@0.8.12':
+ dependencies:
+ '@module-federation/error-codes': 0.8.12
+ '@module-federation/runtime-core': 0.6.20
+ '@module-federation/sdk': 0.8.12
+
+ '@module-federation/sdk@0.8.12':
+ dependencies:
+ isomorphic-rslog: 0.0.7
+
+ '@module-federation/webpack-bundler-runtime@0.8.12':
+ dependencies:
+ '@module-federation/runtime': 0.8.12
+ '@module-federation/sdk': 0.8.12
+
+ '@napi-rs/nice-android-arm-eabi@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-android-arm64@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-darwin-arm64@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-darwin-x64@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-freebsd-x64@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm-gnueabihf@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm64-gnu@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-arm64-musl@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-ppc64-gnu@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-riscv64-gnu@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-s390x-gnu@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-x64-gnu@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-linux-x64-musl@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-win32-arm64-msvc@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-win32-ia32-msvc@1.0.1':
+ optional: true
+
+ '@napi-rs/nice-win32-x64-msvc@1.0.1':
+ optional: true
+
+ '@napi-rs/nice@1.0.1':
+ optionalDependencies:
+ '@napi-rs/nice-android-arm-eabi': 1.0.1
+ '@napi-rs/nice-android-arm64': 1.0.1
+ '@napi-rs/nice-darwin-arm64': 1.0.1
+ '@napi-rs/nice-darwin-x64': 1.0.1
+ '@napi-rs/nice-freebsd-x64': 1.0.1
+ '@napi-rs/nice-linux-arm-gnueabihf': 1.0.1
+ '@napi-rs/nice-linux-arm64-gnu': 1.0.1
+ '@napi-rs/nice-linux-arm64-musl': 1.0.1
+ '@napi-rs/nice-linux-ppc64-gnu': 1.0.1
+ '@napi-rs/nice-linux-riscv64-gnu': 1.0.1
+ '@napi-rs/nice-linux-s390x-gnu': 1.0.1
+ '@napi-rs/nice-linux-x64-gnu': 1.0.1
+ '@napi-rs/nice-linux-x64-musl': 1.0.1
+ '@napi-rs/nice-win32-arm64-msvc': 1.0.1
+ '@napi-rs/nice-win32-ia32-msvc': 1.0.1
+ '@napi-rs/nice-win32-x64-msvc': 1.0.1
+ optional: true
+
+ '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
+ dependencies:
+ eslint-scope: 5.1.1
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@parcel/watcher-android-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher@2.5.1':
+ dependencies:
+ detect-libc: 1.0.3
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ node-addon-api: 7.1.1
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.1
+ '@parcel/watcher-darwin-arm64': 2.5.1
+ '@parcel/watcher-darwin-x64': 2.5.1
+ '@parcel/watcher-freebsd-x64': 2.5.1
+ '@parcel/watcher-linux-arm-glibc': 2.5.1
+ '@parcel/watcher-linux-arm-musl': 2.5.1
+ '@parcel/watcher-linux-arm64-glibc': 2.5.1
+ '@parcel/watcher-linux-arm64-musl': 2.5.1
+ '@parcel/watcher-linux-x64-glibc': 2.5.1
+ '@parcel/watcher-linux-x64-musl': 2.5.1
+ '@parcel/watcher-win32-arm64': 2.5.1
+ '@parcel/watcher-win32-ia32': 2.5.1
+ '@parcel/watcher-win32-x64': 2.5.1
+ optional: true
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@pkgr/core@0.2.7': {}
+
+ '@pkgr/utils@2.4.2':
+ dependencies:
+ cross-spawn: 7.0.6
+ fast-glob: 3.3.3
+ is-glob: 4.0.3
+ open: 9.1.0
+ picocolors: 1.1.1
+ tslib: 2.8.1
+
+ '@rc-component/async-validator@5.0.4':
+ dependencies:
+ '@babel/runtime': 7.27.6
+
+ '@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@ant-design/fast-color': 2.0.6
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@rc-component/context@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@rc-component/mini-decimal@1.1.0':
+ dependencies:
+ '@babel/runtime': 7.27.6
+
+ '@rc-component/mutate-observer@1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@rc-component/portal@1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.22.3
+ classnames: 2.3.2
+ rc-util: 5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@rc-component/qrcode@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@rc-component/tour@1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@rc-component/trigger@1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.3.2
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@rc-component/trigger@2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.3.2
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@reactflow/background@11.3.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@reactflow/core': 11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classcat: 5.0.5
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ zustand: 4.5.7(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ '@reactflow/controls@11.2.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@reactflow/core': 11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classcat: 5.0.5
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ zustand: 4.5.7(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ '@reactflow/core@11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@types/d3': 7.4.3
+ '@types/d3-drag': 3.0.7
+ '@types/d3-selection': 3.0.11
+ '@types/d3-zoom': 3.0.8
+ classcat: 5.0.5
+ d3-drag: 3.0.0
+ d3-selection: 3.0.0
+ d3-zoom: 3.0.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ zustand: 4.5.7(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ '@reactflow/minimap@11.7.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@reactflow/core': 11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@types/d3-selection': 3.0.11
+ '@types/d3-zoom': 3.0.8
+ classcat: 5.0.5
+ d3-selection: 3.0.0
+ d3-zoom: 3.0.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ zustand: 4.5.7(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ '@reactflow/node-resizer@2.2.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@reactflow/core': 11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classcat: 5.0.5
+ d3-drag: 3.0.0
+ d3-selection: 3.0.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ zustand: 4.5.7(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ '@reactflow/node-toolbar@1.3.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@reactflow/core': 11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classcat: 5.0.5
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ zustand: 4.5.7(@types/react@18.3.23)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ '@rushstack/node-core-library@4.3.0(@types/node@20.5.1)':
+ dependencies:
+ fs-extra: 7.0.1
+ import-lazy: 4.0.0
+ jju: 1.4.0
+ resolve: 1.22.10
+ semver: 7.5.4
+ z-schema: 5.0.5
+ optionalDependencies:
+ '@types/node': 20.5.1
+
+ '@rushstack/rig-package@0.5.2':
+ dependencies:
+ resolve: 1.22.10
+ strip-json-comments: 3.1.1
+
+ '@rushstack/terminal@0.11.0(@types/node@20.5.1)':
+ dependencies:
+ '@rushstack/node-core-library': 4.3.0(@types/node@20.5.1)
+ supports-color: 8.1.1
+ optionalDependencies:
+ '@types/node': 20.5.1
+
+ '@rushstack/ts-command-line@4.21.0(@types/node@20.5.1)':
+ dependencies:
+ '@rushstack/terminal': 0.11.0(@types/node@20.5.1)
+ '@types/argparse': 1.0.38
+ argparse: 1.0.10
+ string-argv: 0.3.2
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@selderee/plugin-htmlparser2@0.11.0':
+ dependencies:
+ domhandler: 5.0.3
+ selderee: 0.11.0
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sketch-hq/sketch-file-format-ts@6.5.0': {}
+
+ '@stackblitz/sdk@1.11.0': {}
+
+ '@stylelint/postcss-css-in-js@0.38.0(postcss-syntax@0.36.2(postcss@8.5.6))(postcss@8.5.6)':
+ dependencies:
+ '@babel/core': 7.23.6
+ postcss: 8.5.6
+ postcss-syntax: 0.36.2(postcss@8.5.6)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+
+ '@svgr/babel-preset@6.5.1(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.27.7)
+ '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.27.7)
+ '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.27.7)
+ '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.27.7)
+ '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.27.7)
+ '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.27.7)
+ '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.27.7)
+ '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.27.7)
+
+ '@svgr/core@6.5.1':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@svgr/babel-preset': 6.5.1(@babel/core@7.27.7)
+ '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1)
+ camelcase: 6.3.0
+ cosmiconfig: 7.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@svgr/hast-util-to-babel-ast@6.5.1':
+ dependencies:
+ '@babel/types': 7.27.7
+ entities: 4.5.0
+
+ '@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1)':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@svgr/babel-preset': 6.5.1(@babel/core@7.27.7)
+ '@svgr/core': 6.5.1
+ '@svgr/hast-util-to-babel-ast': 6.5.1
+ svg-parser: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1)':
+ dependencies:
+ '@svgr/core': 6.5.1
+ cosmiconfig: 7.1.0
+ deepmerge: 4.3.1
+ svgo: 2.8.0
+
+ '@swc/core-darwin-arm64@1.9.2':
+ optional: true
+
+ '@swc/core-darwin-x64@1.9.2':
+ optional: true
+
+ '@swc/core-linux-arm-gnueabihf@1.9.2':
+ optional: true
+
+ '@swc/core-linux-arm64-gnu@1.9.2':
+ optional: true
+
+ '@swc/core-linux-arm64-musl@1.9.2':
+ optional: true
+
+ '@swc/core-linux-x64-gnu@1.9.2':
+ optional: true
+
+ '@swc/core-linux-x64-musl@1.9.2':
+ optional: true
+
+ '@swc/core-win32-arm64-msvc@1.9.2':
+ optional: true
+
+ '@swc/core-win32-ia32-msvc@1.9.2':
+ optional: true
+
+ '@swc/core-win32-x64-msvc@1.9.2':
+ optional: true
+
+ '@swc/core@1.9.2(@swc/helpers@0.5.1)':
+ dependencies:
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.23
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.9.2
+ '@swc/core-darwin-x64': 1.9.2
+ '@swc/core-linux-arm-gnueabihf': 1.9.2
+ '@swc/core-linux-arm64-gnu': 1.9.2
+ '@swc/core-linux-arm64-musl': 1.9.2
+ '@swc/core-linux-x64-gnu': 1.9.2
+ '@swc/core-linux-x64-musl': 1.9.2
+ '@swc/core-win32-arm64-msvc': 1.9.2
+ '@swc/core-win32-ia32-msvc': 1.9.2
+ '@swc/core-win32-x64-msvc': 1.9.2
+ '@swc/helpers': 0.5.1
+
+ '@swc/counter@0.1.3': {}
+
+ '@swc/helpers@0.5.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@swc/types@0.1.23':
+ dependencies:
+ '@swc/counter': 0.1.3
+
+ '@trysound/sax@0.2.0': {}
+
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
+ '@types/argparse@1.0.38': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.27.7
+ '@babel/types': 7.27.7
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.20.7
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.27.7
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.27.7
+ '@babel/types': 7.27.7
+
+ '@types/babel__traverse@7.20.7':
+ dependencies:
+ '@babel/types': 7.27.7
+
+ '@types/d3-array@3.2.1': {}
+
+ '@types/d3-axis@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-brush@3.0.6':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-chord@3.0.6': {}
+
+ '@types/d3-color@3.1.3': {}
+
+ '@types/d3-contour@3.0.6':
+ dependencies:
+ '@types/d3-array': 3.2.1
+ '@types/geojson': 7946.0.16
+
+ '@types/d3-delaunay@6.0.4': {}
+
+ '@types/d3-dispatch@3.0.6': {}
+
+ '@types/d3-drag@3.0.7':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-dsv@3.0.7': {}
+
+ '@types/d3-ease@3.0.2': {}
+
+ '@types/d3-fetch@3.0.7':
+ dependencies:
+ '@types/d3-dsv': 3.0.7
+
+ '@types/d3-force@3.0.10': {}
+
+ '@types/d3-format@3.0.4': {}
+
+ '@types/d3-geo@3.1.0':
+ dependencies:
+ '@types/geojson': 7946.0.16
+
+ '@types/d3-hierarchy@3.1.7': {}
+
+ '@types/d3-interpolate@3.0.4':
+ dependencies:
+ '@types/d3-color': 3.1.3
+
+ '@types/d3-path@3.1.1': {}
+
+ '@types/d3-polygon@3.0.2': {}
+
+ '@types/d3-quadtree@3.0.6': {}
+
+ '@types/d3-random@3.0.3': {}
+
+ '@types/d3-scale-chromatic@3.1.0': {}
+
+ '@types/d3-scale@4.0.9':
+ dependencies:
+ '@types/d3-time': 3.0.4
+
+ '@types/d3-selection@3.0.11': {}
+
+ '@types/d3-shape@3.1.7':
+ dependencies:
+ '@types/d3-path': 3.1.1
+
+ '@types/d3-time-format@4.0.3': {}
+
+ '@types/d3-time@3.0.4': {}
+
+ '@types/d3-timer@3.0.2': {}
+
+ '@types/d3-transition@3.0.9':
+ dependencies:
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3-zoom@3.0.8':
+ dependencies:
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-selection': 3.0.11
+
+ '@types/d3@7.4.3':
+ dependencies:
+ '@types/d3-array': 3.2.1
+ '@types/d3-axis': 3.0.6
+ '@types/d3-brush': 3.0.6
+ '@types/d3-chord': 3.0.6
+ '@types/d3-color': 3.1.3
+ '@types/d3-contour': 3.0.6
+ '@types/d3-delaunay': 6.0.4
+ '@types/d3-dispatch': 3.0.6
+ '@types/d3-drag': 3.0.7
+ '@types/d3-dsv': 3.0.7
+ '@types/d3-ease': 3.0.2
+ '@types/d3-fetch': 3.0.7
+ '@types/d3-force': 3.0.10
+ '@types/d3-format': 3.0.4
+ '@types/d3-geo': 3.1.0
+ '@types/d3-hierarchy': 3.1.7
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-path': 3.1.1
+ '@types/d3-polygon': 3.0.2
+ '@types/d3-quadtree': 3.0.6
+ '@types/d3-random': 3.0.3
+ '@types/d3-scale': 4.0.9
+ '@types/d3-scale-chromatic': 3.1.0
+ '@types/d3-selection': 3.0.11
+ '@types/d3-shape': 3.1.7
+ '@types/d3-time': 3.0.4
+ '@types/d3-time-format': 4.0.3
+ '@types/d3-timer': 3.0.2
+ '@types/d3-transition': 3.0.9
+ '@types/d3-zoom': 3.0.8
+
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 2.1.0
+
+ '@types/eslint-scope@3.7.7':
+ dependencies:
+ '@types/eslint': 9.6.1
+ '@types/estree': 1.0.8
+
+ '@types/eslint@9.6.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.8
+
+ '@types/estree@1.0.8': {}
+
+ '@types/fs-extra@11.0.1':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 24.0.7
+
+ '@types/geojson@7946.0.16': {}
+
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 24.0.7
+
+ '@types/hapi__joi@17.1.9': {}
+
+ '@types/hast@2.3.10':
+ dependencies:
+ '@types/unist': 2.0.11
+
+ '@types/hoist-non-react-statics@3.3.6':
+ dependencies:
+ '@types/react': 18.3.23
+ hoist-non-react-statics: 3.3.2
+
+ '@types/html-minifier-terser@6.1.0': {}
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@1.1.2':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 24.0.7
+
+ '@types/mdast@3.0.15':
+ dependencies:
+ '@types/unist': 2.0.11
+
+ '@types/minimist@1.2.5': {}
+
+ '@types/ms@2.1.0': {}
+
+ '@types/node@17.0.45': {}
+
+ '@types/node@20.5.1': {}
+
+ '@types/node@24.0.7':
+ dependencies:
+ undici-types: 7.8.0
+
+ '@types/normalize-package-data@2.4.4': {}
+
+ '@types/parse-json@4.0.2': {}
+
+ '@types/parse5@6.0.3': {}
+
+ '@types/prismjs@1.26.5': {}
+
+ '@types/prop-types@15.7.15': {}
+
+ '@types/q@1.5.8': {}
+
+ '@types/ramda@0.29.3':
+ dependencies:
+ types-ramda: 0.29.10
+
+ '@types/react-dom@18.3.7(@types/react@18.3.23)':
+ dependencies:
+ '@types/react': 18.3.23
+
+ '@types/react@18.3.23':
+ dependencies:
+ '@types/prop-types': 15.7.15
+ csstype: 3.1.3
+
+ '@types/resolve@1.20.6': {}
+
+ '@types/sax@1.2.7':
+ dependencies:
+ '@types/node': 17.0.45
+
+ '@types/semver@7.7.0': {}
+
+ '@types/unist@2.0.11': {}
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@13.0.12':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@types/yargs@16.0.9':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@types/yargs@17.0.33':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.2)
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.4.2)
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.2)
+ debug: 4.4.1(supports-color@5.5.0)
+ eslint: 8.57.1
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare-lite: 1.4.0
+ semver: 7.7.2
+ tsutils: 3.21.0(typescript@5.4.2)
+ optionalDependencies:
+ typescript: 5.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.2)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2)
+ debug: 4.4.1(supports-color@5.5.0)
+ eslint: 8.57.1
+ optionalDependencies:
+ typescript: 5.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@5.62.0':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+
+ '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.4.2)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2)
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.2)
+ debug: 4.4.1(supports-color@5.5.0)
+ eslint: 8.57.1
+ tsutils: 3.21.0(typescript@5.4.2)
+ optionalDependencies:
+ typescript: 5.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@5.62.0': {}
+
+ '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.2)':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ debug: 4.4.1(supports-color@5.5.0)
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.7.2
+ tsutils: 3.21.0(typescript@5.4.2)
+ optionalDependencies:
+ typescript: 5.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.4.2)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.7.0
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2)
+ eslint: 8.57.1
+ eslint-scope: 5.1.1
+ semver: 7.7.2
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/visitor-keys@5.62.0':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ eslint-visitor-keys: 3.4.3
+
+ '@umijs/ast@4.4.11':
+ dependencies:
+ '@umijs/bundler-utils': 4.4.11
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umijs/babel-preset-umi@4.4.11':
+ dependencies:
+ '@babel/runtime': 7.23.6
+ '@bloomberg/record-tuple-polyfill': 0.0.4
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/utils': 4.4.11
+ core-js: 3.34.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umijs/bundler-esbuild@4.4.11':
+ dependencies:
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/utils': 4.4.11
+ enhanced-resolve: 5.9.3
+ postcss: 8.5.6
+ postcss-flexbugs-fixes: 5.0.2(postcss@8.5.6)
+ postcss-preset-env: 7.5.0(postcss@8.5.6)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umijs/bundler-mako@0.11.10(postcss@8.5.6)(sass@1.89.2)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))':
+ dependencies:
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/mako': 0.11.10(postcss@8.5.6)(sass@1.89.2)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ chalk: 4.1.2
+ compression: 1.8.0
+ connect-history-api-fallback: 2.0.0
+ cors: 2.8.5
+ express: 4.21.2
+ express-http-proxy: 2.1.1
+ get-tsconfig: 4.7.5
+ lodash: 4.17.21
+ rimraf: 5.0.1
+ webpack-5-chain: 8.0.1
+ transitivePeerDependencies:
+ - '@rspack/core'
+ - node-sass
+ - postcss
+ - sass
+ - sass-embedded
+ - supports-color
+ - typescript
+ - webpack
+
+ '@umijs/bundler-utils@4.4.11':
+ dependencies:
+ '@umijs/utils': 4.4.11
+ esbuild: 0.21.4
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.1.1
+ spdy: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umijs/bundler-vite@4.4.11(@types/node@20.5.1)(lightningcss@1.22.1)(postcss@8.5.6)(rollup@3.29.5)(sass@1.89.2)(terser@5.43.1)':
+ dependencies:
+ '@svgr/core': 6.5.1
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/utils': 4.4.11
+ '@vitejs/plugin-react': 4.0.0(vite@4.5.2(@types/node@20.5.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.89.2)(terser@5.43.1))
+ core-js: 3.34.0
+ less: 4.1.3
+ postcss-preset-env: 7.5.0(postcss@8.5.6)
+ rollup-plugin-visualizer: 5.9.0(rollup@3.29.5)
+ systemjs: 6.15.1
+ vite: 4.5.2(@types/node@20.5.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.89.2)(terser@5.43.1)
+ transitivePeerDependencies:
+ - '@types/node'
+ - lightningcss
+ - postcss
+ - rollup
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ '@umijs/bundler-webpack@4.4.11(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))':
+ dependencies:
+ '@svgr/core': 6.5.1
+ '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1)
+ '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1)
+ '@types/hapi__joi': 17.1.9
+ '@umijs/babel-preset-umi': 4.4.11
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1
+ '@umijs/mfsu': 4.4.11
+ '@umijs/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(type-fest@1.4.0)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ '@umijs/utils': 4.4.11
+ cors: 2.8.5
+ css-loader: 6.7.1(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ es5-imcompatible-versions: 0.1.90
+ fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ jest-worker: 29.4.3
+ lightningcss: 1.22.1
+ node-libs-browser: 2.2.1
+ postcss: 8.5.6
+ postcss-preset-env: 7.5.0(postcss@8.5.6)
+ react-error-overlay: 6.0.9
+ react-refresh: 0.14.0
+ transitivePeerDependencies:
+ - '@types/webpack'
+ - sockjs-client
+ - supports-color
+ - type-fest
+ - typescript
+ - webpack
+ - webpack-dev-server
+ - webpack-hot-middleware
+ - webpack-plugin-serve
+
+ '@umijs/case-sensitive-paths-webpack-plugin@1.0.1': {}
+
+ '@umijs/core@4.4.11':
+ dependencies:
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/utils': 4.4.11
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umijs/did-you-know@1.0.3': {}
+
+ '@umijs/es-module-parser-darwin-arm64@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-darwin-x64@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-linux-arm-gnueabihf@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-linux-arm64-gnu@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-linux-arm64-musl@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-linux-x64-gnu@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-linux-x64-musl@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-win32-arm64-msvc@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser-win32-x64-msvc@0.0.7':
+ optional: true
+
+ '@umijs/es-module-parser@0.0.7':
+ optionalDependencies:
+ '@umijs/es-module-parser-darwin-arm64': 0.0.7
+ '@umijs/es-module-parser-darwin-x64': 0.0.7
+ '@umijs/es-module-parser-linux-arm-gnueabihf': 0.0.7
+ '@umijs/es-module-parser-linux-arm64-gnu': 0.0.7
+ '@umijs/es-module-parser-linux-arm64-musl': 0.0.7
+ '@umijs/es-module-parser-linux-x64-gnu': 0.0.7
+ '@umijs/es-module-parser-linux-x64-musl': 0.0.7
+ '@umijs/es-module-parser-win32-arm64-msvc': 0.0.7
+ '@umijs/es-module-parser-win32-x64-msvc': 0.0.7
+
+ '@umijs/history@5.3.1':
+ dependencies:
+ '@babel/runtime': 7.23.6
+ query-string: 6.14.1
+
+ '@umijs/lint@4.4.11(eslint@8.57.1)(stylelint@14.16.1)(typescript@5.4.2)':
+ dependencies:
+ '@babel/core': 7.23.6
+ '@babel/eslint-parser': 7.23.3(@babel/core@7.23.6)(eslint@8.57.1)
+ '@stylelint/postcss-css-in-js': 0.38.0(postcss-syntax@0.36.2(postcss@8.5.6))(postcss@8.5.6)
+ '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2)
+ '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.2)
+ '@umijs/babel-preset-umi': 4.4.11
+ eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2)
+ eslint-plugin-react: 7.33.2(eslint@8.57.1)
+ eslint-plugin-react-hooks: 4.6.0(eslint@8.57.1)
+ postcss: 8.5.6
+ postcss-syntax: 0.36.2(postcss@8.5.6)
+ stylelint-config-standard: 25.0.0(stylelint@14.16.1)
+ transitivePeerDependencies:
+ - eslint
+ - jest
+ - postcss-html
+ - postcss-jsx
+ - postcss-less
+ - postcss-markdown
+ - postcss-scss
+ - stylelint
+ - supports-color
+ - typescript
+
+ '@umijs/mako-darwin-arm64@0.11.10':
+ optional: true
+
+ '@umijs/mako-darwin-x64@0.11.10':
+ optional: true
+
+ '@umijs/mako-linux-arm64-gnu@0.11.10':
+ optional: true
+
+ '@umijs/mako-linux-arm64-musl@0.11.10':
+ optional: true
+
+ '@umijs/mako-linux-x64-gnu@0.11.10':
+ optional: true
+
+ '@umijs/mako-linux-x64-musl@0.11.10':
+ optional: true
+
+ '@umijs/mako-win32-ia32-msvc@0.11.10':
+ optional: true
+
+ '@umijs/mako-win32-x64-msvc@0.11.10':
+ optional: true
+
+ '@umijs/mako@0.11.10(postcss@8.5.6)(sass@1.89.2)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))':
+ dependencies:
+ '@module-federation/webpack-bundler-runtime': 0.8.12
+ '@swc/helpers': 0.5.1
+ '@types/resolve': 1.20.6
+ chalk: 4.1.2
+ enhanced-resolve: 5.18.2
+ less: 4.3.0
+ less-loader: 12.3.0(less@4.3.0)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ loader-runner: 4.3.0
+ loader-utils: 3.3.1
+ lodash: 4.17.21
+ node-libs-browser-okam: 2.2.5
+ piscina: 4.9.2
+ postcss-loader: 8.1.1(postcss@8.5.6)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ react-error-overlay: 6.0.9
+ react-refresh: 0.14.2
+ resolve: 1.22.10
+ sass-loader: 16.0.5(sass@1.89.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ semver: 7.7.2
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@umijs/mako-darwin-arm64': 0.11.10
+ '@umijs/mako-darwin-x64': 0.11.10
+ '@umijs/mako-linux-arm64-gnu': 0.11.10
+ '@umijs/mako-linux-arm64-musl': 0.11.10
+ '@umijs/mako-linux-x64-gnu': 0.11.10
+ '@umijs/mako-linux-x64-musl': 0.11.10
+ '@umijs/mako-win32-ia32-msvc': 0.11.10
+ '@umijs/mako-win32-x64-msvc': 0.11.10
+ transitivePeerDependencies:
+ - '@rspack/core'
+ - node-sass
+ - postcss
+ - sass
+ - sass-embedded
+ - typescript
+ - webpack
+
+ '@umijs/mfsu@4.4.11':
+ dependencies:
+ '@umijs/bundler-esbuild': 4.4.11
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/utils': 4.4.11
+ enhanced-resolve: 5.9.3
+ is-equal: 1.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umijs/plugin-run@4.4.11':
+ dependencies:
+ tsx: 3.12.2
+
+ '@umijs/preset-umi@4.4.11(@types/node@20.5.1)(@types/react@18.3.23)(lightningcss@1.22.1)(rollup@3.29.5)(sass@1.89.2)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))':
+ dependencies:
+ '@iconify/utils': 2.1.1
+ '@svgr/core': 6.5.1
+ '@umijs/ast': 4.4.11
+ '@umijs/babel-preset-umi': 4.4.11
+ '@umijs/bundler-esbuild': 4.4.11
+ '@umijs/bundler-mako': 0.11.10(postcss@8.5.6)(sass@1.89.2)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/bundler-vite': 4.4.11(@types/node@20.5.1)(lightningcss@1.22.1)(postcss@8.5.6)(rollup@3.29.5)(sass@1.89.2)(terser@5.43.1)
+ '@umijs/bundler-webpack': 4.4.11(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ '@umijs/core': 4.4.11
+ '@umijs/did-you-know': 1.0.3
+ '@umijs/es-module-parser': 0.0.7
+ '@umijs/history': 5.3.1
+ '@umijs/mfsu': 4.4.11
+ '@umijs/plugin-run': 4.4.11
+ '@umijs/renderer-react': 4.4.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@umijs/server': 4.4.11
+ '@umijs/ui': 3.0.1
+ '@umijs/utils': 4.4.11
+ '@umijs/zod2ts': 4.4.11
+ babel-plugin-dynamic-import-node: 2.3.3
+ babel-plugin-react-compiler: 0.0.0-experimental-c23de8d-20240515
+ click-to-react-component: 1.1.0(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ core-js: 3.34.0
+ current-script-polyfill: 1.0.0
+ enhanced-resolve: 5.9.3
+ fast-glob: 3.2.12
+ html-webpack-plugin: 5.5.0(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ less-plugin-resolve: 1.0.2
+ path-to-regexp: 1.7.0
+ postcss: 8.5.6
+ postcss-prefix-selector: 1.16.0(postcss@8.5.6)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-router: 6.3.0(react@18.3.1)
+ react-router-dom: 6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ regenerator-runtime: 0.13.11
+ transitivePeerDependencies:
+ - '@rspack/core'
+ - '@types/node'
+ - '@types/react'
+ - '@types/webpack'
+ - lightningcss
+ - node-sass
+ - rollup
+ - sass
+ - sass-embedded
+ - sockjs-client
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - type-fest
+ - typescript
+ - webpack
+ - webpack-dev-server
+ - webpack-hot-middleware
+ - webpack-plugin-serve
+
+ '@umijs/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(type-fest@1.4.0)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))':
+ dependencies:
+ ansi-html-community: 0.0.8
+ common-path-prefix: 3.0.0
+ core-js-pure: 3.43.0
+ error-stack-parser: 2.1.4
+ find-up: 5.0.0
+ html-entities: 2.6.0
+ loader-utils: 2.0.4
+ react-refresh: 0.14.0
+ schema-utils: 3.3.0
+ source-map: 0.7.4
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+ optionalDependencies:
+ type-fest: 1.4.0
+
+ '@umijs/renderer-react@4.4.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@babel/runtime': 7.23.6
+ '@loadable/component': 5.15.2(react@18.3.1)
+ history: 5.3.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-router-dom: 6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+
+ '@umijs/server@4.4.11':
+ dependencies:
+ '@umijs/bundler-utils': 4.4.11
+ history: 5.3.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-router-dom: 6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@umijs/test@4.4.11(@babel/core@7.27.7)':
+ dependencies:
+ '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.27.7)
+ '@jest/types': 27.5.1
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/utils': 4.4.11
+ babel-jest: 29.7.0(@babel/core@7.27.7)
+ esbuild: 0.21.4
+ identity-obj-proxy: 3.0.0
+ isomorphic-unfetch: 4.0.2
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
+ '@umijs/ui@3.0.1': {}
+
+ '@umijs/utils@4.4.11':
+ dependencies:
+ chokidar: 3.5.3
+ pino: 7.11.0
+
+ '@umijs/zod2ts@4.4.11': {}
+
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@vercel/ncc@0.33.3': {}
+
+ '@vitejs/plugin-react@4.0.0(vite@4.5.2(@types/node@20.5.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.89.2)(terser@5.43.1))':
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.7)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.7)
+ react-refresh: 0.14.2
+ vite: 4.5.2(@types/node@20.5.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.89.2)(terser@5.43.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@webassemblyjs/ast@1.14.1':
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
+
+ '@webassemblyjs/helper-api-error@1.13.2': {}
+
+ '@webassemblyjs/helper-buffer@1.14.1': {}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.13.2
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/wasm-gen': 1.14.1
+
+ '@webassemblyjs/ieee754@1.13.2':
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ '@webassemblyjs/leb128@1.13.2':
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/utf8@1.13.2': {}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/helper-wasm-section': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-opt': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ '@webassemblyjs/wast-printer': 1.14.1
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@xtuc/long': 4.2.2
+
+ '@xtuc/ieee754@1.2.0': {}
+
+ '@xtuc/long@4.2.2': {}
+
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
+ acorn@8.15.0: {}
+
+ ajv-formats@2.1.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv-keywords@3.5.2(ajv@6.12.6):
+ dependencies:
+ ajv: 6.12.6
+
+ ajv-keywords@5.1.0(ajv@8.17.1):
+ dependencies:
+ ajv: 8.17.1
+ fast-deep-equal: 3.1.3
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.0.6
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ animated-scroll-to@2.3.2: {}
+
+ ansi-escapes@5.0.0:
+ dependencies:
+ type-fest: 1.4.0
+
+ ansi-html-community@0.0.8: {}
+
+ ansi-regex@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ antd-token-previewer@2.0.0-alpha.6(@babel/core@7.27.7)(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1):
+ dependencies:
+ '@ant-design/colors': 6.0.0
+ '@ant-design/cssinjs': 1.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@ant-design/icons': 4.8.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@arvinxu/layout-kit': 1.4.0(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ '@babel/runtime': 7.22.3
+ '@ctrl/tinycolor': 3.6.0
+ antd: 5.26.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.3.2
+ rc-util: 5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-dom: 18.3.1(react@18.3.1)
+ reactflow: 11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ use-debouncy: 4.6.0(react@18.3.1)
+ vanilla-jsoneditor: 0.16.1
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@types/react'
+ - date-fns
+ - immer
+ - luxon
+ - moment
+ - react-is
+
+ antd@5.26.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@ant-design/colors': 7.2.1
+ '@ant-design/cssinjs': 1.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@ant-design/cssinjs-utils': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@ant-design/fast-color': 2.0.6
+ '@ant-design/icons': 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@ant-design/react-slick': 1.1.2(react@18.3.1)
+ '@babel/runtime': 7.27.6
+ '@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@rc-component/tour': 1.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ copy-to-clipboard: 3.3.3
+ dayjs: 1.11.13
+ rc-cascader: 3.34.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-checkbox: 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-collapse: 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-drawer: 7.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-dropdown: 4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-field-form: 2.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-image: 7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-input: 1.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-input-number: 9.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-mentions: 2.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-menu: 9.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-notification: 5.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-pagination: 5.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-picker: 4.11.3(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-rate: 2.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-segmented: 2.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-select: 14.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-slider: 11.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-steps: 6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-switch: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-table: 7.51.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tabs: 15.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-textarea: 1.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tooltip: 6.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tree: 5.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tree-select: 5.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-upload: 4.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ scroll-into-view-if-needed: 3.1.0
+ throttle-debounce: 5.0.2
+ transitivePeerDependencies:
+ - date-fns
+ - luxon
+ - moment
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@4.1.3: {}
+
+ arg@5.0.2: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ aria-hidden@1.2.6:
+ dependencies:
+ tslib: 2.8.1
+
+ array-buffer-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ is-array-buffer: 3.0.5
+
+ array-flatten@1.1.1: {}
+
+ array-ify@1.0.0: {}
+
+ array-includes@3.1.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ is-string: 1.1.1
+ math-intrinsics: 1.1.0
+
+ array-union@2.1.0: {}
+
+ array.prototype.flat@1.3.3:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-shim-unscopables: 1.1.0
+
+ array.prototype.flatmap@1.3.3:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-shim-unscopables: 1.1.0
+
+ array.prototype.reduce@1.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-array-method-boxes-properly: 1.0.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ is-string: 1.1.1
+
+ array.prototype.tosorted@1.1.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-shim-unscopables: 1.1.0
+
+ arraybuffer.prototype.slice@1.0.4:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ is-array-buffer: 3.0.5
+
+ arrify@1.0.1: {}
+
+ asn1.js@4.10.1:
+ dependencies:
+ bn.js: 4.12.2
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ assert-okam@1.5.0:
+ dependencies:
+ object-assign: 4.1.1
+ util: 0.10.3
+
+ assert@1.5.1:
+ dependencies:
+ object.assign: 4.1.7
+ util: 0.10.4
+
+ astral-regex@2.0.0: {}
+
+ astring@1.9.0: {}
+
+ async-function@1.0.0: {}
+
+ atob@2.1.2: {}
+
+ atomic-sleep@1.0.0: {}
+
+ autoprefixer@10.4.21(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.1
+ caniuse-lite: 1.0.30001726
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ babel-jest@29.7.0(@babel/core@7.27.7):
+ dependencies:
+ '@babel/core': 7.27.7
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.27.7)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-dynamic-import-node@2.3.3:
+ dependencies:
+ object.assign: 4.1.7
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.27.1
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.7
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.20.7
+
+ babel-plugin-macros@3.1.0:
+ dependencies:
+ '@babel/runtime': 7.22.3
+ cosmiconfig: 7.1.0
+ resolve: 1.22.10
+
+ babel-plugin-module-resolver@4.1.0:
+ dependencies:
+ find-babel-config: 1.2.2
+ glob: 7.2.3
+ pkg-up: 3.1.0
+ reselect: 4.1.8
+ resolve: 1.22.10
+
+ babel-plugin-react-compiler@0.0.0-experimental-c23de8d-20240515:
+ dependencies:
+ '@babel/generator': 7.2.0
+ '@babel/types': 7.27.7
+ chalk: 4.1.2
+ invariant: 2.2.4
+ pretty-format: 24.9.0
+ zod: 3.25.67
+ zod-validation-error: 2.1.0(zod@3.25.67)
+
+ babel-plugin-styled-components@2.1.4(@babel/core@7.27.7)(styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0):
+ dependencies:
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0)
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7)
+ lodash: 4.17.21
+ picomatch: 2.3.1
+ styled-components: 5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
+ babel-plugin-transform-define@2.0.1:
+ dependencies:
+ lodash: 4.17.21
+ traverse: 0.6.6
+
+ babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.7):
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.7)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.7)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.7)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.7)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.7)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.7)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.7)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.7)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.7)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.7)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.7)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.7)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.7)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.7)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.7)
+
+ babel-preset-jest@29.6.3(@babel/core@7.27.7):
+ dependencies:
+ '@babel/core': 7.27.7
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.7)
+
+ bail@2.0.2: {}
+
+ balanced-match@1.0.2: {}
+
+ balanced-match@2.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ big-integer@1.6.52: {}
+
+ big.js@5.2.2: {}
+
+ binary-extensions@2.3.0: {}
+
+ binaryextensions@2.3.0: {}
+
+ bn.js@4.12.2: {}
+
+ bn.js@5.2.2: {}
+
+ body-parser@1.20.3:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.13.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ boolbase@1.0.0: {}
+
+ bplist-parser@0.2.0:
+ dependencies:
+ big-integer: 1.6.52
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ brorand@1.1.0: {}
+
+ browserify-aes@1.2.0:
+ dependencies:
+ buffer-xor: 1.0.3
+ cipher-base: 1.0.6
+ create-hash: 1.2.0
+ evp_bytestokey: 1.0.3
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ browserify-cipher@1.0.1:
+ dependencies:
+ browserify-aes: 1.2.0
+ browserify-des: 1.0.2
+ evp_bytestokey: 1.0.3
+
+ browserify-des@1.0.2:
+ dependencies:
+ cipher-base: 1.0.6
+ des.js: 1.1.0
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ browserify-rsa@4.1.1:
+ dependencies:
+ bn.js: 5.2.2
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+
+ browserify-sign@4.2.3:
+ dependencies:
+ bn.js: 5.2.2
+ browserify-rsa: 4.1.1
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ elliptic: 6.6.1
+ hash-base: 3.0.5
+ inherits: 2.0.4
+ parse-asn1: 5.1.7
+ readable-stream: 2.3.8
+ safe-buffer: 5.2.1
+
+ browserify-zlib@0.2.0:
+ dependencies:
+ pako: 1.0.11
+
+ browserslist@4.25.1:
+ dependencies:
+ caniuse-lite: 1.0.30001726
+ electron-to-chromium: 1.5.177
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.3(browserslist@4.25.1)
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-from@0.1.2: {}
+
+ buffer-from@1.1.2: {}
+
+ buffer-okam@4.9.2:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ isarray: 1.0.0
+
+ buffer-xor@1.0.3: {}
+
+ buffer@4.9.2:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ isarray: 1.0.0
+
+ builtin-status-codes@3.0.0: {}
+
+ bundle-name@3.0.0:
+ dependencies:
+ run-applescript: 5.0.0
+
+ bytes@3.1.2: {}
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ camel-case@4.1.2:
+ dependencies:
+ pascal-case: 3.1.2
+ tslib: 2.8.1
+
+ camelcase-keys@6.2.2:
+ dependencies:
+ camelcase: 5.3.1
+ map-obj: 4.3.0
+ quick-lru: 4.0.1
+
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ camelize@1.0.1: {}
+
+ caniuse-lite@1.0.30001726: {}
+
+ ccount@2.0.1: {}
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ character-entities-html4@2.1.0: {}
+
+ character-entities-legacy@3.0.0: {}
+
+ character-entities@2.0.2: {}
+
+ character-reference-invalid@2.0.1: {}
+
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ chrome-trace-event@1.0.4: {}
+
+ ci-info@3.9.0: {}
+
+ cipher-base@1.0.6:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ classcat@5.0.5: {}
+
+ classnames@2.3.2: {}
+
+ classnames@2.5.1: {}
+
+ clean-css@5.3.3:
+ dependencies:
+ source-map: 0.6.1
+
+ cli-cursor@4.0.0:
+ dependencies:
+ restore-cursor: 4.0.0
+
+ cli-truncate@3.1.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 5.1.2
+
+ click-to-react-component@1.1.0(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@floating-ui/react-dom-interactions': 0.3.1(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ htm: 3.1.1
+ react: 18.3.1
+ react-merge-refs: 1.1.0
+ transitivePeerDependencies:
+ - '@types/react'
+ - react-dom
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clsx@2.1.1: {}
+
+ coa@2.0.2:
+ dependencies:
+ '@types/q': 1.5.8
+ chalk: 2.4.2
+ q: 1.5.1
+
+ codesandbox-import-util-types@2.2.3: {}
+
+ codesandbox-import-utils@2.2.3:
+ dependencies:
+ codesandbox-import-util-types: 2.2.3
+ istextorbinary: 2.6.0
+ lz-string: 1.5.0
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.2
+
+ color@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+ color-string: 1.9.1
+
+ colord@2.9.3: {}
+
+ colorette@2.0.20: {}
+
+ comlink@4.4.2: {}
+
+ comma-separated-tokens@2.0.3: {}
+
+ commander@11.0.0: {}
+
+ commander@2.20.3: {}
+
+ commander@4.1.1: {}
+
+ commander@7.2.0: {}
+
+ commander@8.3.0: {}
+
+ commander@9.5.0:
+ optional: true
+
+ common-path-prefix@3.0.0: {}
+
+ compare-func@2.0.0:
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+
+ compressible@2.0.18:
+ dependencies:
+ mime-db: 1.54.0
+
+ compression@1.8.0:
+ dependencies:
+ bytes: 3.1.2
+ compressible: 2.0.18
+ debug: 2.6.9
+ negotiator: 0.6.4
+ on-headers: 1.0.2
+ safe-buffer: 5.2.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ compute-scroll-into-view@3.1.1: {}
+
+ concat-map@0.0.1: {}
+
+ connect-history-api-fallback@2.0.0: {}
+
+ console-browserify@1.2.0: {}
+
+ constants-browserify@1.0.0: {}
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
+ conventional-changelog-angular@6.0.0:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-changelog-conventionalcommits@6.1.0:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-commits-parser@4.0.0:
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 1.0.1
+ meow: 8.1.2
+ split2: 3.2.2
+
+ convert-source-map@1.9.0: {}
+
+ convert-source-map@2.0.0: {}
+
+ cookie-signature@1.0.6: {}
+
+ cookie@0.7.1: {}
+
+ copy-anything@2.0.6:
+ dependencies:
+ is-what: 3.14.1
+
+ copy-to-clipboard@3.3.3:
+ dependencies:
+ toggle-selection: 1.0.6
+
+ core-js-pure@3.43.0: {}
+
+ core-js@3.34.0: {}
+
+ core-util-is@1.0.3: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.8.3))(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@20.5.1)(typescript@5.8.3))(typescript@5.8.3):
+ dependencies:
+ '@types/node': 20.5.1
+ cosmiconfig: 8.3.6(typescript@5.4.2)
+ ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@20.5.1)(typescript@5.4.2)
+ typescript: 5.8.3
+
+ cosmiconfig@7.1.0:
+ dependencies:
+ '@types/parse-json': 4.0.2
+ import-fresh: 3.3.1
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
+
+ cosmiconfig@8.3.6(typescript@5.4.2):
+ dependencies:
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ optionalDependencies:
+ typescript: 5.4.2
+
+ cosmiconfig@9.0.0(typescript@5.4.2):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 5.4.2
+
+ create-ecdh@4.0.4:
+ dependencies:
+ bn.js: 4.12.2
+ elliptic: 6.6.1
+
+ create-hash@1.1.3:
+ dependencies:
+ cipher-base: 1.0.6
+ inherits: 2.0.4
+ ripemd160: 2.0.1
+ sha.js: 2.4.11
+
+ create-hash@1.2.0:
+ dependencies:
+ cipher-base: 1.0.6
+ inherits: 2.0.4
+ md5.js: 1.3.5
+ ripemd160: 2.0.2
+ sha.js: 2.4.11
+
+ create-hmac@1.1.7:
+ dependencies:
+ cipher-base: 1.0.6
+ create-hash: 1.2.0
+ inherits: 2.0.4
+ ripemd160: 2.0.2
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+
+ create-require@1.1.1: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crypto-browserify@3.12.1:
+ dependencies:
+ browserify-cipher: 1.0.1
+ browserify-sign: 4.2.3
+ create-ecdh: 4.0.4
+ create-hash: 1.2.0
+ create-hmac: 1.1.7
+ diffie-hellman: 5.0.3
+ hash-base: 3.0.5
+ inherits: 2.0.4
+ pbkdf2: 3.1.3
+ public-encrypt: 4.0.3
+ randombytes: 2.1.0
+ randomfill: 1.0.4
+
+ css-blank-pseudo@3.0.3(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ css-color-keywords@1.0.0: {}
+
+ css-functions-list@3.2.3: {}
+
+ css-has-pseudo@3.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ css-loader@6.7.1(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
+ postcss-modules-local-by-default: 4.2.0(postcss@8.5.6)
+ postcss-modules-scope: 3.2.1(postcss@8.5.6)
+ postcss-modules-values: 4.0.0(postcss@8.5.6)
+ postcss-value-parser: 4.2.0
+ semver: 7.7.2
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+
+ css-prefers-color-scheme@6.0.3(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ css-select-base-adapter@0.1.1: {}
+
+ css-select@2.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 3.4.2
+ domutils: 1.7.0
+ nth-check: 1.0.2
+
+ css-select@4.3.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ nth-check: 2.1.1
+
+ css-to-react-native@3.2.0:
+ dependencies:
+ camelize: 1.0.1
+ css-color-keywords: 1.0.0
+ postcss-value-parser: 4.2.0
+
+ css-tree@1.0.0-alpha.37:
+ dependencies:
+ mdn-data: 2.0.4
+ source-map: 0.6.1
+
+ css-tree@1.1.3:
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+
+ css-what@3.4.2: {}
+
+ css-what@6.2.2: {}
+
+ css@3.0.0:
+ dependencies:
+ inherits: 2.0.4
+ source-map: 0.6.1
+ source-map-resolve: 0.6.0
+
+ cssdb@6.6.3: {}
+
+ cssesc@3.0.0: {}
+
+ csso@4.2.0:
+ dependencies:
+ css-tree: 1.1.3
+
+ csstype@3.1.3: {}
+
+ current-script-polyfill@1.0.0: {}
+
+ d3-color@3.1.0: {}
+
+ d3-dispatch@3.0.1: {}
+
+ d3-drag@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-selection: 3.0.0
+
+ d3-ease@3.0.1: {}
+
+ d3-interpolate@3.0.1:
+ dependencies:
+ d3-color: 3.1.0
+
+ d3-selection@3.0.0: {}
+
+ d3-timer@3.0.1: {}
+
+ d3-transition@3.0.1(d3-selection@3.0.0):
+ dependencies:
+ d3-color: 3.1.0
+ d3-dispatch: 3.0.1
+ d3-ease: 3.0.1
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-timer: 3.0.1
+
+ d3-zoom@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+
+ dargs@7.0.0: {}
+
+ data-uri-to-buffer@4.0.1: {}
+
+ data-view-buffer@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-offset@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ dayjs@1.11.13: {}
+
+ dayjs@1.11.7: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@3.2.7:
+ dependencies:
+ ms: 2.1.3
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ debug@4.4.1(supports-color@5.5.0):
+ dependencies:
+ ms: 2.1.3
+ optionalDependencies:
+ supports-color: 5.5.0
+
+ decamelize-keys@1.1.1:
+ dependencies:
+ decamelize: 1.2.0
+ map-obj: 1.0.1
+
+ decamelize@1.2.0: {}
+
+ decimal.js@10.5.0: {}
+
+ decode-named-character-reference@1.2.0:
+ dependencies:
+ character-entities: 2.0.2
+
+ decode-uri-component@0.2.2: {}
+
+ deep-is@0.1.4: {}
+
+ deep-rename-keys@0.2.1:
+ dependencies:
+ kind-of: 3.2.2
+ rename-keys: 1.2.0
+
+ deepmerge@1.5.2: {}
+
+ deepmerge@4.3.1: {}
+
+ default-browser-id@3.0.0:
+ dependencies:
+ bplist-parser: 0.2.0
+ untildify: 4.0.0
+
+ default-browser@4.0.0:
+ dependencies:
+ bundle-name: 3.0.0
+ default-browser-id: 3.0.0
+ execa: 7.2.0
+ titleize: 3.0.0
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-lazy-prop@2.0.0: {}
+
+ define-lazy-prop@3.0.0: {}
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ depd@2.0.0: {}
+
+ dequal@2.0.3: {}
+
+ des.js@1.1.0:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ destroy@1.2.0: {}
+
+ detect-indent@7.0.1: {}
+
+ detect-libc@1.0.3: {}
+
+ detect-newline@4.0.1: {}
+
+ detect-node@2.1.0: {}
+
+ diff@4.0.2: {}
+
+ diff@5.2.0: {}
+
+ diffie-hellman@5.0.3:
+ dependencies:
+ bn.js: 4.12.2
+ miller-rabin: 4.0.1
+ randombytes: 2.1.0
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ doctrine@2.1.0:
+ dependencies:
+ esutils: 2.0.3
+
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dom-converter@0.2.0:
+ dependencies:
+ utila: 0.4.0
+
+ dom-serializer@0.2.2:
+ dependencies:
+ domelementtype: 2.3.0
+ entities: 2.2.0
+
+ dom-serializer@1.4.1:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ entities: 2.2.0
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domain-browser@1.2.0: {}
+
+ domelementtype@1.3.1: {}
+
+ domelementtype@2.3.0: {}
+
+ domhandler@4.3.1:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@1.7.0:
+ dependencies:
+ dom-serializer: 0.2.2
+ domelementtype: 1.3.1
+
+ domutils@2.8.0:
+ dependencies:
+ dom-serializer: 1.4.1
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dot-case@3.0.4:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.8.1
+
+ dot-prop@5.3.0:
+ dependencies:
+ is-obj: 2.0.0
+
+ dumi-afx-deps@1.0.0-alpha.20: {}
+
+ dumi-assets-types@2.4.14: {}
+
+ dumi-theme-antd@0.4.4(@babel/core@7.27.7)(@types/react@18.3.23)(antd@5.26.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(dumi@2.4.21(@babel/core@7.27.7)(@swc/helpers@0.5.1)(@types/node@20.5.1)(@types/react@18.3.23)(eslint@8.57.1)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1):
+ dependencies:
+ '@ant-design/cssinjs': 1.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@ant-design/icons': 5.3.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@babel/runtime': 7.22.3
+ '@ctrl/tinycolor': 3.6.0
+ '@emotion/css': 11.11.2
+ '@emotion/react': 11.11.0(@types/react@18.3.23)(react@18.3.1)
+ '@emotion/server': 11.11.0(@emotion/css@11.11.2)
+ antd: 5.26.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ antd-token-previewer: 2.0.0-alpha.6(@babel/core@7.27.7)(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)
+ classnames: 2.3.2
+ dayjs: 1.11.7
+ dumi: 2.4.21(@babel/core@7.27.7)(@swc/helpers@0.5.1)(@types/node@20.5.1)(@types/react@18.3.23)(eslint@8.57.1)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ lodash.clonedeep: 4.5.0
+ prism-react-renderer: 2.3.1(react@18.3.1)
+ rc-drawer: 6.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-footer: 0.6.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-intersection-observer: 9.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@types/react'
+ - date-fns
+ - immer
+ - luxon
+ - moment
+ - react-is
+ - supports-color
+
+ dumi@2.4.21(@babel/core@7.27.7)(@swc/helpers@0.5.1)(@types/node@20.5.1)(@types/react@18.3.23)(eslint@8.57.1)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ '@ant-design/icons-svg': 4.4.2
+ '@makotot/ghostui': 2.0.0(react@18.3.1)
+ '@stackblitz/sdk': 1.11.0
+ '@swc/core': 1.9.2(@swc/helpers@0.5.1)
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/core': 4.4.11
+ '@umijs/utils': 4.4.11
+ animated-scroll-to: 2.3.2
+ classnames: 2.3.2
+ codesandbox-import-utils: 2.2.3
+ comlink: 4.4.2
+ copy-to-clipboard: 3.3.3
+ deepmerge: 4.3.1
+ dumi-afx-deps: 1.0.0-alpha.20
+ dumi-assets-types: 2.4.14
+ enhanced-resolve: 5.18.2
+ estree-util-to-js: 1.2.0
+ estree-util-visit: 1.2.1
+ file-system-cache: 2.4.4
+ github-slugger: 1.5.0
+ hast-util-is-element: 2.1.3
+ hast-util-raw: 8.0.0
+ hast-util-to-estree: 2.3.3
+ hast-util-to-string: 2.0.0
+ heti: 0.9.5
+ hosted-git-info: 6.1.3
+ html-to-text: 9.0.5
+ html2sketch: 1.0.2
+ js-yaml: 4.1.0
+ lodash.throttle: 4.1.1
+ mdast-util-find-and-replace: 2.2.2
+ mdast-util-to-string: 3.2.0
+ nprogress: 0.2.0
+ pluralize: 8.0.0
+ prism-react-renderer: 1.3.5(react@18.3.1)
+ prism-themes: 1.9.0
+ prismjs: 1.30.0
+ raw-loader: 4.0.2(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tabs: 12.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tooltip: 6.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tree: 5.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-copy-to-clipboard: 5.1.0(react@18.3.1)
+ react-dom: 18.3.1(react@18.3.1)
+ react-error-boundary: 4.1.2(react@18.3.1)
+ react-intl: 7.1.11(react@18.3.1)(typescript@5.4.2)
+ react-loading-skeleton: 3.5.0(react@18.3.1)
+ react-simple-code-editor: 0.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rehype-autolink-headings: 6.1.1
+ rehype-remove-comments: 5.0.0
+ rehype-stringify: 9.0.4
+ remark-directive: 2.0.1
+ remark-frontmatter: 4.0.1
+ remark-gfm: 3.0.1
+ remark-parse: 10.0.2
+ remark-rehype: 10.1.0
+ sass: 1.89.2
+ sitemap: 7.1.2
+ sucrase: 3.35.0
+ umi: 4.4.11(@babel/core@7.27.7)(@types/node@20.5.1)(@types/react@18.3.23)(eslint@8.57.1)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(sass@1.89.2)(stylelint@14.16.1)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ unified: 10.1.2
+ unist-util-visit: 4.1.2
+ unist-util-visit-parents: 5.1.3
+ url: 0.11.4
+ v8-compile-cache: 2.3.0
+ vfile: 5.3.7
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@rspack/core'
+ - '@swc/helpers'
+ - '@types/node'
+ - '@types/react'
+ - '@types/webpack'
+ - '@volar/vue-language-plugin-pug'
+ - '@volar/vue-typescript'
+ - eslint
+ - jest
+ - lightningcss
+ - node-sass
+ - postcss-html
+ - postcss-jsx
+ - postcss-less
+ - postcss-markdown
+ - postcss-scss
+ - prettier
+ - rollup
+ - sass-embedded
+ - sockjs-client
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - type-fest
+ - typescript
+ - webpack
+ - webpack-dev-server
+ - webpack-hot-middleware
+ - webpack-plugin-serve
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ duplexer2@0.1.4:
+ dependencies:
+ readable-stream: 2.3.8
+
+ duplexify@4.1.3:
+ dependencies:
+ end-of-stream: 1.4.5
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ stream-shift: 1.0.3
+
+ eastasianwidth@0.2.0: {}
+
+ editions@2.3.1:
+ dependencies:
+ errlop: 2.2.0
+ semver: 6.3.1
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.177: {}
+
+ elliptic@6.6.1:
+ dependencies:
+ bn.js: 4.12.2
+ brorand: 1.1.0
+ hash.js: 1.1.7
+ hmac-drbg: 1.0.1
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ emojis-list@3.0.0: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ enhanced-resolve@5.18.2:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.2
+
+ enhanced-resolve@5.9.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.2
+
+ entities@2.2.0: {}
+
+ entities@4.5.0: {}
+
+ entities@6.0.1: {}
+
+ env-paths@2.2.1: {}
+
+ errlop@2.2.0: {}
+
+ errno@0.1.8:
+ dependencies:
+ prr: 1.0.1
+ optional: true
+
+ error-ex@1.3.2:
+ dependencies:
+ is-arrayish: 0.2.1
+
+ error-stack-parser@2.1.4:
+ dependencies:
+ stackframe: 1.3.4
+
+ es-abstract@1.24.0:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ arraybuffer.prototype.slice: 1.0.4
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ data-view-buffer: 1.0.2
+ data-view-byte-length: 1.0.2
+ data-view-byte-offset: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-set-tostringtag: 2.1.0
+ es-to-primitive: 1.3.0
+ function.prototype.name: 1.1.8
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ get-symbol-description: 1.1.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ internal-slot: 1.1.0
+ is-array-buffer: 3.0.5
+ is-callable: 1.2.7
+ is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
+ is-regex: 1.2.1
+ is-set: 2.0.3
+ is-shared-array-buffer: 1.0.4
+ is-string: 1.1.1
+ is-typed-array: 1.1.15
+ is-weakref: 1.1.1
+ math-intrinsics: 1.1.0
+ object-inspect: 1.13.4
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ own-keys: 1.0.1
+ regexp.prototype.flags: 1.5.4
+ safe-array-concat: 1.1.3
+ safe-push-apply: 1.0.0
+ safe-regex-test: 1.1.0
+ set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
+ string.prototype.trim: 1.2.10
+ string.prototype.trimend: 1.0.9
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.3
+ typed-array-byte-length: 1.0.3
+ typed-array-byte-offset: 1.0.4
+ typed-array-length: 1.0.7
+ unbox-primitive: 1.1.0
+ which-typed-array: 1.1.19
+
+ es-array-method-boxes-properly@1.0.0: {}
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-get-iterator@1.1.3:
+ dependencies:
+ call-bind: 1.0.8
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ is-arguments: 1.2.0
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-string: 1.1.1
+ isarray: 2.0.5
+ stop-iteration-iterator: 1.1.0
+
+ es-iterator-helpers@1.2.1:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-set-tostringtag: 2.1.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ internal-slot: 1.1.0
+ iterator.prototype: 1.1.5
+ safe-array-concat: 1.1.3
+
+ es-module-lexer@1.7.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-shim-unscopables@1.1.0:
+ dependencies:
+ hasown: 2.0.2
+
+ es-to-primitive@1.3.0:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-symbol: 1.1.1
+
+ es5-imcompatible-versions@0.1.90: {}
+
+ es6-promise@4.2.8: {}
+
+ esbuild@0.17.19:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.17.19
+ '@esbuild/android-arm64': 0.17.19
+ '@esbuild/android-x64': 0.17.19
+ '@esbuild/darwin-arm64': 0.17.19
+ '@esbuild/darwin-x64': 0.17.19
+ '@esbuild/freebsd-arm64': 0.17.19
+ '@esbuild/freebsd-x64': 0.17.19
+ '@esbuild/linux-arm': 0.17.19
+ '@esbuild/linux-arm64': 0.17.19
+ '@esbuild/linux-ia32': 0.17.19
+ '@esbuild/linux-loong64': 0.17.19
+ '@esbuild/linux-mips64el': 0.17.19
+ '@esbuild/linux-ppc64': 0.17.19
+ '@esbuild/linux-riscv64': 0.17.19
+ '@esbuild/linux-s390x': 0.17.19
+ '@esbuild/linux-x64': 0.17.19
+ '@esbuild/netbsd-x64': 0.17.19
+ '@esbuild/openbsd-x64': 0.17.19
+ '@esbuild/sunos-x64': 0.17.19
+ '@esbuild/win32-arm64': 0.17.19
+ '@esbuild/win32-ia32': 0.17.19
+ '@esbuild/win32-x64': 0.17.19
+
+ esbuild@0.18.20:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.18.20
+ '@esbuild/android-arm64': 0.18.20
+ '@esbuild/android-x64': 0.18.20
+ '@esbuild/darwin-arm64': 0.18.20
+ '@esbuild/darwin-x64': 0.18.20
+ '@esbuild/freebsd-arm64': 0.18.20
+ '@esbuild/freebsd-x64': 0.18.20
+ '@esbuild/linux-arm': 0.18.20
+ '@esbuild/linux-arm64': 0.18.20
+ '@esbuild/linux-ia32': 0.18.20
+ '@esbuild/linux-loong64': 0.18.20
+ '@esbuild/linux-mips64el': 0.18.20
+ '@esbuild/linux-ppc64': 0.18.20
+ '@esbuild/linux-riscv64': 0.18.20
+ '@esbuild/linux-s390x': 0.18.20
+ '@esbuild/linux-x64': 0.18.20
+ '@esbuild/netbsd-x64': 0.18.20
+ '@esbuild/openbsd-x64': 0.18.20
+ '@esbuild/sunos-x64': 0.18.20
+ '@esbuild/win32-arm64': 0.18.20
+ '@esbuild/win32-ia32': 0.18.20
+ '@esbuild/win32-x64': 0.18.20
+
+ esbuild@0.21.4:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.4
+ '@esbuild/android-arm': 0.21.4
+ '@esbuild/android-arm64': 0.21.4
+ '@esbuild/android-x64': 0.21.4
+ '@esbuild/darwin-arm64': 0.21.4
+ '@esbuild/darwin-x64': 0.21.4
+ '@esbuild/freebsd-arm64': 0.21.4
+ '@esbuild/freebsd-x64': 0.21.4
+ '@esbuild/linux-arm': 0.21.4
+ '@esbuild/linux-arm64': 0.21.4
+ '@esbuild/linux-ia32': 0.21.4
+ '@esbuild/linux-loong64': 0.21.4
+ '@esbuild/linux-mips64el': 0.21.4
+ '@esbuild/linux-ppc64': 0.21.4
+ '@esbuild/linux-riscv64': 0.21.4
+ '@esbuild/linux-s390x': 0.21.4
+ '@esbuild/linux-x64': 0.21.4
+ '@esbuild/netbsd-x64': 0.21.4
+ '@esbuild/openbsd-x64': 0.21.4
+ '@esbuild/sunos-x64': 0.21.4
+ '@esbuild/win32-arm64': 0.21.4
+ '@esbuild/win32-ia32': 0.21.4
+ '@esbuild/win32-x64': 0.21.4
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2):
+ dependencies:
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.2)
+ eslint: 8.57.1
+ optionalDependencies:
+ '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.2))(eslint@8.57.1)(typescript@5.4.2)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ eslint-plugin-react-hooks@4.6.0(eslint@8.57.1):
+ dependencies:
+ eslint: 8.57.1
+
+ eslint-plugin-react@7.33.2(eslint@8.57.1):
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.flatmap: 1.3.3
+ array.prototype.tosorted: 1.1.4
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.2.1
+ eslint: 8.57.1
+ estraverse: 5.3.0
+ jsx-ast-utils: 3.3.5
+ minimatch: 3.1.2
+ object.entries: 1.1.9
+ object.fromentries: 2.0.8
+ object.hasown: 1.1.4
+ object.values: 1.2.1
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.12
+
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
+ eslint-scope@7.2.2:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@2.1.0: {}
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint@8.57.1:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.1
+ '@humanwhocodes/config-array': 0.13.0
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.3.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.1(supports-color@5.5.0)
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@9.6.1:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 3.4.3
+
+ esprima@4.0.1: {}
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@4.3.0: {}
+
+ estraverse@5.3.0: {}
+
+ estree-util-attach-comments@2.1.1:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ estree-util-is-identifier-name@2.1.0: {}
+
+ estree-util-to-js@1.2.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.4
+
+ estree-util-visit@1.2.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 2.0.11
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ eventemitter3@2.0.3: {}
+
+ eventemitter3@5.0.1: {}
+
+ events-okam@3.3.0: {}
+
+ events@3.3.0: {}
+
+ evp_bytestokey@1.0.3:
+ dependencies:
+ md5.js: 1.3.5
+ safe-buffer: 5.2.1
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ execa@7.2.0:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 4.3.1
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 3.0.7
+ strip-final-newline: 3.0.0
+
+ express-http-proxy@2.1.1:
+ dependencies:
+ debug: 3.2.7
+ es6-promise: 4.2.8
+ raw-body: 2.5.2
+ transitivePeerDependencies:
+ - supports-color
+
+ express@4.21.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.3
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.7.1
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.3.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.3
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.12
+ proxy-addr: 2.0.7
+ qs: 6.13.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.19.0
+ serve-static: 1.16.2
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ extend@3.0.2: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-glob@3.2.12:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-redact@3.5.0: {}
+
+ fast-uri@3.0.6: {}
+
+ fastest-levenshtein@1.0.16: {}
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ father@4.5.6(@babel/core@7.27.7)(@types/node@20.5.1)(styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(type-fest@1.4.0)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ '@microsoft/api-extractor': 7.43.7(@types/node@20.5.1)
+ '@umijs/babel-preset-umi': 4.4.11
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/bundler-webpack': 4.4.11(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1
+ '@umijs/core': 4.4.11
+ '@umijs/utils': 4.4.11
+ '@vercel/ncc': 0.33.3
+ babel-plugin-dynamic-import-node: 2.3.3
+ babel-plugin-module-resolver: 4.1.0
+ babel-plugin-styled-components: 2.1.4(@babel/core@7.27.7)(styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0)
+ babel-plugin-transform-define: 2.0.1
+ enhanced-resolve: 5.9.3
+ esbuild: 0.17.19
+ fast-glob: 3.2.12
+ file-system-cache: 2.0.0
+ loader-runner: 4.2.0
+ minimatch: 3.1.2
+ piscina: 4.9.2
+ tsconfig-paths: 4.0.0
+ typescript: 5.4.2
+ typescript-transform-paths: 3.4.7(typescript@5.4.2)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@types/node'
+ - '@types/webpack'
+ - sockjs-client
+ - styled-components
+ - supports-color
+ - type-fest
+ - webpack
+ - webpack-dev-server
+ - webpack-hot-middleware
+ - webpack-plugin-serve
+
+ fault@2.0.1:
+ dependencies:
+ format: 0.2.2
+
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
+ fdir@6.4.6(picomatch@4.0.2):
+ optionalDependencies:
+ picomatch: 4.0.2
+
+ fetch-blob@3.2.0:
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.3.3
+
+ file-entry-cache@6.0.1:
+ dependencies:
+ flat-cache: 3.2.0
+
+ file-system-cache@2.0.0:
+ dependencies:
+ fs-extra: 10.1.0
+ ramda: 0.28.0
+
+ file-system-cache@2.4.4:
+ dependencies:
+ '@types/fs-extra': 11.0.1
+ '@types/ramda': 0.29.3
+ fs-extra: 11.1.1
+ ramda: 0.29.0
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ filter-obj@1.1.0: {}
+
+ finalhandler@1.3.1:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-babel-config@1.2.2:
+ dependencies:
+ json5: 1.0.2
+ path-exists: 3.0.0
+
+ find-root@1.1.0: {}
+
+ find-up@3.0.0:
+ dependencies:
+ locate-path: 3.0.0
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@3.2.0:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+ rimraf: 3.0.2
+
+ flatted@3.3.3: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ chalk: 4.1.2
+ chokidar: 3.6.0
+ cosmiconfig: 7.1.0
+ deepmerge: 4.3.1
+ fs-extra: 10.1.0
+ memfs: 3.5.3
+ minimatch: 3.1.2
+ node-abort-controller: 3.1.1
+ schema-utils: 3.3.0
+ semver: 7.7.2
+ tapable: 2.2.2
+ typescript: 5.4.2
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+
+ format@0.2.2: {}
+
+ formdata-polyfill@4.0.10:
+ dependencies:
+ fetch-blob: 3.2.0
+
+ forwarded@0.2.0: {}
+
+ fraction.js@4.3.7: {}
+
+ fresh@0.5.2: {}
+
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs-extra@11.1.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs-extra@11.3.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs-extra@7.0.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+
+ fs-monkey@1.0.6: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ function.prototype.name@1.1.8:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ functions-have-names: 1.2.3
+ hasown: 2.0.2
+ is-callable: 1.2.7
+
+ functions-have-names@1.2.3: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-package-type@0.1.0: {}
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stream@6.0.1: {}
+
+ get-symbol-description@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+
+ get-tsconfig@4.10.1:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ get-tsconfig@4.7.5:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ get-value@2.0.6: {}
+
+ git-hooks-list@3.2.0: {}
+
+ git-hooks-list@4.1.1: {}
+
+ git-raw-commits@2.0.11:
+ dependencies:
+ dargs: 7.0.0
+ lodash: 4.17.21
+ meow: 8.1.2
+ split2: 3.2.2
+ through2: 4.0.2
+
+ github-slugger@1.5.0: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-to-regexp@0.4.1: {}
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ global-dirs@0.1.1:
+ dependencies:
+ ini: 1.3.8
+
+ global-modules@2.0.0:
+ dependencies:
+ global-prefix: 3.0.0
+
+ global-prefix@3.0.0:
+ dependencies:
+ ini: 1.3.8
+ kind-of: 6.0.3
+ which: 1.3.1
+
+ globals@11.12.0: {}
+
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ globby@13.2.2:
+ dependencies:
+ dir-glob: 3.0.1
+ fast-glob: 3.3.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 4.0.0
+
+ globjoin@0.1.4: {}
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ graphemer@1.4.0: {}
+
+ handle-thing@2.0.1: {}
+
+ hard-rejection@2.1.0: {}
+
+ harmony-reflect@1.6.2: {}
+
+ has-bigints@1.1.0: {}
+
+ has-flag@3.0.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-proto@1.2.0:
+ dependencies:
+ dunder-proto: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ has-value@0.3.1:
+ dependencies:
+ get-value: 2.0.6
+ has-values: 0.1.4
+ isobject: 2.1.0
+
+ has-values@0.1.4: {}
+
+ hash-base@2.0.2:
+ dependencies:
+ inherits: 2.0.4
+
+ hash-base@3.0.5:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ hash.js@1.1.7:
+ dependencies:
+ inherits: 2.0.4
+ minimalistic-assert: 1.0.1
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hast-util-from-parse5@7.1.2:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ hastscript: 7.2.0
+ property-information: 6.5.0
+ vfile: 5.3.7
+ vfile-location: 4.1.0
+ web-namespaces: 2.0.1
+
+ hast-util-has-property@2.0.1: {}
+
+ hast-util-heading-rank@2.1.1:
+ dependencies:
+ '@types/hast': 2.3.10
+
+ hast-util-is-conditional-comment@2.0.0:
+ dependencies:
+ '@types/hast': 2.3.10
+
+ hast-util-is-element@2.1.3:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+
+ hast-util-parse-selector@3.1.1:
+ dependencies:
+ '@types/hast': 2.3.10
+
+ hast-util-raw@7.2.3:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/parse5': 6.0.3
+ hast-util-from-parse5: 7.1.2
+ hast-util-to-parse5: 7.1.0
+ html-void-elements: 2.0.1
+ parse5: 6.0.1
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+ vfile: 5.3.7
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-raw@8.0.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ extend: 3.0.2
+ hast-util-from-parse5: 7.1.2
+ hast-util-to-parse5: 7.1.0
+ html-void-elements: 2.0.1
+ mdast-util-to-hast: 12.3.0
+ parse5: 7.3.0
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+ vfile: 5.3.7
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-to-estree@2.3.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ comma-separated-tokens: 2.0.3
+ estree-util-attach-comments: 2.1.1
+ estree-util-is-identifier-name: 2.1.0
+ hast-util-whitespace: 2.0.1
+ mdast-util-mdx-expression: 1.3.2
+ mdast-util-mdxjs-esm: 1.3.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 0.4.4
+ unist-util-position: 4.0.4
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-html@8.0.4:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-raw: 7.2.3
+ hast-util-whitespace: 2.0.1
+ html-void-elements: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-to-parse5@7.1.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ comma-separated-tokens: 2.0.3
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-to-string@2.0.0:
+ dependencies:
+ '@types/hast': 2.3.10
+
+ hast-util-whitespace@2.0.1: {}
+
+ hastscript@7.2.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 3.1.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+
+ he@1.2.0: {}
+
+ heti-findandreplacedomtext@0.5.0: {}
+
+ heti@0.9.5:
+ dependencies:
+ heti-findandreplacedomtext: 0.5.0
+
+ history@5.3.0:
+ dependencies:
+ '@babel/runtime': 7.23.6
+
+ hmac-drbg@1.0.1:
+ dependencies:
+ hash.js: 1.1.7
+ minimalistic-assert: 1.0.1
+ minimalistic-crypto-utils: 1.0.1
+
+ hoist-non-react-statics@3.3.2:
+ dependencies:
+ react-is: 16.13.1
+
+ hosted-git-info@2.8.9: {}
+
+ hosted-git-info@4.1.0:
+ dependencies:
+ lru-cache: 6.0.0
+
+ hosted-git-info@6.1.3:
+ dependencies:
+ lru-cache: 7.18.3
+
+ hpack.js@2.1.6:
+ dependencies:
+ inherits: 2.0.4
+ obuf: 1.1.2
+ readable-stream: 2.3.8
+ wbuf: 1.7.3
+
+ htm@3.1.1: {}
+
+ html-entities@2.6.0: {}
+
+ html-minifier-terser@6.1.0:
+ dependencies:
+ camel-case: 4.1.2
+ clean-css: 5.3.3
+ commander: 8.3.0
+ he: 1.2.0
+ param-case: 3.0.4
+ relateurl: 0.2.7
+ terser: 5.43.1
+
+ html-tags@3.3.1: {}
+
+ html-to-text@9.0.5:
+ dependencies:
+ '@selderee/plugin-htmlparser2': 0.11.0
+ deepmerge: 4.3.1
+ dom-serializer: 2.0.0
+ htmlparser2: 8.0.2
+ selderee: 0.11.0
+
+ html-tokenize@2.0.1:
+ dependencies:
+ buffer-from: 0.1.2
+ inherits: 2.0.4
+ minimist: 1.2.8
+ readable-stream: 1.0.34
+ through2: 0.4.2
+
+ html-void-elements@2.0.1: {}
+
+ html-webpack-plugin@5.5.0(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ '@types/html-minifier-terser': 6.1.0
+ html-minifier-terser: 6.1.0
+ lodash: 4.17.21
+ pretty-error: 4.0.0
+ tapable: 2.2.2
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+
+ html2sketch@1.0.2:
+ dependencies:
+ '@sketch-hq/sketch-file-format-ts': 6.5.0
+ color: 3.2.1
+ css: 3.0.0
+ svg-pathdata: 5.0.5
+ svgo-browser: 1.3.8
+ svgson: 4.1.0
+ transformation-matrix: 2.16.1
+ uuid: 8.3.2
+
+ htmlparser2@6.1.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 4.3.1
+ domutils: 2.8.0
+ entities: 2.2.0
+
+ htmlparser2@8.0.2:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ entities: 4.5.0
+
+ http-deceiver@1.2.7: {}
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ https-browserify@1.0.0: {}
+
+ human-signals@2.1.0: {}
+
+ human-signals@4.3.1: {}
+
+ husky@8.0.3: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+ optional: true
+
+ icss-utils@5.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ identity-obj-proxy@3.0.0:
+ dependencies:
+ harmony-reflect: 1.6.2
+
+ ieee754@1.2.1: {}
+
+ ignore@5.3.2: {}
+
+ image-size@0.5.5:
+ optional: true
+
+ immutable@5.1.3: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-lazy@4.0.0: {}
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@4.0.0: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.1: {}
+
+ inherits@2.0.3: {}
+
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
+ inline-style-parser@0.1.1: {}
+
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.1.0
+
+ intl-messageformat@10.7.16:
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.4
+ '@formatjs/fast-memoize': 2.2.7
+ '@formatjs/icu-messageformat-parser': 2.11.2
+ tslib: 2.8.1
+
+ invariant@2.2.4:
+ dependencies:
+ loose-envify: 1.4.0
+
+ ipaddr.js@1.9.1: {}
+
+ is-alphabetical@2.0.1: {}
+
+ is-alphanumerical@2.0.1:
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-arrayish@0.2.1: {}
+
+ is-arrayish@0.3.2: {}
+
+ is-arrow-function@2.0.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ is-async-function@2.1.1:
+ dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-bigint@1.1.0:
+ dependencies:
+ has-bigints: 1.1.0
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-boolean-object@1.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-buffer@1.1.6: {}
+
+ is-buffer@2.0.5: {}
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-data-view@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ is-typed-array: 1.1.15
+
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-decimal@2.0.1: {}
+
+ is-docker@2.2.1: {}
+
+ is-docker@3.0.0: {}
+
+ is-equal@1.7.0:
+ dependencies:
+ es-get-iterator: 1.1.3
+ es-to-primitive: 1.3.0
+ functions-have-names: 1.2.3
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ is-arrow-function: 2.0.3
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-generator-function: 1.1.0
+ is-number-object: 1.1.1
+ is-regex: 1.2.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
+ isarray: 2.0.5
+ object-inspect: 1.13.4
+ object.entries: 1.1.9
+ object.getprototypeof: 1.0.7
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-finalizationregistry@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-generator-function@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-hexadecimal@2.0.1: {}
+
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
+ is-map@2.0.3: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-number@7.0.0: {}
+
+ is-obj@2.0.0: {}
+
+ is-path-inside@3.0.3: {}
+
+ is-plain-obj@1.1.0: {}
+
+ is-plain-obj@4.1.0: {}
+
+ is-plain-object@2.0.4:
+ dependencies:
+ isobject: 3.0.1
+
+ is-plain-object@5.0.0: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-stream@2.0.1: {}
+
+ is-stream@3.0.0: {}
+
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
+
+ is-text-path@1.0.1:
+ dependencies:
+ text-extensions: 1.9.0
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.19
+
+ is-weakmap@2.0.2: {}
+
+ is-weakref@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-what@3.14.1: {}
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
+ isarray@0.0.1: {}
+
+ isarray@1.0.0: {}
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ isobject@2.1.0:
+ dependencies:
+ isarray: 1.0.0
+
+ isobject@3.0.1: {}
+
+ isomorphic-rslog@0.0.7: {}
+
+ isomorphic-unfetch@4.0.2:
+ dependencies:
+ node-fetch: 3.3.2
+ unfetch: 5.0.0
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@5.2.1:
+ dependencies:
+ '@babel/core': 7.27.7
+ '@babel/parser': 7.27.7
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ istextorbinary@2.6.0:
+ dependencies:
+ binaryextensions: 2.3.0
+ editions: 2.3.1
+ textextensions: 2.6.0
+
+ iterator.prototype@1.1.5:
+ dependencies:
+ define-data-property: 1.1.4
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ has-symbols: 1.1.0
+ set-function-name: 2.0.2
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ javascript-stringify@2.1.0: {}
+
+ jest-haste-map@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 24.0.7
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-regex-util@29.6.3: {}
+
+ jest-util@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ '@types/node': 24.0.7
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
+
+ jest-worker@27.5.1:
+ dependencies:
+ '@types/node': 24.0.7
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest-worker@29.4.3:
+ dependencies:
+ '@types/node': 24.0.7
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 24.0.7
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jiti@1.21.7: {}
+
+ jju@1.4.0: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsesc@2.5.2: {}
+
+ jsesc@3.1.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-parse-even-better-errors@2.3.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-schema-traverse@1.0.0: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json2mq@0.2.0:
+ dependencies:
+ string-convert: 0.2.1
+
+ json5@1.0.2:
+ dependencies:
+ minimist: 1.2.8
+
+ json5@2.2.3: {}
+
+ jsonfile@4.0.0:
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonfile@6.1.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonparse@1.3.1: {}
+
+ jsx-ast-utils@3.3.5:
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.flat: 1.3.3
+ object.assign: 4.1.7
+ object.values: 1.2.1
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kind-of@3.2.2:
+ dependencies:
+ is-buffer: 1.1.6
+
+ kind-of@6.0.3: {}
+
+ kleur@4.1.5: {}
+
+ known-css-properties@0.26.0: {}
+
+ kolorist@1.8.0: {}
+
+ leac@0.6.0: {}
+
+ less-loader@12.3.0(less@4.3.0)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ less: 4.3.0
+ optionalDependencies:
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+
+ less-plugin-resolve@1.0.2:
+ dependencies:
+ enhanced-resolve: 5.18.2
+
+ less@4.1.3:
+ dependencies:
+ copy-anything: 2.0.6
+ parse-node-version: 1.0.1
+ tslib: 2.8.1
+ optionalDependencies:
+ errno: 0.1.8
+ graceful-fs: 4.2.11
+ image-size: 0.5.5
+ make-dir: 2.1.0
+ mime: 1.6.0
+ needle: 3.3.1
+ source-map: 0.6.1
+
+ less@4.3.0:
+ dependencies:
+ copy-anything: 2.0.6
+ parse-node-version: 1.0.1
+ tslib: 2.8.1
+ optionalDependencies:
+ errno: 0.1.8
+ graceful-fs: 4.2.11
+ image-size: 0.5.5
+ make-dir: 2.1.0
+ mime: 1.6.0
+ needle: 3.3.1
+ source-map: 0.6.1
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ lightningcss-darwin-arm64@1.22.1:
+ optional: true
+
+ lightningcss-darwin-x64@1.22.1:
+ optional: true
+
+ lightningcss-freebsd-x64@1.22.1:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.22.1:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.22.1:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.22.1:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.22.1:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.22.1:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.22.1:
+ optional: true
+
+ lightningcss@1.22.1:
+ dependencies:
+ detect-libc: 1.0.3
+ optionalDependencies:
+ lightningcss-darwin-arm64: 1.22.1
+ lightningcss-darwin-x64: 1.22.1
+ lightningcss-freebsd-x64: 1.22.1
+ lightningcss-linux-arm-gnueabihf: 1.22.1
+ lightningcss-linux-arm64-gnu: 1.22.1
+ lightningcss-linux-arm64-musl: 1.22.1
+ lightningcss-linux-x64-gnu: 1.22.1
+ lightningcss-linux-x64-musl: 1.22.1
+ lightningcss-win32-x64-msvc: 1.22.1
+
+ lilconfig@2.1.0: {}
+
+ lines-and-columns@1.2.4: {}
+
+ lint-staged@13.3.0:
+ dependencies:
+ chalk: 5.3.0
+ commander: 11.0.0
+ debug: 4.3.4
+ execa: 7.2.0
+ lilconfig: 2.1.0
+ listr2: 6.6.1
+ micromatch: 4.0.5
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.3.1
+ transitivePeerDependencies:
+ - enquirer
+ - supports-color
+
+ listr2@6.6.1:
+ dependencies:
+ cli-truncate: 3.1.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 5.0.1
+ rfdc: 1.4.1
+ wrap-ansi: 8.1.0
+
+ loader-runner@4.2.0: {}
+
+ loader-runner@4.3.0: {}
+
+ loader-utils@2.0.4:
+ dependencies:
+ big.js: 5.2.2
+ emojis-list: 3.0.0
+ json5: 2.2.3
+
+ loader-utils@3.3.1: {}
+
+ local-pkg@0.4.3: {}
+
+ locate-path@3.0.0:
+ dependencies:
+ p-locate: 3.0.0
+ path-exists: 3.0.0
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.camelcase@4.3.0: {}
+
+ lodash.clonedeep@4.5.0: {}
+
+ lodash.get@4.4.2: {}
+
+ lodash.isequal@4.5.0: {}
+
+ lodash.isfunction@3.0.9: {}
+
+ lodash.isplainobject@4.0.6: {}
+
+ lodash.kebabcase@4.1.1: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.mergewith@4.6.2: {}
+
+ lodash.snakecase@4.1.1: {}
+
+ lodash.startcase@4.4.0: {}
+
+ lodash.throttle@4.1.1: {}
+
+ lodash.truncate@4.4.2: {}
+
+ lodash.uniq@4.5.0: {}
+
+ lodash.upperfirst@4.3.1: {}
+
+ lodash@4.17.21: {}
+
+ log-update@5.0.1:
+ dependencies:
+ ansi-escapes: 5.0.0
+ cli-cursor: 4.0.0
+ slice-ansi: 5.0.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 8.1.0
+
+ longest-streak@3.1.0: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.8.1
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
+ lru-cache@7.18.3: {}
+
+ lz-string@1.5.0: {}
+
+ make-dir@2.1.0:
+ dependencies:
+ pify: 4.0.1
+ semver: 5.7.2
+ optional: true
+
+ make-error@1.3.6: {}
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ map-obj@1.0.1: {}
+
+ map-obj@4.3.0: {}
+
+ markdown-table@3.0.4: {}
+
+ math-intrinsics@1.1.0: {}
+
+ mathml-tag-names@2.1.3: {}
+
+ md5.js@1.3.5:
+ dependencies:
+ hash-base: 3.0.5
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ mdast-util-definitions@5.1.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ unist-util-visit: 4.1.2
+
+ mdast-util-directive@2.2.4:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-visit-parents: 5.1.3
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-find-and-replace@2.2.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ escape-string-regexp: 5.0.0
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
+ mdast-util-from-markdown@1.3.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ decode-named-character-reference: 1.2.0
+ mdast-util-to-string: 3.2.0
+ micromark: 3.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-decode-string: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-stringify-position: 3.0.3
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-frontmatter@1.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+ micromark-extension-frontmatter: 1.1.1
+
+ mdast-util-gfm-autolink-literal@1.0.3:
+ dependencies:
+ '@types/mdast': 3.0.15
+ ccount: 2.0.1
+ mdast-util-find-and-replace: 2.2.2
+ micromark-util-character: 1.2.0
+
+ mdast-util-gfm-footnote@1.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+ micromark-util-normalize-identifier: 1.1.0
+
+ mdast-util-gfm-strikethrough@1.0.3:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+
+ mdast-util-gfm-table@1.0.7:
+ dependencies:
+ '@types/mdast': 3.0.15
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-task-list-item@1.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+
+ mdast-util-gfm@2.0.2:
+ dependencies:
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-gfm-autolink-literal: 1.0.3
+ mdast-util-gfm-footnote: 1.0.2
+ mdast-util-gfm-strikethrough: 1.0.3
+ mdast-util-gfm-table: 1.0.7
+ mdast-util-gfm-task-list-item: 1.0.2
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-expression@1.3.2:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@1.3.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-phrasing@3.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ unist-util-is: 5.2.1
+
+ mdast-util-to-hast@12.3.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-definitions: 5.1.2
+ micromark-util-sanitize-uri: 1.2.0
+ trim-lines: 3.0.1
+ unist-util-generated: 2.0.1
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+
+ mdast-util-to-markdown@1.5.0:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 3.0.1
+ mdast-util-to-string: 3.2.0
+ micromark-util-decode-string: 1.1.0
+ unist-util-visit: 4.1.2
+ zwitch: 2.0.4
+
+ mdast-util-to-string@3.2.0:
+ dependencies:
+ '@types/mdast': 3.0.15
+
+ mdn-data@2.0.14: {}
+
+ mdn-data@2.0.4: {}
+
+ media-typer@0.3.0: {}
+
+ memfs@3.5.3:
+ dependencies:
+ fs-monkey: 1.0.6
+
+ meow@8.1.2:
+ dependencies:
+ '@types/minimist': 1.2.5
+ camelcase-keys: 6.2.2
+ decamelize-keys: 1.1.1
+ hard-rejection: 2.1.0
+ minimist-options: 4.1.0
+ normalize-package-data: 3.0.3
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.1
+ type-fest: 0.18.1
+ yargs-parser: 20.2.9
+
+ meow@9.0.0:
+ dependencies:
+ '@types/minimist': 1.2.5
+ camelcase-keys: 6.2.2
+ decamelize: 1.2.0
+ decamelize-keys: 1.1.1
+ hard-rejection: 2.1.0
+ minimist-options: 4.1.0
+ normalize-package-data: 3.0.3
+ read-pkg-up: 7.0.1
+ redent: 3.0.0
+ trim-newlines: 3.0.1
+ type-fest: 0.18.1
+ yargs-parser: 20.2.9
+
+ merge-descriptors@1.0.3: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ methods@1.1.2: {}
+
+ micromark-core-commonmark@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.2.0
+ micromark-factory-destination: 1.1.0
+ micromark-factory-label: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-factory-title: 1.1.0
+ micromark-factory-whitespace: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-html-tag-name: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-extension-directive@2.2.1:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-factory-whitespace: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ parse-entities: 4.0.2
+ uvu: 0.5.6
+
+ micromark-extension-frontmatter@1.1.1:
+ dependencies:
+ fault: 2.0.1
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-extension-gfm-autolink-literal@1.0.5:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-extension-gfm-footnote@1.1.2:
+ dependencies:
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-extension-gfm-strikethrough@1.0.7:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-extension-gfm-table@1.0.7:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-extension-gfm-tagfilter@1.0.2:
+ dependencies:
+ micromark-util-types: 1.1.0
+
+ micromark-extension-gfm-task-list-item@1.0.5:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-extension-gfm@2.0.3:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 1.0.5
+ micromark-extension-gfm-footnote: 1.1.2
+ micromark-extension-gfm-strikethrough: 1.0.7
+ micromark-extension-gfm-table: 1.0.7
+ micromark-extension-gfm-tagfilter: 1.0.2
+ micromark-extension-gfm-task-list-item: 1.0.5
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-destination@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-label@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-factory-space@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-title@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-whitespace@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-character@1.2.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-chunked@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-classify-character@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-combine-extensions@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-decode-string@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.2.0
+ micromark-util-character: 1.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-encode@1.1.0: {}
+
+ micromark-util-html-tag-name@1.2.0: {}
+
+ micromark-util-normalize-identifier@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-resolve-all@1.1.0:
+ dependencies:
+ micromark-util-types: 1.1.0
+
+ micromark-util-sanitize-uri@1.2.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-encode: 1.1.0
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-subtokenize@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-util-symbol@1.1.0: {}
+
+ micromark-util-types@1.1.0: {}
+
+ micromark@3.2.0:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.1(supports-color@5.5.0)
+ decode-named-character-reference: 1.2.0
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-encode: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
+ micromatch@4.0.5:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ miller-rabin@4.0.1:
+ dependencies:
+ bn.js: 4.12.2
+ brorand: 1.1.0
+
+ mime-db@1.52.0: {}
+
+ mime-db@1.54.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@1.6.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-fn@4.0.0: {}
+
+ min-indent@1.0.1: {}
+
+ minimalistic-assert@1.0.1: {}
+
+ minimalistic-crypto-utils@1.0.1: {}
+
+ minimatch@3.0.8:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist-options@4.1.0:
+ dependencies:
+ arrify: 1.0.1
+ is-plain-obj: 1.1.0
+ kind-of: 6.0.3
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
+ mri@1.2.0: {}
+
+ ms@2.0.0: {}
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ multipipe@1.0.2:
+ dependencies:
+ duplexer2: 0.1.4
+ object-assign: 4.1.1
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ nanoid@3.3.11: {}
+
+ natural-compare-lite@1.4.0: {}
+
+ natural-compare@1.4.0: {}
+
+ needle@3.3.1:
+ dependencies:
+ iconv-lite: 0.6.3
+ sax: 1.4.1
+ optional: true
+
+ negotiator@0.6.3: {}
+
+ negotiator@0.6.4: {}
+
+ neo-async@2.6.2: {}
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.8.1
+
+ node-abort-controller@3.1.1: {}
+
+ node-addon-api@7.1.1:
+ optional: true
+
+ node-domexception@1.0.0: {}
+
+ node-fetch@3.3.2:
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+
+ node-int64@0.4.0: {}
+
+ node-libs-browser-okam@2.2.5:
+ dependencies:
+ assert-okam: 1.5.0
+ browserify-zlib: 0.2.0
+ buffer-okam: 4.9.2
+ console-browserify: 1.2.0
+ constants-browserify: 1.0.0
+ crypto-browserify: 3.12.1
+ domain-browser: 1.2.0
+ events-okam: 3.3.0
+ https-browserify: 1.0.0
+ os-browserify: 0.3.0
+ path-browserify: 0.0.1
+ process-okam: 0.11.10
+ punycode-okam: 1.4.1
+ querystring-es3: 0.2.1
+ readable-stream: 2.3.8
+ stream-browserify: 2.0.2
+ stream-http: 2.8.3
+ string_decoder-okam: 1.3.0
+ timers-browserify: 2.0.12
+ tty-browserify: 0.0.0
+ url-okam: 0.11.1
+ util-okam: 0.11.1
+ vm-browserify: 1.1.2
+
+ node-libs-browser@2.2.1:
+ dependencies:
+ assert: 1.5.1
+ browserify-zlib: 0.2.0
+ buffer: 4.9.2
+ console-browserify: 1.2.0
+ constants-browserify: 1.0.0
+ crypto-browserify: 3.12.1
+ domain-browser: 1.2.0
+ events: 3.3.0
+ https-browserify: 1.0.0
+ os-browserify: 0.3.0
+ path-browserify: 0.0.1
+ process: 0.11.10
+ punycode: 1.4.1
+ querystring-es3: 0.2.1
+ readable-stream: 2.3.8
+ stream-browserify: 2.0.2
+ stream-http: 2.8.3
+ string_decoder: 1.3.0
+ timers-browserify: 2.0.12
+ tty-browserify: 0.0.0
+ url: 0.11.4
+ util: 0.11.1
+ vm-browserify: 1.1.2
+
+ node-releases@2.0.19: {}
+
+ normalize-package-data@2.5.0:
+ dependencies:
+ hosted-git-info: 2.8.9
+ resolve: 1.22.10
+ semver: 5.7.2
+ validate-npm-package-license: 3.0.4
+
+ normalize-package-data@3.0.3:
+ dependencies:
+ hosted-git-info: 4.1.0
+ is-core-module: 2.16.1
+ semver: 7.7.2
+ validate-npm-package-license: 3.0.4
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
+
+ nprogress@0.2.0: {}
+
+ nth-check@1.0.2:
+ dependencies:
+ boolbase: 1.0.0
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ object-assign@4.1.1: {}
+
+ object-inspect@1.13.4: {}
+
+ object-keys@0.4.0: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ object.entries@1.1.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ object.fromentries@2.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+
+ object.getownpropertydescriptors@2.1.8:
+ dependencies:
+ array.prototype.reduce: 1.0.8
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+ gopd: 1.2.0
+ safe-array-concat: 1.1.3
+
+ object.getprototypeof@1.0.7:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ get-proto: 1.0.1
+ reflect.getprototypeof: 1.0.10
+
+ object.hasown@1.1.4:
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+
+ object.values@1.2.1:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ obuf@1.1.2: {}
+
+ omit-deep@0.3.0:
+ dependencies:
+ is-plain-object: 2.0.4
+ unset-value: 0.1.2
+
+ on-exit-leak-free@0.2.0: {}
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-headers@1.0.2: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onetime@6.0.0:
+ dependencies:
+ mimic-fn: 4.0.0
+
+ open@8.4.2:
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+
+ open@9.1.0:
+ dependencies:
+ default-browser: 4.0.0
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 2.2.0
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ os-browserify@0.3.0: {}
+
+ own-keys@1.0.1:
+ dependencies:
+ get-intrinsic: 1.3.0
+ object-keys: 1.1.1
+ safe-push-apply: 1.0.0
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@3.0.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-try@2.2.0: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ pako@1.0.11: {}
+
+ param-case@3.0.4:
+ dependencies:
+ dot-case: 3.0.4
+ tslib: 2.8.1
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-asn1@5.1.7:
+ dependencies:
+ asn1.js: 4.10.1
+ browserify-aes: 1.2.0
+ evp_bytestokey: 1.0.3
+ hash-base: 3.0.5
+ pbkdf2: 3.1.3
+ safe-buffer: 5.2.1
+
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.2.0
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+
+ parse-json@5.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+
+ parse-node-version@1.0.1: {}
+
+ parse5@6.0.1: {}
+
+ parse5@7.3.0:
+ dependencies:
+ entities: 6.0.1
+
+ parseley@0.12.1:
+ dependencies:
+ leac: 0.6.0
+ peberminta: 0.9.0
+
+ parseurl@1.3.3: {}
+
+ pascal-case@3.1.2:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.8.1
+
+ path-browserify@0.0.1: {}
+
+ path-exists@3.0.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-key@4.0.0: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-to-regexp@0.1.12: {}
+
+ path-to-regexp@1.7.0:
+ dependencies:
+ isarray: 0.0.1
+
+ path-type@4.0.0: {}
+
+ pbkdf2@3.1.3:
+ dependencies:
+ create-hash: 1.1.3
+ create-hmac: 1.1.7
+ ripemd160: 2.0.1
+ safe-buffer: 5.2.1
+ sha.js: 2.4.11
+ to-buffer: 1.2.1
+
+ peberminta@0.9.0: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.2: {}
+
+ pidtree@0.6.0: {}
+
+ pify@4.0.1:
+ optional: true
+
+ pino-abstract-transport@0.5.0:
+ dependencies:
+ duplexify: 4.1.3
+ split2: 4.2.0
+
+ pino-std-serializers@4.0.0: {}
+
+ pino@7.11.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+ fast-redact: 3.5.0
+ on-exit-leak-free: 0.2.0
+ pino-abstract-transport: 0.5.0
+ pino-std-serializers: 4.0.0
+ process-warning: 1.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.1.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 2.8.0
+ thread-stream: 0.15.2
+
+ pirates@4.0.7: {}
+
+ piscina@4.9.2:
+ optionalDependencies:
+ '@napi-rs/nice': 1.0.1
+
+ pkg-up@3.1.0:
+ dependencies:
+ find-up: 3.0.0
+
+ pluralize@8.0.0: {}
+
+ pnpm@10.12.4: {}
+
+ point-in-polygon@1.1.0: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ postcss-attribute-case-insensitive@5.0.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-clamp@4.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-color-functional-notation@4.2.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-color-hex-alpha@8.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-color-rebeccapurple@7.1.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-custom-media@8.0.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-custom-properties@12.1.11(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-custom-selectors@6.0.3(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-dir-pseudo-class@6.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-double-position-gradients@3.1.2(postcss@8.5.6):
+ dependencies:
+ '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-env-function@4.0.6(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-flexbugs-fixes@5.0.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-focus-visible@6.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-focus-within@5.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-font-variant@5.0.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-gap-properties@3.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-image-set-function@4.0.7(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-initial@4.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-lab-function@4.2.1(postcss@8.5.6):
+ dependencies:
+ '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-loader@8.1.1(postcss@8.5.6)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ cosmiconfig: 9.0.0(typescript@5.4.2)
+ jiti: 1.21.7
+ postcss: 8.5.6
+ semver: 7.7.2
+ optionalDependencies:
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+ transitivePeerDependencies:
+ - typescript
+
+ postcss-logical@5.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-media-minmax@5.0.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-media-query-parser@0.2.3: {}
+
+ postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-modules-local-by-default@4.2.0(postcss@8.5.6):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+ postcss-value-parser: 4.2.0
+
+ postcss-modules-scope@3.2.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.0
+
+ postcss-modules-values@4.0.0(postcss@8.5.6):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.5.6)
+ postcss: 8.5.6
+
+ postcss-nesting@10.2.0(postcss@8.5.6):
+ dependencies:
+ '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2)
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-opacity-percentage@1.1.3(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-overflow-shorthand@3.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-page-break@3.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-place@7.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-prefix-selector@1.16.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-preset-env@7.5.0(postcss@8.5.6):
+ dependencies:
+ '@csstools/postcss-color-function': 1.1.1(postcss@8.5.6)
+ '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.5.6)
+ '@csstools/postcss-hwb-function': 1.0.2(postcss@8.5.6)
+ '@csstools/postcss-ic-unit': 1.0.1(postcss@8.5.6)
+ '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.5.6)
+ '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.5.6)
+ '@csstools/postcss-oklab-function': 1.1.1(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.5.6)
+ '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.5.6)
+ '@csstools/postcss-unset-value': 1.0.2(postcss@8.5.6)
+ autoprefixer: 10.4.21(postcss@8.5.6)
+ browserslist: 4.25.1
+ css-blank-pseudo: 3.0.3(postcss@8.5.6)
+ css-has-pseudo: 3.0.4(postcss@8.5.6)
+ css-prefers-color-scheme: 6.0.3(postcss@8.5.6)
+ cssdb: 6.6.3
+ postcss: 8.5.6
+ postcss-attribute-case-insensitive: 5.0.2(postcss@8.5.6)
+ postcss-clamp: 4.1.0(postcss@8.5.6)
+ postcss-color-functional-notation: 4.2.4(postcss@8.5.6)
+ postcss-color-hex-alpha: 8.0.4(postcss@8.5.6)
+ postcss-color-rebeccapurple: 7.1.1(postcss@8.5.6)
+ postcss-custom-media: 8.0.2(postcss@8.5.6)
+ postcss-custom-properties: 12.1.11(postcss@8.5.6)
+ postcss-custom-selectors: 6.0.3(postcss@8.5.6)
+ postcss-dir-pseudo-class: 6.0.5(postcss@8.5.6)
+ postcss-double-position-gradients: 3.1.2(postcss@8.5.6)
+ postcss-env-function: 4.0.6(postcss@8.5.6)
+ postcss-focus-visible: 6.0.4(postcss@8.5.6)
+ postcss-focus-within: 5.0.4(postcss@8.5.6)
+ postcss-font-variant: 5.0.0(postcss@8.5.6)
+ postcss-gap-properties: 3.0.5(postcss@8.5.6)
+ postcss-image-set-function: 4.0.7(postcss@8.5.6)
+ postcss-initial: 4.0.1(postcss@8.5.6)
+ postcss-lab-function: 4.2.1(postcss@8.5.6)
+ postcss-logical: 5.0.4(postcss@8.5.6)
+ postcss-media-minmax: 5.0.0(postcss@8.5.6)
+ postcss-nesting: 10.2.0(postcss@8.5.6)
+ postcss-opacity-percentage: 1.1.3(postcss@8.5.6)
+ postcss-overflow-shorthand: 3.0.4(postcss@8.5.6)
+ postcss-page-break: 3.0.4(postcss@8.5.6)
+ postcss-place: 7.0.5(postcss@8.5.6)
+ postcss-pseudo-class-any-link: 7.1.6(postcss@8.5.6)
+ postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.6)
+ postcss-selector-not: 5.0.0(postcss@8.5.6)
+ postcss-value-parser: 4.2.0
+
+ postcss-pseudo-class-any-link@7.1.6(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-replace-overflow-wrap@4.0.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-resolve-nested-selector@0.1.6: {}
+
+ postcss-safe-parser@6.0.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-selector-not@5.0.0(postcss@8.5.6):
+ dependencies:
+ balanced-match: 1.0.2
+ postcss: 8.5.6
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-selector-parser@7.1.0:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-syntax@0.36.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prelude-ls@1.2.1: {}
+
+ prettier-plugin-organize-imports@3.2.4(prettier@2.8.8)(typescript@5.4.2):
+ dependencies:
+ prettier: 2.8.8
+ typescript: 5.4.2
+
+ prettier-plugin-packagejson@2.4.3(prettier@2.8.8):
+ dependencies:
+ sort-package-json: 2.4.1
+ synckit: 0.8.5
+ optionalDependencies:
+ prettier: 2.8.8
+
+ prettier-plugin-packagejson@2.5.17(prettier@2.8.8):
+ dependencies:
+ sort-package-json: 3.3.1
+ synckit: 0.11.8
+ optionalDependencies:
+ prettier: 2.8.8
+
+ prettier@2.8.8: {}
+
+ pretty-error@4.0.0:
+ dependencies:
+ lodash: 4.17.21
+ renderkid: 3.0.0
+
+ pretty-format@24.9.0:
+ dependencies:
+ '@jest/types': 24.9.0
+ ansi-regex: 4.1.1
+ ansi-styles: 3.2.1
+ react-is: 16.13.1
+
+ prism-react-renderer@1.3.5(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
+ prism-react-renderer@2.3.1(react@18.3.1):
+ dependencies:
+ '@types/prismjs': 1.26.5
+ clsx: 2.1.1
+ react: 18.3.1
+
+ prism-themes@1.9.0: {}
+
+ prismjs@1.30.0: {}
+
+ process-nextick-args@2.0.1: {}
+
+ process-okam@0.11.10: {}
+
+ process-warning@1.0.0: {}
+
+ process@0.11.10: {}
+
+ prop-types@15.8.1:
+ dependencies:
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
+
+ property-information@6.5.0: {}
+
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ prr@1.0.1:
+ optional: true
+
+ public-encrypt@4.0.3:
+ dependencies:
+ bn.js: 4.12.2
+ browserify-rsa: 4.1.1
+ create-hash: 1.2.0
+ parse-asn1: 5.1.7
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+
+ punycode-okam@1.4.1: {}
+
+ punycode@1.4.1: {}
+
+ punycode@2.3.1: {}
+
+ q@1.5.1: {}
+
+ qs@6.13.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ qs@6.14.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ query-string@6.14.1:
+ dependencies:
+ decode-uri-component: 0.2.2
+ filter-obj: 1.1.0
+ split-on-first: 1.1.0
+ strict-uri-encode: 2.0.0
+
+ querystring-es3@0.2.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ quick-format-unescaped@4.0.4: {}
+
+ quick-lru@4.0.1: {}
+
+ ramda@0.28.0: {}
+
+ ramda@0.29.0: {}
+
+ randombytes@2.1.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ randomfill@1.0.4:
+ dependencies:
+ randombytes: 2.1.0
+ safe-buffer: 5.2.1
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ raw-loader@4.0.2(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ loader-utils: 2.0.4
+ schema-utils: 3.3.0
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+
+ rc-cascader@3.34.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-select: 14.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tree: 5.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-checkbox@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-collapse@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-dialog@9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-drawer@6.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.22.3
+ '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.3.2
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-drawer@7.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-dropdown@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.3.2
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-dropdown@4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-field-form@2.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/async-validator': 5.0.4
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-footer@0.6.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.22.3
+ classnames: 2.3.2
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-image@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-dialog: 9.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-input-number@9.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/mini-decimal': 1.1.0
+ classnames: 2.5.1
+ rc-input: 1.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-input@1.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-mentions@2.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-input: 1.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-menu: 9.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-textarea: 1.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-menu@9.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.3.2
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-overflow: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-menu@9.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-overflow: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-motion@2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.3.2
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-notification@5.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-overflow@1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.3.2
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-pagination@5.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-picker@4.11.3(dayjs@1.11.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-overflow: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ optionalDependencies:
+ dayjs: 1.11.13
+
+ rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-rate@2.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-resize-observer@1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.3.2
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ resize-observer-polyfill: 1.5.1
+
+ rc-segmented@2.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-select@14.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-overflow: 1.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-virtual-list: 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-slider@11.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-steps@6.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-switch@4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-table@7.51.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/context': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.5.1
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-virtual-list: 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-tabs@12.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.3.2
+ rc-dropdown: 4.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-menu: 9.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-tabs@15.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-dropdown: 4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-menu: 9.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-textarea@1.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-input: 1.8.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-tooltip@6.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ '@rc-component/trigger': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ classnames: 2.3.2
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-tree-select@5.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-select: 14.16.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-tree: 5.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-tree@5.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.3.2
+ rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-virtual-list: 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-upload@4.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.5.1
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ rc-util@5.41.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.22.3
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.3.1
+
+ rc-util@5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.3.1
+
+ rc-virtual-list@3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ classnames: 2.3.2
+ rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ rc-util: 5.44.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ react-colorful@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ react-copy-to-clipboard@5.1.0(react@18.3.1):
+ dependencies:
+ copy-to-clipboard: 3.3.3
+ prop-types: 15.8.1
+ react: 18.3.1
+
+ react-dom@18.3.1(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
+ react-error-boundary@4.1.2(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.27.6
+ react: 18.3.1
+
+ react-error-overlay@6.0.9: {}
+
+ react-fast-compare@3.2.2: {}
+
+ react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@babel/runtime': 7.23.6
+ invariant: 2.2.4
+ prop-types: 15.8.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-fast-compare: 3.2.2
+ shallowequal: 1.1.0
+
+ react-intersection-observer@9.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ react-dom: 18.3.1(react@18.3.1)
+
+ react-intl@7.1.11(react@18.3.1)(typescript@5.4.2):
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.4
+ '@formatjs/icu-messageformat-parser': 2.11.2
+ '@formatjs/intl': 3.1.6(typescript@5.4.2)
+ '@types/hoist-non-react-statics': 3.3.6
+ '@types/react': 18.3.23
+ hoist-non-react-statics: 3.3.2
+ intl-messageformat: 10.7.16
+ react: 18.3.1
+ tslib: 2.8.1
+ optionalDependencies:
+ typescript: 5.4.2
+
+ react-is@16.13.1: {}
+
+ react-is@18.3.1: {}
+
+ react-loading-skeleton@3.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
+ react-merge-refs@1.1.0: {}
+
+ react-refresh@0.14.0: {}
+
+ react-refresh@0.14.2: {}
+
+ react-router-dom@6.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ history: 5.3.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-router: 6.3.0(react@18.3.1)
+
+ react-router@6.3.0(react@18.3.1):
+ dependencies:
+ history: 5.3.0
+ react: 18.3.1
+
+ react-simple-code-editor@0.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
+ reactflow@11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@reactflow/background': 11.3.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@reactflow/controls': 11.2.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@reactflow/core': 11.11.4(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@reactflow/minimap': 11.7.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@reactflow/node-resizer': 2.2.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@reactflow/node-toolbar': 1.3.14(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - immer
+
+ read-pkg-up@7.0.1:
+ dependencies:
+ find-up: 4.1.0
+ read-pkg: 5.2.0
+ type-fest: 0.8.1
+
+ read-pkg@5.2.0:
+ dependencies:
+ '@types/normalize-package-data': 2.4.4
+ normalize-package-data: 2.5.0
+ parse-json: 5.2.0
+ type-fest: 0.6.0
+
+ readable-stream@1.0.34:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 0.0.1
+ string_decoder: 0.10.31
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ readdirp@4.1.2: {}
+
+ real-require@0.1.0: {}
+
+ redent@3.0.0:
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+
+ reflect.getprototypeof@1.0.10:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ which-builtin-type: 1.2.1
+
+ regenerate-unicode-properties@10.1.1:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regenerator-runtime@0.13.11: {}
+
+ regenerator-runtime@0.14.1: {}
+
+ regexp.prototype.flags@1.5.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
+
+ rehype-autolink-headings@6.1.1:
+ dependencies:
+ '@types/hast': 2.3.10
+ extend: 3.0.2
+ hast-util-has-property: 2.0.1
+ hast-util-heading-rank: 2.1.1
+ hast-util-is-element: 2.1.3
+ unified: 10.1.2
+ unist-util-visit: 4.1.2
+
+ rehype-remove-comments@5.0.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ hast-util-is-conditional-comment: 2.0.0
+ unified: 10.1.2
+ unist-util-filter: 4.0.1
+
+ rehype-stringify@9.0.4:
+ dependencies:
+ '@types/hast': 2.3.10
+ hast-util-to-html: 8.0.4
+ unified: 10.1.2
+
+ relateurl@0.2.7: {}
+
+ remark-directive@2.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-directive: 2.2.4
+ micromark-extension-directive: 2.2.1
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-frontmatter@4.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-frontmatter: 1.0.1
+ micromark-extension-frontmatter: 1.1.1
+ unified: 10.1.2
+
+ remark-gfm@3.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-gfm: 2.0.2
+ micromark-extension-gfm: 2.0.3
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@10.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@10.1.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-to-hast: 12.3.0
+ unified: 10.1.2
+
+ rename-keys@1.2.0: {}
+
+ renderkid@3.0.0:
+ dependencies:
+ css-select: 4.3.0
+ dom-converter: 0.2.0
+ htmlparser2: 6.1.0
+ lodash: 4.17.21
+ strip-ansi: 6.0.1
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ reselect@4.1.8: {}
+
+ resize-observer-polyfill@1.5.1: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-global@1.0.0:
+ dependencies:
+ global-dirs: 0.1.1
+
+ resolve-pkg-maps@1.0.0: {}
+
+ resolve@1.19.0:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+
+ resolve@1.22.10:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ resolve@2.0.0-next.5:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ restore-cursor@4.0.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ reusify@1.1.0: {}
+
+ rfdc@1.4.1: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ rimraf@5.0.1:
+ dependencies:
+ glob: 10.4.5
+
+ ripemd160@2.0.1:
+ dependencies:
+ hash-base: 2.0.2
+ inherits: 2.0.4
+
+ ripemd160@2.0.2:
+ dependencies:
+ hash-base: 3.0.5
+ inherits: 2.0.4
+
+ rollup-plugin-visualizer@5.9.0(rollup@3.29.5):
+ dependencies:
+ open: 8.4.2
+ picomatch: 2.3.1
+ source-map: 0.7.4
+ yargs: 17.7.2
+ optionalDependencies:
+ rollup: 3.29.5
+
+ rollup@3.29.5:
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ run-applescript@5.0.0:
+ dependencies:
+ execa: 5.1.1
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
+ safe-array-concat@1.1.3:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ isarray: 2.0.5
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safe-push-apply@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ isarray: 2.0.5
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ safe-stable-stringify@2.5.0: {}
+
+ safer-buffer@2.1.2: {}
+
+ sass-loader@16.0.5(sass@1.89.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ neo-async: 2.6.2
+ optionalDependencies:
+ sass: 1.89.2
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+
+ sass@1.89.2:
+ dependencies:
+ chokidar: 4.0.3
+ immutable: 5.1.3
+ source-map-js: 1.2.1
+ optionalDependencies:
+ '@parcel/watcher': 2.5.1
+
+ sax@1.2.4: {}
+
+ sax@1.4.1: {}
+
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
+ schema-utils@3.3.0:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
+ schema-utils@4.3.2:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.17.1
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ ajv-keywords: 5.1.0(ajv@8.17.1)
+
+ scroll-into-view-if-needed@3.1.0:
+ dependencies:
+ compute-scroll-into-view: 3.1.1
+
+ selderee@0.11.0:
+ dependencies:
+ parseley: 0.12.1
+
+ select-hose@2.0.0: {}
+
+ semver@5.7.2: {}
+
+ semver@6.3.1: {}
+
+ semver@7.5.4:
+ dependencies:
+ lru-cache: 6.0.0
+
+ semver@7.7.2: {}
+
+ send@0.19.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ serialize-javascript@6.0.2:
+ dependencies:
+ randombytes: 2.1.0
+
+ serve-static@1.16.2:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.0
+ transitivePeerDependencies:
+ - supports-color
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ set-proto@1.0.0:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+
+ setimmediate@1.0.5: {}
+
+ setprototypeof@1.2.0: {}
+
+ sha.js@2.4.11:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+
+ shallowequal@1.1.0: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ simple-swizzle@0.2.2:
+ dependencies:
+ is-arrayish: 0.3.2
+
+ sitemap@7.1.2:
+ dependencies:
+ '@types/node': 17.0.45
+ '@types/sax': 1.2.7
+ arg: 5.0.2
+ sax: 1.4.1
+
+ slash@3.0.0: {}
+
+ slash@4.0.0: {}
+
+ slice-ansi@4.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+
+ sonic-boom@2.8.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+
+ sort-object-keys@1.1.3: {}
+
+ sort-package-json@2.4.1:
+ dependencies:
+ detect-indent: 7.0.1
+ detect-newline: 4.0.1
+ git-hooks-list: 3.2.0
+ globby: 13.2.2
+ is-plain-obj: 4.1.0
+ sort-object-keys: 1.1.3
+
+ sort-package-json@3.3.1:
+ dependencies:
+ detect-indent: 7.0.1
+ detect-newline: 4.0.1
+ git-hooks-list: 4.1.1
+ is-plain-obj: 4.1.0
+ semver: 7.7.2
+ sort-object-keys: 1.1.3
+ tinyglobby: 0.2.14
+
+ source-map-js@1.2.1: {}
+
+ source-map-resolve@0.6.0:
+ dependencies:
+ atob: 2.1.2
+ decode-uri-component: 0.2.2
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.5.7: {}
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.4: {}
+
+ space-separated-tokens@2.0.2: {}
+
+ spdx-correct@3.2.0:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.21
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@3.0.1:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.21
+
+ spdx-license-ids@3.0.21: {}
+
+ spdy-transport@3.0.0:
+ dependencies:
+ debug: 4.4.1(supports-color@5.5.0)
+ detect-node: 2.1.0
+ hpack.js: 2.1.6
+ obuf: 1.1.2
+ readable-stream: 3.6.2
+ wbuf: 1.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ spdy@4.0.2:
+ dependencies:
+ debug: 4.4.1(supports-color@5.5.0)
+ handle-thing: 2.0.1
+ http-deceiver: 1.2.7
+ select-hose: 2.0.0
+ spdy-transport: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ split-on-first@1.1.0: {}
+
+ split2@3.2.2:
+ dependencies:
+ readable-stream: 3.6.2
+
+ split2@4.2.0: {}
+
+ sprintf-js@1.0.3: {}
+
+ stable@0.1.8: {}
+
+ stackframe@1.3.4: {}
+
+ statuses@2.0.1: {}
+
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
+ stream-browserify@2.0.2:
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+
+ stream-http@2.8.3:
+ dependencies:
+ builtin-status-codes: 3.0.0
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ to-arraybuffer: 1.0.1
+ xtend: 4.0.2
+
+ stream-shift@1.0.3: {}
+
+ strict-uri-encode@2.0.0: {}
+
+ string-argv@0.3.2: {}
+
+ string-convert@0.2.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string.prototype.matchall@4.0.12:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ internal-slot: 1.1.0
+ regexp.prototype.flags: 1.5.4
+ set-function-name: 2.0.2
+ side-channel: 1.1.0
+
+ string.prototype.trim@1.2.10:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+ has-property-descriptors: 1.0.2
+
+ string.prototype.trimend@1.0.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+
+ string_decoder-okam@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ string_decoder@0.10.31: {}
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ strip-bom@3.0.0: {}
+
+ strip-final-newline@2.0.0: {}
+
+ strip-final-newline@3.0.0: {}
+
+ strip-indent@3.0.0:
+ dependencies:
+ min-indent: 1.0.1
+
+ strip-json-comments@3.1.1: {}
+
+ style-search@0.1.0: {}
+
+ style-to-object@0.4.4:
+ dependencies:
+ inline-style-parser: 0.1.1
+
+ styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1):
+ dependencies:
+ '@babel/helper-module-imports': 7.27.1(supports-color@5.5.0)
+ '@babel/traverse': 7.27.7(supports-color@5.5.0)
+ '@emotion/is-prop-valid': 1.3.1
+ '@emotion/stylis': 0.8.5
+ '@emotion/unitless': 0.7.5
+ babel-plugin-styled-components: 2.1.4(@babel/core@7.27.7)(styled-components@5.3.11(@babel/core@7.27.7)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0)
+ css-to-react-native: 3.2.0
+ hoist-non-react-statics: 3.3.2
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.3.1
+ shallowequal: 1.1.0
+ supports-color: 5.5.0
+ transitivePeerDependencies:
+ - '@babel/core'
+
+ stylelint-config-recommended@7.0.0(stylelint@14.16.1):
+ dependencies:
+ stylelint: 14.16.1
+
+ stylelint-config-standard@25.0.0(stylelint@14.16.1):
+ dependencies:
+ stylelint: 14.16.1
+ stylelint-config-recommended: 7.0.0(stylelint@14.16.1)
+
+ stylelint@14.16.1:
+ dependencies:
+ '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2)
+ balanced-match: 2.0.0
+ colord: 2.9.3
+ cosmiconfig: 7.1.0
+ css-functions-list: 3.2.3
+ debug: 4.4.1(supports-color@5.5.0)
+ fast-glob: 3.3.3
+ fastest-levenshtein: 1.0.16
+ file-entry-cache: 6.0.1
+ global-modules: 2.0.0
+ globby: 11.1.0
+ globjoin: 0.1.4
+ html-tags: 3.3.1
+ ignore: 5.3.2
+ import-lazy: 4.0.0
+ imurmurhash: 0.1.4
+ is-plain-object: 5.0.0
+ known-css-properties: 0.26.0
+ mathml-tag-names: 2.1.3
+ meow: 9.0.0
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-media-query-parser: 0.2.3
+ postcss-resolve-nested-selector: 0.1.6
+ postcss-safe-parser: 6.0.0(postcss@8.5.6)
+ postcss-selector-parser: 6.1.2
+ postcss-value-parser: 4.2.0
+ resolve-from: 5.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ style-search: 0.1.0
+ supports-hyperlinks: 2.3.0
+ svg-tags: 1.0.0
+ table: 6.9.0
+ v8-compile-cache: 2.4.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ stylis@4.2.0: {}
+
+ stylis@4.3.6: {}
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.10
+ commander: 4.1.1
+ glob: 10.4.5
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.7
+ ts-interface-checker: 0.1.13
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-hyperlinks@2.3.0:
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svg-parser@2.0.4: {}
+
+ svg-pathdata@5.0.5: {}
+
+ svg-tags@1.0.0: {}
+
+ svgo-browser@1.3.8:
+ dependencies:
+ chalk: 2.4.2
+ coa: 2.0.2
+ css-select: 2.1.0
+ css-select-base-adapter: 0.1.1
+ css-tree: 1.0.0-alpha.37
+ csso: 4.2.0
+ js-yaml: 3.14.1
+ mkdirp: 0.5.6
+ sax: 1.2.4
+ stable: 0.1.8
+ unquote: 1.1.1
+ util.promisify: 1.0.1
+
+ svgo@2.8.0:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 4.3.0
+ css-tree: 1.1.3
+ csso: 4.2.0
+ picocolors: 1.1.1
+ stable: 0.1.8
+
+ svgson@4.1.0:
+ dependencies:
+ deep-rename-keys: 0.2.1
+ omit-deep: 0.3.0
+ xml-reader: 2.4.3
+
+ synckit@0.11.8:
+ dependencies:
+ '@pkgr/core': 0.2.7
+
+ synckit@0.8.5:
+ dependencies:
+ '@pkgr/utils': 2.4.2
+ tslib: 2.8.1
+
+ systemjs@6.15.1: {}
+
+ table@6.9.0:
+ dependencies:
+ ajv: 8.17.1
+ lodash.truncate: 4.4.2
+ slice-ansi: 4.0.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ tapable@2.2.2: {}
+
+ terser-webpack-plugin@5.3.14(@swc/core@1.9.2(@swc/helpers@0.5.1))(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.27
+ jest-worker: 27.5.1
+ schema-utils: 4.3.2
+ serialize-javascript: 6.0.2
+ terser: 5.43.1
+ webpack: 5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))
+ optionalDependencies:
+ '@swc/core': 1.9.2(@swc/helpers@0.5.1)
+
+ terser@5.43.1:
+ dependencies:
+ '@jridgewell/source-map': 0.3.8
+ acorn: 8.15.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+
+ text-extensions@1.9.0: {}
+
+ text-table@0.2.0: {}
+
+ textextensions@2.6.0: {}
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ thread-stream@0.15.2:
+ dependencies:
+ real-require: 0.1.0
+
+ throttle-debounce@5.0.2: {}
+
+ through2@0.4.2:
+ dependencies:
+ readable-stream: 1.0.34
+ xtend: 2.1.2
+
+ through2@4.0.2:
+ dependencies:
+ readable-stream: 3.6.2
+
+ through@2.3.8: {}
+
+ timers-browserify@2.0.12:
+ dependencies:
+ setimmediate: 1.0.5
+
+ tinyglobby@0.2.14:
+ dependencies:
+ fdir: 6.4.6(picomatch@4.0.2)
+ picomatch: 4.0.2
+
+ titleize@3.0.0: {}
+
+ tmpl@1.0.5: {}
+
+ to-arraybuffer@1.0.1: {}
+
+ to-buffer@1.2.1:
+ dependencies:
+ isarray: 2.0.5
+ safe-buffer: 5.2.1
+ typed-array-buffer: 1.0.3
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toggle-selection@1.0.6: {}
+
+ toidentifier@1.0.1: {}
+
+ transformation-matrix@2.16.1: {}
+
+ traverse@0.6.6: {}
+
+ trim-lines@3.0.1: {}
+
+ trim-newlines@3.0.1: {}
+
+ trim-right@1.0.1: {}
+
+ trough@2.2.0: {}
+
+ ts-interface-checker@0.1.13: {}
+
+ ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.1))(@types/node@20.5.1)(typescript@5.4.2):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 20.5.1
+ acorn: 8.15.0
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.4.2
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ optionalDependencies:
+ '@swc/core': 1.9.2(@swc/helpers@0.5.1)
+
+ ts-toolbelt@9.6.0: {}
+
+ tsconfig-paths@4.0.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@1.14.1: {}
+
+ tslib@2.8.1: {}
+
+ tsutils@3.21.0(typescript@5.4.2):
+ dependencies:
+ tslib: 1.14.1
+ typescript: 5.4.2
+
+ tsx@3.12.2:
+ dependencies:
+ '@esbuild-kit/cjs-loader': 2.4.4
+ '@esbuild-kit/core-utils': 3.3.2
+ '@esbuild-kit/esm-loader': 2.6.5
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ tty-browserify@0.0.0: {}
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-fest@0.18.1: {}
+
+ type-fest@0.20.2: {}
+
+ type-fest@0.6.0: {}
+
+ type-fest@0.8.1: {}
+
+ type-fest@1.4.0: {}
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-length@1.0.3:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-offset@1.0.4:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+ reflect.getprototypeof: 1.0.10
+
+ typed-array-length@1.0.7:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ is-typed-array: 1.1.15
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
+
+ types-ramda@0.29.10:
+ dependencies:
+ ts-toolbelt: 9.6.0
+
+ typescript-transform-paths@3.4.7(typescript@5.4.2):
+ dependencies:
+ minimatch: 3.1.2
+ typescript: 5.4.2
+
+ typescript@5.4.2: {}
+
+ typescript@5.8.3: {}
+
+ umi@4.4.11(@babel/core@7.27.7)(@types/node@20.5.1)(@types/react@18.3.23)(eslint@8.57.1)(lightningcss@1.22.1)(prettier@2.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(sass@1.89.2)(stylelint@14.16.1)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1))):
+ dependencies:
+ '@babel/runtime': 7.23.6
+ '@umijs/bundler-utils': 4.4.11
+ '@umijs/bundler-webpack': 4.4.11(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ '@umijs/core': 4.4.11
+ '@umijs/lint': 4.4.11(eslint@8.57.1)(stylelint@14.16.1)(typescript@5.4.2)
+ '@umijs/preset-umi': 4.4.11(@types/node@20.5.1)(@types/react@18.3.23)(lightningcss@1.22.1)(rollup@3.29.5)(sass@1.89.2)(terser@5.43.1)(type-fest@1.4.0)(typescript@5.4.2)(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ '@umijs/renderer-react': 4.4.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@umijs/server': 4.4.11
+ '@umijs/test': 4.4.11(@babel/core@7.27.7)
+ '@umijs/utils': 4.4.11
+ prettier-plugin-organize-imports: 3.2.4(prettier@2.8.8)(typescript@5.4.2)
+ prettier-plugin-packagejson: 2.4.3(prettier@2.8.8)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@rspack/core'
+ - '@types/node'
+ - '@types/react'
+ - '@types/webpack'
+ - '@volar/vue-language-plugin-pug'
+ - '@volar/vue-typescript'
+ - eslint
+ - jest
+ - lightningcss
+ - node-sass
+ - postcss-html
+ - postcss-jsx
+ - postcss-less
+ - postcss-markdown
+ - postcss-scss
+ - prettier
+ - react
+ - react-dom
+ - rollup
+ - sass
+ - sass-embedded
+ - sockjs-client
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - type-fest
+ - typescript
+ - webpack
+ - webpack-dev-server
+ - webpack-hot-middleware
+ - webpack-plugin-serve
+
+ unbox-primitive@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ which-boxed-primitive: 1.1.1
+
+ undici-types@7.8.0: {}
+
+ unfetch@5.0.0: {}
+
+ unified@10.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ bail: 2.0.2
+ extend: 3.0.2
+ is-buffer: 2.0.5
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 5.3.7
+
+ unist-util-filter@4.0.1:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
+ unist-util-generated@2.0.1: {}
+
+ unist-util-is@5.2.1:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-position@4.0.4:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-stringify-position@3.0.3:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-visit-parents@5.1.3:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+
+ unist-util-visit@4.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
+ universalify@0.1.2: {}
+
+ universalify@2.0.1: {}
+
+ unpipe@1.0.0: {}
+
+ unquote@1.1.1: {}
+
+ unset-value@0.1.2:
+ dependencies:
+ has-value: 0.3.1
+ isobject: 3.0.1
+
+ untildify@4.0.0: {}
+
+ update-browserslist-db@1.1.3(browserslist@4.25.1):
+ dependencies:
+ browserslist: 4.25.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ url-okam@0.11.1:
+ dependencies:
+ punycode: 1.4.1
+ qs: 6.14.0
+
+ url@0.11.4:
+ dependencies:
+ punycode: 1.4.1
+ qs: 6.14.0
+
+ use-debouncy@4.6.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
+ use-isomorphic-layout-effect@1.2.1(@types/react@18.3.23)(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.23
+
+ use-sync-external-store@1.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
+ util-deprecate@1.0.2: {}
+
+ util-okam@0.11.1:
+ dependencies:
+ inherits: 2.0.3
+
+ util.promisify@1.0.1:
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ has-symbols: 1.1.0
+ object.getownpropertydescriptors: 2.1.8
+
+ util@0.10.3:
+ dependencies:
+ inherits: 2.0.1
+
+ util@0.10.4:
+ dependencies:
+ inherits: 2.0.3
+
+ util@0.11.1:
+ dependencies:
+ inherits: 2.0.3
+
+ utila@0.4.0: {}
+
+ utils-merge@1.0.1: {}
+
+ uuid@8.3.2: {}
+
+ uvu@0.5.6:
+ dependencies:
+ dequal: 2.0.3
+ diff: 5.2.0
+ kleur: 4.1.5
+ sade: 1.8.1
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ v8-compile-cache@2.3.0: {}
+
+ v8-compile-cache@2.4.0: {}
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+
+ validator@13.15.15: {}
+
+ vanilla-jsoneditor@0.16.1: {}
+
+ vary@1.1.2: {}
+
+ vfile-location@4.1.0:
+ dependencies:
+ '@types/unist': 2.0.11
+ vfile: 5.3.7
+
+ vfile-message@3.1.4:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-stringify-position: 3.0.3
+
+ vfile@5.3.7:
+ dependencies:
+ '@types/unist': 2.0.11
+ is-buffer: 2.0.5
+ unist-util-stringify-position: 3.0.3
+ vfile-message: 3.1.4
+
+ vite@4.5.2(@types/node@20.5.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.89.2)(terser@5.43.1):
+ dependencies:
+ esbuild: 0.18.20
+ postcss: 8.5.6
+ rollup: 3.29.5
+ optionalDependencies:
+ '@types/node': 20.5.1
+ fsevents: 2.3.3
+ less: 4.1.3
+ lightningcss: 1.22.1
+ sass: 1.89.2
+ terser: 5.43.1
+
+ vm-browserify@1.1.2: {}
+
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+
+ watchpack@2.4.4:
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ wbuf@1.7.3:
+ dependencies:
+ minimalistic-assert: 1.0.1
+
+ web-namespaces@2.0.1: {}
+
+ web-streams-polyfill@3.3.3: {}
+
+ webpack-5-chain@8.0.1:
+ dependencies:
+ deepmerge: 1.5.2
+ javascript-stringify: 2.1.0
+
+ webpack-sources@3.3.3: {}
+
+ webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)):
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/wasm-edit': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ acorn: 8.15.0
+ browserslist: 4.25.1
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.18.2
+ es-module-lexer: 1.7.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.0
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 4.3.2
+ tapable: 2.2.2
+ terser-webpack-plugin: 5.3.14(@swc/core@1.9.2(@swc/helpers@0.5.1))(webpack@5.99.9(@swc/core@1.9.2(@swc/helpers@0.5.1)))
+ watchpack: 2.4.4
+ webpack-sources: 3.3.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
+ which-boxed-primitive@1.1.1:
+ dependencies:
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
+
+ which-builtin-type@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ function.prototype.name: 1.1.8
+ has-tostringtag: 1.0.2
+ is-async-function: 2.1.1
+ is-date-object: 1.1.0
+ is-finalizationregistry: 1.1.1
+ is-generator-function: 1.1.0
+ is-regex: 1.2.1
+ is-weakref: 1.1.1
+ isarray: 2.0.5
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.19
+
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
+
+ which-typed-array@1.1.19:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@1.3.1:
+ dependencies:
+ isexe: 2.0.0
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@4.0.2:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+
+ xml-lexer@0.2.2:
+ dependencies:
+ eventemitter3: 2.0.3
+
+ xml-reader@2.4.3:
+ dependencies:
+ eventemitter3: 2.0.3
+ xml-lexer: 0.2.2
+
+ xtend@2.1.2:
+ dependencies:
+ object-keys: 0.4.0
+
+ xtend@4.0.2: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yallist@4.0.0: {}
+
+ yaml@1.10.2: {}
+
+ yaml@2.3.1: {}
+
+ yargs-parser@20.2.9: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yn@3.1.1: {}
+
+ yocto-queue@0.1.0: {}
+
+ z-schema@5.0.5:
+ dependencies:
+ lodash.get: 4.4.2
+ lodash.isequal: 4.5.0
+ validator: 13.15.15
+ optionalDependencies:
+ commander: 9.5.0
+
+ zod-validation-error@2.1.0(zod@3.25.67):
+ dependencies:
+ zod: 3.25.67
+
+ zod@3.25.67: {}
+
+ zustand@4.5.7(@types/react@18.3.23)(react@18.3.1):
+ dependencies:
+ use-sync-external-store: 1.5.0(react@18.3.1)
+ optionalDependencies:
+ '@types/react': 18.3.23
+ react: 18.3.1
+
+ zwitch@2.0.4: {}
diff --git a/packages/inula2-ui2/inulaUI/src/button/index.md b/packages/inula2-ui2/inulaUI/src/button/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..fc52cb703017de71c6f25781e2b6911ace2e3edd
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/button/index.md
@@ -0,0 +1,245 @@
+# Button 按钮组件
+
+支持五种类型和四种状态属性。
+
+## 何时使用
+
+标记了一个(或封装一组)操作命令,响应用户点击行为,触发相应的业务逻辑。
+
+在 inula-ui 中我们提供了五种按钮。
+
+- 🔵 主按钮:用于主行动点,一个操作区域只能有一个主按钮。
+- ⚪️ 默认按钮:用于没有主次之分的一组行动点。
+- 😶 虚线按钮:常用于添加操作。
+- 🔤 文本按钮:用于最次级的行动点。
+- 🔗 链接按钮:一般用于链接,即导航至某位置。
+
+以及四种状态属性与上面配合使用。
+
+- ⚠️ 危险:删除/移动/修改权限等危险操作,一般需要二次确认。
+- 👻 幽灵:用于背景色比较复杂的地方,常用在首页/产品页等展示场景。
+- 🚫 禁用:行动点不可用的时候,一般需要文案解释。
+- 🔃 加载中:用于异步操作等待反馈的时候,也可以避免多次提交。
+
+## 代码演示
+
+
+
+
+
基本
+
展示按钮的五种类型:主按钮、默认按钮、虚线按钮、文本按钮、链接按钮、变体样式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button} from 'inula-ui';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
+
+```
+
+
+
+
+
+
+
+
+
危险
+
展示五种类型按钮的'危险'状态用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button} from 'inula-ui';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
+
+```
+
+
+
+
+
+
+
+
+
幽灵
+
展示按钮的'幽灵'状态,包括主按钮、默认按钮和危险主按钮的幽灵样式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button} from 'inula-ui';
+
+function ButtonDemo() {
+ return (
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
+```
+
+
+
+
+
+
+
+
+
禁用
+
展示五种类型按钮的'禁用'状态用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button} from 'inula-ui';
+
+function ButtonDemo() {
+ return (
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
+```
+
+
+
+
+
+
+
+
+
加载中
+
展示五种类型按钮的'加载中'状态用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button} from 'inula-ui';
+
+function ButtonDemo() {
+ return (
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
+```
+
+
+
+
+
+
+
+
+
交互加载
+
演示点击按钮后进入加载中状态,1.5秒后恢复。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button} from 'inula-ui';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
+ );
+}
+export default ButtonDemo;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| type | 按钮类型 | `string` | `primary` / `default` / `dashed` / `text` / `link` | `default` |
+| variant | 视觉变体 | `string` | `outlined` / `filled` / `borderless` / `underlined` | `outlined` |
+| danger | 危险状态样式 | `boolean` | - | `false` |
+| ghost | 幽灵样式(深色背景常用) | `boolean` | - | `false` |
+| disabled | 禁用状态 | `boolean` | - | `false` |
+| loading | 加载中状态(禁用且展示旋转图标) | `boolean` | - | `false` |
+| htmlType | 原生按钮类型 | `string` | `button` / `submit` / `reset` | `button` |
+| onClick | 点击回调 | `(e) => void` | - | - |
+| children | 按钮内容 | `ReactNode` | - | - |
+
+说明:其余属性会透传给原生 `button` 元素(如 `title`、`id`、`aria-*` 等)。
diff --git a/packages/inula2-ui2/inulaUI/src/card/index.md b/packages/inula2-ui2/inulaUI/src/card/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..c588e9f6e9b03d91111a26c6bf72478c24b51917
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/card/index.md
@@ -0,0 +1,508 @@
+# Card 卡片组件
+
+## 何时使用
+
+卡片容器,可承载文字、列表、图片、段落,常用于后台概览页面。
+
+## 代码演示
+
+
+
+
+
基本
+
完整的Card由header、body、footer三部分组成,支持两种大小、两种边框样式、两种hover动效
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Card, Tag, Icon } from 'inula-ui';
+
+const actions = [
+ ,
+ ,
+ ,
+];
+
+const CardDemo = () => {
+ return (
+
+
+ 完整Card布局
+
+
+ More
}
+ cover={
+

+ }
+ actions={actions}
+ >
+
Card content
+
Card content
+
Card content
+
+
+
+ 不同大小、边框、hover动效的Card
+
+
+
+ 默认型号,无hover动效
+
+
+ 小号,有hover动效
+
+
+
+ );
+};
+
+export default CardDemo;
+```
+
+
+
+
+
+
+
+
+
加载、嵌套
+
支持受控加载、嵌套卡片
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Card, Tag, Switch, Icon } from 'inula-ui';
+
+const actions = [
+ ,
+ ,
+ ,
+];
+
+const CardDemo = () => {
+ let loading = false;
+ return (
+
+
+ 定义加载内容状态的Card
+
+
+ More
}
+ cover={
+

+ }
+ actions={actions}
+ loading={loading}
+ >
+
Card content
+
Card content
+
Card content
+
+
+ {
+ loading = !loading;
+ }}
+ />
+ 点击切换内容加载状态
+
+
+ 嵌套Card样式
+
+
+ 放在Card下的Card组件样式
+
+
+
+ );
+};
+
+export default CardDemo;
+```
+
+
+
+
+
+
+
+
+
CardMeta组件
+
CardMeta组件可以快速定义固定布局的内容。
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Card, Tag, Icon, CardMeta } from 'inula-ui';
+
+const actions = [
+ ,
+ ,
+ ,
+];
+
+const CardDemo = () => {
+ return (
+
+
+ Meta组件,快速定义内容
+
+
+
+ }
+ actions={actions}
+ >
+
+ }
+ title="Card title"
+ description="This is the description"
+ />
+
+
+
+ );
+};
+
+export default CardDemo;
+```
+
+
+
+
+
+
+
+
+
CardGrid网格型内嵌卡片
+
常见的卡片内容区隔模式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Card, CardGrid, Tag } from 'inula-ui';
+
+const CardDemo = () => {
+ return (
+
+
+ Grid组件,网格型内嵌
+
+
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+
+
+ );
+};
+
+export default CardDemo;
+```
+
+
+
+
+
+
+
+
+
Tabs切换卡片
+
可以定义带标签的卡片。
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Card, Tag } from 'inula-ui';
+
+const tabList = [
+ {
+ key: 'tab1',
+ tab: 'tab1',
+ },
+ {
+ key: 'tab2',
+ tab: 'tab2',
+ },
+];
+
+const contentList = {
+ tab1: content1
,
+ tab2: content2
,
+};
+
+const tabListNoTitle = [
+ {
+ key: 'article',
+ label: 'article',
+ },
+ {
+ key: 'app',
+ label: 'app',
+ },
+ {
+ key: 'project',
+ label: 'project',
+ },
+];
+
+const contentListNoTitle = {
+ article: article content
,
+ app: app content
,
+ project: project content
,
+};
+
+const CardDemo = () => {
+ let activeTabKey1 = 'tab1';
+ let activeTabKey2 = 'article';
+ const onTab1Change = (key) => {
+ activeTabKey1 = key;
+ };
+
+ const onTab2Change = (key) => {
+ activeTabKey2 = key;
+ };
+
+ return (
+
+
+ 两种传参方式的标签卡片
+
+
+ More}
+ tabList={tabList}
+ activeTabKey={activeTabKey1}
+ onTabChange={onTab1Change}
+ >
+ {contentList[activeTabKey1]}
+
+
+
+ More}
+ onTabChange={onTab2Change}
+ tabProps={{
+ size: 'middle',
+ }}
+ >
+ {contentListNoTitle[activeTabKey2]}
+
+
+
+ );
+};
+
+export default CardDemo;
+```
+
+
+
+
+
+## API
+
+### Card
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| ------------------- | ------------------------------------------------------ | ------------------------------------------------------------------- | ---------------------------- | ------------ |
+| type | 卡片类型 | `string` | `'default' \| 'inner'` | `'default'` |
+| size | 卡片大小 | `string` | `'small' \| 'default'` | `'default'` |
+| loading | 卡片内容加载 | `boolean` | - | `false` |
+| variant | 边框样式 | `string` | `'outlined' \| 'borderless'` | `'outlined'` |
+| hoverable | 悬停浮空 | `boolean` | - | `false` |
+| gridbox | 网格布局,只有`children`全为`CardGrid`时才能传入`true` | `boolean` | - | `false` |
+| tabList | tab 标签 | `{ key: string, tab: string }[] \| { key: string,label: string }[]` | - | - |
+| tabProps | tab 相关属性 | `object` | - | - |
+| activeTabKey | tab 选中标签 | `string` | - | - |
+| defaultActiveTabKey | tab 初始选中标签 | `string` | - | - |
+| onTabChange | tab 状态改变事件 | `function(key)` | - | - |
+| title | 头部 title | `string` | - | - |
+| extra | 头部额外内容 | `node` | - | - |
+| cover | 卡片封面,位于 header 下方 | `node` | - | - |
+| actions | 卡片操作栏 | `node[] \|string[]` | - | - |
+| children | 卡片内容 | `node` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+| ...rest | 其他属性 | - | - | - |
+
+### CardMeta
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| ----------- | ---------- | --------------- | ------ | ------ |
+| avatar | 头像型 | `node` | - | - |
+| title | 标题 | `string\| node` | - | - |
+| description | 介绍 | `string\|node` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+
+### CardGrid
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| --------- | ------------------ | --------------- | ------ | ------ |
+| hoverable | hover 悬浮动画效果 | `string` | - | `true` |
+| children | 卡片内容 | `node` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+| ...rest | 其他属性 | - | - | - |
+
+说明:
+
+- 完整布局 Card 的 header 包含`title、extra`,如果为标签卡片还包含`tabs`,body 包含`cover`封面、`children`内容,footer 为`actions`。
+- 网格布局属性`gridbox`只有孩子全为`CardGrid`才会生效。
diff --git a/packages/inula2-ui2/inulaUI/src/checkbox/index.md b/packages/inula2-ui2/inulaUI/src/checkbox/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..c03c1e71ca4ceab1576f64605f2334993c0844ef
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/checkbox/index.md
@@ -0,0 +1,253 @@
+# Checkbox 多选框
+
+收集用户的多项选择。
+
+## 何时使用
+
+在一组可选项中进行多项选择时;
+
+单独使用可以表示两种状态之间的切换,和 switch 类似。区别在于切换 switch 会直接触发状态改变,而 checkbox 一般用于状态标记,需要和提交操作配合。
+
+## 代码演示
+
+
+
+
+
基本Checkbox
+
选中、默认选中、禁用、indeterminate样式
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Checkbox,Tag} from 'inula-ui';
+
+const CheckboxDemo = () => {
+ return (
+
+
+ 基本状态
+ 普通Checkbox
+ 选中
+ 默认选中
+
+
+ indeterminate复选框样式
+ indeterminate按钮
+
+ indeterminate选中
+
+
+
+ 禁用状态
+ 禁用未选中
+
+ 禁用选中
+
+
+ 禁用默认选中
+
+
+ indeterminate按钮禁用
+
+
+
+ );
+};
+
+export default CheckboxDemo;
+
+```
+
+
+
+
+
+
+
+
+
CheckboxGroup
+
选中、默认选中、禁用、外部受控
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tag,CheckboxGroup} from 'inula-ui';
+
+const CheckboxDemo = () => {
+ let checkedList = ["Apple", "Pear"];
+
+ const options = [
+ { label: "Apple", value: "Apple", disabled: true },
+ { label: "Pear", value: "Pear" },
+ { label: "Orange", value: "Orange" },
+ ];
+
+ const onChange = (list) => {
+ checkedList = list;
+ };
+
+ return (
+
+
+ 定义默认选中和选中:
+
+
+
+ 只定义默认选中
+
+
+
+ 只定义选中
+
+
+
+ 全禁用
+
+
+
+ 外部受控
+
+
+
+ );
+};
+
+export default CheckboxDemo;
+
+```
+
+
+
+
+
+
+
+
+
案例
+
区分全不选、部分选、全选的复选框案例
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Checkbox, CheckboxGroup} from 'inula-ui';
+
+const plainOptions = ['Apple', 'Pear', 'Orange'];
+const defaultCheckedList = ['Apple', 'Orange'];
+
+const CheckboxDemo = () => {
+ let checkedList = defaultCheckedList;
+ let checkAll = plainOptions.length === checkedList.length;
+ let indeterminate = checkedList.length > 0 && checkedList.length < plainOptions.length;
+
+ const onChange = (list) => {
+ checkedList = list;
+ };
+
+ const onCheckAllChange = (e) => {
+ checkedList = e.target.checked ? plainOptions : [];
+ };
+
+ return (
+
+
+ Check all
+
+
+
+ );
+};
+
+export default CheckboxDemo;
+```
+
+
+
+
+
+## API
+
+### Checkbox
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| checked | 受控模式下的选中状态 | `boolean` | - | - |
+| defaultChecked | 非受控模式下的初始选中状态 | `boolean` | - | `false` |
+| disabled | 是否禁用 | `boolean` | - | `false` |
+| indeterminate | 半选状态 | `boolean` | - | `false` |
+| variant | 复选框形态 | `string` | `outlined` / `filled` / `borderless` / `underlined` | `outlined` |
+| onChange | 变化时回调 | `(e) => void` | - | - |
+| onBlur | 失去焦点时回调 | `(e) => void` | - | - |
+| onFocus | 获得焦点时回调 | `(e) => void` | - | - |
+| children | 复选框内容 | `ReactNode` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+
+### CheckboxGroup
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| value | 受控模式下的选中值数组 | `string[]` | - | - |
+| defaultValue | 非受控模式下的初始选中值数组 | `string[]` | - | `[]` |
+| disabled | 是否禁用所有复选框 | `boolean` | - | `false` |
+| options | 选项配置 | `string[] \| { value: string, label: string, disabled?: boolean, className?: string, style?: CSSProperties }[]` | - | - |
+| onChange | 变化时回调 | `(checkedValues: string[]) => void` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+
+说明:
+
+- 受控/非受控:Checkbox 传 `checked` 为受控模式,传 `defaultChecked` 为非受控模式;CheckboxGroup 传 `value` 为受控模式,传 `defaultValue` 为非受控模式。
+- 半选状态:`indeterminate` 为 `true` 时显示半选样式,常用于全选/部分选场景。
+- 选项配置:`options` 可以是字符串数组,也可以是对象数组,对象支持 `value`、`label`、`disabled`、`className`、`style` 属性。
+- 事件回调:Checkbox 的 `onChange` 返回事件对象,CheckboxGroup 的 `onChange` 返回选中值数组。
diff --git a/packages/inula2-ui2/inulaUI/src/datepicker/index.md b/packages/inula2-ui2/inulaUI/src/datepicker/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..3a8a03bb1ddae7f1f776f757a96f8a508d93689d
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/datepicker/index.md
@@ -0,0 +1,1256 @@
+# DatePicker 日期选择器
+
+用于选择和展示日期
+
+## 何时使用
+
+当需要选择和展示日期时。
+
+## 代码演示
+
+
+
+
+
基本datepicker
+
支持五种picker、四种varient、两种status
+
+
+ 查看示例代码
+
+```jsx | pure
+import { DatePicker, Tag } from 'inula-ui';
+
+function DatePickerDemo() {
+ const handleChange = (value) => {
+ console.log('选择的值:', value);
+ };
+
+ return (
+
+
+ 五种picker基本日期选择器
+
+
+
+
+
+
+
+
+ 不同尺寸日期选择器
+
+
+
+
+
+
+ 禁用状态基本日期选择器
+
+
+
+
+ 四种varient变体基本选择器
+
+
+
+
+
+
+
+ 两种status基本日期选择器
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
+```
+
+
+
+
+
+
+
+
+
needConfirm,showNow,Icon
+
支持needConfirm确认模式,显示今天,自定义图标
+
+
+ 查看示例代码
+
+```jsx | pure
+import { DatePicker, Tag, Icon } from 'inula-ui';
+
+function DatePickerDemo() {
+ return (
+
+
+ 需要确认的日期选择器
+
+
+
+
+
+
+
+
+ showNow控制今天按钮显示
+
+
+
+
+ 自定义prefix,suffixIcon图标
+ }
+ placeholder="prefix"
+ />
+ }
+ placeholder="suffixIcon"
+ />
+
+
+
+ 自定义日历title切换图标
+ }
+ style={{ width: 200 }}
+ placeholder="prevIcon"
+ placement="topLeft"
+ />
+ }
+ style={{ width: 200 }}
+ placeholder="nextIcon"
+ placement="topLeft"
+ />
+ }
+ style={{ width: 200 }}
+ placeholder="superPrevIcon"
+ placement="topLeft"
+ />
+ }
+ style={{ width: 200 }}
+ placeholder="superNextIcon"
+ placement="topLeft"
+ />
+
+
+ );
+}
+
+export default DatePickerDemo;
+```
+
+
+
+
+
+
+
+
+
defaultValue, defaultPickerValue
+
支持日期默认值,日期浮层默认值,定义浮层默认值时,每次点击会自动返回默认值面板
+
+
+ 查看示例代码
+
+```jsx | pure
+import { DatePicker, Tag } from 'inula-ui';
+
+function DatePickerDemo() {
+ return (
+
+
+ 日期默认值
+
+
+
+
+
+
+
+
+ calendar浮窗面板默认值
+
+
+
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
+```
+
+
+
+
+
+
+
+
+
disbaledDate,minDate,maxDate
+
可以通过自定义字段来限制选中范围
+
+
+ 查看示例代码
+
+```jsx | pure
+import { DatePicker, Tag } from 'inula-ui';
+
+function DatePickerDemo() {
+ return (
+
+ 范围和选中限制
+
+
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
+```
+
+
+
+
+
+
+
+
+
回调、受控、弹出位置
+
可以自定义回调函数、受控控制calendar浮层开关、通过placement控制浮层弹出位置
+
+
+ 查看示例代码
+
+```jsx | pure
+import { DatePicker, Tag, Button } from 'inula-ui';
+
+function DatePickerDemo() {
+ let open = false;
+ let defaultOpen = false;
+ let placement = 'bottomLeft';
+ let picker = 'date';
+ let size = 'default';
+
+ const handleControllOpenChange = (isOpen) => {
+ open = !isOpen;
+ };
+
+ const handleChange = (value) => {
+ console.log('选择的值:', value);
+ };
+
+ const handleOpenChange = (isOpen) => {
+ console.log(isOpen);
+ };
+
+ const handlePanleChange = (value, mode) => {
+ console.log(value, mode);
+ };
+
+ const handleClickOk = (value) => {
+ console.log('ok', value);
+ };
+
+ const onBlur = () => {
+ console.log(111);
+ };
+
+ const onFocus = () => {
+ console.log(111);
+ };
+
+ return (
+
+
+
+ 回调函数示例
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 日历弹出位置控制
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
+```
+
+
+
+
+
+
+
+
+
rangepicker
+
支持五种picker、四种varient、两种status
+
+
+ 查看示例代码
+
+```jsx | pure
+import { RangePicker, Tag } from 'inula-ui';
+
+function RangePickerDemo() {
+ const handleChange = (value) => {
+ console.log('选择的值:', value);
+ };
+
+ return (
+
+
+
+ 五种picker-range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+ 三种size-range日期选择器
+
+
+
+
+
+
+
+
+
+
+ 禁用状态range日期选择器
+
+
+
+
+
+
+
+
+ 四种varient-range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+ 两种status-range日期选择器
+
+
+
+
+
+
+
+ );
+}
+
+export default RangePickerDemo;
+```
+
+
+
+
+
+
+
+
+
needConfirm,Icon,defaultValue,范围限制
+
rangepicker也支持确认模式,自定义图标,默认值,日期范围限制
+
+
+ 查看示例代码
+
+```jsx | pure
+import { RangePicker, Tag, Icon } from 'inula-ui';
+
+function RangePickerDemo() {
+ const handleChange = (value) => {
+ console.log('选择的值:', value);
+ };
+
+ return (
+
+
+
+ 需要确认的rang日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+ 自定义前后缀图标和title切换图标的range日期选择器
+
+
+ }
+ placeholder="prefix"
+ />
+ }
+ placeholder="suffixIcon"
+ />
+ }
+ placeholder="prevIcon"
+ />
+ }
+ placeholder="nextIcon"
+ />
+ }
+ placeholder="superPrevIcon"
+ />
+ }
+ placeholder="superNextIcon"
+ />
+
+
+
+
+
+ 带defaultValue的range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+ 带日期范围限制的range日期选择器
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default RangePickerDemo;
+```
+
+
+
+
+
+
+
+
+
回调、受控、弹出位置
+
rangepikcer也可以自定义回调函数、受控控制calendar浮层开关、通过placement控制浮层弹出位置
+
+
+ 查看示例代码
+
+```jsx | pure
+import { RangePicker, Tag, Button } from 'inula-ui';
+
+function RangePickerDemo() {
+ let open = false;
+ let defaultOpen = false;
+ let placement = 'bottomLeft';
+ let picker = 'date';
+ let size = 'default';
+
+ const handleControllOpenChange = (isOpen) => {
+ open = !isOpen;
+ };
+
+ const handleChange = (value) => {
+ console.log('选择的值:', value);
+ };
+
+ const handleOpenChange = (isOpen) => {
+ console.log(isOpen);
+ };
+
+ const handlePanleChange = (value, mode) => {
+ console.log(value, mode);
+ };
+
+ const handleClickOk = (value) => {
+ console.log('ok', value);
+ };
+
+ const onBlur = () => {
+ console.log(111);
+ };
+
+ const onFocus = () => {
+ console.log(111);
+ };
+
+ return (
+
+
+
+ 自定义回调函数的range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 控制日历弹出位置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default RangePickerDemo;
+```
+
+
+
+
+
+## API
+
+### DatePicker
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| ------------------ | -------------------- | --------------------------- | ---------------------------------------------------------- | -------------- |
+| allowClear | 自定义清除按钮 | `node` | - | - |
+| showNow | 是否展示“今天”按钮 | `boolean` | - | `true` |
+| autoFocus | 自动获取焦点 | `boolean` | - | `false` |
+| inputReadOnly | 设置输入框只读 | `boolean` | - | `false` |
+| defaultOpen | 是否默认展开控制弹层 | `boolean` | - | `false` |
+| disabled | 禁用 | `boolean` | - | `false` |
+| disabledDate | 不可选择的日期 | `dateType[]` | - | - |
+| onChange | 时间变化回调 | `(value:dateType) => void` | - | - |
+| onOk | 点击确定回调 | `(value:dateType) => void` | - | - |
+| open | 控制弹层是否展开 | `boolean` | - | - |
+| defaultPickerValue | 默认面板日期 | `dateType` | - | - |
+| defaultValue | 默认值 | `dateType` | - | - |
+| minDate | 最小日期 | `dateType` | - | - |
+| maxDate | 最大日期 | `dateType` | - | - |
+| needConfirm | 是否需要确认按钮 | `boolean` | - | `false` |
+| picker | 设置选择器类型 | `string` | `'date' \| 'week' \| 'month' \| 'quarter'` `year` | `'date'` |
+| placeholder | 输入框提示文字 | `string` | - | - |
+| placement | 选择器弹出的位置 | `string` | `'bottomLeft' \| 'bottomRight' \| 'topLeft' \| 'topRight'` | `'bottomLeft'` |
+| prefix | 自定义前缀 | `node` | - | - |
+| prevIcon | 自定义上一个图标-月 | `node` | - | - |
+| nextIcon | 自定义下一个图标-月 | `node` | - | - |
+| suffixIcon | 自定义后缀 | `node` | - | - |
+| superNextIcon | 自定义下一个图标-年 | `node` | - | - |
+| superPrevIcon | 自定义上一个图标-年 | `node` | - | - |
+| size | input 大小 | `string` | `'large':40px, 'small':24px, 'default':32px` | - |
+| status | 设置校验状态 | `string` | `'error' \| 'warning'` - | - |
+| disabled | 是否禁用 | `boolean` | - | `false` |
+| variant | 复选框形态 | `string` | `'outlined' \| 'filled' \| 'borderless' \| 'underlined'` | `'outlined'` |
+| onOpenChange | 变化时回调 | `(value: dateType) => void` | - | - |
+| onPanleChange | 变化时回调 | `(value: dateType) => void` | - | - |
+| onBlur | 失去焦点时回调 | `(value: dateType) => void` | - | - |
+| onFocus | 获得焦点时回调 | `(value: dateType) => void` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+
+### RangePicker
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| ------------- | -------------------- | --------------------------- | ---------------------------------------------------------- | -------------- |
+| allowClear | 自定义清除按钮 | `node` | - | - |
+| showNow | 是否展示“今天”按钮 | `boolean` | - | `true` |
+| autoFocus | 自动获取焦点 | `boolean` | - | `false` |
+| inputReadOnly | 设置输入框只读 | `boolean` | - | `false` |
+| defaultOpen | 是否默认展开控制弹层 | `boolean` | - | `false` |
+| disabled | 禁用 | `boolean` | - | `false` |
+| disabledDate | 不可选择的日期 | `dateType[]` | - | - |
+| onChange | 时间变化回调 | `(value:dateType) => void` | - | - |
+| onOk | 点击确定回调 | `(value:dateType) => void` | - | - |
+| open | 控制弹层是否展开 | `boolean` | - | - |
+| order | 是否自动排序 | `boolean` | - | `true` |
+| defaultValue | 默认值 | `dateType[]` | - | - |
+| minDate | 最小日期 | `dateType` | - | - |
+| maxDate | 最大日期 | `dateType` | - | - |
+| needConfirm | 是否需要确认按钮 | `boolean` | - | `false` |
+| picker | 设置选择器类型 | `string` | `'date' \| 'week' \| 'month' \| 'quarter'` `year` | `'date'` |
+| placeholder | 输入框提示文字 | `string[]` | - | - |
+| placement | 选择器弹出的位置 | `string` | `'bottomLeft' \| 'bottomRight' \| 'topLeft' \| 'topRight'` | `'bottomLeft'` |
+| prefixIcon | 自定义前缀 | `node` | - | - |
+| prevIcon | 自定义上一个图标-月 | `node` | - | - |
+| nextIcon | 自定义下一个图标-月 | `node` | - | - |
+| suffixIcon | 自定义后缀 | `node` | - | - |
+| superNextIcon | 自定义下一个图标-年 | `node` | - | - |
+| superPrevIcon | 自定义上一个图标-年 | `node` | - | - |
+| size | input 大小 | `string` | `'large':40px, 'small':24px, 'default':32px` | - |
+| status | 设置校验状态 | `string` | `'error' \| 'warning'` - | - |
+| disabled | 是否禁用 | `boolean` | - | `false` |
+| variant | 复选框形态 | `string` | `'outlined' \| 'filled' \| 'borderless' \| 'underlined'` | `'outlined'` |
+| onOpenChange | 变化时回调 | `(value: dateType) => void` | - | - |
+| onPanelChange | 变化时回调 | `(value: dateType) => void` | - | - |
+| onBlur | 失去焦点时回调 | `(value: dateType) => void` | - | - |
+| onFocus | 获得焦点时回调 | `(value: dateType) => void` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+
+说明:
+
+- dateType:为对应 picker 日期选择器的格式,`date`为`YYYY-MM-DD`,`week`为`YYYY-WW周`,`month`为`YYYY-MM`,`quarter`为`YYYY-QW`,`year`为`YYYY`。
+- 受控模式:当传入`open`字段时,calendar 浮层的打开会变成受控模式。
diff --git a/packages/inula2-ui2/inulaUI/src/dialog/index.md b/packages/inula2-ui2/inulaUI/src/dialog/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..43d253c2475b2dcec0f66814c0c1a83dd9bcb053
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/dialog/index.md
@@ -0,0 +1,320 @@
+# Modal 对话框
+
+展示一个对话框,提供标题、内容区、操作区。
+
+## 何时使用
+
+需要用户处理事务,又不希望跳转页面以致打断工作流程时,可以使用 Modal 在当前页面正中打开一个浮层,承载相应的操作。
+
+## 代码演示
+
+
+
+
+
普通弹窗
+
演示普通弹窗的用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Modal,Button} from 'inula-ui';
+
+
+function Demo1() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ title="普通弹窗"
+ >
+ 这是一个最基础的弹出框内容。
+
+
+ );
+}
+export default Demo1;
+```
+
+
+
+
+
+
+
+
+
自定义标题样式
+
演示如何自定义弹窗的标题样式
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Modal,Button} from 'inula-ui';
+
+function Demo2() {
+ let open = false;
+
+ return (
+
+
+ 自定义标题样式
}
+ onClose={() => open = false}
+ >
+ 对话框内容。
+
+
+ );
+}
+export default Demo2;
+
+```
+
+
+
+
+
+
+
+
+
自定义内容
+
可以在对话框内放置任何内容。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Modal,Button} from 'inula-ui';
+
+function Demo3() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ >
+
+
这是一个自定义内容
+
可以放置任何内容
+

+
+
+
+ );
+}
+export default Demo3;
+```
+
+
+
+
+
+
+
+
+
自定义页脚
+
演示如何为弹窗添加自定义页脚。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Modal,Button} from 'inula-ui';
+
+function Demo4() {
+ let open = false;
+
+ return (
+
+
+ 自定义标题样式
}
+ onClose={() => open = false}
+ footer={
+
+ }
+ >
+ 对话框内容。
+
+
+ );
+}
+export default Demo4;
+```
+
+
+
+
+
+
+
+
+
居中弹窗
+
设置 centered 可以让对话框垂直居中。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Modal,Button} from 'inula-ui';
+
+function Demo5() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ centered={true}
+ >
+ 对话框内容。
+
+
+ );
+}
+export default Demo5;
+```
+
+
+
+
+
+
+
+
+
异步关闭弹窗
+
演示如何设置异步关闭弹窗。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Modal,Button} from 'inula-ui';
+
+
+function Demo6() {
+ let open = false;
+
+ const handleOk = async () => {
+ try {
+ await new Promise(resolve => setTimeout(resolve, 2000));
+ open = false;
+ } catch (error) {
+ console.error('操作失败:', error);
+ }
+ };
+ return (
+
+
+
open = false}
+ onBeforeClose={handleOk}
+ title="异步关闭弹窗"
+ >
+ 内容
+
+
+ );
+}
+export default Demo6;
+```
+
+
+
+
+
+
+
+
+
全屏弹窗
+
演示如何设置全屏弹窗。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Modal,Button} from 'inula-ui';
+
+function Demo7() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ title="全屏弹窗"
+ fullscreen={true}
+ >
+ 这是全屏弹窗内容
+
+
+ );
+}
+export default Demo7;
+```
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 默认值 |
+|---|---|---|---|
+| open | 是否打开对话框 | `boolean` | - |
+| onClose | 关闭回调 | `() => void` | - |
+| title | 标题内容 | `ReactNode` | - |
+| children | 对话框内容区域 | `ReactNode` | - |
+| footer | 自定义页脚;不传则展示默认页脚(取消/确定) | `ReactNode` | - |
+| className | 自定义类名 | `string` | `""` |
+| style | 行内样式 | `CSSProperties` | `{}` |
+| maskClosable | 点击遮罩是否可关闭 | `boolean` | `true` |
+| zIndex | 遮罩及弹窗层级 | `number` | `1000` |
+| fullscreen | 是否全屏显示 | `boolean` | `false` |
+| centered | 是否垂直居中 | `boolean` | `false` |
+| onBeforeClose | 关闭前拦截,返回 `false` 可阻止关闭;支持返回 `Promise` | `() => boolean \| Promise` | - |
+
+说明:
+
+- 未传 `footer` 时,组件会渲染默认页脚:`取消` 与 `确定` 按钮,均会触发关闭逻辑。
+- `onBeforeClose` 支持同步或异步返回;当返回值为 `false`(或异步返回 `false`)时,取消本次关闭。
+- 异步关闭处理中会进入内部 `closing` 状态:关闭按钮与确认按钮会禁用并显示加载效果。
+- 点击遮罩在 `maskClosable=true` 时触发关闭;点击内容区域不会关闭。
+- 组件通过 `Portal` 渲染至 `#root` 容器,请确保文档中存在对应元素。
diff --git a/packages/inula2-ui2/inulaUI/src/enum.ts b/packages/inula2-ui2/inulaUI/src/enum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4f216c89c1c8839387c925f1517ae4b23477c75d
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/enum.ts
@@ -0,0 +1,9 @@
+// button按钮
+export enum Button {
+ demo1 = 'http://localhost:5174/#/button/demo1',
+ demo2 = 'http://localhost:5174/#/button/demo2',
+ demo3 = 'http://localhost:5174/#/button/demo3',
+ demo4 = 'http://localhost:5174/#/button/demo4',
+ demo5 = 'http://localhost:5174/#/button/demo5',
+ demo6 = 'http://localhost:5174/#/button/demo6',
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/inulaUI/src/form/index.md b/packages/inula2-ui2/inulaUI/src/form/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..3df2515f7ac179c917904aca9fec706e36d8b3c9
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/form/index.md
@@ -0,0 +1,721 @@
+# Form 表单
+
+高性能表单控件,自带数据域管理。包含数据录入、校验以及对应样式。
+
+## 何时使用
+
+用于创建一个实体或收集信息。
+
+需要对输入的数据类型进行校验时。
+
+## 代码演示
+
+
+
+
+
基本
+
基本的表单数据域控制展示,包含布局、初始化、验证、提交。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Input,Form, FormItem, setValueByPath,Checkbox} from 'inula-ui';
+
+const Demo1 = () => {
+ let layout = 'horizontal';
+ let user = {
+ username: '',
+ password: '',
+ remember: false,
+ };
+
+ const rules = {
+ username: [
+ { required: true, message: '请输入用户名' },
+ { min: 3, message: '至少 3 个字符' }
+ ],
+ password: [
+ { required: true, message: '请输入密码' },
+ { min: 6, message: '至少 6 位' }
+ ],
+ };
+
+ const handleFinish = (values) => {
+ console.log('提交成功:', values);
+ alert('提交成功: ' + JSON.stringify(values));
+ };
+
+ const handleFailed = ({ errors }) => {
+ console.log('提交失败:', errors);
+ // alert('提交失败: ' + JSON.stringify(errors));
+ };
+
+ return (
+
+
+
+ );
+};
+
+export default Demo1;
+
+```
+
+
+
+
+
+
+
+
+
表单方法调用
+
展示表单的各种方法调用,包括校验、重置、设置值等。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Input,Form, FormItem, setValueByPath} from 'inula-ui';
+
+const Demo = () => {
+ let layout = 'horizontal';
+ let user = {
+ username: '',
+ email: '',
+ phone: ''
+ };
+
+ const rules = {
+ username: [
+ { required: true, message: '请输入用户名' },
+ { min: 3, message: '至少 3 个字符' }
+ ],
+ email: [
+ { required: true, message: '请输入邮箱' },
+ { pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/, message: '邮箱格式不正确' }
+ ],
+ phone: [
+ { required: true, message: '请输入手机号' },
+ { pattern: /^1[3-9]\d{9}$/, message: '手机号格式不正确' }
+ ]
+ };
+
+ let formRef = null;
+
+ const handleFinish = (values) => {
+ console.log('提交成功:', values);
+ };
+
+ const handleFailed = ({ errors }) => {
+ console.log('提交失败:', errors);
+ };
+
+ const handleSetValues = () => {
+
+ // 尝试通过重新赋值整个对象来触发响应式更新
+ user.username = 'testuser';
+ user.email = 'test@example.com';
+ user.phone = '13800138000';
+
+ // 强制触发响应式更新
+ // user = { ...user };
+
+ console.log('SetValues - user:', user);
+ alert('表单值已设置');
+ };
+
+ return (
+
+ );
+};
+
+export default Demo;
+
+```
+
+
+
+
+
+
+
+
+
表单布局
+
表单有三种布局。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Input,Form, FormItem, setValueByPath,Select} from 'inula-ui';
+
+const Demo3 = () => {
+ let layout = 'inline';
+ let searchForm = {
+ keyword: '',
+ category: ''
+ };
+
+ const categoryOptions = [
+ { label: '全部', value: 'all' },
+ { label: '技术', value: 'tech' },
+ { label: '设计', value: 'design' },
+ { label: '产品', value: 'product' }
+ ];
+
+ const handleSearch = (values) => {
+ console.log('搜索条件:', values);
+ };
+
+ const handleReset = () => {
+ searchForm.keyword = '';
+ searchForm.category = '';
+ };
+
+ return (
+
+ );
+};
+
+export default Demo3;
+
+```
+
+
+
+
+
+
+
+
+
表单禁用
+
展示表单的禁用功能,包括禁用状态切换、表单重置等。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Input,Form, FormItem, setValueByPath,Select,Radio,Switch} from 'inula-ui';
+
+const Demo4 = () => {
+ let isDisabled = false;
+ let formData = {
+ radio: '',
+ input: '',
+ select: '',
+ textarea: '',
+ switch: false
+ };
+
+ const selectOptions = [
+ { label: '选项1', value: 'option1' },
+ { label: '选项2', value: 'option2' },
+ { label: '选项3', value: 'option3' }
+ ];
+
+ const radioOptions = [
+ { label: 'Apple', value: 'apple' },
+ { label: 'Pear', value: 'pear' }
+ ];
+
+ const handleFinish = (values) => {
+ console.log('提交成功:', values);
+ alert('提交成功: ' + JSON.stringify(values));
+ };
+
+ const handleFailed = ({ errors }) => {
+ console.log('提交失败:', errors);
+ };
+
+ const toggleDisabled = () => {
+ isDisabled = !isDisabled;
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Demo4;
+
+```
+
+
+
+
+
+
+
+
+
表单变体
+
展示四种不同的表单变体:outlined(默认)、filled、borderless、underlined。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Form, FormItem, getValueByPath, setValueByPath,,Input,Select,Checkbox,Radio,Switch} from 'inula-ui';
+
+function Demo5() {
+ let variant = 'outlined';
+ // 创建表单数据模型
+ let formData = {
+ username: '',
+ email: '',
+ country: '',
+ description: '',
+ agree: false,
+ gender: '',
+ notifications: false
+ };
+
+ const selectOptions = [
+ // { label: '中国', value: 'china' },
+ // { label: '美国', value: 'usa' },
+ // { label: '日本', value: 'japan' },
+ // { label: '韩国', value: 'korea' },
+ ];
+
+ const handleFinish = (values) => {
+ console.log('表单提交成功:', values);
+ alert('表单提交成功!请查看控制台输出。');
+ };
+
+ const handleFailed = (errors) => {
+ console.log('表单校验失败:', errors);
+ alert('表单校验失败,请检查输入!');
+ };
+
+ return (
+
+ );
+}
+
+export default Demo5;
+
+```
+
+
+
+
+
+
+
+
+
自定义必填标记
+
展示自定义必填标记的功能,包括默认、可选、隐藏、自定义。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Input,Tag,Form, FormItem, setValueByPath} from 'inula-ui';
+
+const Demo7 = () => {
+ let layout = 'vertical';
+ let requiredMark = 'default'; // default | optional | hidden | customize
+
+ let formModel = {
+ fieldA: '',
+ fieldB: ''
+ };
+
+ const rules = {
+ fieldA: [{ required: true, message: 'Field A 为必填项' }],
+ fieldB: []
+ };
+
+
+ const customizeRequiredMark = (label, { required }) => (
+ <>
+ {required ? Required : optional}
+ {label}
+ >
+ );
+
+ const onFinish = (values) => {
+ console.log('提交成功: ', values);
+ };
+
+ const onFailed = ({ errors }) => {
+ console.log('提交失败: ', errors);
+ };
+
+ return (
+
+ );
+};
+
+export default Demo7;
+```
+
+
+
+
+
+## API
+
+### Form 属性
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| model | 表单数据模型(响应式对象) | `Record` | - | `{}` |
+| rules | 表单级校验规则 | `Record` | - | `{}` |
+| layout | 表单布局 | `string` | `horizontal` / `vertical` / `inline` | `horizontal` |
+| labelAlign | 标签对齐方式 | `string` | `left` / `right` | `right` |
+| colon | 是否在标签后显示冒号 | `boolean` | - | `true` |
+| disabled | 整体禁用 | `boolean` | - | `false` |
+| variant | 视觉变体 | `string` | `outlined` / `filled` / `borderless` / `underlined` | `outlined` |
+| size | 表单控件尺寸 | `string` | `small` / `medium` / `large` | `medium` |
+| requiredMark | 必填标记策略 | `string` | `default` / `optional` / `hidden` / `customize` | `default` |
+| requiredMarkRender | 自定义必填标记渲染 | `(label, ctx) => any` | - | `null` |
+| onFinish | 提交且校验通过回调 | `(values) => void` | - | - |
+| onFinishFailed | 提交且校验失败回调 | `({ errors, values }) => void` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 内联样式 | `Record` | - | - |
+
+说明:其余属性会透传给原生 `form` 元素。
+
+#### Rule 规则项
+
+| 字段 | 说明 | 类型 |
+|---|---|---|
+| required | 是否必填 | `boolean` |
+| min | 最小值/最小长度 | `number` |
+| max | 最大值/最大长度 | `number` |
+| pattern | 正则校验 | `RegExp` |
+| validator | 自定义校验函数,返回 `false` 或错误文案表示失败 | `(value, model) => boolean \| string \| { valid: boolean; message?: string }` |
+| message | 校验失败的提示文案 | `string` |
+
+### Form 实例方法
+
+| 方法 | 说明 | 签名 |
+|---|---|---|
+| validate | 校验表单,返回是否通过与错误/值 | `(fieldNames?: string[]) => { valid: boolean; errors: Record; values: any }` |
+| validateField | 校验单个字段 | `(fieldName: string) => { valid: boolean; error: string; value: any }` |
+| resetFields | 重置字段为默认空值 | `(fieldNames?: string[]) => void` |
+| setFieldsValue | 批量设置字段值 | `(values: Record) => void` |
+| getFieldsValue | 获取全部或部分字段值 | `(fieldNames?: string[]) => any` |
+| clearValidate | 清除校验状态(占位,按需扩展) | `(fieldNames?: string[]) => void` |
+| submit | 触发表单提交 | `() => void` |
+
+### FormItem 属性
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| name | 字段名(支持路径 `a.b.c`) | `string` | - | - |
+| label | 标签文本,传 `null` 隐藏 | `any` | - | - |
+| required | 是否必填(叠加到规则) | `boolean` | - | `false` |
+| rules | 字段级规则(与表单级规则合并) | `Rule \| Rule[]` | - | `[]` |
+| model | 绑定的表单模型(用于注册字段) | `Record` | - | - |
+| validateOn | 触发校验时机 | `string` | `change` / `blur` / `submit` | `change` |
+| help | 帮助文案 | `any` | - | - |
+| extra | 额外说明 | `any` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 内联样式 | `Record` | - | - |
+| colon | 覆盖是否展示冒号 | `boolean` | - | `true` |
+| children | 表单控件 | `any` | - | - |
+
+说明:`disabled`、`variant`、`size`、`requiredMark` 等会从 `Form` 上下文继承。
+
+### 辅助函数
+
+从包中额外导出以下工具函数:
+
+- `getValueByPath(obj, path)`:根据路径获取对象值。
+- `setValueByPath(obj, path, value)`:根据路径设置对象值。
diff --git a/packages/inula2-ui2/inulaUI/src/global.d.ts b/packages/inula2-ui2/inulaUI/src/global.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b0fbe18d50db31a5ca57fa0f1435e6313afa21af
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/global.d.ts
@@ -0,0 +1,4 @@
+declare module '*.jsx' {
+ const component: any;
+ export default component;
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/inulaUI/src/icon/index.md b/packages/inula2-ui2/inulaUI/src/icon/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..896b79196a868cc7e23657bea9bf6ab55ee43f59
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/icon/index.md
@@ -0,0 +1,348 @@
+# Button 按钮组件
+
+支持五种类型和四种状态属性。
+
+## 何时使用
+
+标记了一个(或封装一组)操作命令,响应用户点击行为,触发相应的业务逻辑。
+
+在 inula-ui 中我们提供了五种按钮。
+
+- 🔵 主按钮:用于主行动点,一个操作区域只能有一个主按钮。
+- ⚪️ 默认按钮:用于没有主次之分的一组行动点。
+- 😶 虚线按钮:常用于添加操作。
+- 🔤 文本按钮:用于最次级的行动点。
+- 🔗 链接按钮:一般用于链接,即导航至某位置。
+
+以及四种状态属性与上面配合使用。
+
+- ⚠️ 危险:删除/移动/修改权限等危险操作,一般需要二次确认。
+- 👻 幽灵:用于背景色比较复杂的地方,常用在首页/产品页等展示场景。
+- 🚫 禁用:行动点不可用的时候,一般需要文案解释。
+- 🔃 加载中:用于异步操作等待反馈的时候,也可以避免多次提交。
+
+## 代码演示
+
+
+
+
+
基本
+
展示按钮的五种类型:主按钮、默认按钮、虚线按钮、文本按钮、链接按钮、变体样式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Icon} from 'inula-ui';
+
+function IconDemo() {
+ return (
+
+
+
+ user默认实体
+
+
+
+ user实体
+
+
+
+ user实体蓝色
+
+
+ );
+}
+
+export default IconDemo;
+
+```
+
+
+
+
+
+
+
+
+
危险
+
展示五种类型按钮的'危险'状态用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Icon} from 'inula-ui';
+
+function IconDemo() {
+ return (
+
+
+
+ 下箭头默认实体
+
+ {/*
+
+ 下箭头线条
+
*/}
+
+
+ 下箭头实体
+
+ {/*
+
+ 下箭头双色
+
*/}
+
+
+ 下箭头实体32px
+
+
+ );
+}
+
+export default IconDemo;
+
+```
+
+
+
+
+
+
+
+
+
幽灵
+
展示按钮的'幽灵'状态,包括主按钮、默认按钮和危险主按钮的幽灵样式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Icon} from 'inula-ui';
+
+function IconDemo() {
+ return (
+
+
+
+ caret-left默认实体
+
+
+
+ caret-left实体
+
+
+
+ caret-left实体蓝色
+
+
+
+ caret-left实体天蓝色旋转45
+
+
+
+ caret-left实体天蓝色旋转
+
+
+ );
+}
+
+export default IconDemo;
+
+```
+
+
+
+
+
+
+
+
+
禁用
+
展示五种类型按钮的'禁用'状态用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Icon} from 'inula-ui';
+
+function IconDemo() {
+ return (
+
+
+
+ 苹果品牌图标
+
+
+
+ 苹果品牌图标32px
+
+
+
+ 苹果品牌图标绿色
+
+
+
+ 苹果品牌图标绿色旋转120度
+
+
+
+ 苹果品牌图标绿色旋转
+
+
+ );
+}
+
+export default IconDemo;
+
+```
+
+
+
+
+
+
+
+
+
加载中
+
展示五种类型按钮的'加载中'状态用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Icon} from 'inula-ui';
+import { success, error } from "../../Notification/index.jsx";
+import "../index.css";
+import { filledIconValueList, brandIconValueList } from "./iconlist.ts";
+
+const handleCopy = async (text) => {
+ try {
+ await navigator.clipboard.writeText(text);
+ success({ message: "Copy success!", placement: "top" });
+ } catch (err) {
+ error({ message: "Copy failed!", placement: "top" });
+ }
+};
+
+const IconItem = ({ value, theme }) => {
+ const text = ``;
+ return (
+ handleCopy(text)}>
+
+
+
+
{value}
+
+ );
+};
+
+const IconDemo = () => {
+ return (
+
+
+
实体图标表
+
+ {filledIconValueList.map((value) => (
+
+ ))}
+
+
+
+
品牌图标表
+
+ {brandIconValueList.map((value) => (
+
+ ))}
+
+
+
+ );
+};
+
+export default IconDemo;
+
+```
+
+
+
+
+
+
+
+
+
交互加载
+
演示点击按钮后进入加载中状态,1.5秒后恢复。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button} from 'inula-ui';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
+ );
+}
+export default ButtonDemo;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| type | 按钮类型 | `string` | `primary` / `default` / `dashed` / `text` / `link` | `default` |
+| variant | 视觉变体 | `string` | `outlined` / `filled` / `borderless` / `underlined` | `outlined` |
+| danger | 危险状态样式 | `boolean` | - | `false` |
+| ghost | 幽灵样式(深色背景常用) | `boolean` | - | `false` |
+| disabled | 禁用状态 | `boolean` | - | `false` |
+| loading | 加载中状态(禁用且展示旋转图标) | `boolean` | - | `false` |
+| htmlType | 原生按钮类型 | `string` | `button` / `submit` / `reset` | `button` |
+| onClick | 点击回调 | `(e) => void` | - | - |
+| children | 按钮内容 | `ReactNode` | - | - |
+
+说明:其余属性会透传给原生 `button` 元素(如 `title`、`id`、`aria-*` 等)。
diff --git a/packages/inula2-ui2/inulaUI/src/index.ts b/packages/inula2-ui2/inulaUI/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6539c399fac43c9043f0f4c300be6662217d243e
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/index.ts
@@ -0,0 +1,2 @@
+// export { default as Foo } from './Foo';
+export { default as Button } from './button';
diff --git a/packages/inula2-ui2/inulaUI/src/input/index.md b/packages/inula2-ui2/inulaUI/src/input/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..955f32df5df4d43041acd43244ecc72f863a2c21
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/input/index.md
@@ -0,0 +1,502 @@
+# Input 输入框
+
+通过鼠标或键盘输入内容,是最基础的表单域的包装。
+
+## 何时使用
+
+需要用户输入表单域内容时。
+
+提供组合型输入框,带搜索的输入框,还可以进行大小选择。
+
+## 代码演示
+
+
+
+
+
基础输入框
+
演示基础输入框的用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Tag} from 'inula-ui';
+
+function Demo1() {
+ let value = "";
+
+ function handleInput(e) {
+ value = e.target.value;
+ }
+ return (
+
+ );
+}
+
+export default Demo1;
+
+```
+
+
+
+
+
+
+
+
+
不同尺寸
+
演示不同尺寸的输入框。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Tag} from 'inula-ui';
+
+function Demo2() {
+
+ return (
+
+ );
+
+}
+
+export default Demo2;
+
+```
+
+
+
+
+
+
+
+
+
不同形态
+
演示不同形态的输入框。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Tag} from 'inula-ui';
+
+function Demo3() {
+
+ return (
+
+ );
+
+}
+
+export default Demo3;
+
+```
+
+
+
+
+
+
+
+
+
前后缀
+
演示带前后缀的输入框。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input} from 'inula-ui';
+
+function Demo4() {
+
+ return (
+
+
+
+ )
+
+}
+
+export default Demo4;
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
清除按钮
+
演示带清除按钮的输入框。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input} from 'inula-ui';
+
+function Demo6() {
+ let value = "";
+
+ function handleInput(e) {
+ value = e.target.value;
+ }
+
+ return (
+
+
+
+
+ );
+}
+
+export default Demo6;
+
+```
+
+
+
+
+
+
+
+
+
Textarea 自动调整高度
+
演示 textarea 的自动调整高度功能。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Tag} from 'inula-ui';
+
+const Demo7 = () => {
+ return (
+
+ );
+};
+
+export default Demo7;
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
密码框
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input} from 'inula-ui';
+
+let password = '';
+
+function handlePasswordInput(e) {
+ password = e.target.value;
+}
+
+
+const Demo9 = () => {
+ return
+}
+
+export default Demo9;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| value | 受控模式下的输入值 | `string` | - | - |
+| defaultValue | 非受控模式下的初始值 | `string` | - | `""` |
+| type | 输入框类型 | `string` | `text` / `password` / `textarea` | `text` |
+| size | 输入框尺寸 | `string` | `small` / `default` / `large` | `default` |
+| variant | 输入框形态 | `string` | `outlined` / `filled` / `borderless` / `underlined` | `outlined` |
+| placeholder | 占位符文本 | `string` | - | `""` |
+| disabled | 是否禁用 | `boolean` | - | `false` |
+| allowClear | 是否显示清除按钮 | `boolean` | - | `false` |
+| showCount | 是否显示字数统计 | `boolean` | - | `false` |
+| maxLength | 最大输入长度 | `number` | - | `5000` |
+| autoSize | 自动调整高度(仅 textarea) | `boolean \| { minRows: number, maxRows: number }` | - | `false` |
+| addonBefore | 前置标签 | `ReactNode` | - | - |
+| addonAfter | 后置标签 | `ReactNode` | - | - |
+| status | 输入框状态 | `string` | `error` / `warning` | - |
+| onInput | 输入事件回调 | `(e) => void` | - | - |
+| onChange | 变更事件回调 | `(e) => void` | - | - |
+| className | 自定义类名 | `string` | - | `""` |
+| style | 行内样式 | `CSSProperties` | - | `{}` |
+
+说明:
+
+- 受控/非受控:传 `value` 为受控模式,传 `defaultValue` 为非受控模式。
+- 密码框:`type="password"` 时自动显示密码可见性切换按钮。
+- 自动调整:`autoSize` 为 `true` 时无限制调整;为对象时可设置 `minRows` 与 `maxRows`。
+- 字数统计:`showCount` 为 `true` 时在输入框右下角显示当前字数与最大长度。
+- 清除按钮:`allowClear` 为 `true` 且非禁用且有内容时显示清除按钮。
+- 前后缀:`addonBefore` 与 `addonAfter` 会在输入框前后添加标签。
+- 状态:`status` 为 `error` 或 `warning` 时显示对应状态样式。
diff --git a/packages/inula2-ui2/inulaUI/src/notification/index.md b/packages/inula2-ui2/inulaUI/src/notification/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..4b954dbc56bbd21b5c16d338963939ef0925756f
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/notification/index.md
@@ -0,0 +1,251 @@
+# Notification 通知提示框
+
+全局展示通知提醒信息。
+
+## 何时使用
+
+在系统四个角显示通知提醒信息。经常用于以下情况:
+
+- 较为复杂的通知内容。
+- 带有交互的通知,给出用户下一步的行动点。
+- 系统主动推送。
+
+## 代码演示
+
+
+
+
+
基础通知
+
演示信息、成功、警告、错误四种类型的通知用法。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Tag,Button} from 'inula-ui';
+import { info, success, warning, error } from 'inula-ui/notification';
+
+function Demo1() {
+ function show(type) {
+ if (type === 'info') info({ message: '信息提示', bgColor: true, description: '这是一条普通的信息提示' });
+ if (type === 'success') success({ message: '成功提示', description: '操作已成功完成' });
+ if (type === 'warning') warning({ message: '警告提示', description: '请注意相关事项' });
+ if (type === 'error') error({ message: '错误提示', description: '操作失败,请重试' });
+ if (type === 'text') text({ message: '文本提示', bgColor: true, description: '这是一条普通的文本提示' });
+ }
+ return (
+
+
+
+
+
+
+ );
+}
+
+export default Demo1;
+
+```
+
+
+
+
+
+
+
+
+
自定义关闭按钮
+
演示如何自定义通知的关闭按钮文本和样式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Tag,Button} from 'inula-ui';
+
+import { text } from 'inula-ui/notification';
+
+function Demo2() {
+ function showCustomClose() {
+ text({
+ message: '自定义关闭按钮',
+ description: '关闭按钮变成了"关闭"并加粗变色',
+ closeText: '关闭',
+ closeClassName: 'my-close-btn',
+ });
+ }
+ return (
+
+
+
+ );
+}
+
+export default Demo2;
+
+```
+
+
+
+
+
+
+
+
+
自定义操作按钮
+
演示如何为通知添加自定义操作按钮。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Tag,Button} from 'inula-ui';
+
+import { text } from 'inula-ui/notification';
+
+function Demo3() {
+ function showCustomActions() {
+ text({
+ message: 'Notification Title',
+ description: 'A function will be called after the notification is closed...',
+ actions: ({ notification, remove, onClose }) => (
+ <>
+
+
+ >
+ )
+ });
+ }
+ return (
+
+
+
+ );
+}
+
+export default Demo3;
+
+```
+
+
+
+
+
+
+
+
+
弹出位置
+
演示通知在不同屏幕位置的弹出效果。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Button} from 'inula-ui';
+
+import { text } from 'inula-ui/notification';
+
+function Demo4() {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export default Demo4;
+
+```
+
+
+
+
+
+
+
+
+
选择背景颜色
+
可以传入bgColor显示不同的背景颜色
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Input,Button} from 'inula-ui';
+
+import { text, info } from 'inula-ui/notification';
+
+function Demo5() {
+ function show(type) {
+ if (type === 'text') text({ message: '不带bgColor', description: '这是一条普通的信息提示' });
+ if (type === 'info') info({ message: '带bgColor', bgColor: true, description: '这是一条普通的文本提示' });
+ }
+ return (
+
+
+
+
+ );
+}
+
+export default Demo5;
+```
+
+
+
+
+
+## API
+
+### 静态方法
+
+- `notification.open(options)`:以自定义 `type` 打开通知。
+- `notification.info(options)`:信息通知。
+- `notification.success(options)`:成功通知。
+- `notification.warning(options)`:警告通知。
+- `notification.error(options)`:错误通知。
+- `notification.text(options)`:无图标的文本通知。
+
+> 以上方法均为即时调用,不返回实例;通知会在 `duration` 到时或点击关闭按钮后消失。
+
+### options
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| message | 通知标题 | `string` | - | - |
+| description | 通知内容 | `string` | - | - |
+| duration | 自动关闭时间,单位 ms;为 `0` 时不自动关闭 | `number` | - | `3000` |
+| placement | 弹出位置 | `"topLeft" \| "topRight" \| "bottomLeft" \| "bottomRight" \| "top" \| "bottom"` | - | `topRight` |
+| closeText | 关闭按钮文本 | `string` | - | `×` |
+| closeClassName | 关闭按钮类名 | `string` | - | `inula-notification-close` |
+| actions | 自定义操作区域 | `ReactNode \| (ctx) => ReactNode` | - | - |
+| bgColor | 是否使用类型背景色 | `boolean` | - | `false` |
+| onClose | 点击关闭时回调 | `() => void` | - | - |
+| type | 通知类型,仅 `open` 时需要 | `"info" \| "success" \| "warning" \| "error" \| "text"` | - | `info` |
+
+说明:
+
+- `actions` 支持传入节点或函数。函数签名:`({ notification, remove, onClose }) => ReactNode`,可通过 `remove(notification.key)` 主动关闭当前通知,或调用 `onClose()` 触发关闭。
+- 未设置 `duration` 时默认为 3000ms;设为 `0` 可常驻。
+- `placement` 支持六个方位:`topRight`(默认)、`topLeft`、`bottomRight`、`bottomLeft`、`top`、`bottom`。
+- `type` 在 `info/success/warning/error/text` 方法中已内置,无需再传;仅在使用 `open` 时按需指定。
diff --git a/packages/inula2-ui2/inulaUI/src/radio/index.md b/packages/inula2-ui2/inulaUI/src/radio/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..cbc827b8064ed3b66430146d34621f47eb4e3789
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/radio/index.md
@@ -0,0 +1,248 @@
+# Radio 单选框
+
+用于在多个备选项中选中单个状态。
+
+## 何时使用
+
+用于在多个备选项中选中单个状态。
+
+和 Select 的区别是,Radio 所有选项默认可见,方便用户在比较中选择,因此选项不宜过多。
+
+## 代码演示
+
+
+
+
+
基础用法
+
最基础的单选框,支持选项切换。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Radio} from 'inula-ui';
+
+function Demo1() {
+ let selected = 'a';
+
+ function handleRadioChange(val) {
+ selected = val;
+ }
+
+ return (
+
+
+
+
+ );
+}
+
+export default Demo1;
+
+```
+
+
+
+
+
+
+
+
+
选项组用法
+
通过 options 属性批量渲染单选框组。。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Radio} from 'inula-ui';
+
+function Demo2() {
+ let selected = 'a';
+ function handleRadioChange(val) {
+ selected = val;
+ }
+ const options = [
+ { label: '选项A', value: 'a', checked: selected === 'a' },
+ { label: '选项B', value: 'b', checked: selected === 'b' },
+ { label: '选项C', value: 'c', checked: selected === 'c' },
+ ];
+ return (
+
+ );
+}
+export default Demo2;
+
+```
+
+
+
+
+
+
+
+
+
不同尺寸
+
展示单选框的三种尺寸:大号、默认、小号。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Radio} from 'inula-ui';
+
+function Demo3() {
+ let selected = 'a';
+
+ function handleRadioChange(val) {
+ selected = val;
+ }
+
+ return (
+
+
+
+
+
+ );
+}
+
+export default Demo3;
+```
+
+
+
+
+
+
+
+
+
禁用状态
+
展示禁用的单选框,用户无法进行选择。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Radio} from 'inula-ui';
+
+function Demo4() {
+ return (
+
+
+
+
+ );
+}
+export default Demo4;
+```
+
+
+
+
+
+
+
+
+
只读状态
+
展示只读的单选框,选中状态不可更改。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Radio} from 'inula-ui';
+
+function Demo5() {
+ let selected = 'a';
+ function handleRadioChange(val) {
+ selected = val;
+ }
+ return (
+
+
+
+
+ );
+}
+export default Demo5;
+```
+
+
+
+
+
+
+
+
+
选中、只读、禁用
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Radio} from 'inula-ui';
+
+function Demo6() {
+ let selected = 'a';
+ function handleRadioChange(val) {
+ selected = val;
+ }
+ const options = [
+ { label: 'A', value: 'a', checked: selected === 'a' },
+ { label: 'B(禁用)', value: 'b', checked: selected === 'b', disabled: true },
+ { label: 'C(只读)', value: 'c', checked: selected === 'c', readOnly: true },
+ ];
+ return (
+
+ );
+}
+export default Demo6;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| checked | 是否选中 | `boolean` | - | `false` |
+| disabled | 是否禁用 | `boolean` | - | `false` |
+| readOnly | 是否只读 | `boolean` | - | `false` |
+| value | 单选框的值 | `string` | - | `""` |
+| name | 单选框组名 | `string` | - | `""` |
+| label | 单选框标签 | `string` | - | `""` |
+| size | 单选框尺寸 | `string` | `large` / `default` / `small` | `default` |
+| variant | 单选框形态 | `string` | `outlined` / `filled` / `borderless` / `underlined` | `outlined` |
+| options | 选项组配置 | `{ label: string, value: string, checked?: boolean, disabled?: boolean, readOnly?: boolean }[]` | - | - |
+| onChange | 变化时回调 | `(value: string, e: Event) => void` | - | - |
+| className | 自定义类名 | `string` | - | `""` |
+| style | 行内样式 | `CSSProperties` | - | `{}` |
+
+说明:
+
+- 单选逻辑:同组内只能选中一个选项,选中新选项时会自动取消其他选项的选中状态。
+- 选项组:传 `options` 数组时,组件会渲染为单选框组,每个选项支持独立的 `checked`、`disabled`、`readOnly` 状态。
+- 事件回调:`onChange` 回调接收两个参数:选中值 `value` 和事件对象 `e`。
+- 只读状态:`readOnly` 为 `true` 时,选中状态不可更改,但仍可触发 `onChange` 回调。
+- 禁用状态:`disabled` 为 `true` 时,单选框不可交互,不会触发 `onChange` 回调。
diff --git a/packages/inula2-ui2/inulaUI/src/select/index.md b/packages/inula2-ui2/inulaUI/src/select/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..43edc817f8b86d854b1836fffe3f8cc7ea26e92f
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/select/index.md
@@ -0,0 +1,366 @@
+# Select 选择器
+
+下拉选择器。
+
+## 何时使用
+
+弹出一个下拉菜单给用户选择操作,用于代替原生的选择器,或者需要一个更优雅的多选器时。
+
+当选项少时(少于 5 项),建议直接将选项平铺,使用 Radio 是更好的选择。
+
+如果你在寻找一个可输可选的输入框,那你可能需要 AutoComplete。
+
+## 代码演示
+
+
+
+
+
基础用法
+
最基础的下拉选择框,支持选项切换。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo1() {
+ let value = '';
+ const options = [
+ { label: 'Option A', value: 'a' },
+ { label: 'Option B', value: 'b' },
+ { label: 'Option C', value: 'c' },
+ { label: 'Option D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val
+ }
+
+ return
+}
+
+export default Demo1;
+
+```
+
+
+
+
+
+
+
+
+
受控用法
+
通过 value 属性控制选中项。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo2() {
+ let value = 'b';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo2;
+
+```
+
+
+
+
+
+
+
+
+
禁用
+
可禁用整个下拉选择框和单个选项。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo3() {
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c', disabled: true },
+ { label: '选项D', value: 'd' },
+ ];
+
+ return (
+
+
+
+
+ )
+}
+
+export default Demo3;
+```
+
+
+
+
+
+
+
+
+
默认值
+
设置默认选中项。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo4() {
+ let value = '';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo4;
+```
+
+
+
+
+
+
+
+
+
可清空
+
支持清空已选项。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo5() {
+ let value = '';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo5;
+```
+
+
+
+
+
+
+
+
+
多选
+
支持多选功能。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo6() {
+ let value = '';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo6;
+```
+
+
+
+
+
+
+
+
+
分组/复杂用法
+
支持分组选项、多选等复杂场景。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo7() {
+ let values = [];
+
+ const options = [
+ {
+ label: '热门城市',
+ options: [
+ { value: 'Shanghai', label: '上海' },
+ { value: 'Beijing', label: '北京' },
+ ],
+ },
+ {
+ label: '城市名',
+ options: [
+ { value: 'Chengdu', label: '成都' },
+ { value: 'Shenzhen', label: '深圳' },
+ { value: 'Guangzhou', label: '广州' },
+ { value: 'Dalian', label: '大连' },
+ ],
+ },
+ ];
+
+ function handleChange(val) {
+ values = [...val];
+ }
+
+ return
+}
+
+export default Demo7;
+```
+
+
+
+
+
+
+
+
+
变体样式
+
支持变体样式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Select} from 'inula-ui';
+
+function Demo8() {
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c', disabled: true },
+ { label: '选项D', value: 'd' },
+ ];
+
+ return (
+
+
+
+
+
+
+ )
+}
+
+export default Demo8;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| options | 选项数据 | `{ label: string, value: string, disabled?: boolean }[] \| { label: string, options: { label: string, value: string, disabled?: boolean }[] }[]` | - | `[]` |
+| value | 受控模式下的选中值 | `string \| string[]` | - | - |
+| defaultValue | 非受控模式下的初始选中值 | `string \| string[]` | - | `""` |
+| disabled | 是否禁用 | `boolean` | - | `false` |
+| placeholder | 占位符文本 | `string` | - | `""` |
+| onChange | 变化时回调 | `(value: string \| string[]) => void` | - | - |
+| allowClear | 是否显示清除按钮 | `boolean` | - | `false` |
+| multiple | 是否多选 | `boolean` | - | `false` |
+| size | 选择器尺寸 | `string` | `small` / `default` / `large` / `medium` | `default` |
+| variant | 选择器形态 | `string` | `outlined` / `filled` / `borderless` / `underlined` | `outlined` |
+| className | 自定义类名 | `string` | - | `""` |
+| style | 行内样式 | `CSSProperties` | - | `{}` |
+
+说明:
+
+- 受控/非受控:传 `value` 为受控模式,传 `defaultValue` 为非受控模式。
+- 选项数据:`options` 支持普通选项数组和分组选项数组,分组选项格式为 `{ label: string, options: [...] }`。
+- 多选模式:`multiple` 为 `true` 时,`value` 和 `onChange` 回调的值为数组类型。
+- 清除功能:`allowClear` 为 `true` 时,在选中项存在且非禁用状态下显示清除按钮。
+- 尺寸兼容:`medium` 尺寸等同于 `default`。
+- 选项禁用:单个选项可通过 `disabled: true` 禁用,分组标题不支持禁用。
diff --git a/packages/inula2-ui2/inulaUI/src/spin/index.md b/packages/inula2-ui2/inulaUI/src/spin/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..25ea0c74567d59ed105b340c1e5816604f3efe11
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/spin/index.md
@@ -0,0 +1,349 @@
+# Spin 加载中
+
+用于页面和区块的加载中状态。
+
+## 何时使用
+
+页面局部处于等待异步数据或正在渲染过程时,合适的加载动效会有效缓解用户的焦虑。
+
+## 代码演示
+
+
+
+
+
基本样式
+
默认加载指示器,大中小型号
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Spin,Tag} from 'inula-ui';
+
+const SpinDemo = () => {
+
+ return (
+
+
+ 最简单的Spin
+
+
+
+ 小中大的Spin
+
+
+
+
+
+ );
+};
+
+export default SpinDemo;
+
+```
+
+
+
+
+
+
+
+
+
嵌套状态样式
+
包裹子组件且不为全屏状态情况,加载覆盖子组件、自定义tip
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Spin,Switch,Tag} from 'inula-ui';
+
+const SpinDemo = () => {
+ let loading = false;
+
+ return (
+
+
+
简单嵌套状态
+
+
+ 这是子组件
+
+
+
(loading = !loading)} />
+ 切换嵌套组件的加载状态
+
+
+
自定义tip的Spin,小中大样式
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default SpinDemo;
+
+```
+
+
+
+
+
+
+
+
+
带delay延迟触发加载动画
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Spin,Switch,Tag} from 'inula-ui';
+
+const SpinDemo = () => {
+ let loading = false;
+
+ return (
+
+
+
+ 点击延迟一秒触发加载
+
+
+
+ 这是子组件
+
+
+
(loading = !loading)} />
+ 延迟触发切换状态按钮
+
+
+ );
+};
+
+export default SpinDemo;
+
+```
+
+
+
+
+
+
+
+
+
全屏覆盖加载动画
+
+
+ 查看示例代码
+
+```jsx | pure
+import {ButSpinton,Button} from 'inula-ui';
+const SpinDemo = () => {
+ let showFullScreen = false;
+ let percent = -100;
+
+ const showLoader = () => {
+ showFullScreen = true;
+ const interval = setInterval(() => {
+ percent += 10;
+ if (percent >= 100) {
+ clearInterval(interval);
+ showFullScreen = false;
+ percent = -100;
+ }
+ }, 100);
+ };
+
+ return (
+
+ );
+};
+
+export default SpinDemo;
+
+```
+
+
+
+
+
+
+
+
+
永不停止的进度条加载
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Spin,Switch} from 'inula-ui';
+const SpinDemo = () => {
+ let auto = false;
+ let percent = -50;
+
+ watch(() => {
+ if (auto) {
+ percent = "auto";
+ return;
+ } else {
+ percent = -50;
+ const interval = setInterval(() => {
+ percent += 10;
+ if (percent >= 100) {
+ percent = -50;
+ }
+ }, 100);
+
+ return () => {
+ clearInterval(interval);
+ };
+ }
+ });
+
+ return (
+
+
+
+
+
+
+
+ (auto = !auto)}
+ unCheckedChildren="auto"
+ checkedChildren="auto"
+ />
+ 点击切换auto,进度条永不停止
+
+
+ );
+};
+
+export default SpinDemo;
+
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| spinning | 是否显示加载状态 | `boolean` | - | `true` |
+| delay | 延迟显示加载状态的时间(毫秒) | `number` | - | - |
+| fullscreen | 是否全屏显示 | `boolean` | - | `false` |
+| indicator | 自定义加载指示器 | `ReactNode` | - | - |
+| percent | 进度百分比 | `number \| "auto"` | - | - |
+| size | 加载指示器尺寸 | `string` | `small` / `default` / `large` | `default` |
+| tip | 加载提示文本 | `string` | - | - |
+| wrapperClassName | 包装器类名 | `string` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| children | 子组件(嵌套模式) | `ReactNode` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+| maxProgressWidth | 进度条最大宽度 | `number` | - | `44` |
+
+说明:
+
+- 显示模式:有 `children` 且非 `fullscreen` 时为嵌套模式,覆盖子组件显示;`fullscreen` 为全屏模式;否则为独立模式。
+- 延迟显示:`delay` 设置延迟时间,避免快速切换时闪烁,使用防抖机制实现。
+- 进度指示:`percent` 为数字时显示进度条,为 `"auto"` 时显示无限循环进度条。
+- 自定义指示器:`indicator` 可完全自定义加载指示器,优先级高于默认指示器。
+- 提示文本:`tip` 在嵌套模式和全屏模式下显示在指示器下方。
+- 尺寸影响:不同 `size` 会影响指示器大小和进度条宽度(`maxProgressWidth` 会自动调整)。
diff --git a/packages/inula2-ui2/inulaUI/src/switch/index.md b/packages/inula2-ui2/inulaUI/src/switch/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..cacba950141d74b514a08e4113ad048d14b23c85
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/switch/index.md
@@ -0,0 +1,233 @@
+# Switch 开关组件
+
+## 何时使用
+
+使用开关可以切换两种状态。
+
+## 代码演示
+
+
+
+
+
基本
+
两种型号开关,支持默认选中、禁用
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Switch, Tag } from 'inula-ui';
+
+const SwitchDemo = () => {
+ let checked = false;
+
+ return (
+
+
+ 默认型号、小号开关
+
+ 默认型号
+
+ 小号
+
+
+ 默认选中
+
+ 默认选中
+
+
+ 禁用开关
+
+ 默认选中禁用
+
+ 禁用
+
+
+ );
+};
+
+export default SwitchDemo;
+```
+
+
+
+
+
+
+
+
+
受控
+
开关状态外部受控案例
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Switch, Tag, Button } from 'inula-ui';
+
+const SwitchDemo = () => {
+ let checked = false;
+
+ return (
+
+
+ 外部受控开关
+
+ 选中
+
+
+
+
+ );
+};
+
+export default SwitchDemo;
+```
+
+
+
+
+
+
+
+
+
带内容开关
+
可以自定义选中和非选中时开关的内容
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Switch, Tag, Icon } from 'inula-ui';
+
+const SwitchDemo = () => {
+ return (
+
+
+ 带内容的开关
+
+
+ }
+ unCheckedChildren={}
+ defaultChecked
+ />
+
+
+ );
+};
+
+export default SwitchDemo;
+```
+
+
+
+
+
+
+
+
+
加载
+
支持加载状态开关,加载中不可操作。
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Switch, Tag } from 'inula-ui';
+
+const SwitchDemo = () => {
+ return (
+
+ );
+};
+
+export default SwitchDemo;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| ----------------- | -------------------------------- | --------------- | ---------------------- | ------- |
+| defaultChecked | 默认选中 | `boolean` | - | `false` |
+| defaultValue | defaultChecked 别名 | `boolean` | - | `false` |
+| size | 开关大小 | `string` | `'default' \| 'small'` | `false` |
+| checked | 当前选中状态 | `boolean` | - | - |
+| disabled | 禁用状态 | `boolean` | - | `false` |
+| loading | 加载中状态(禁用且展示旋转图标) | `boolean` | - | `false` |
+| checkedChildren | 选中时 swicth 自带内容 | `node` | - | - |
+| unCheckedChildren | 非选中时 swicth 自带内容 | `node` | - | - |
+| onChange | 状态改变回调 | `(e) => void` | - | - |
+| onClick | 点击回调 | `(e) => void` | - | - |
+| className | 自定义样式类 | `string` | - | - |
+| style | 自定义行内样式 | `CSSProperties` | - | - |
+
+说明:当传入`checked`时 switch 为外部受控状态。
diff --git a/packages/inula2-ui2/inulaUI/src/tabs/index.md b/packages/inula2-ui2/inulaUI/src/tabs/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..af4cc2ea771a77333d7a63e13629c06f41d54e40
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/tabs/index.md
@@ -0,0 +1,713 @@
+# Tabs 标签页
+
+选项卡切换组件。
+
+## 何时使用
+
+提供平级的区域将大块内容进行收纳和展现,保持界面整洁。
+
+## 代码演示
+
+
+
+
+
基本
+
默认选中第一项
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+
+ const onChange = (key) => {
+ console.log(key);
+ };
+
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+
+ return (
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
禁用
+
禁用第二项
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ const onChange = (key) => {
+ console.log(key);
+ };
+
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ disabled: true,
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+
+ return (
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
居中
+
标签居中显示
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ const onChange = (key) => {
+ console.log(key);
+ };
+ return (
+
+
+ {
+ const id = String(i + 1);
+ return {
+ label: `Tab ${id}`,
+ key: id,
+ children: `Content of Tab Pane ${id}`,
+ };
+ })}
+ centered
+ defaultActiveKey="1"
+ onChange={onChange}
+ />
+
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
图标
+
带有图标的标签
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tabs,Icon} from 'inula-ui';
+
+const TabsDemo = () => {
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ icon: ,
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ icon: ,
+ },
+ ];
+ return (
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
指示条
+
设置 indicator 属性,自定义指示条宽度和对齐方式。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ let indicator = "center"; // start | center | end | { size?: number | (origin: number) => number; align: start | center | end; } 自定义指示器长度和对齐方式
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+
+ origin - 20, align: indicator }} />
+
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
位置
+
有四个位置,tabPosition="left|right|top|bottom"。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ let pos = "top"; // top | bottom | left | right
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
大小
+
有三种大小,size="small|middle|large"。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ let size = "default"; //small | default | large
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
新增和关闭标签
+
只有卡片样式的页签支持新增和关闭选项。使用 closable={false} 禁止关闭。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3", closable: false },
+ ];
+
+ return (
+
+ )
+}
+
+export default TabsDemo;
+```
+
+
+
+
+
+
+
+
+
自定义增加标签
+
自定义新增标签。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ {
+ key: "3",
+ label: "Tab 3",
+ children: "Content of Tab Pane 3",
+ closable: false,
+ },
+ ];
+
+ return (
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+
+
+
+
标签额外内容
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tabs,Icon,Button} from 'inula-ui';
+
+const LeftExtraContent = ;
+const RightExtraContent = ;
+
+const TabsDemo = () => {
+ let tabBarExtraContent = { left: LeftExtraContent, right: RightExtraContent };
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ icon: ,
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+ );
+};
+
+export default TabsDemo;
+```
+
+
+
+
+
+
+
+
+
标签滚动
+
标签过多时,可滚动。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Button,Tabs} from 'inula-ui';
+
+const TabsDemo = () => {
+ let mode = "top";
+
+ return (
+
+
+ {
+ const id = String(i);
+ return {
+ label: `Tab-${id}`,
+ key: id,
+ disabled: i === 28,
+ children: `Content of tab ${id}`,
+ };
+ })}
+ />
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
+
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| items | 选项卡配置数组 | `TabProps[]` | - | - |
+| type | 选项卡类型 | `string` | `line` / `card` / `editable-card` | `line` |
+| size | 选项卡尺寸 | `string` | `small` / `default` / `large` | `default` |
+| tabPosition | 选项卡位置 | `string` | `top` / `bottom` / `left` / `right` | `top` |
+| centered | 是否居中显示 | `boolean` | - | `false` |
+| activeKey | 受控模式下的当前激活选项卡 | `string` | - | - |
+| defaultActiveKey | 非受控模式下的默认激活选项卡 | `string` | - | `items[0].key` |
+| addIcon | 添加按钮图标 | `ReactNode` | - | `` |
+| hideAdd | 是否隐藏添加按钮 | `boolean` | - | `false` |
+| indicator | 指示器配置 | `{ size?: number \| (origin: number) => number; align?: 'start' \| 'center' \| 'end' }` | - | - |
+| tabBarExtraContent | 标签栏额外内容 | `ReactNode \| { left?: ReactNode; right?: ReactNode }` | - | - |
+| tabBarGutter | 标签栏间隔距离 | `number` | - | - |
+| tabBarStyle | 标签栏样式 | `CSSProperties` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+| onChange | 选项卡切换回调 | `(key: string) => void` | - | - |
+| onTabClick | 选项卡点击回调 | `(key: string, e: React.MouseEvent) => void` | - | - |
+| onEdit | 选项卡编辑回调 | `(targetKey: string, action: 'add' \| 'remove') => void` | - | - |
+| onTabScroll | 选项卡滚动回调 | `({ direction: 'left' \| 'right' \| 'top' \| 'bottom' }) => void` | - | - |
+
+### TabProps
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| key | 选项卡唯一标识 | `string` | - | - |
+| label | 选项卡标题 | `ReactNode` | - | - |
+| children | 选项卡内容 | `ReactNode` | - | - |
+| disabled | 是否禁用 | `boolean` | - | `false` |
+| icon | 选项卡图标 | `ReactNode` | - | - |
+| closable | 是否可关闭 | `boolean` | - | `true` |
+| closeIcon | 关闭按钮图标 | `ReactNode` | - | `` |
+
+说明:
+
+- 受控/非受控:传 `activeKey` 为受控模式,传 `defaultActiveKey` 为非受控模式。
+- 可编辑卡片:`type="editable-card"` 时支持添加/删除选项卡,可通过 `hideAdd` 隐藏添加按钮。
+- 指示器:`indicator.size` 可为数字或函数,函数接收原始宽度返回新宽度;`indicator.align` 控制对齐方式。
+- 额外内容:`tabBarExtraContent` 可为 ReactNode 或包含 `left`/`right` 的对象。
+- 事件回调:`onEdit` 仅在 `type="editable-card"` 时有效;`onTabScroll` 在标签栏滚动时触发。
diff --git a/packages/inula2-ui2/inulaUI/src/tag/index.md b/packages/inula2-ui2/inulaUI/src/tag/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..5ccb02c31397a9265538e811e7fc56ad29617dcd
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/tag/index.md
@@ -0,0 +1,304 @@
+# Tag 标签组件
+
+## 何时使用
+
+进行标记和分类的小标签。
+
+## 代码演示
+
+
+
+
+
基本
+
基本标签、link标签、带关闭按钮的标签
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Tag } from 'inula-ui';
+
+const Demo1 = () => {
+ return (
+
+ );
+};
+
+export default Demo1;
+```
+
+
+
+
+
+
+
+
+
颜色
+
不同颜色的Tag
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Tag } from 'inula-ui';
+
+const Demo2 = () => {
+ const colors = [
+ 'magenta',
+ 'red',
+ 'volcano',
+ 'orange',
+ 'gold',
+ 'lime',
+ 'green',
+ 'cyan',
+ 'blue',
+ 'geekblue',
+ 'purple',
+ ];
+
+ return (
+
+
+
Presets
+ {colors.map((c) => (
+
+ {c}
+
+ ))}
+
+
+
Custom
+
#2db7f5
+
#87d068
+
+
+ );
+};
+
+export default Demo2;
+```
+
+
+
+
+
+[//]: # ()
+
+[//]: # ()
+
+[//]: # (
)
+
+[//]: # (
增删tag
)
+
+[//]: # (
可以控制增加删减tag
)
+
+[//]: # ()
+[//]: # (
)
+
+[//]: # ( 查看示例代码
)
+
+[//]: # ()
+[//]: # (```jsx | pure)
+
+[//]: # (import { Tag } from 'inula-ui';)
+
+[//]: # ()
+[//]: # (const Demo3 = () => {)
+
+[//]: # ( let tags = ['Unremovable', 'Tag 2', '大家读'];)
+
+[//]: # ( let newIndex = 1;)
+
+[//]: # ()
+[//]: # ( const handleClose = (removed) => {)
+
+[//]: # ( tags = tags.filter((t) => t !== removed);)
+
+[//]: # ( };)
+
+[//]: # ()
+[//]: # ( const addTag = () => {)
+
+[//]: # ( const next = `New Tag ${newIndex++}`;)
+
+[//]: # ( tags = [...tags, next];)
+
+[//]: # ( };)
+
+[//]: # ()
+[//]: # ( return ()
+
+[//]: # ( )
+
+[//]: # ( {tags.map((tag, i) => ()
+
+[//]: # ( handleClose(tag)}>)
+
+[//]: # ( {tag})
+
+[//]: # ( )
+
+[//]: # ( ))})
+
+[//]: # ( )
+
+[//]: # ( + New Tag)
+
+[//]: # ( )
+
+[//]: # (
)
+
+[//]: # ( );)
+
+[//]: # (};)
+
+[//]: # ()
+[//]: # (export default Demo3;)
+
+[//]: # (```)
+
+[//]: # ()
+[//]: # ( )
+
+[//]: # (
)
+
+[//]: # ()
+
+
+
+
+
CheckableTag
+
支持可以选中的Tag
+
+
+ 查看示例代码
+
+```jsx | pure
+import { CheckabelTag } from 'inula-ui';
+
+const Demo4 = () => {
+ let checked = [true, false, false, false];
+ const tags = ['Movies', 'Books', 'Music', 'Sports'];
+
+ return (
+
+ {tags.map((tag, i) => (
+ {
+ checked[i] = next;
+ }}
+ >
+ {tag}
+
+ ))}
+
+ );
+};
+
+export default Demo4;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| --------- | ---------------- | --------------- | -------------------------------- | ----------- |
+| color | 标签内置颜色 | `string` | `PRESET-COLORS` | `'default'` |
+| size | 标签大小 | `string` | `'small' \| 'default' \| 'large` | `'default'` |
+| icon | 自定义图标 | `node` | `- | - |
+| closable | 是否显示关闭按钮 | `boolean` | - | `false` |
+| bordered | 是否显示边框 | `boolean` | - | `true` |
+| round | 是否显示圆角 | `boolean` | - | `false` |
+| disabled | 是否禁用标签 | `boolean` | - | `false` |
+| onClose | 关闭回调 | `function(e)` | - | - |
+| onClick | 点击回调 | `function(e)` | - | - |
+| children | 卡片内容 | `node` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+| ...rest | 其他属性 | - | - | - |
+
+### CheckableTag
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| -------------- | ------------ | ------------- | ------ | ------- |
+| checked | 当前选中状态 | `boolean` | - | - |
+| defaultChecked | 默认选中 | `boolean` | - | `false` |
+| disabled | 是否禁用标签 | `boolean` | - | `false` |
+| onChange | 状态改变回调 | `function(e)` | - | - |
+| children | 卡片内容 | `node` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| ...rest | 其他属性 | - | - | - |
+
+说明:
+
+- `PRESET_COLORS`:[
+ 'magenta','red','volcano','orange','gold','lime','green','cyan','blue','geekblue','purple',
+ 'success','processing','warning','error','default'
+ ]
+- 当传入`checked`时 CheckableTag 为外部受控状态。
diff --git a/packages/inula2-ui2/inulaUI/src/tooltip/index.md b/packages/inula2-ui2/inulaUI/src/tooltip/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..9d1d62f7eae3f3d42895807b770ca4e005c01ddf
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/tooltip/index.md
@@ -0,0 +1,148 @@
+# Tooltip 文字提示
+
+简单的文字提示气泡框。
+
+## 何时使用
+
+鼠标移入则显示提示,移出消失,气泡浮层不承载复杂文本和操作。
+
+可用来代替系统默认的 title 提示,提供一个 按钮/文字/操作 的文案解释。
+
+## 代码演示
+
+
+
+
+
基本用法
+
最基础的 Tooltip 用法,鼠标悬停显示提示内容。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tooltip,Button} from 'inula-ui';
+
+function Demo1() {
+ return (
+
+
+
+
+
+ );
+}
+
+export default Demo1;
+
+```
+
+
+
+
+
+
+
+
+
不同位置
+
Tooltip 支持在上、下、左、右等不同方向显示。
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tooltip,Button} from 'inula-ui';
+
+function Demo() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+export default Demo;
+
+```
+
+
+
+
+
+
+
+
+
模式
+
Tooltip 支持hover和click模式
+
+
+ 查看示例代码
+
+```jsx | pure
+import {Tooltip,Button} from 'inula-ui';
+
+function Demo() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+export default Demo;
+```
+
+
+
+
+
+## API
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+|---|---|---|---|---|
+| title | 提示内容 | `ReactNode` | - | - |
+| placement | 提示框位置 | `string` | `top` / `bottom` / `left` / `right` | `top` |
+| trigger | 触发方式 | `string` | `hover` / `click` | `hover` |
+| className | 自定义类名 | `string` | - | `""` |
+| style | 行内样式 | `CSSProperties` | - | `{}` |
+| children | 触发节点 | `ReactNode` | - | - |
+
+说明:
+
+- 触发说明:`hover` 下鼠标移入显示/移出隐藏;`click` 下单击切换显隐;
+- 点击触发节点与浮层外部区域会关闭已打开的提示框(外部点击防抖由文档事件实现)。
+- `className` 与 `style` 作用于外层包裹元素(触发节点容器)。
diff --git a/packages/inula2-ui2/inulaUI/src/tree/index.md b/packages/inula2-ui2/inulaUI/src/tree/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..0b3697f291bb31385cba2a65979e64563fa91969
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/src/tree/index.md
@@ -0,0 +1,506 @@
+# Tree 树形控件
+
+## 何时使用
+
+文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用`树控件`可以完整展现其中的层级关系,并具有展开收起选择等交互功能。
+
+## 代码演示
+
+
+
+
+
基本
+
基本的checkbox选中、select选中、展开收起
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Tree } from 'inula-ui';
+
+const TreeDemo = () => {
+ const onSelect = (selectedKeys, info) => {
+ console.log('selected', selectedKeys, info);
+ };
+
+ const onCheck = (checkedKeys, info) => {
+ console.log('onCheck', checkedKeys, info);
+ };
+ const treeData = [
+ {
+ title: 'parent 1',
+ key: '0-0',
+ children: [
+ {
+ title: 'parent 1-0',
+ key: '0-0-0',
+ disabled: true,
+ children: [
+ {
+ title: 'leaf',
+ key: '0-0-0-0',
+ disableCheckbox: true,
+ },
+ {
+ title: 'leaf',
+ key: '0-0-0-1',
+ },
+ ],
+ },
+ {
+ title: 'parent 1-1',
+ key: '0-0-1',
+ children: [
+ {
+ title: sss,
+ key: '0-0-1-0',
+ },
+ ],
+ },
+ { title: 'parent 1-0', key: '0-0-2' },
+ ],
+ },
+ ];
+
+ return (
+
+ );
+};
+
+export default TreeDemo;
+```
+
+
+
+
+
+
+
+
+
受控示例
+
外部受控控制checkbox选择,select选中,展开收起
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Tree } from 'inula-ui';
+
+const treeData = [
+ {
+ title: '0-0',
+ key: '0-0',
+ children: [
+ {
+ title: '0-0-0',
+ key: '0-0-0',
+ children: [
+ { title: '0-0-0-0', key: '0-0-0-0' },
+ { title: '0-0-0-1', key: '0-0-0-1' },
+ { title: '0-0-0-2', key: '0-0-0-2' },
+ ],
+ },
+ {
+ title: '0-0-1',
+ key: '0-0-1',
+ children: [
+ { title: '0-0-1-0', key: '0-0-1-0' },
+ { title: '0-0-1-1', key: '0-0-1-1' },
+ { title: '0-0-1-2', key: '0-0-1-2' },
+ ],
+ },
+ {
+ title: '0-0-2',
+ key: '0-0-2',
+ },
+ ],
+ },
+ {
+ title: '0-1',
+ key: '0-1',
+ children: [
+ { title: '0-1-0-0', key: '0-1-0-0' },
+ { title: '0-1-0-1', key: '0-1-0-1' },
+ { title: '0-1-0-2', key: '0-1-0-2' },
+ ],
+ },
+ {
+ title: '0-2',
+ key: '0-2',
+ },
+];
+
+const TreeDemo = () => {
+ let expandedKeys = ['0-0-0', '0-0-1'];
+ let checkedKeys = ['0-0-0'];
+ let selectedKeys = [];
+ let autoExpandParent = true;
+
+ const onExpand = (expandedKeysValue) => {
+ console.log('onExpand', expandedKeysValue);
+ expandedKeys = expandedKeysValue;
+ autoExpandParent = false;
+ };
+
+ const onCheck = (checkedKeysValue) => {
+ console.log('onCheck', checkedKeysValue);
+ checkedKeys = checkedKeysValue;
+ };
+
+ const onSelect = (selectedKeysValue, info) => {
+ console.log('onSelect', info);
+ selectedKeys = selectedKeysValue;
+ };
+
+ return (
+
+ );
+};
+
+export default TreeDemo;
+```
+
+
+
+
+
+
+
+
+
自定义图标、连接线
+
可以文字前图标和展开按钮图标,支持连接线
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Tree, Icon } from 'inula-ui';
+
+const treeData1 = [
+ {
+ title: 'parent 1',
+ key: '0-0',
+ icon: ,
+ children: [
+ {
+ title: 'leaf',
+ key: '0-0-0',
+ icon: (
+
+ ),
+ },
+ {
+ title: 'leaf',
+ key: '0-0-1',
+ icon: ,
+ },
+ ],
+ },
+];
+
+const treeData2 = [
+ {
+ title: 'parent 1',
+ key: '0-0',
+ children: [
+ {
+ title: 'parent 1-0',
+ key: '0-0-0',
+ children: [
+ {
+ title: 'leaf',
+ key: '0-0-0-0',
+ },
+ {
+ title: 'leaf',
+ key: '0-0-0-1',
+ },
+ {
+ title: 'leaf',
+ key: '0-0-0-2',
+ },
+ ],
+ },
+ {
+ title: 'parent 1-1',
+ key: '0-0-1',
+ children: [
+ {
+ title: 'leaf',
+ key: '0-0-1-0',
+ },
+ ],
+ },
+ {
+ title: 'parent 1-2',
+ key: '0-0-2',
+ children: [
+ {
+ title: 'leaf',
+ key: '0-0-2-0',
+ },
+ {
+ title: 'leaf',
+ key: '0-0-2-1',
+ },
+ ],
+ },
+ ],
+ },
+];
+
+const TreeDemo = () => {
+ const onSelect = (selectedKeys, info) => {
+ console.log('selected', selectedKeys, info);
+ };
+ return (
+
+
+ }
+ treeData={treeData1}
+ />
+
+
+ }
+ defaultExpandedKeys={['0-0-0']}
+ onSelect={onSelect}
+ treeData={treeData2}
+ />
+
+
+ );
+};
+
+export default TreeDemo;
+```
+
+
+
+
+
+
+
+
+
异步加载
+
支持树控件异步加载。
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Tree } from 'inula-ui';
+
+const initTreeData = [
+ { title: 'Expand to load', key: '0' },
+ { title: 'Expand to load', key: '1' },
+ { title: 'Tree Node', key: '2', isLeaf: true },
+];
+
+const updateTreeData = (list, key, children) =>
+ list.map((node) => {
+ if (node.key === key) {
+ return {
+ ...node,
+ children,
+ };
+ }
+ if (node.children) {
+ return {
+ ...node,
+ children: updateTreeData(node.children, key, children),
+ };
+ }
+ return node;
+ });
+
+const TreeDemo = () => {
+ let treeData = initTreeData;
+
+ const onLoadData = ({ key, children }) =>
+ new Promise((resolve) => {
+ if (children) {
+ resolve();
+ return;
+ }
+ setTimeout(() => {
+ treeData = updateTreeData(treeData, key, [
+ { title: 'Child Node', key: `${key}-0` },
+ { title: 'Child Node', key: `${key}-1` },
+ ]);
+
+ resolve();
+ }, 1000);
+ });
+
+ return ;
+};
+
+export default TreeDemo;
+```
+
+
+
+
+
+
+
+
+
虚拟列表
+
数控件支持虚拟列表。
+
+
+ 查看示例代码
+
+```jsx | pure
+import { Tree } from 'inula-ui';
+
+const dig = (path = '0', level = 3) => {
+ const list = [];
+ for (let i = 0; i < 10; i += 1) {
+ const key = `${path}-${i}`;
+ const treeNode = {
+ title: key,
+ key,
+ };
+
+ if (level > 0) {
+ treeNode.children = dig(key, level - 1);
+ }
+
+ list.push(treeNode);
+ }
+ return list;
+};
+
+const treeData = dig();
+
+const TreeDemo = () => (
+ {
+ const title = item.title;
+ return {title};
+ }}
+ />
+);
+
+export default TreeDemo;
+```
+
+
+
+
+
+## API
+
+### Card
+
+| 属性 | 说明 | 类型 | 可选值 | 默认值 |
+| ------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------ | ------------------------------ |
+| autoExpandParent | 是否自动展开父节点 | `boolean` | - | `false` |
+| checkable | 是否显示复选框 | `boolean` | - | `false` |
+| checkedKeys | 受控选中复选框的树节点 | `string[] \| checkStrictly:{checked: string[], halfChecked: string[]}` | - | `[]` |
+| checkStrictly | 父子节点不再关联,完全受控 | `boolean` | - | `false` |
+| defaultCheckedKeys | 默认选中的树节点 | `string[]` | - | `[]` |
+| defaultExpandAll | 默认展开所有树节点 | `boolean` | - | `false` |
+| defaultExpandParent | 默认展开父节点 | `boolean` | - | `true` |
+| defaultExpandedKeys | 默认展开指定的树节点 | `string[]` | - | `[]` |
+| expandedKeys | 受控展开的树节点 | `string[]` | - | `[]` |
+| disabled | 禁用树 | `boolean` | - | `false` |
+| height | 设置虚拟滚动容器高度,设置后内部不再支持横向滚动 | `number` | - | - |
+| icon | 标题之前插入自定义图标,需设置 showIcon 为 true | `node` | - | - |
+| loadData | 异步加载数据,需设置 loadData 属性,返回 Promise 对象,返回值为树节点数据 | `function` | - | - |
+| loadedKeys | 受控已加载的树节点,用于控制异步加载,需配合 loadData 属性使用 | `string[]` | - | `[]` |
+| multiple | 是否支持多选 | `boolean` | - | `false` |
+| selectable | 是否支持选中,为 false 时点击为 check 选中 | `boolean` | - | `true` |
+| defaultSelectedKeys | 默认选中的树节点,多选需配合 multiple 属性使用 | `string[]` | - | `[]` |
+| selectedKeys | 受控选中的树节点,多选需配合 multiple 属性使用 | `string[]` | - | `[]` |
+| showIcon | 是否显示图标 | `boolean` | - | `false` |
+| showLine | 是否显示连接线 | `boolean` | - | `false` |
+| switcherIcon | 自定义展开图标 | `node` | - | - |
+| switcherLoadingIcon | 自定义加载中图标 | `node` | - | - |
+| titleRender | 自定义渲染节点 | `function` | - | - |
+| rootStyle | Tree 最外层 style | `CSSProperties` | - | - |
+| treeData | 树节点数据 | `array<{key, title, children, (disabled, selectable)}>` | - | - |
+| virtual | 是否开启虚拟滚动,设置 false 关闭虚拟滚动 | `boolean` | - | `false` |
+| onCheck | 点击复选框触发 | `function(e)` | - | - |
+| onExpand | 展开/收起节点时触发 | `function(e)` | - | - |
+| onLoad | 异步加载数据时触发 | `function(e)` | - | - |
+| onSelect | 选中/取消选中节点时触发 | `function(e)` | - | - |
+| className | 自定义类名 | `string` | - | - |
+| style | 行内样式 | `CSSProperties` | - | - |
+| ...rest | 其他属性 | - | - | - |
+
+说明:
+
+- `check、select、expand` 均支持受控。
+- 虚拟列表模式一定要设置`height`高度,不然不会生效。
diff --git a/packages/inula2-ui2/inulaUI/tsconfig.json b/packages/inula2-ui2/inulaUI/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..2a2788847d17d544d0e1772f2e33d2ce6f9d7fa4
--- /dev/null
+++ b/packages/inula2-ui2/inulaUI/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ "compilerOptions": {
+ "strict": true,
+ "declaration": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "jsx": "react",
+ "baseUrl": "./",
+ "paths": {
+ "@@/*": [".dumi/tmp/*"],
+ "inulaUI": ["src"],
+ "inulaUI/*": ["src/*", "*"]
+ },
+ "allowJs": true,
+ "checkJs": false
+ },
+ "include": [".dumirc.ts", "src/**/*"]
+}
diff --git a/packages/inula2-ui2/library_code/.gitignore b/packages/inula2-ui2/library_code/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..2a3120ea7ce09906aec62474f90c77d5a87b2a06
--- /dev/null
+++ b/packages/inula2-ui2/library_code/.gitignore
@@ -0,0 +1,17 @@
+# 依赖目录
+node_modules/
+.vscode/
+.idea/
+
+# 构建产物
+dist/
+build/
+*.log
+
+# 缓存文件
+.cache/
+*.tmp
+
+# 包管理器文件
+yarn.lock
+package-lock.json
diff --git a/packages/inula2-ui2/library_code/index.html b/packages/inula2-ui2/library_code/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..30fdb852fae6962e8a3f0e5367aac6fd22583b18
--- /dev/null
+++ b/packages/inula2-ui2/library_code/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ Inula-Next
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/inula2-ui2/library_code/package.json b/packages/inula2-ui2/library_code/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..15a21efcb2d63a4347b905cf8a3bd2ec3e3ba51f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "inula-ui",
+ "version": "0.0.8",
+ "description": "openinula2.0 组件库",
+ "author": "陈海彬、涂宇恒",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/cychenhaibin/openinula2.0_library.git"
+ },
+ "type": "module",
+ "main": "dist/index.cjs.js",
+ "module": "dist/index.es.js",
+ "exports": {
+ ".": {
+ "import": "./dist/index.es.js",
+ "require": "./dist/index.cjs.js"
+ },
+ "./notification": {
+ "import": "./dist/notification.es.js",
+ "require": "./dist/notification.cjs.js"
+ },
+ "./style.css": "./dist/style.css",
+ "./dist/*": "./dist/*"
+ },
+ "files": [
+ "dist"
+ ],
+ "sideEffects": [
+ "**/*.css"
+ ],
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@openinula/next": "^0.0.5"
+ },
+ "devDependencies": {
+ "@openinula/unplugin": "^0.0.2",
+ "vite": "^4.4.9"
+ },
+ "keywords": [
+ "inula-next"
+ ]
+}
diff --git a/packages/inula2-ui2/library_code/src/colors.css b/packages/inula2-ui2/library_code/src/colors.css
new file mode 100644
index 0000000000000000000000000000000000000000..2c853489818e9cc1af06a8a0b784ab98b68ee12e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/colors.css
@@ -0,0 +1,112 @@
+:root {
+ /* 主要颜色 */
+ --inula-color-primary: #1677ff;
+ /* 主要颜色 hover */
+ --inula-color-primary-hover: #4096ff;
+ /* 主要颜色 active */
+ --inula-color-primary-active: #0958d9;
+ /* 默认背景颜色 */
+ --inula-color-default-bg: #fff;
+ /* 默认背景颜色 hover */
+ --inula-color-default-hover-bg: #f0f7ff;
+ /* 默认背景颜色 active */
+ --inula-color-default-active-bg: #e6f4ff;
+ /* 警告背景颜色*/
+ --inula-color-warning-bg: #fffbe6;
+ /* 危险背景颜色*/
+ --inula-color-danger-bg: #fff2f0;
+ /* 默认边框颜色 */
+ --inula-color-default-border: #d9d9d9;
+ /* 警告边框颜色 */
+ --inula-color-warning-border: #ffe58f;
+ /* 危险边框颜色 */
+ --inula-color-danger-border: #ffccc7;
+ /* 默认文字颜色 */
+ --inula-color-primary-text: #333;
+ /* 次要文字颜色 */
+ --inula-color-secondary-text: #666;
+ /* 禁用文字颜色 */
+ --inula-color-disabled-text: #999;
+ /* 警告文字颜色 */
+ --inula-color-warning-text: #faad14;
+ /* 危险文字颜色 */
+ --inula-color-danger-text: #ff4d4f;
+
+ /* 虚线按钮颜色 */
+ --inula-color-dashed-border: #d9d9d9;
+
+ /* 文本按钮颜色 */
+ --inula-color-text: #1677ff;
+ --inula-color-text-hover-bg: #e6f4ff;
+ --inula-color-text-active-bg: #bae0ff;
+
+ /* 链接按钮颜色 */
+ --inula-color-link: #1677ff;
+ --inula-color-link-hover: #0958d9;
+
+ /* 危险按钮颜色 */
+ --inula-color-danger: #ff4d4f;
+ --inula-color-danger-bg: #fff1f0;
+ --inula-color-danger-hover-bg: #ff4d4f;
+ --inula-color-danger-hover-text: #fff;
+ --inula-color-danger-active-bg: #d9363e;
+
+ /* 幽灵按钮背景色 */
+ --inula-color-ghost-bg-hover: rgba(22, 119, 255, 0.08);
+ --inula-color-ghost-bg-active: rgba(22, 119, 255, 0.16);
+
+ /* 禁用状态颜色 */
+ --inula-color-disabled-bg: #fff;
+ --inula-color-disabled-text: #333;
+ --inula-color-disabled-border: #d9d9d9;
+
+ /* 加载中 spinner 颜色 */
+ --inula-color-spinner: #ccc;
+ --inula-color-spinner-active: #1677ff;
+
+ /* demo 深色背景 */
+ --inula-demo-dark-bg: #222;
+
+ /* Radio 颜色 */
+ --inula-radio-bg: #fff;
+ --inula-radio-border: #d9d9d9;
+ --inula-radio-hover-border: #1677ff;
+ --inula-radio-hover-shadow: 0 0 0 2px rgba(64,158,255,0.12);
+ --inula-radio-checked-border: #1677ff;
+ --inula-radio-checked-bg: #1677ff;
+ --inula-radio-disabled-bg: #f5f5f5;
+ --inula-radio-disabled-border: #d9d9d9;
+ --inula-radio-disabled-dot: #d9d9d9;
+ --inula-radio-disabled-label: #c0c4cc;
+ --inula-radio-readonly-bg: #eaf4ff;
+ --inula-radio-readonly-border: #b3c6e6;
+ --inula-radio-readonly-label: #bfbfbf;
+ --inula-radio-readonly-dot: #b3d4fc;
+
+ /* Select 颜色 */
+ --inula-select-bg: #fff;
+ --inula-select-border: #d9d9d9;
+ --inula-select-option-hover-bg: #f5faff;
+ --inula-select-border-top: #e8e8e8;
+ --inula-select-hover-border: #4096ff;
+ --inula-select-hover-bg: #f0f7ff;
+ --inula-select-active-bg: #e6f4ff;
+ --inula-select-disabled-bg: #f5f5f5;
+ --inula-select-disabled-text: #bfbfbf;
+ --inula-select-disabled-border: #d9d9d9;
+ --inula-select-readonly-bg: #eaf4ff;
+ --inula-select-tag-hover-bg: #e6f4ff;
+ --inula-select-tag-hover-text: #1677ff;
+ --inula-select-arrow-color: #999;
+ --inula-select-tag-text: #333;
+
+ /* 变体样式颜色 - 参考 Ant Design 5.0 设计规范 */
+ --inula-variant-filled-bg: #fafafa;
+ --inula-variant-filled-hover-bg: #f0f0f0;
+ --inula-variant-filled-focus-bg: #ffffff;
+ --inula-variant-borderless-hover-bg: rgba(0, 0, 0, 0.04);
+ --inula-variant-borderless-focus-bg: rgba(0, 0, 0, 0.08);
+ --inula-variant-underlined-border: #d9d9d9;
+ --inula-variant-underlined-hover-border: #4096ff;
+ --inula-variant-underlined-focus-border: #1677ff;
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/demo.jsx b/packages/inula2-ui2/library_code/src/components/Notification/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c125f0c8eea25b2243877d6ffd4bb5c8f5d3e607
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/demo.jsx
@@ -0,0 +1,46 @@
+// import Button from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+
+function NotificationDemo() {
+ let loading = false;
+ return (
+
+
+
基础通知
+
演示信息、成功、警告、错误四种类型的通知用法。
+
+
+
+
+
自定义关闭按钮
+
演示如何自定义通知的关闭按钮文本和样式。
+
+
+
+
+
自定义操作按钮
+
演示如何为通知添加自定义操作按钮。
+
+
+
+
+
弹出位置
+
演示通知在不同屏幕位置的弹出效果。
+
+
+
+
+
选择背景颜色
+
可以传入bgColor显示不同的背景颜色
+
+
+
+
+
+ );
+}
+export default NotificationDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f893a61a0fd44f97dc7818a969c649f9fae23bda
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo1.jsx
@@ -0,0 +1,23 @@
+import { info, success, warning, error } from '../index.jsx';
+import Button from '../../button/index.jsx';
+import '../index.css';
+
+function Demo1() {
+ function show(type) {
+ if (type === 'info') info({ message: '信息提示', bgColor: true, description: '这是一条普通的信息提示' });
+ if (type === 'success') success({ message: '成功提示', description: '操作已成功完成' });
+ if (type === 'warning') warning({ message: '警告提示', description: '请注意相关事项' });
+ if (type === 'error') error({ message: '错误提示', description: '操作失败,请重试' });
+ if (type === 'text') text({ message: '文本提示', bgColor: true, description: '这是一条普通的文本提示' });
+ }
+ return (
+
+
+
+
+
+
+ );
+}
+
+export default Demo1;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..9ae92335af79a9702bc658bca3adb7f9e3668cf5
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo2.jsx
@@ -0,0 +1,21 @@
+import { text } from '../index.jsx';
+import Button from '../../button/index.jsx';
+import '../index.css';
+
+function Demo2() {
+ function showCustomClose() {
+ text({
+ message: '自定义关闭按钮',
+ description: '关闭按钮变成了"关闭"并加粗变色',
+ closeText: '关闭',
+ closeClassName: 'my-close-btn',
+ });
+ }
+ return (
+
+
+
+ );
+}
+
+export default Demo2;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6a71dfe26200bd2de885081fbb1678971288734e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo3.jsx
@@ -0,0 +1,25 @@
+import { text } from '../index.jsx';
+import Button from '../../button/index.jsx';
+import '../index.css';
+
+function Demo3() {
+ function showCustomActions() {
+ text({
+ message: 'Notification Title',
+ description: 'A function will be called after the notification is closed...',
+ actions: ({ notification, remove, onClose }) => (
+ <>
+
+
+ >
+ )
+ });
+ }
+ return (
+
+
+
+ );
+}
+
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..91f08a2d7a22d47f958aea8a975b83d516bd147d
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo4.jsx
@@ -0,0 +1,18 @@
+import { text } from '../index.jsx';
+import Button from '../../button/index.jsx';
+import '../index.css';
+
+function Demo4() {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export default Demo4;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..571a47ba9bcb622628ed22b65227a6ae6d07df33
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/demos/demo5.jsx
@@ -0,0 +1,18 @@
+import { text, info } from '../index.jsx';
+import Button from '../../button/index.jsx';
+import '../index.css';
+
+function Demo5() {
+ function show(type) {
+ if (type === 'text') text({ message: '不带bgColor', description: '这是一条普通的信息提示' });
+ if (type === 'info') info({ message: '带bgColor', bgColor: true, description: '这是一条普通的文本提示' });
+ }
+ return (
+
+
+
+
+ );
+}
+
+export default Demo5;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/index.css b/packages/inula2-ui2/library_code/src/components/Notification/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..d0b35842aee774dbe9f0ea742f1357598af621a2
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/index.css
@@ -0,0 +1,197 @@
+@import '../../colors.css';
+.inula-notification-wrapper {
+ width: 368px;
+ position: fixed;
+ top: 24px;
+ right: 24px;
+ z-index: 2000;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ pointer-events: none;
+}
+.inula-notification {
+ display: flex;
+ align-items: flex-start;
+ background: #fff;
+ border-radius: 8px;
+ box-shadow: 0 6px 24px 0 rgba(0,0,0,0.12);
+ padding: 18px 28px 18px 18px;
+ min-width: 320px;
+ max-width: 368px;
+ border-left: 4px solid var(--inula-color-primary);
+ margin: 0;
+ position: relative;
+ animation: inula-notification-fadein 0.4s cubic-bezier(.23,1.01,.32,1);
+ transition: box-shadow 0.2s, transform 0.2s, opacity 0.3s;
+ opacity: 1;
+ pointer-events: auto;
+ margin-bottom: 8px;
+}
+.inula-notification-info {
+ border-left-color: var(--inula-color-primary);
+ background: #e6f4ff;
+}
+.inula-notification-success {
+ border-left-color: #52c41a;
+ background: #f6ffed;
+}
+.inula-notification-warning {
+ border-left-color: #faad14;
+ background: #fffbe6;
+}
+.inula-notification-error {
+ border-left-color: var(--inula-color-danger);
+ background: #fff2f0;
+}
+
+.inula-notification-icon {
+ width: 40px;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 22px;
+ font-weight: bold;
+ border-radius: 50%;
+ margin-right: 16px;
+ margin-top: 2px;
+ flex-shrink: 0;
+ box-shadow: 0 2px 8px rgba(0,0,0,0.04);
+}
+.inula-notification-icon-success { background: #f6ffed; color: #52c41a; }
+.inula-notification-icon-warning { background: #fffbe6; color: #faad14; }
+.inula-notification-icon-error { background: #fff2f0; color: var(--inula-color-danger); }
+.inula-notification-icon-info { background: #e6f4ff; color: var(--inula-color-primary); }
+
+.inula-notification-content {
+ flex: 1;
+ min-width: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 2px;
+}
+.inula-notification-message {
+ font-weight: 600;
+ font-size: 16px;
+ color: #222;
+ margin-bottom: 4px;
+ line-height: 1.3;
+}
+.inula-notification-description {
+ font-size: 14px;
+ color: #666;
+ line-height: 1.5;
+}
+.inula-notification-close {
+ font-size: 18px;
+ color: #bbb;
+ cursor: pointer;
+ margin-left: 18px;
+ user-select: none;
+ transition: color 0.2s, background 0.2s;
+ border-radius: 50%;
+ padding: 2px 6px;
+ position: absolute;
+ top: 12px;
+ right: 16px;
+ background: transparent;
+}
+.inula-notification-close:hover {
+ color: #1677ff;
+ background: #f0f5ff;
+}
+@keyframes inula-notification-fadein {
+ from { opacity: 0; transform: translateY(-30px) scale(0.98); }
+ to { opacity: 1; transform: translateY(0) scale(1); }
+}
+@keyframes inula-notification-fadeout {
+ from { opacity: 1; transform: translateY(0) scale(1); }
+ to { opacity: 0; transform: translateY(30px) scale(0.98); }
+}
+.inula-notification-text {
+ max-width: 100%;
+ color: #333;
+}
+.inula-notification-text .inula-notification-message {
+ font-size: 15px;
+ font-weight: 400;
+ color: #333;
+}
+.inula-notification-text .inula-notification-close {
+ top: 0;
+ right: 0;
+}
+.inula-notification-actions {
+ display: flex;
+ margin-top: 10px;
+ justify-content: flex-end;
+}
+
+/* 顶部右侧 */
+.inula-notification-wrapper-topRight {
+ position: fixed;
+ top: 24px;
+ right: 24px;
+ z-index: 1000;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+}
+
+/* 顶部左侧 */
+.inula-notification-wrapper-topLeft {
+ position: fixed;
+ top: 24px;
+ left: 24px;
+ z-index: 1000;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+}
+
+/* 底部右侧 */
+.inula-notification-wrapper-bottomRight {
+ position: fixed;
+ bottom: 24px;
+ right: 24px;
+ z-index: 1000;
+ display: flex;
+ flex-direction: column-reverse;
+ align-items: flex-end;
+}
+
+/* 底部左侧 */
+.inula-notification-wrapper-bottomLeft {
+ position: fixed;
+ bottom: 24px;
+ left: 24px;
+ z-index: 1000;
+ display: flex;
+ flex-direction: column-reverse;
+ align-items: flex-start;
+}
+
+/* 顶部正中 */
+.inula-notification-wrapper-top {
+ position: fixed;
+ top: 24px;
+ left: 50%;
+ transform: translateX(-50%);
+ z-index: 1000;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+/* 底部正中 */
+.inula-notification-wrapper-bottom {
+ position: fixed;
+ bottom: 24px;
+ left: 50%;
+ transform: translateX(-50%);
+ z-index: 1000;
+ display: flex;
+ flex-direction: column-reverse;
+ align-items: center;
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/Notification/index.jsx b/packages/inula2-ui2/library_code/src/components/Notification/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..b660289f17185785b64d4034d83a245adb2559c5
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/Notification/index.jsx
@@ -0,0 +1,122 @@
+import './index.css';
+import { didMount, willUnmount } from '@openinula/next';
+
+const defaultPlacement = 'topRight';
+const placementClassMap = {
+ topLeft: 'inula-notification-wrapper-topLeft',
+ topRight: 'inula-notification-wrapper-topRight',
+ bottomLeft: 'inula-notification-wrapper-bottomLeft',
+ bottomRight: 'inula-notification-wrapper-bottomRight',
+ top: 'inula-notification-wrapper-top',
+ bottom: 'inula-notification-wrapper-bottom',
+};
+
+function getRoot(placement = defaultPlacement) {
+ const rootId = `__inula_notification_root_${placement}__`;
+ let root = document.getElementById(rootId);
+ if (!root) {
+ root = document.createElement('div');
+ root.id = rootId;
+ root.className = placementClassMap[placement] || placementClassMap[defaultPlacement];
+ document.body.appendChild(root);
+ }
+ return root;
+}
+
+let notifications = [];
+let notificationId = 0;
+
+function renderNotifications() {
+ // 按 placement 分类渲染
+ const placements = {};
+ notifications.forEach(item => {
+ const placement = item.placement || defaultPlacement;
+ if (!placements[placement]) placements[placement] = [];
+ placements[placement].push(item);
+ });
+ Object.keys(placementClassMap).forEach(placement => {
+ const root = getRoot(placement);
+ root.innerHTML = '';
+ const items = placements[placement] || [];
+ items.slice().reverse().forEach(item => {
+ const el = document.createElement('div');
+ root.appendChild(el);
+ window.render(
+ remove(item.key)}
+ />, el
+ );
+ });
+ });
+}
+
+function add(notification) {
+ notification.key = 'notice_' + (++notificationId);
+ notifications.push(notification);
+ renderNotifications();
+ if (notification.duration !== 0) {
+ setTimeout(() => remove(notification.key), notification.duration || 3000);
+ }
+}
+
+function remove(key) {
+ notifications = notifications.filter(n => n.key !== key);
+ renderNotifications();
+}
+
+export function open(opts) {
+ add({ ...opts });
+}
+
+export function info(opts) { open({ ...opts, type: 'info' }); }
+export function success(opts) { open({ ...opts, type: 'success' }); }
+export function warning(opts) { open({ ...opts, type: 'warning' }); }
+export function error(opts) { open({ ...opts, type: 'error' }); }
+export function text(opts) { open({ ...opts, type: 'text' }); }
+
+function Notification({ key, type = 'info', message, description, onClose, closeText, closeClassName, actions, bgColor }) {
+ let icon;
+ if (type === 'success') icon = ✔;
+ else if (type === 'error') icon = ✖;
+ else if (type === 'warning') icon = !;
+ else if (type === 'info') icon = i;
+ else icon = null; // type === 'text' 时无 icon
+
+ let notificationClass = 'inula-notification';
+ if (type === 'text') {
+ notificationClass += ' inula-notification-text';
+ } else if (type) {
+ if (bgColor) {
+ notificationClass += ' inula-notification-' + type;
+ }else {
+ notificationClass = 'inula-notification';
+ }
+ }
+
+ return (
+
+ {icon}
+
+
{message}
+ {description &&
{description}
}
+ {actions && (
+
+ {typeof actions === 'function'
+ ? actions({ notification: { key }, remove: onClose, onClose })
+ : actions}
+
+ )}
+
+
+ {closeText || '×'}
+
+
+ );
+}
+
+export default Notification;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/demo.jsx b/packages/inula2-ui2/library_code/src/components/button/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c0785b26138fd3a3f6ff68be1dfe87664eab1f43
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/demo.jsx
@@ -0,0 +1,51 @@
+// import Button from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+import demo6 from './demos/demo6.jsx';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
基本
+
展示按钮的五种类型:主按钮、默认按钮、虚线按钮、文本按钮、链接按钮、变体样式。
+
+
+
+
+
危险
+
展示五种类型按钮的'危险'状态用法。
+
+
+
+
+
幽灵
+
展示按钮的'幽灵'状态,包括主按钮、默认按钮和危险主按钮的幽灵样式。
+
+
+
+
+
禁用
+
展示五种类型按钮的'禁用'状态用法。
+
+
+
+
+
加载中
+
展示五种类型按钮的'加载中'状态用法。
+
+
+
+
+
交互加载
+
演示点击按钮后进入加载中状态,1.5秒后恢复。
+
+
+
+ );
+}
+export default ButtonDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/button/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..04769c68fddaafedef09b14261df410593be575c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/demos/demo1.jsx
@@ -0,0 +1,19 @@
+import Button from '../index.jsx';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/button/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..318922e753f29f6d2b88c50e78f5dbff739ebd99
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/demos/demo2.jsx
@@ -0,0 +1,15 @@
+import Button from '../index.jsx';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/button/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..930358a878d4c2b1cc18fb7b1726f24cb4760ec4
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/demos/demo3.jsx
@@ -0,0 +1,12 @@
+import Button from '../index.jsx';
+
+function ButtonDemo() {
+ return (
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/button/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/button/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..2400f71a70c04e90c8bedc6fda8e4d4d25258adc
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/demos/demo4.jsx
@@ -0,0 +1,15 @@
+
+import Button from '../index.jsx';
+
+function ButtonDemo() {
+ return (
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/button/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..b7223eab7237861db951bab976d6b58f5f02b2a6
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/demos/demo5.jsx
@@ -0,0 +1,15 @@
+
+import Button from '../index.jsx';
+
+function ButtonDemo() {
+ return (
+
+
+
+
+
+
+
+ );
+}
+export default ButtonDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/button/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..baefee358596bd769f410a48a7af894fb3bc664e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/demos/demo6.jsx
@@ -0,0 +1,16 @@
+
+import Button from '../index.jsx';
+
+function ButtonDemo() {
+ let loading = false;
+ return (
+
+
+
+ );
+}
+export default ButtonDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/index.css b/packages/inula2-ui2/library_code/src/components/button/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..1c928194d06397e9b19eff78f9ed9eb9f4f5d07b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/index.css
@@ -0,0 +1,310 @@
+@import '../../colors.css';
+.inula-btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 14px;
+ padding: 0 16px;
+ height: 32px;
+ border-radius: 4px;
+ border: 1px solid var(--inula-color-default-border);
+ background: var(--inula-color-default-bg);
+ color: var(--inula-color-primary-text);
+ cursor: pointer;
+ transition: all 0.2s;
+ outline: none;
+}
+
+/* 主按钮 */
+.inula-btn-primary {
+ background: var(--inula-color-primary);
+ border-color: var(--inula-color-primary);
+ color: #fff;
+}
+.inula-btn-primary:hover {
+ background: var(--inula-color-primary-hover);
+ border-color: var(--inula-color-primary-hover);
+ color: #fff;
+}
+.inula-btn-primary:active {
+ background: var(--inula-color-primary-active);
+ border-color: var(--inula-color-primary-active);
+ color: #fff;
+}
+
+/* 默认按钮 */
+.inula-btn-default {
+ background: var(--inula-color-default-bg);
+ border-color: var(--inula-color-default-border);
+ color: var(--inula-color-primary-text);
+}
+.inula-btn-default:hover {
+ color: var(--inula-color-primary);
+ border-color: var(--inula-color-primary);
+ background: var(--inula-color-default-hover-bg);
+}
+.inula-btn-default:active {
+ background: var(--inula-color-default-active-bg);
+ border-color: var(--inula-color-primary);
+ color: var(--inula-color-primary);
+}
+
+/* 虚线按钮 */
+.inula-btn-dashed {
+ border-style: dashed;
+ background: var(--inula-color-default-bg);
+ border-color: var(--inula-color-dashed-border);
+ color: var(--inula-color-primary-text);
+}
+.inula-btn-dashed:hover {
+ color: var(--inula-color-primary);
+ border-color: var(--inula-color-primary);
+ background: var(--inula-color-default-hover-bg);
+}
+.inula-btn-dashed:active {
+ background: var(--inula-color-default-active-bg);
+ border-color: var(--inula-color-primary);
+ color: var(--inula-color-primary);
+}
+
+/* 文本按钮 */
+.inula-btn-text {
+ background: none;
+ border: none;
+ color: var(--inula-color-text);
+ box-shadow: none;
+}
+.inula-btn-text:hover {
+ background: var(--inula-color-text-hover-bg);
+ color: var(--inula-color-primary-active);
+}
+.inula-btn-text:active {
+ background: var(--inula-color-text-active-bg);
+ color: var(--inula-color-primary-active);
+}
+
+/* 链接按钮 */
+.inula-btn-link {
+ background: none;
+ border: none;
+ color: var(--inula-color-link);
+ text-decoration: underline;
+ box-shadow: none;
+}
+.inula-btn-link:hover {
+ color: var(--inula-color-link-hover);
+ background: none;
+ text-decoration: underline;
+}
+.inula-btn-link:active {
+ color: var(--inula-color-link-hover);
+ background: none;
+}
+
+/* 危险按钮 */
+.inula-btn-danger {
+ color: var(--inula-color-danger);
+ border-color: var(--inula-color-danger);
+ background: var(--inula-color-danger-bg);
+}
+.inula-btn-danger:hover {
+ color: var(--inula-color-danger-hover-text);
+ background: var(--inula-color-danger-hover-bg);
+ border-color: var(--inula-color-danger-hover-bg);
+}
+.inula-btn-primary.inula-btn-danger {
+ background: var(--inula-color-danger);
+ color: #fff;
+ border-color: var(--inula-color-danger);
+}
+.inula-btn-primary.inula-btn-danger:hover {
+ background: var(--inula-color-danger-active-bg);
+ border-color: var(--inula-color-danger-active-bg);
+ color: #fff;
+}
+.inula-btn-primary.inula-btn-danger:active {
+ background: var(--inula-color-danger-active-bg);
+ border-color: var(--inula-color-danger-active-bg);
+ color: #fff;
+}
+
+/* 幽灵按钮基础样式 */
+.inula-btn-ghost {
+ background: transparent !important;
+ color: var(--inula-color-primary);
+ border: 1px solid var(--inula-color-primary);
+ box-shadow: none;
+}
+
+/* 幽灵主按钮 */
+.inula-btn-primary.inula-btn-ghost {
+ color: var(--inula-color-primary);
+ border-color: var(--inula-color-primary);
+ background: transparent;
+}
+.inula-btn-primary.inula-btn-ghost:hover {
+ color: var(--inula-color-primary-hover);
+ border-color: var(--inula-color-primary-hover);
+ background: var(--inula-color-ghost-bg-hover);
+}
+.inula-btn-primary.inula-btn-ghost:active {
+ color: var(--inula-color-primary-hover);
+ border-color: var(--inula-color-primary-hover);
+ background: var(--inula-color-ghost-bg-active);
+}
+
+/* 幽灵危险按钮 */
+.inula-btn-danger.inula-btn-ghost,
+.inula-btn-primary.inula-btn-danger.inula-btn-ghost {
+ color: var(--inula-color-danger);
+ border-color: var(--inula-color-danger);
+ background: transparent;
+}
+.inula-btn-danger.inula-btn-ghost:hover,
+.inula-btn-primary.inula-btn-danger.inula-btn-ghost:hover {
+ color: #fff;
+ background: var(--inula-color-danger);
+ border-color: var(--inula-color-danger);
+}
+.inula-btn-danger.inula-btn-ghost:active {
+ color: var(--inula-color-danger);
+ background: var(--inula-color-danger);
+ border-color: var(--inula-color-danger);
+}
+
+/* 幽灵默认按钮 */
+.inula-btn-default.inula-btn-ghost {
+ color: var(--inula-color-primary);
+ border-color: var(--inula-color-primary);
+ background: transparent;
+}
+.inula-btn-default.inula-btn-ghost:hover {
+ color: var(--inula-color-primary-hover);
+ border-color: var(--inula-color-primary-hover);
+ background: var(--inula-color-ghost-bg-hover);
+}
+.inula-btn-default.inula-btn-ghost:active {
+ color: var(--inula-color-primary-hover);
+ border-color: var(--inula-color-primary-hover);
+ background: var(--inula-color-ghost-bg-active);
+}
+
+/* 禁用 */
+.inula-btn-disabled,
+.inula-btn:disabled,
+.inula-btn-disabled:hover,
+.inula-btn:disabled:hover,
+.inula-btn-disabled:active,
+.inula-btn:disabled:active {
+ cursor: not-allowed;
+ opacity: 0.5;
+ /* background: var(--inula-color-disabled-bg) !important; */
+ /* color: var(--inula-color-disabled-text) !important; */
+ border-color: var(--inula-color-disabled-border) !important;
+ box-shadow: none !important;
+}
+
+/* 加载中 */
+.inula-btn-loading {
+ position: relative;
+}
+.inula-btn-spinner {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ border: 2px solid var(--inula-color-spinner);
+ border-top: 2px solid var(--inula-color-spinner-active);
+ border-radius: 50%;
+ animation: inula-spin 0.8s linear infinite;
+ margin-right: 8px;
+}
+@keyframes inula-spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+/* 幽灵按钮在深色背景下更明显 */
+.demo-dark-bg {
+ background: var(--inula-demo-dark-bg);
+ padding: 16px;
+ display: inline-block;
+ border-radius: 6px;
+}
+
+/* Button 变体样式 */
+
+/* Filled 变体 - 支持Form传递的CSS变量 */
+.inula-btn-filled {
+ background: var(--inula-form-variant-bg, var(--inula-variant-filled-bg));
+ border: 0px solid var(--inula-form-variant-border, transparent);
+}
+
+.inula-btn-filled:hover {
+ background: var(--inula-form-variant-hover-bg, var(--inula-variant-filled-hover-bg));
+ border-color: var(--inula-form-variant-border, transparent);
+}
+
+.inula-btn-filled:focus-within {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-focus-bg, var(--inula-variant-borderless-focus-bg));
+}
+
+.inula-btn-filled.inula-btn-disabled {
+ background: var(--inula-color-disabled-bg);
+ border-color: transparent;
+}
+
+/* Borderless 变体 - 支持Form传递的CSS变量 */
+.inula-btn-borderless {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-bg, transparent);
+}
+
+.inula-btn-borderless:hover {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-hover-bg, var(--inula-variant-borderless-hover-bg));
+}
+
+.inula-btn-borderless:focus-within {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-focus-bg, var(--inula-variant-borderless-focus-bg));
+}
+
+.inula-btn-borderless.inula-btn-disabled {
+ background: var(--inula-color-disabled-bg);
+ border: none !important;
+ box-shadow: none !important;
+}
+
+/* Underlined 变体 - 支持Form传递的CSS变量 */
+.inula-btn-underlined {
+ border: var(--inula-form-variant-border, none) !important;
+ border-bottom: var(--inula-form-variant-bottom-border, 1px solid var(--inula-variant-underlined-border)) !important;
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-bg, transparent);
+}
+
+.inula-btn-underlined:hover {
+ border: var(--inula-form-variant-border, none) !important;
+ border-bottom: var(--inula-form-variant-bottom-hover-border, 1px solid var(--inula-variant-underlined-hover-border)) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-hover-bg, transparent);
+}
+
+.inula-btn-underlined:focus-within {
+ border: var(--inula-form-variant-border, none) !important;
+ border-bottom: var(--inula-form-variant-bottom-focus-border, 1px solid var(--inula-variant-underlined-focus-border)) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-focus-bg, transparent);
+}
+
+.inula-btn-underlined.inula-btn-disabled {
+ border: none !important;
+ border-bottom: 1px solid var(--inula-color-disabled-border) !important;
+ box-shadow: none !important;
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/button/index.jsx b/packages/inula2-ui2/library_code/src/components/button/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..68a4b5113e27a8ad7a6352c0a7331c08b88085ab
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/button/index.jsx
@@ -0,0 +1,42 @@
+import { render } from '@openinula/next';
+import './index.css';
+
+const Button = ({
+ type = 'default', // 样式类型:primary, dashed, text, link
+ danger = false,
+ ghost = false,
+ disabled = false,
+ loading = false,
+ variant = 'outlined', // outlined | filled | borderless | underlined
+ children,
+ onClick,
+ htmlType = 'button', // 原生 button 类型:button | submit | reset(默认 button,避免表单内默认 submit)
+ ...rest
+}) => {
+ const classNames = [
+ 'inula-btn',
+ `inula-btn-${type}`,
+ `inula-btn-${variant}`,
+ danger ? 'inula-btn-danger' : '',
+ ghost ? 'inula-btn-ghost' : '',
+ disabled ? 'inula-btn-disabled' : '',
+ loading ? 'inula-btn-loading' : '',
+ ].filter(Boolean).join(' ');
+
+ console.log('Button props:', rest);
+
+ return (
+
+ );
+};
+
+export default Button;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/card/demo.jsx b/packages/inula2-ui2/library_code/src/components/card/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e363cd8785567561c3e1a3d41fde0bf72abbeb32
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/demo.jsx
@@ -0,0 +1,31 @@
+import demo1 from "./demos/demo1.jsx";
+import demo2 from "./demos/demo2.jsx";
+import demo3 from "./demos/demo3.jsx";
+import demo4 from "./demos/demo4.jsx";
+const CardDemo = () => {
+ return (
+
+
+
基本样式
+
完整Card布局、边框样式、型号、hover效果
+
+
+
+
加载内容状态、嵌套Card样式
+
+
+
+
CardMeta组件
+
可定义头像、标题和介绍
+
+
+
+
CardGrid组件
+
网格布局内容组件,支持悬停浮空
+
+
+
+ )
+}
+
+export default CardDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/card/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/card/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..90eb56a6a54735fe3dd698922e50f8af2858940c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/demos/demo1.jsx
@@ -0,0 +1,63 @@
+import { Card } from "../index.jsx";
+import Icon from "../../icon/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const actions = [
+ ,
+ ,
+ ,
+];
+
+const CardDemo = () => {
+ return (
+
+
+ 完整Card布局
+
+
+ More
}
+ cover={
+

+ }
+ actions={actions}
+ >
+
Card content
+
Card content
+
Card content
+
+
+
+ 不同大小、边框、hover动效的Card
+
+
+
+ 默认型号,无hover动效
+
+
+ 小号,有hover动效
+
+
+
+ );
+};
+
+export default CardDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/card/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/card/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..efb3dfcfc657648e2679c10e6f4bb6341ba1a34f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/demos/demo2.jsx
@@ -0,0 +1,71 @@
+import { Card } from "../index.jsx";
+import Switch from "../../switch/index.jsx";
+import Icon from "../../icon/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const actions = [
+ ,
+ ,
+ ,
+];
+
+const CardDemo = () => {
+ let loading = false;
+ return (
+
+
+ 定义加载内容状态的Card
+
+
+ More
}
+ cover={
+

+ }
+ actions={actions}
+ loading={loading}
+ >
+
Card content
+
Card content
+
Card content
+
+
+ {
+ loading = !loading;
+ }}
+ />
+ 点击切换内容加载状态
+
+
+ 嵌套Card样式
+
+
+ 放在Card下的Card组件样式
+
+
+
+ );
+};
+
+export default CardDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/card/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/card/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..fd12a3e1de58c5f7fc12de8b278ff62ba8734659
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/demos/demo3.jsx
@@ -0,0 +1,47 @@
+import { Card, CardMeta } from "../index.jsx";
+import Icon from "../../icon/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const actions = [
+ ,
+ ,
+ ,
+];
+
+const CardDemo = () => {
+ return (
+
+
+ Meta组件,快速定义内容
+
+
+
+ }
+ actions={actions}
+ >
+
+ }
+ title="Card title"
+ description="This is the description"
+ />
+
+
+
+ );
+};
+
+export default CardDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/card/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/card/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c770150c509cdb53ed8954ec016f75aaa0d49c71
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/demos/demo4.jsx
@@ -0,0 +1,82 @@
+import { Card, CardGrid } from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const CardDemo = () => {
+ return (
+
+
+ Grid组件,网格型内嵌
+
+
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+
+
+ );
+};
+
+export default CardDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/card/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/card/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..fcb7a4d2db9945b371b5e8babac91f1f0d9c3496
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/demos/demo5.jsx
@@ -0,0 +1,101 @@
+import { Card } from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const tabList = [
+ {
+ key: "tab1",
+ tab: "tab1",
+ },
+ {
+ key: "tab2",
+ tab: "tab2",
+ },
+];
+
+const contentList = {
+ tab1: content1
,
+ tab2: content2
,
+};
+
+const tabListNoTitle = [
+ {
+ key: "article",
+ label: "article",
+ },
+ {
+ key: "app",
+ label: "app",
+ },
+ {
+ key: "project",
+ label: "project",
+ },
+];
+
+const contentListNoTitle = {
+ article: article content
,
+ app: app content
,
+ project: project content
,
+};
+
+const CardDemo = () => {
+ let activeTabKey1 = "tab1";
+ let activeTabKey2 = "article";
+ const onTab1Change = (key) => {
+ activeTabKey1 = key;
+ };
+
+ const onTab2Change = (key) => {
+ activeTabKey2 = key;
+ };
+
+ return (
+
+
+ 两种传参方式的标签卡片
+
+
+ More}
+ tabList={tabList}
+ activeTabKey={activeTabKey1}
+ onTabChange={onTab1Change}
+ >
+ {contentList[activeTabKey1]}
+
+
+
+ More}
+ onTabChange={onTab2Change}
+ tabProps={{
+ size: "middle",
+ }}
+ >
+ {contentListNoTitle[activeTabKey2]}
+
+
+
+ );
+};
+
+export default CardDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/card/index.css b/packages/inula2-ui2/library_code/src/components/card/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..01202a6eafabd1326131400343f73bcbe8860764
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/index.css
@@ -0,0 +1,214 @@
+/* --- Card --- */
+.inula-card {
+ display: flex;
+ flex-direction: column;
+ background-color: var(--inula-color-default-bg);
+}
+
+/* 悬停浮空效果*/
+.inula-card-hoverable:hover {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+ transform: scale(1.01);
+ transition: all 0.3s ease-in-out;
+}
+
+/* 卡片大小 */
+.inula-card.inula-card-default {
+ border-radius: 8px;
+ width: 300px;
+}
+
+.inula-card.inula-card-small {
+ border-radius: 8px;
+ width: 300px;
+}
+
+.inula-card.inula-card-gridbox {
+ width: 950px;
+}
+
+/* 卡片边框样式 */
+.inula-card.inula-card-outlined {
+ border: 1px solid #f0f0f0;
+}
+
+.inula-card.inula-card-borderless {
+ border: none;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.03),
+ 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02);
+}
+
+/* 卡片头部 */
+.inula-card-header {
+ min-height: 8px; /* 合56px */
+ padding: 24px;
+ font-size: 16px;
+ background-color: transparent;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.inula-card-header.inula-card-header-inner {
+ background-color: #fafafa;
+}
+
+.inula-card-header.inula-card-header-small {
+ padding: 12px;
+ font-size: 14px;
+}
+
+.inula-card-header-content {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.inula-card-header-content .inula-card-header-title {
+ font-weight: bold;
+}
+
+.inula-card-header-content .inula-card-header-extra {
+ color: rgba(0, 0, 0, 0.88);
+}
+
+/* 卡片封面 */
+.inula-card-cover {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+}
+
+.inula-card-cover img {
+ width: 100%;
+ height: auto;
+ object-fit: cover;
+}
+
+/* 卡片内容 */
+.inula-card-body {
+ width: calc(100% - 48px);
+ min-height: 8px;
+ padding: 24px;
+}
+
+.inula-card-body.inula-card-body-small {
+ padding: 12px;
+}
+
+.inula-card-body.inula-card-body-gridbox {
+ display: flex;
+ flex-wrap: wrap;
+ width: 100% !important;
+ padding: 0 !important;
+}
+
+/* 卡片加载中状态 */
+.inula-card-loading {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ width: 100%;
+ height: 100px;
+}
+
+.inula-card-loading-spinner {
+ display: flex;
+ gap: 8px;
+ width: 80px;
+ height: 20px;
+}
+
+.loading-bar {
+ width: 100%;
+ height: 15px;
+ background: linear-gradient(90deg, #f0f0f0 0%, #bfbfbf 50%, #f0f0f0 100%);
+ background-size: 200% 100%;
+ animation: loading 2s infinite linear;
+ border-radius: 4px;
+}
+
+@keyframes loading {
+ 0% {
+ background-position: 100% 0;
+ }
+ 50% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: -100% 0;
+ }
+}
+
+/* 卡片底部操作栏 */
+.inula-card-actions {
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ min-height: 56px;
+ border-top: 1px solid #f0f0f0;
+}
+
+.inula-card-actions-item {
+ position: relative;
+}
+
+.inula-card-actions-item:not(:last-child)::after {
+ content: "";
+ position: absolute;
+ right: -1px;
+ height: 100%;
+ width: 1px;
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+/* --- CardMeta --- */
+.inula-card-meta {
+ display: flex;
+ gap: 12px;
+ width: 100%;
+}
+
+.inula-card-meta-avatar {
+ width: 32px;
+ height: 32px;
+ border-radius: 100%;
+}
+
+.inula-card-meta-avatar img {
+ width: 100%;
+ height: 100%;
+ border-radius: 100%;
+ object-fit: cover;
+}
+
+.inula-card-meta-content {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ justify-content: space-between;
+ gap: 8px;
+}
+
+.inula-card-meta-title {
+ font-size: 16px;
+ font-weight: bold;
+}
+
+.inula-card-meta-description {
+ color: rgba(0, 0, 0, 0.45);
+}
+
+/* --- CardGrid --- */
+.inula-card-grid {
+ height: 64px;
+ border: 1px solid #f0f0f0;
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.inula-card-grid-hoverable:hover {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+ transform: scale(1.01);
+ transition: all 0.3s ease-in-out;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/card/index.jsx b/packages/inula2-ui2/library_code/src/components/card/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4ed30ec0a59c8c0a03799ea799f0d983659b7a45
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/card/index.jsx
@@ -0,0 +1,168 @@
+import "./index.css";
+
+const Card = ({
+ type = "default",
+ size = "default", // small, default
+ loading = false,
+ variant = "outlined", // outlined, borderless
+ hoverable = false, //悬停浮空
+ gridbox = false, //网格布局, 只有children全为CardGrid时才能传入true
+ tabList,
+ tabProps,
+ activeTabKey,
+ defaultActiveTabKey,
+ onTabChange,
+ title,
+ extra,
+ cover,
+ actions,
+ children,
+ className,
+ style,
+ ...rest
+}) => {
+ let isShowHeader = title || extra || tabList; // 是否显示头部
+
+ const classNames = [
+ "inula-card",
+ `inula-card-${type}`, // 卡片类型,默认为default
+ `inula-card-${size}`, // 卡片大小,默认为default
+ `inula-card-${variant}`, // 卡片变体,默认为outlined
+ hoverable && "inula-card-hoverable", // 悬停
+ gridbox && "inula-card-gridbox", // 网格布局
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const bodyClassName = [
+ "inula-card-body",
+ `inula-card-body-${size}`,
+ gridbox && "inula-card-body-gridbox",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const headerClassName = [
+ "inula-card-header",
+ `inula-card-header-${size}`,
+ `inula-card-header-${type}`,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const styles = {
+ ...style,
+ };
+
+ const CardHeader = () => {
+ if (!isShowHeader) return <>>;
+ return (
+
+
+ {title &&
{title}
}
+ {extra &&
{extra}
}
+
+
+ );
+ };
+
+ const CardLoading = () => {
+ return (
+
+ {/* 四个加载条容器 */}
+ {[...Array(4)].map((_, i) => (
+
+ ))}
+
+ );
+ };
+
+ return (
+
+
+ {cover && (
+
+ {cover}
+
+ )}
+
+ {loading ? : children}
+
+ {actions && (
+
+ {actions.map((action, index) => (
+
+ {action}
+
+ ))}
+
+ )}
+
+ );
+};
+
+const CardMeta = ({
+ avatar,
+ title,
+ description,
+ className,
+ style,
+ ...rest
+}) => {
+ const classNames = ["inula-card-meta", className].filter(Boolean).join(" ");
+ const styles = {
+ ...style,
+ };
+ return (
+
+ {avatar &&
{avatar}
}
+
+ {title &&
{title}
}
+ {description && (
+
{description}
+ )}
+
+
+ );
+};
+
+const CardGrid = ({
+ hoverable = true,
+ className,
+ style,
+ children,
+ ...rest
+}) => {
+ const classNames = [
+ "inula-card-grid",
+ hoverable && "inula-card-grid-hoverable",
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+ const styles = {
+ ...style,
+ };
+ return (
+
+ {children}
+
+ );
+};
+
+export { Card, CardMeta, CardGrid };
diff --git a/packages/inula2-ui2/library_code/src/components/checkbox/demo.jsx b/packages/inula2-ui2/library_code/src/components/checkbox/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6e6f38a25c08dd79dc430c84df4af31210d6d197
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/checkbox/demo.jsx
@@ -0,0 +1,27 @@
+import demo1 from "./demos/demo1.jsx";
+import demo2 from "./demos/demo2.jsx";
+import demo3 from "./demos/demo3.jsx";
+
+const CheckboxDemo = () => {
+ return (
+
+
+
基本Checkbox
+
选中、默认选中、禁用、indeterminate样式
+
+
+
+
CheckboxGroup
+
选中、默认选中、禁用、外部受控
+
+
+
+
案例
+
区分全不选、部分选、全选的复选框案例
+
+
+
+ )
+}
+
+export default CheckboxDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..41b3bcbd9a6ed1e10a655f72f70dd464711ca154
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo1.jsx
@@ -0,0 +1,58 @@
+import { Checkbox } from "../index.jsx";
+import { Tag } from "../../tag/index.jsx";
+
+const CheckboxDemo = () => {
+ return (
+
+
+ 基本状态
+ 普通Checkbox
+ 选中
+ 默认选中
+
+
+ indeterminate复选框样式
+ indeterminate按钮
+
+ indeterminate选中
+
+
+
+ 禁用状态
+ 禁用未选中
+
+ 禁用选中
+
+
+ 禁用默认选中
+
+
+ indeterminate按钮禁用
+
+
+
+ );
+};
+
+export default CheckboxDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e13c1c9f3fdcf175e69c694e44142e517eddf92b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo2.jsx
@@ -0,0 +1,61 @@
+import { CheckboxGroup } from "../index.jsx";
+import { Tag } from "../../tag/index.jsx";
+
+const CheckboxDemo = () => {
+ let checkedList = ["Apple", "Pear"];
+
+ const options = [
+ { label: "Apple", value: "Apple", disabled: true },
+ { label: "Pear", value: "Pear" },
+ { label: "Orange", value: "Orange" },
+ ];
+
+ const onChange = (list) => {
+ checkedList = list;
+ };
+
+ return (
+
+
+ 定义默认选中和选中:
+
+
+
+ 只定义默认选中
+
+
+
+ 只定义选中
+
+
+
+ 全禁用
+
+
+
+ 外部受控
+
+
+
+ );
+};
+
+export default CheckboxDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..2367f423c17ec6b340be0497e7556cdc98871532
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/checkbox/demos/demo3.jsx
@@ -0,0 +1,29 @@
+import { Checkbox, CheckboxGroup } from "../index.jsx";
+
+const plainOptions = ['Apple', 'Pear', 'Orange'];
+const defaultCheckedList = ['Apple', 'Orange'];
+
+const CheckboxDemo = () => {
+ let checkedList = defaultCheckedList;
+ let checkAll = plainOptions.length === checkedList.length;
+ let indeterminate = checkedList.length > 0 && checkedList.length < plainOptions.length;
+
+ const onChange = (list) => {
+ checkedList = list;
+ };
+
+ const onCheckAllChange = (e) => {
+ checkedList = e.target.checked ? plainOptions : [];
+ };
+
+ return (
+
+
+ Check all
+
+
+
+ );
+};
+
+export default CheckboxDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/checkbox/index.css b/packages/inula2-ui2/library_code/src/components/checkbox/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..bb8e7a8864e0ce99297e4d4da0ea77dd45cd5493
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/checkbox/index.css
@@ -0,0 +1,128 @@
+/* checkbox */
+.inula-checkbox {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ font-size: 14px;
+ gap: 8px;
+}
+
+/* 禁用样式 */
+.inula-checkbox-input-disabled {
+ cursor: not-allowed !important;
+ background-color: var(--inula-color-disabled-bg) !important;
+ color: var(--inula-color-disabled-text) !important;
+ border: 1px solid var(--inula-color-disabled-border) !important;
+}
+
+.inula-checkbox-disabled {
+ color: var(--inula-color-disabled-text) !important;
+}
+
+/* 普通checkbox样式 */
+.inula-checkbox-input {
+ width: 18px;
+ height: 18px;
+ border-radius: 4px;
+
+ /* 清除默认样式 */
+ outline: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ padding: 0px;
+ margin: 0px;
+
+ cursor: pointer;
+ border: 1px solid var(--inula-color-default-border);
+ background-color: var(--inula-color-default-bg);
+ color: white;
+}
+
+.inula-checkbox-input:checked {
+ background: var(--inula-color-primary);
+ position: relative;
+}
+
+.inula-checkbox-input:checked::after {
+ content: "\f00c"; /* Font Awesome check图标 */
+ font-family: "Font Awesome 6 Free";
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+ /* color: white; */
+ font-weight: 900;
+}
+
+/* indeterminate checkbox样式 */
+.inula-checkbox-indeterminate {
+ position: relative;
+ background: var(--inula-color-default-bg);
+ transition: background 0.3s ease;
+}
+
+/* indeterminate状态移除选中背景色 */
+.inula-checkbox-indeterminate:checked {
+ background: var(--inula-color-default-bg)!important;
+}
+
+/* indeterminate状态移除图标 */
+.inula-checkbox-indeterminate:checked::after {
+ content: "" !important;
+}
+
+/* indeterminate 伪元素样式 */
+.inula-checkbox-indeterminate::after {
+ content: "";
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ width: 8px;
+ height: 8px;
+ background: var(--inula-color-primary);
+ transform: translate(-50%, -50%);
+}
+
+/* indeterminate hover */
+.inula-checkbox-indeterminate:hover {
+ background: var(--inula-checkbox-indeterminate-hover-bg) !important;
+}
+
+/* indeterminate active */
+.inula-checkbox-indeterminate:active {
+ animation: indeterminate-expand 0.3s ease-out;
+}
+
+@keyframes indeterminate-expand {
+ 0% {
+ box-shadow: 0 0 0 0 rgba(64, 135, 255, 0.8);
+ }
+ 100% {
+ box-shadow: 0 0 0 12px rgba(64, 135, 255, 0);
+ }
+}
+
+
+/* indeterminate 禁用 */
+.inula-checkbox-indeterminate-disabled:hover {
+ background: var(--inula-color-disabled-bg)!important;
+}
+
+.inula-checkbox-indeterminate-disabled::after {
+ background: var(--inula-checkbox-indeterminate-disabled-after);
+}
+
+.inula-checkbox-indeterminate-disabled:active {
+ animation: none;
+}
+
+/* checkboxgroup */
+.inula-checkbox-group {
+ display: flex;
+ gap: 10px;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ align-items: center;
+ justify-content: flex-start;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/checkbox/index.jsx b/packages/inula2-ui2/library_code/src/components/checkbox/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..40d691378f73edc51b97b2eec1c126fe810ad34c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/checkbox/index.jsx
@@ -0,0 +1,131 @@
+import "./index.css";
+
+const Checkbox = ({
+ // autoFocus = false,
+ defaultChecked = false,
+ disabled = false,
+ indeterminate = false,
+ children,
+ checked,
+ className,
+ style,
+ variant = "outlined", // outlined | filled | borderless | underlined
+ onChange,
+ onBlur,
+ onFocus,
+ ...rest
+}) => {
+
+ const handleBoxChange = (e) => {
+ if (checked !== undefined) {
+ e.target.checked = checked;
+ onChange && onChange(e);
+ return;
+ }
+ if (onChange) {
+ onChange(e);
+ }
+ };
+
+ const classNames = [
+ className,
+ "inula-checkbox",
+ `inula-checkbox-${variant}`,
+ disabled ? "inula-checkbox-disabled" : "",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const inputClassNames = [
+ "inula-checkbox-input",
+ indeterminate ? "inula-checkbox-indeterminate" : "",
+ disabled ? "inula-checkbox-input-disabled" : "",
+ indeterminate && disabled ? "inula-checkbox-indeterminate-disabled" : "",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const styles = {
+ ...style,
+ ...(disabled && { cursor: "not-allowed" }),
+ };
+
+ return (
+
+ );
+};
+
+const CheckboxGroup = ({
+ defaultValue = [], // [value1, value2,...]
+ disabled = false,
+ options, // [{value, label, disabled, ...}]
+ value, // [value1, value2,...]
+ className,
+ style,
+ onChange,
+ ...rest
+}) => {
+ let checkedValues = value || defaultValue || [];
+
+ const handleBoxChange = (targetValue) => {
+ if (value) {
+ onChange && onChange(targetValue);
+ return;
+ }
+ if (checkedValues.includes(targetValue)) {
+ checkedValues = checkedValues.filter((item) => item !== targetValue);
+ } else {
+ checkedValues = [...checkedValues, targetValue];
+ }
+ if (onChange) {
+ onChange(checkedValues);
+ }
+ };
+
+ const classNames = ["inula-checkbox-group", className]
+ .filter(Boolean)
+ .join(" ");
+
+ const styles = {
+ ...style,
+ };
+
+ const normalizedOptions = options.map((option) =>
+ typeof option === "string" ? { value: option, label: option } : option
+ );
+
+ return (
+
+
+ {(option, index) => {
+ return (
+ handleBoxChange(option.value)}
+ className={option.className || ""}
+ style={option.style || {}}
+ >
+ {option.label}
+
+ );
+ }}
+
+
+ );
+};
+
+export { Checkbox, CheckboxGroup };
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker/demo.jsx b/packages/inula2-ui2/library_code/src/components/datepicker/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..430f31755c94fa53b5f648cb867cdeb686751615
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker/demo.jsx
@@ -0,0 +1,39 @@
+import Demo1 from './demos/demo1.jsx';
+import Demo2 from './demos/demo2.jsx';
+// import Demo3 from './demos/demo3.jsx';
+// import Demo4 from './demos/demo4.jsx';
+// import Demo5 from './demos/demo5.jsx';
+// import Demo6 from './demos/demo6.jsx';
+// import WeekRangeDemo from './demos/week-range-demo.jsx';
+
+function DatePickerDemo() {
+ return (
+
+
+
+
基础用法
+
最简单的用法,在浮层中可以选择或者输入日期。
+
+
+
+
+
+
+
日期范围选择器
+
通过设置 picker 属性,指定范围选择器类型。
+
+
+
+
+ {/*
+
+
周范围选择器
+
专门测试周范围选择器的功能和样式。
+
+
+
*/}
+
+ );
+}
+
+export default DatePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..09460a362f2dd6fbd7c6493945c9060ff1df1e45
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo1.jsx
@@ -0,0 +1,71 @@
+import DatePicker from '../index.jsx';
+
+function Demo1() {
+ const handleChange = (value) => {
+ console.log('选择的值:', value);
+ };
+
+ return (
+
+
+
基础日期选择器
+
+
+
+
+
+
+
+
+
+
+
范围选择器
+
+
+ 双月显示的日期范围选择
+
+
+
+
+
不同模式的范围选择
+
+
+
+ 周范围选择
+
+
+
+ 月份范围选择
+
+
+
+ 季度范围选择
+
+
+
+ 年份范围选择
+
+
+
+
+
+
+
+
+ );
+}
+
+export default Demo1;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f81c1b59704f121b161dd95aa7b59cd95744858b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo2.jsx
@@ -0,0 +1,48 @@
+/**
+ * 通过设置 picker 属性,指定范围选择器类型。
+ */
+import DatePicker from '../index.jsx';
+
+function Demo2() {
+ const handleChange = (value) => {
+ console.log('选择的日期范围:', value);
+ };
+
+ return (
+
+
日期范围选择器
+
+
+
日期范围选择器
+
+
+
+
+
周范围选择器
+
+
+
+
+
月份范围选择器
+
+
+
+
+
季度范围选择器
+
+
+
+
+
年份范围选择器
+
+
+
+
+
自定义分隔符
+
+
+
+ );
+}
+
+export default Demo2;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ac8802910b805d2899817bfe41e52493a39c6ffe
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker/demos/demo3.jsx
@@ -0,0 +1,20 @@
+/**
+ * 多选,不支持 showTime 以及 picker="time"。
+ * @returns
+ */
+import DatePicker from '../index.jsx';
+
+function Demo3() {
+ return (
+
+
受控组件
+ console.log('受控组件值变化:', value)}
+ placeholder="受控组件"
+ />
+
+ );
+}
+
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker/index.css b/packages/inula2-ui2/library_code/src/components/datepicker/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..682d8ec195e5acfe387681e783ddaf672e367668
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker/index.css
@@ -0,0 +1,1181 @@
+/* DatePicker Container */
+.inula-datepicker {
+ position: relative;
+ display: inline-block;
+ width: 280px;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+ color: rgba(0, 0, 0, 0.85);
+}
+
+/* DatePicker Input */
+.inula-datepicker-input {
+ position: relative;
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 32px;
+ border: 1px solid #d9d9d9;
+ border-radius: 4px;
+ transition: all 0.3s;
+ cursor: pointer;
+ background-color: #fff;
+ box-sizing: border-box;
+ padding-right: 4px;
+}
+
+.inula-datepicker-input:hover {
+ border-color: #40a9ff;
+}
+
+.inula-datepicker-input:focus-within {
+ border-color: #40a9ff;
+ box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
+ outline: 0;
+}
+
+.inula-datepicker:focus {
+ outline: none;
+}
+
+.inula-datepicker-input input {
+ flex: 1;
+ height: 100%;
+ padding: 0 11px;
+ border: none;
+ outline: none;
+ background: transparent;
+ cursor: pointer;
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.85);
+}
+
+/* 单选模式输入框样式重置 */
+.inula-datepicker:not(.inula-datepicker-range) .inula-datepicker-input input {
+ text-align: left;
+}
+
+.inula-datepicker-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 24px;
+ height: 100%;
+ color: rgba(0, 0, 0, 0.25);
+}
+
+.inula-datepicker-clear {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 24px;
+ height: 100%;
+ color: rgba(0, 0, 0, 0.25);
+ font-size: 12px;
+ cursor: pointer;
+ transition: color 0.3s;
+}
+
+.inula-datepicker-clear:hover {
+ color: rgba(0, 0, 0, 0.45);
+}
+
+/* DatePicker Dropdown */
+.inula-datepicker-dropdown {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1050;
+ width: 280px;
+ margin-top: 4px;
+ background-color: #fff;
+ border-radius: 2px;
+ box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+ outline: none;
+ animation: antFadeIn 0.2s;
+ border: 1px solid #f0f0f0;
+}
+
+@keyframes antFadeIn {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+/* DatePicker Header */
+.inula-datepicker-header {
+ display: flex;
+ align-items: center;
+ padding: 12px 8px;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.inula-datepicker-header button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 28px;
+ height: 28px;
+ padding: 0;
+ border: 0;
+ background: transparent;
+ cursor: pointer;
+ font-size: 0;
+ outline: none;
+ color: rgba(0, 0, 0, 0.25);
+ transition: all 0.2s;
+ border-radius: 4px;
+}
+
+.inula-datepicker-header button:hover {
+ color: rgba(0, 0, 0, 0.65);
+ background-color: rgba(0, 0, 0, 0.06);
+}
+
+.inula-datepicker-header button:active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+/* 箭头图标样式 */
+.inula-datepicker-header button::before {
+ content: '';
+ display: block;
+ width: 7px;
+ height: 7px;
+ border: 1.5px solid currentColor;
+ border-right: 0;
+ border-bottom: 0;
+ transform-origin: center;
+}
+
+/* 上一年按钮 - 双左箭头 */
+.inula-datepicker-prev-year::before {
+ transform: rotate(-45deg);
+ margin-right: 2px;
+}
+
+.inula-datepicker-prev-year::after {
+ content: '';
+ display: block;
+ width: 7px;
+ height: 7px;
+ border: 1.5px solid currentColor;
+ border-right: 0;
+ border-bottom: 0;
+ transform: rotate(-45deg);
+ margin-left: -3px;
+}
+
+/* 上一月按钮 - 单左箭头 */
+.inula-datepicker-prev-month::before {
+ transform: rotate(-45deg);
+}
+
+/* 下一月按钮 - 单右箭头 */
+.inula-datepicker-next-month::before {
+ transform: rotate(135deg);
+}
+
+/* 下一年按钮 - 双右箭头 */
+.inula-datepicker-next-year::before {
+ transform: rotate(135deg);
+ margin-left: 2px;
+}
+
+.inula-datepicker-next-year::after {
+ content: '';
+ display: block;
+ width: 7px;
+ height: 7px;
+ border: 1.5px solid currentColor;
+ border-right: 0;
+ border-bottom: 0;
+ transform: rotate(135deg);
+ margin-right: -3px;
+}
+
+.inula-datepicker-header-view {
+ flex: 1;
+ text-align: center;
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.85);
+ font-size: 14px;
+ line-height: 28px;
+}
+
+/* DatePicker Body */
+.inula-datepicker-body {
+ padding: 8px 12px;
+}
+
+.inula-datepicker-weekdays {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ margin-bottom: 8px;
+}
+
+.inula-datepicker-weekday {
+ text-align: center;
+ color: rgba(0, 0, 0, 0.65);
+ line-height: 30px;
+ font-size: 14px;
+ font-weight: 400;
+}
+
+.inula-datepicker-days {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ gap: 4px;
+}
+
+.inula-datepicker-day,
+.inula-datepicker-week {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 30px;
+ border-radius: 2px;
+ cursor: pointer;
+ border-radius: 4px;
+ transition: all 0.3s;
+ font-size: 14px;
+ margin: 1px;
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.inula-datepicker-day:hover {
+ background-color: #f5f5f5;
+}
+
+.inula-datepicker-day.empty {
+ cursor: default;
+}
+
+.inula-datepicker-day.today {
+ color: #1890ff;
+ font-weight: 500;
+ /** 内边框 **/
+ /* box-shadow: inset 0 0 0 1px #1890ff; */
+ border: 1px solid transparent;
+ outline: 1px solid #1890ff;
+ outline-offset: -2px;
+ /* border: 1px solid #1890ff; */
+ margin: 0;
+ position: relative;
+}
+
+.inula-datepicker-day.today::after {
+ content: '';
+ position: absolute;
+ bottom: 2px;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 4px;
+ height: 4px;
+ border-radius: 50%;
+ background-color: #1890ff;
+}
+
+.inula-datepicker-day.selected {
+ background-color: #1890ff;
+ color: #fff;
+ font-weight: 500;
+}
+
+.inula-datepicker-day.selected:hover {
+ background-color: #40a9ff;
+}
+
+.inula-datepicker-day.disabled {
+ color: rgba(0, 0, 0, 0.25);
+ background-color: #f5f5f5;
+ cursor: not-allowed;
+}
+
+.inula-datepicker-day.disabled:hover {
+ background-color: #f5f5f5;
+}
+
+/* Week View */
+.inula-datepicker-weeks {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ gap: 4px;
+}
+
+.inula-datepicker-week {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 30px;
+ border-radius: 4px;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.85);
+ margin: 1px;
+}
+
+.inula-datepicker-week.selected:hover {
+ background-color: #40a9ff;
+}
+
+/* Week Row Style */
+.inula-datepicker-week-row {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ border-radius: 4px;
+ margin-bottom: 2px;
+}
+
+.inula-datepicker-week-row:hover {
+ background-color: rgba(24, 144, 255, 0.04);
+ border-radius: 4px;
+}
+
+/* Other month day style */
+.inula-datepicker-day.other-month {
+ color: rgba(0, 0, 0, 0.25);
+}
+
+/* Week Selection Style - 修复周选择样式 */
+.inula-datepicker-week-row .week-selected {
+ background-color: #1890ff;
+ color: #fff;
+ border-radius: 0;
+ margin: 0;
+ position: relative;
+}
+
+.inula-datepicker-week-row .week-selected:hover {
+ color: #fff;
+ background-color: #40a9ff;
+}
+
+/* 周范围选择样式 - 新增完整的周范围选择样式 */
+.inula-datepicker-week.range-start {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 4px 0 0 4px;
+}
+
+.inula-datepicker-week.range-end {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 0 4px 4px 0;
+}
+
+.inula-datepicker-week.range-start.range-end {
+ border-radius: 4px;
+}
+
+.inula-datepicker-week.in-range {
+ background: #e6f4ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-week.range-hover {
+ background: #bae0ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-week.range-start:hover {
+ background: #4096ff;
+}
+
+.inula-datepicker-week.range-end:hover {
+ background: #4096ff;
+}
+
+/* 周选择时的日期样式调整 */
+.inula-datepicker-day.week-selected {
+ border: none;
+ margin: 0;
+ border-radius: 0;
+ background-color: #1890ff;
+ color: #fff;
+}
+
+.inula-datepicker-day.week-selected:hover {
+ background-color: #40a9ff;
+}
+
+/* 当日期在选中周内但不是今天时,移除今天的样式 */
+.inula-datepicker-day.week-selected.today {
+ outline: none;
+}
+
+.inula-datepicker-day.week-selected.today::after {
+ display: none;
+}
+
+/* 周数显示样式 */
+.inula-datepicker-week-numbers {
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ width: 25px;
+ gap: 3px;
+}
+
+.inula-datepicker-week-number {
+ margin: 1px;
+ height: 30px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.45);
+ padding: 0 4px;
+}
+
+/* 调整周视图的布局 */
+.inula-datepicker-body {
+ position: relative;
+}
+
+/* 调整星期标题的布局 */
+.inula-datepicker-weekdays {
+ margin-left: 30px;
+}
+
+/* Week View */
+.inula-datepicker-weeks {
+ margin-left: 30px;
+ display: flex;
+ flex-direction: column;
+ gap: 3px;
+}
+
+/* Month View */
+.inula-datepicker-months {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 8px;
+}
+
+.inula-datepicker-month {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 25px;
+ border-radius: 4px;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.85);
+ margin: 10px;
+}
+
+.inula-datepicker-month:hover {
+ background-color: #f5f5f5;
+ border-color: #d9d9d9;
+}
+
+.inula-datepicker-month.selected {
+ background-color: #1890ff;
+ color: #fff;
+ font-weight: 500;
+ border-color: #1890ff;
+}
+
+.inula-datepicker-month.selected:hover {
+ background-color: #40a9ff;
+ border-color: #40a9ff;
+}
+
+/* Quarter View */
+.inula-datepicker-quarters {
+ display: flex;
+ justify-content: space-around;
+}
+
+.inula-datepicker-quarter {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 25px;
+ border-radius: 4px;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-size: 16px;
+ color: rgba(0, 0, 0, 0.85);
+ border: 1px solid transparent;
+ padding: 0 15px;
+}
+
+.inula-datepicker-quarter:hover {
+ background-color: #f5f5f5;
+}
+
+.inula-datepicker-quarter.selected {
+ background-color: #1890ff;
+ color: #fff;
+ border-color: #1890ff;
+}
+
+.inula-datepicker-quarter.selected:hover {
+ background-color: #40a9ff;
+ border-color: #40a9ff;
+}
+
+/* Year View */
+.inula-datepicker-years {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 8px;
+}
+
+.inula-datepicker-year {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 10px;
+ height: 25px;
+ border-radius: 4px;
+ cursor: pointer;
+ transition: all 0.3s;
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.inula-datepicker-year:hover {
+ background-color: #f5f5f5;
+ border-color: #d9d9d9;
+}
+
+.inula-datepicker-year.selected {
+ background-color: #1890ff;
+ color: #fff;
+ font-weight: 500;
+ border-color: #1890ff;
+}
+
+.inula-datepicker-year.selected:hover {
+ background-color: #40a9ff;
+ border-color: #40a9ff;
+}
+
+/* DatePicker Footer */
+.inula-datepicker-footer {
+ display: flex;
+ justify-content: center;
+ padding: 5px 12px;
+ border-top: 1px solid #f0f0f0;
+}
+
+.inula-datepicker-today,
+.inula-datepicker-confirm {
+ padding: 0 10px;
+ height: 28px;
+ line-height: 28px;
+ border: 0;
+ background: transparent;
+ cursor: pointer;
+ outline: none;
+ color: #1890ff;
+ transition: all 0.3s;
+ border-radius: 2px;
+ font-size: 14px;
+}
+
+.inula-datepicker-today:hover,
+.inula-datepicker-confirm:hover {
+ color: #40a9ff;
+ background-color: rgba(24, 144, 255, 0.1);
+}
+
+.inula-datepicker-confirm {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+.inula-datepicker-confirm:hover {
+ background-color: #40a9ff;
+ color: #fff;
+}
+
+/* DatePicker Sizes */
+.inula-datepicker-small .inula-datepicker-input {
+ height: 24px;
+}
+
+.inula-datepicker-small .inula-datepicker-input input {
+ font-size: 12px;
+ padding: 0 8px;
+}
+
+.inula-datepicker-small .inula-datepicker-icon {
+ padding-right: 4px;
+}
+
+.inula-datepicker-large .inula-datepicker-input {
+ height: 40px;
+}
+
+.inula-datepicker-large .inula-datepicker-input input {
+ font-size: 16px;
+ padding: 0 12px;
+}
+
+.inula-datepicker-large .inula-datepicker-icon {
+ padding-right: 12px;
+}
+
+/* DatePicker Disabled */
+.inula-datepicker-disabled {
+ cursor: not-allowed;
+}
+
+.inula-datepicker-disabled .inula-datepicker-input {
+ background-color: #f5f5f5;
+ border-color: #d9d9d9;
+ color: rgba(0, 0, 0, 0.25);
+ cursor: not-allowed;
+ box-shadow: none;
+}
+
+.inula-datepicker-disabled .inula-datepicker-input:hover {
+ border-color: #d9d9d9;
+}
+
+.inula-datepicker-disabled .inula-datepicker-input:focus-within {
+ box-shadow: none;
+}
+
+.inula-datepicker-disabled .inula-datepicker-input input {
+ cursor: not-allowed;
+ color: rgba(0, 0, 0, 0.25);
+}
+
+/* 额外的Ant Design风格元素 */
+.inula-datepicker-input::placeholder {
+ color: rgba(0, 0, 0, 0.25);
+}
+
+.inula-datepicker-dropdown::before {
+ content: '';
+ position: absolute;
+ top: -6px;
+ left: 20px;
+ width: 10px;
+ height: 10px;
+ background: #fff;
+ box-shadow: -2px -2px 5px rgba(0, 0, 0, 0.06);
+ transform: rotate(45deg);
+ z-index: -1;
+}
+
+/* 添加一些额外的Ant Design风格 */
+.inula-datepicker-input input::placeholder {
+ color: rgba(0, 0, 0, 0.25);
+}
+
+.inula-datepicker-day {
+ transition: all 0.2s;
+}
+
+/* 确保日期单元格正确显示 */
+.inula-datepicker-weekday-header {
+ margin-bottom: 8px;
+}
+
+.inula-datepicker-weekday {
+ text-align: center;
+ color: rgba(0, 0, 0, 0.65);
+ line-height: 30px;
+ font-size: 14px;
+ font-weight: 400;
+}
+
+/* 范围选择器样式 */
+.inula-datepicker-range {
+ width: 350px;
+}
+
+.inula-datepicker-range .inula-datepicker-dropdown {
+ width: 600px;
+}
+
+.inula-datepicker-range-wrapper {
+ display: flex;
+ justify-content: space-between;
+}
+
+.inula-datepicker-calendar {
+ width: 280px;
+ padding: 8px;
+}
+
+/* 确保日历内容正确显示 */
+.inula-datepicker-calendar .inula-datepicker-days {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ gap: 4px;
+}
+
+.inula-datepicker-calendar .inula-datepicker-weekdays {
+ margin-left: 0;
+}
+
+.inula-datepicker-calendar .inula-datepicker-weeks {
+ margin-left: 0;
+}
+
+/* 修复日期单元格显示问题 */
+.inula-datepicker-day {
+ width: 30px;
+ height: 30px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ border-radius: 4px;
+ margin: 2px;
+}
+
+.inula-datepicker-weekday-header {
+ display: grid;
+ grid-template-columns: repeat(7, 1fr);
+ margin-bottom: 8px;
+}
+
+.inula-datepicker-weekday {
+ width: 30px;
+ height: 30px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: rgba(0, 0, 0, 0.65);
+ font-size: 14px;
+}
+
+/* 范围内的日期样式 */
+.inula-datepicker-day.in-range {
+ background-color: rgba(24, 144, 255, 0.1);
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.inula-datepicker-day.range-start {
+ background-color: #1890ff;
+ color: #fff;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.inula-datepicker-day.range-end {
+ background-color: #1890ff;
+ color: #fff;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+/* 范围内的周样式 - 修复周范围选择样式 */
+.inula-datepicker-week.in-range {
+ background-color: rgba(24, 144, 255, 0.1);
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.inula-datepicker-week.range-start {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+.inula-datepicker-week.range-end {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+/* 范围内的月份样式 */
+.inula-datepicker-month.in-range {
+ background-color: rgba(24, 144, 255, 0.1);
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.inula-datepicker-month.range-start {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+.inula-datepicker-month.range-end {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+/* 范围内的季度样式 */
+.inula-datepicker-quarter.in-range {
+ background-color: rgba(24, 144, 255, 0.1);
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.inula-datepicker-quarter.range-start {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+.inula-datepicker-quarter.range-end {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+/* 范围内的年份样式 */
+.inula-datepicker-year.in-range {
+ background-color: rgba(24, 144, 255, 0.1);
+ color: rgba(0, 0, 0, 0.85);
+}
+
+.inula-datepicker-year.range-start {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+.inula-datepicker-year.range-end {
+ background-color: #1890ff;
+ color: #fff;
+}
+
+/* 范围选择器样式 */
+.inula-datepicker-range {
+ max-width: 350px;
+}
+
+.inula-datepicker-range .inula-datepicker-input {
+ min-width: 320px;
+ position: relative;
+ display: flex;
+ align-items: center;
+}
+
+/* 重置范围选择器输入框的 padding */
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-start,
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-end {
+ padding: 0 8px;
+}
+
+/* 范围选择器输入框 */
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-start,
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-end {
+ flex: 1;
+ border: none;
+ outline: none;
+ background: transparent;
+ font-size: 14px;
+ color: rgba(0, 0, 0, 0.85);
+ cursor: pointer;
+ padding: 0;
+ text-align: center;
+}
+
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-start::placeholder,
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-end::placeholder {
+ color: rgba(0, 0, 0, 0.25);
+ text-align: center;
+}
+
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-start:disabled,
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-end:disabled {
+ color: rgba(0, 0, 0, 0.25);
+ cursor: not-allowed;
+}
+
+/* 范围选择器分隔符 */
+.inula-datepicker-separator {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 20px;
+ color: rgba(0, 0, 0, 0.25);
+ font-size: 14px;
+ user-select: none;
+ pointer-events: none;
+}
+
+/* 范围选择器图标位置调整 */
+.inula-datepicker-range .inula-datepicker-icon {
+ margin: 4px;
+ flex-shrink: 0;
+ width: 16px;
+ height: 16px;
+ padding-right: 0;
+}
+
+/* 范围选择器焦点状态 */
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-start:focus,
+.inula-datepicker-range .inula-datepicker-input .inula-datepicker-range-end:focus {
+ background: rgba(24, 144, 255, 0.06);
+ border-radius: 2px;
+}
+
+/* 范围选择器悬停状态 */
+.inula-datepicker-range .inula-datepicker-input:hover .inula-datepicker-range-start,
+.inula-datepicker-range .inula-datepicker-input:hover .inula-datepicker-range-end {
+ background: rgba(0, 0, 0, 0.02);
+ border-radius: 2px;
+}
+
+/* 范围选择器下拉面板 - 双月显示 */
+.inula-datepicker-range .inula-datepicker-dropdown {
+ width: 630px;
+}
+
+.inula-datepicker-range .inula-datepicker-body {
+ display: flex;
+}
+
+.inula-datepicker-range .inula-datepicker-panel {
+ flex: 1;
+ padding: 8px;
+}
+
+.inula-datepicker-range .inula-datepicker-panel + .inula-datepicker-panel {
+ border-left: 1px solid #f0f0f0;
+}
+
+.inula-datepicker-range .inula-datepicker-panel-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 8px;
+ height: 40px;
+ border-bottom: 1px solid #f0f0f0;
+ background: #fafafa;
+ margin: -8px -8px 8px -8px;
+}
+
+.inula-datepicker-range .inula-datepicker-panel-header button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 32px;
+ height: 32px;
+ border: 1px solid #d9d9d9;
+ background: #fff;
+ color: rgba(0, 0, 0, 0.65);
+ cursor: pointer;
+ border-radius: 6px;
+ transition: all 0.2s;
+ font-size: 16px;
+ font-weight: 500;
+}
+
+.inula-datepicker-range .inula-datepicker-panel-header button:hover {
+ background: #f5f5f5;
+ border-color: #4096ff;
+ color: #4096ff;
+}
+
+.inula-datepicker-range .inula-datepicker-panel-header button:active {
+ background: #e6f4ff;
+ border-color: #1677ff;
+ color: #1677ff;
+}
+
+.inula-datepicker-range .inula-datepicker-panel-title {
+ font-weight: 500;
+ color: rgba(0, 0, 0, 0.85);
+ cursor: pointer;
+ padding: 0 8px;
+ border-radius: 4px;
+ transition: background 0.2s;
+}
+
+.inula-datepicker-range .inula-datepicker-panel-title:hover {
+ background: rgba(0, 0, 0, 0.04);
+}
+
+/* 范围选择日期样式 */
+.inula-datepicker-day.range-start {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 4px 0 0 4px;
+}
+
+.inula-datepicker-day.range-end {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 0 4px 4px 0;
+}
+
+.inula-datepicker-day.range-start.range-end {
+ border-radius: 4px;
+}
+
+.inula-datepicker-day.in-range {
+ background: #e6f4ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-day.range-hover {
+ background: #bae0ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-day.range-start:hover {
+ background: #4096ff;
+}
+
+.inula-datepicker-day.range-end:hover {
+ background: #4096ff;
+}
+
+/* 范围选择器周视图样式 - 修复周范围选择样式 */
+.inula-datepicker-week.range-start {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 4px 0 0 4px;
+}
+
+.inula-datepicker-week.range-end {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 0 4px 4px 0;
+}
+
+.inula-datepicker-week.range-start.range-end {
+ border-radius: 4px;
+}
+
+.inula-datepicker-week.in-range {
+ background: #e6f4ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-week.range-hover {
+ background: #bae0ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+/* 范围选择器月份视图样式 */
+.inula-datepicker-month.range-start {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 4px 0 0 4px;
+}
+
+.inula-datepicker-month.range-end {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 0 4px 4px 0;
+}
+
+.inula-datepicker-month.range-start.range-end {
+ border-radius: 4px;
+}
+
+.inula-datepicker-month.in-range {
+ background: #e6f4ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-month.range-hover {
+ background: #bae0ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+/* 范围选择器季度视图样式 */
+.inula-datepicker-quarter.range-start {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 4px 0 0 4px;
+}
+
+.inula-datepicker-quarter.range-end {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 0 4px 4px 0;
+}
+
+.inula-datepicker-quarter.range-start.range-end {
+ border-radius: 4px;
+}
+
+.inula-datepicker-quarter.in-range {
+ background: #e6f4ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-quarter.range-hover {
+ background: #bae0ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+/* 范围选择器年份视图样式 */
+.inula-datepicker-year.range-start {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 4px 0 0 4px;
+}
+
+.inula-datepicker-year.range-end {
+ background: #1677ff;
+ color: #fff;
+ border-radius: 0 4px 4px 0;
+}
+
+.inula-datepicker-year.range-start.range-end {
+ border-radius: 4px;
+}
+
+.inula-datepicker-year.in-range {
+ background: #e6f4ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+.inula-datepicker-year.range-hover {
+ background: #bae0ff;
+ color: #1677ff;
+ border-radius: 0;
+}
+
+/* 范围选择器提示文本 */
+.inula-datepicker-range-tip {
+ padding: 8px 12px;
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.45);
+ border-bottom: 1px solid #f0f0f0;
+ background: #fafafa;
+ text-align: center;
+}
+
+/* 范围选择器状态指示 */
+.inula-datepicker-range-status {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 4px 8px;
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.45);
+ background: #f0f0f0;
+ border-radius: 2px;
+ margin: 4px 0;
+}
+
+.inula-datepicker-range-status.selecting {
+ color: #1677ff;
+ background: #e6f4ff;
+}
+
+/* 响应式调整 */
+@media (max-width: 480px) {
+ .inula-datepicker-range .inula-datepicker-dropdown {
+ width: 100vw;
+ max-width: 350px;
+ }
+
+ .inula-datepicker-range .inula-datepicker-input {
+ min-width: 250px;
+ }
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker/index.jsx b/packages/inula2-ui2/library_code/src/components/datepicker/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..d6c44c6e78c89e76c57f9301150035b5eb03e81d
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker/index.jsx
@@ -0,0 +1,1889 @@
+import './index.css';
+import Icon from '../icon';
+import Button from '../button';
+
+const DatePicker = ({
+ value,
+ defaultValue,
+ placeholder,
+ onChange,
+ disabled = false,
+ size = 'default', // small, default, large
+ clearable = true,
+ showToday = true,
+ needConfirm = false,
+ style = {},
+ hoverIcon = false,
+ className = '',
+ mode = 'date', // date, week, month, quarter, year
+ picker = 'single', // single, range
+ ...rest
+}) => {
+ // State variables
+ let isOpen = false;
+ let selectedDate = value !== undefined ? value : defaultValue || (picker === 'range' ? [] : '');
+ let currentMonth = new Date().getMonth();
+ let currentYear = new Date().getFullYear();
+ let currentView = mode; // date, week, month, quarter, year
+ let rangeStart = null;
+ let rangeEnd = null;
+ let hoverDate = null;
+
+ // If selectedDate is provided, set currentMonth and currentYear to match it
+ if (selectedDate) {
+ let dateToUse = selectedDate;
+ // For range picker, use the first date if it's an array
+ if (Array.isArray(selectedDate) && selectedDate.length > 0) {
+ dateToUse = selectedDate[0];
+ }
+
+ const date = parseDate(dateToUse);
+ if (date) {
+ currentMonth = date.getMonth();
+ currentYear = date.getFullYear();
+ }
+ }
+
+ // Format date as YYYY-MM-DD
+ function formatDate(date) {
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, '0');
+ const day = String(date.getDate()).padStart(2, '0');
+ return `${year}-${month}-${day}`;
+ }
+
+ // Format week as YYYY-WW
+ function formatWeek(date) {
+ const year = date.getFullYear();
+ const week = getWeekNumber(date);
+ return `${year}-${String(week).padStart(2, '0')}周`;
+ }
+
+ // Format month as YYYY-MM
+ function formatMonth(date) {
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, '0');
+ return `${year}-${month}`;
+ }
+
+ // Format quarter as YYYY-QN
+ function formatQuarter(date) {
+ const year = date.getFullYear();
+ const quarter = Math.floor(date.getMonth() / 3) + 1;
+ return `${year}-Q${quarter}`;
+ }
+
+ // Format year as YYYY
+ function formatYear(date) {
+ return `${date.getFullYear()}`;
+ }
+
+ // Get week number of the year
+ function getWeekNumber(date) {
+ const firstDayOfYear = new Date(date.getFullYear(), 0, 1);
+ const pastDaysOfYear = (date - firstDayOfYear) / 86400000;
+ return Math.ceil((pastDaysOfYear + firstDayOfYear.getDay() + 1) / 7);
+ }
+
+ // Get week start and end dates (修正版本)
+ function getWeekDates(date) {
+ const day = date.getDay();
+ // 计算本周的周一
+ const diff = date.getDate() - day + (day === 0 ? -6 : 1);
+ const monday = new Date(date.getFullYear(), date.getMonth(), diff);
+ // 计算本周的周日
+ const sunday = new Date(monday);
+ sunday.setDate(monday.getDate() + 6);
+ return { start: monday, end: sunday };
+ }
+
+ const onIconHover = () => {
+ hoverIcon = true;
+ }
+
+ const onIconLeave = () => {
+ hoverIcon = false;
+ }
+
+ // Parse date string to Date object
+ function parseDate(dateString) {
+ if (!dateString) return null;
+
+ // Handle array case (for range picker)
+ if (Array.isArray(dateString)) {
+ if (dateString.length > 0) {
+ return parseDate(dateString[0]); // Parse the first date in the range
+ }
+ return null;
+ }
+
+ // Ensure dateString is a string
+ if (typeof dateString !== 'string') {
+ return null;
+ }
+
+ if (mode === 'week' && dateString.includes('周')) {
+ const match = dateString.match(/(\d{4})-(\d{2})周/);
+ if (match) {
+ const year = parseInt(match[1]);
+ const week = parseInt(match[2]);
+ // 计算该周的第一天
+ const firstDayOfYear = new Date(year, 0, 1);
+ const daysToAdd = (week - 1) * 7;
+ const weekStart = new Date(firstDayOfYear);
+ weekStart.setDate(firstDayOfYear.getDate() + daysToAdd);
+ return weekStart;
+ }
+ } else if (mode === 'month' && dateString.includes('-')) {
+ const [year, month] = dateString.split('-').map(Number);
+ return new Date(year, month - 1, 1);
+ } else if (mode === 'quarter' && dateString.includes('Q')) {
+ const match = dateString.match(/(\d{4})-Q(\d)/);
+ if (match) {
+ const year = parseInt(match[1]);
+ const quarter = parseInt(match[2]);
+ const month = (quarter - 1) * 3;
+ return new Date(year, month, 1);
+ }
+ } else if (mode === 'year') {
+ const year = parseInt(dateString);
+ return new Date(year, 0, 1);
+ } else {
+ const [year, month, day] = dateString.split('-').map(Number);
+ return new Date(year, month - 1, day);
+ }
+ return null;
+ }
+
+ // Get days in month
+ function getDaysInMonth(year, month) {
+ return new Date(year, month + 1, 0).getDate();
+ }
+
+ // Get day of week for first day of month (0 = Sunday, 6 = Saturday)
+ function getFirstDayOfMonth(year, month) {
+ return new Date(year, month, 1).getDay();
+ }
+
+ // Handle date selection
+ function handleDateSelect(day) {
+ const newDate = new Date(currentYear, currentMonth, day);
+ let formattedValue;
+
+ switch (mode) {
+ case 'date':
+ formattedValue = formatDate(newDate);
+ break;
+ case 'week':
+ // 在周模式下,选择日期时应该选择该日期所在的整周
+ formattedValue = formatWeek(newDate);
+ break;
+ case 'month':
+ formattedValue = formatMonth(newDate);
+ break;
+ case 'quarter':
+ formattedValue = formatQuarter(newDate);
+ break;
+ case 'year':
+ formattedValue = formatYear(newDate);
+ break;
+ default:
+ formattedValue = formatDate(newDate);
+ }
+
+ if (picker === 'range') {
+ handleRangeSelect(formattedValue, newDate);
+ } else {
+ if (!needConfirm) {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ if (onChange) {
+ onChange(formattedValue);
+ }
+ setTimeout(() => {
+ isOpen = false;
+ }, 100);
+ } else {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ }
+ }
+ }
+
+ // Handle range selection
+ function handleRangeSelect(formattedValue, dateObj) {
+ if (!rangeStart || (rangeStart && rangeEnd)) {
+ // 开始新的范围选择
+ rangeStart = dateObj;
+ rangeEnd = null;
+ if (value === undefined) {
+ selectedDate = [formattedValue];
+ }
+ } else if (rangeStart && !rangeEnd) {
+ // 完成范围选择
+ if (dateObj < rangeStart) {
+ rangeEnd = rangeStart;
+ rangeStart = dateObj;
+ } else {
+ rangeEnd = dateObj;
+ }
+
+ const startFormatted = formatDateByMode(rangeStart);
+ const endFormatted = formatDateByMode(rangeEnd);
+
+ if (value === undefined) {
+ selectedDate = [startFormatted, endFormatted];
+ }
+
+ if (!needConfirm) {
+ if (onChange) {
+ onChange([startFormatted, endFormatted]);
+ }
+ setTimeout(() => {
+ isOpen = false;
+ }, 100);
+ }
+ }
+ }
+
+ // Format date by current mode
+ function formatDateByMode(date) {
+ switch (mode) {
+ case 'date':
+ return formatDate(date);
+ case 'week':
+ return formatWeek(date);
+ case 'month':
+ return formatMonth(date);
+ case 'quarter':
+ return formatQuarter(date);
+ case 'year':
+ return formatYear(date);
+ default:
+ return formatDate(date);
+ }
+ }
+
+ // Handle week selection
+ function handleWeekSelect(weekStart) {
+ const formattedValue = formatWeek(weekStart);
+
+ if (!needConfirm) {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ if (onChange) {
+ onChange(formattedValue);
+ }
+ setTimeout(() => {
+ isOpen = false;
+ }, 100);
+ } else {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ }
+ }
+
+ // Handle month selection
+ function handleMonthSelect(month) {
+ const newDate = new Date(currentYear, month, 1);
+ const formattedValue = formatMonth(newDate);
+
+ if (picker === 'range') {
+ handleRangeSelect(formattedValue, newDate);
+ } else {
+ if (!needConfirm) {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ if (onChange) {
+ onChange(formattedValue);
+ }
+ setTimeout(() => {
+ isOpen = false;
+ }, 100);
+ } else {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ }
+ }
+ }
+
+ // Handle quarter selection
+ function handleQuarterSelect(quarter) {
+ const month = (quarter - 1) * 3;
+ const newDate = new Date(currentYear, month, 1);
+ const formattedValue = formatQuarter(newDate);
+
+ if (picker === 'range') {
+ handleRangeSelect(formattedValue, newDate);
+ } else {
+ if (!needConfirm) {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ if (onChange) {
+ onChange(formattedValue);
+ }
+ setTimeout(() => {
+ isOpen = false;
+ }, 100);
+ } else {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ }
+ }
+ }
+
+ // Handle year selection
+ function handleYearSelect(year) {
+ const newDate = new Date(year, 0, 1);
+ const formattedValue = formatYear(newDate);
+
+ if (picker === 'range') {
+ handleRangeSelect(formattedValue, newDate);
+ } else {
+ if (!needConfirm) {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ if (onChange) {
+ onChange(formattedValue);
+ }
+ setTimeout(() => {
+ isOpen = false;
+ }, 100);
+ } else {
+ if (value === undefined) {
+ selectedDate = formattedValue;
+ }
+ }
+ }
+ }
+
+ // Handle month navigation
+ function handlePrevMonth() {
+ if (currentMonth === 0) {
+ currentMonth = 11;
+ currentYear = currentYear - 1;
+ } else {
+ currentMonth = currentMonth - 1;
+ }
+
+ // 强制重新渲染日历
+ forceUpdate();
+
+ // 确保周视图正确更新(非范围模式才单面板刷新)
+ if (mode === 'week' && picker !== 'range') {
+ setTimeout(() => {
+ const dropdown = document.querySelector('.inula-datepicker-dropdown');
+ if (dropdown) {
+ updateWeekView(dropdown);
+ }
+ }, 0);
+ }
+ }
+
+ function handleNextMonth() {
+ if (currentMonth === 11) {
+ currentMonth = 0;
+ currentYear = currentYear + 1;
+ } else {
+ currentMonth = currentMonth + 1;
+ }
+
+ // 强制重新渲染日历
+ forceUpdate();
+
+ // 确保周视图正确更新(非范围模式才单面板刷新)
+ if (mode === 'week' && picker !== 'range') {
+ setTimeout(() => {
+ const dropdown = document.querySelector('.inula-datepicker-dropdown');
+ if (dropdown) {
+ updateWeekView(dropdown);
+ }
+ }, 0);
+ }
+ }
+
+ // Handle year navigation
+ function handlePrevYear() {
+ currentYear = currentYear - 1;
+
+ // 强制重新渲染日历
+ forceUpdate();
+
+ // 确保周视图正确更新(非范围模式才单面板刷新)
+ if (mode === 'week' && picker !== 'range') {
+ setTimeout(() => {
+ const dropdown = document.querySelector('.inula-datepicker-dropdown');
+ if (dropdown) {
+ updateWeekView(dropdown);
+ }
+ }, 0);
+ }
+ }
+
+ function handleNextYear() {
+ currentYear = currentYear + 1;
+
+ // 强制重新渲染日历
+ forceUpdate();
+
+ // 确保周视图正确更新(非范围模式才单面板刷新)
+ if (mode === 'week' && picker !== 'range') {
+ setTimeout(() => {
+ const dropdown = document.querySelector('.inula-datepicker-dropdown');
+ if (dropdown) {
+ updateWeekView(dropdown);
+ }
+ }, 0);
+ }
+ }
+
+ // 强制更新组件
+ function forceUpdate() {
+ // 直接更新日历内容,而不是关闭再打开
+ const dropdown = document.querySelector('.inula-datepicker-dropdown');
+ if (dropdown) {
+ // 更新标题显示
+ const headerView = dropdown.querySelector('.inula-datepicker-header-view');
+ if (headerView) {
+ if (mode === 'date' || mode === 'week') {
+ headerView.textContent = `${currentYear}年 ${monthNames[currentMonth]}`;
+ } else if (mode === 'year') {
+ headerView.textContent = `${currentYear - 5}年-${currentYear + 4}年`;
+ } else {
+ headerView.textContent = `${currentYear}年`;
+ }
+ }
+
+ // 更新双面板标题(范围模式)
+ if (picker === 'range') {
+ const panelTitles = dropdown.querySelectorAll('.inula-datepicker-panel-title');
+ if (panelTitles && panelTitles.length >= 2) {
+ panelTitles[0].textContent = `${currentYear}年 ${monthNames[currentMonth]}`;
+ const next = getNextMonthYear();
+ panelTitles[1].textContent = `${next.year}年 ${monthNames[next.month]}`;
+ }
+ }
+
+ // 根据当前模式更新内容
+ updateCalendarContent(dropdown);
+ }
+ }
+
+ // 根据当前模式更新日历内容
+ function updateCalendarContent(dropdown) {
+ switch (mode) {
+ case 'date':
+ updateDateView(dropdown);
+ break;
+ case 'week':
+ if (picker === 'range') {
+ const next = getNextMonthYear();
+ updateWeekViewWithParams(dropdown, 0, currentYear, currentMonth, false);
+ updateWeekViewWithParams(dropdown, 1, next.year, next.month, true);
+ } else {
+ updateWeekView(dropdown);
+ }
+ break;
+ case 'month':
+ updateMonthView(dropdown);
+ break;
+ case 'quarter':
+ updateQuarterView(dropdown);
+ break;
+ case 'year':
+ updateYearView(dropdown);
+ break;
+ }
+ }
+
+ // 更新日期视图
+ function updateDateView(dropdown) {
+ const daysContainers = dropdown.querySelectorAll('.inula-datepicker-panel .inula-datepicker-days:last-child');
+
+ // 左侧(当前月)
+ const leftContainer = daysContainers[0] || dropdown.querySelector('.inula-datepicker-days:last-child');
+ if (leftContainer) {
+ leftContainer.innerHTML = '';
+ const daysInMonth = getDaysInMonth(currentYear, currentMonth);
+ const firstDayOfMonth = getFirstDayOfMonth(currentYear, currentMonth);
+ for (let i = 0; i < firstDayOfMonth; i++) {
+ const emptyDay = document.createElement('div');
+ emptyDay.className = 'inula-datepicker-day empty';
+ leftContainer.appendChild(emptyDay);
+ }
+ for (let day = 1; day <= daysInMonth; day++) {
+ const date = new Date(currentYear, currentMonth, day);
+ const isToday = formatDate(date) === formatDate(new Date());
+ let isSelected = mode === 'date' ? selectedDate === formatDate(date) : false;
+ const dayElement = document.createElement('div');
+ dayElement.className = `inula-datepicker-day ${isToday ? 'today' : ''} ${isSelected ? 'selected' : ''} ${disabled ? 'disabled' : ''}`;
+ dayElement.textContent = day;
+ if (!disabled) dayElement.addEventListener('click', () => handleDateSelect(day));
+ leftContainer.appendChild(dayElement);
+ }
+ }
+
+ // 右侧(下一月)
+ if (picker === 'range') {
+ const next = getNextMonthYear();
+ const rightContainer = daysContainers[1];
+ if (rightContainer) {
+ rightContainer.innerHTML = '';
+ const daysInMonth = getDaysInMonth(next.year, next.month);
+ const firstDayOfMonth = getFirstDayOfMonth(next.year, next.month);
+ for (let i = 0; i < firstDayOfMonth; i++) {
+ const emptyDay = document.createElement('div');
+ emptyDay.className = 'inula-datepicker-day empty';
+ rightContainer.appendChild(emptyDay);
+ }
+ for (let day = 1; day <= daysInMonth; day++) {
+ const date = new Date(next.year, next.month, day);
+ const isToday = formatDate(date) === formatDate(new Date());
+ const dayElement = document.createElement('div');
+ dayElement.className = `inula-datepicker-day ${isToday ? 'today' : ''} ${disabled ? 'disabled' : ''}`;
+ dayElement.textContent = day;
+ if (!disabled) rightContainer.appendChild(dayElement);
+ if (!disabled) rightContainer.lastChild.addEventListener('click', () => handleNextMonthDateSelect(day));
+ }
+ }
+ }
+ }
+
+ // 更新周视图
+ function updateWeekView(dropdown) {
+ const weekNumbersContainer = dropdown.querySelector('.inula-datepicker-week-numbers');
+ const weeksContainer = dropdown.querySelector('.inula-datepicker-weeks');
+
+ if (weekNumbersContainer && weeksContainer) {
+ // 清空现有内容
+ weekNumbersContainer.innerHTML = '';
+ weeksContainer.innerHTML = '';
+
+ // 获取当月第一天
+ const firstDayOfMonth = new Date(currentYear, currentMonth, 1);
+
+ // 获取当月第一天所在周的周一
+ const firstMonday = new Date(firstDayOfMonth);
+ const dayOfWeek = firstDayOfMonth.getDay();
+ const diff = dayOfWeek === 0 ? -6 : 1 - dayOfWeek; // 如果是周日,则往前推6天;否则,往前推(1-dayOfWeek)天
+ firstMonday.setDate(firstDayOfMonth.getDate() + diff);
+
+ // 计算当月有多少天
+ const daysInMonth = getDaysInMonth(currentYear, currentMonth);
+
+ // 计算当月最后一天
+ const lastDayOfMonth = new Date(currentYear, currentMonth, daysInMonth);
+
+ // 计算当月最后一天所在周的周日
+ const lastSunday = new Date(lastDayOfMonth);
+ const lastDayOfWeek = lastDayOfMonth.getDay();
+ lastSunday.setDate(lastDayOfMonth.getDate() + (lastDayOfWeek === 0 ? 0 : 7 - lastDayOfWeek));
+
+ // 计算总周数
+ const totalDays = Math.round((lastSunday - firstMonday) / (24 * 60 * 60 * 1000)) + 1;
+ const totalWeeks = Math.ceil(totalDays / 7);
+
+ // 从第一个周一开始,生成每周的日期
+ let currentDate = new Date(firstMonday);
+
+ for (let week = 0; week < totalWeeks; week++) {
+ const weekStartDate = new Date(currentDate);
+ const weekNumber = getWeekNumber(weekStartDate);
+
+ // 创建周号
+ const weekNumberElement = document.createElement('div');
+ weekNumberElement.className = 'inula-datepicker-week-number';
+ weekNumberElement.textContent = weekNumber;
+ weekNumbersContainer.appendChild(weekNumberElement);
+
+ // 创建周行
+ const weekRowElement = document.createElement('div');
+ weekRowElement.className = 'inula-datepicker-week-row';
+
+ // 为这一周添加7天
+ for (let dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
+ const dayDate = new Date(currentDate);
+ dayDate.setDate(currentDate.getDate() + dayOfWeek);
+
+ const day = dayDate.getDate();
+ const month = dayDate.getMonth();
+ const year = dayDate.getFullYear();
+ const isCurrentMonth = month === currentMonth && year === currentYear;
+ const isToday = formatDate(dayDate) === formatDate(new Date());
+ let isInSelectedWeek = false;
+ let isWeekStart = false;
+ let isWeekEnd = false;
+
+ if (selectedDate) {
+ const selectedWeek = parseDate(selectedDate);
+ if (selectedWeek) {
+ const selectedWeekDates = getWeekDates(selectedWeek);
+ isInSelectedWeek = dayDate >= selectedWeekDates.start && dayDate <= selectedWeekDates.end;
+
+ if (isInSelectedWeek) {
+ const dayOfWeekNum = dayDate.getDay();
+ isWeekStart = dayOfWeekNum === 1;
+ isWeekEnd = dayOfWeekNum === 0;
+ }
+ }
+ }
+
+ const isDisabled = disabled;
+
+ const dayElement = document.createElement('div');
+ dayElement.className = `inula-datepicker-week ${!isCurrentMonth ? 'other-month' : ''} ${isToday ? 'today' : ''} ${isInSelectedWeek ? 'week-selected' : ''} ${isWeekStart ? 'week-start' : ''} ${isWeekEnd ? 'week-end' : ''} ${isDisabled ? 'disabled' : ''}`;
+ dayElement.textContent = day;
+
+ // 为不在当前月的日期添加样式
+ if (!isCurrentMonth) {
+ dayElement.style.color = '#ccc';
+ }
+
+ if (!isDisabled) {
+ dayElement.addEventListener('click', () => handleDateSelect(day));
+ }
+
+ weekRowElement.appendChild(dayElement);
+ }
+
+ weeksContainer.appendChild(weekRowElement);
+
+ // 移动到下一周的周一
+ currentDate.setDate(currentDate.getDate() + 7);
+ }
+ }
+ }
+
+ // 更新指定索引的周视图(用于范围双面板)
+ function updateWeekViewWithParams(dropdown, targetIndex, year, month, useNextHandler = false) {
+ const weekNumbersContainers = dropdown.querySelectorAll('.inula-datepicker-week-numbers');
+ const weeksContainers = dropdown.querySelectorAll('.inula-datepicker-weeks');
+
+ const weekNumbersContainer = weekNumbersContainers[targetIndex];
+ const weeksContainer = weeksContainers[targetIndex];
+
+ if (weekNumbersContainer && weeksContainer) {
+ weekNumbersContainer.innerHTML = '';
+ weeksContainer.innerHTML = '';
+
+ const firstDayOfMonth = new Date(year, month, 1);
+ const firstMonday = new Date(firstDayOfMonth);
+ const dayOfWeek = firstDayOfMonth.getDay();
+ const diff = dayOfWeek === 0 ? -6 : 1 - dayOfWeek;
+ firstMonday.setDate(firstDayOfMonth.getDate() + diff);
+
+ const daysInMonth = getDaysInMonth(year, month);
+ const lastDayOfMonth = new Date(year, month, daysInMonth);
+ const lastSunday = new Date(lastDayOfMonth);
+ const lastDayOfWeek = lastDayOfMonth.getDay();
+ lastSunday.setDate(lastDayOfMonth.getDate() + (lastDayOfWeek === 0 ? 0 : 7 - lastDayOfWeek));
+
+ const totalDays = Math.round((lastSunday - firstMonday) / (24 * 60 * 60 * 1000)) + 1;
+ const totalWeeks = Math.ceil(totalDays / 7);
+
+ let currentDateLocal = new Date(firstMonday);
+
+ for (let week = 0; week < totalWeeks; week++) {
+ const weekStartDate = new Date(currentDateLocal);
+ const weekNumber = getWeekNumber(weekStartDate);
+
+ const weekNumberElement = document.createElement('div');
+ weekNumberElement.className = 'inula-datepicker-week-number';
+ weekNumberElement.textContent = weekNumber;
+ weekNumbersContainer.appendChild(weekNumberElement);
+
+ const weekRowElement = document.createElement('div');
+ weekRowElement.className = 'inula-datepicker-week-row';
+
+ for (let dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
+ const dayDate = new Date(currentDateLocal);
+ dayDate.setDate(currentDateLocal.getDate() + dayOfWeek);
+
+ const day = dayDate.getDate();
+ const m = dayDate.getMonth();
+ const y = dayDate.getFullYear();
+ const isCurrentMonth = m === month && y === year;
+ const isToday = formatDate(dayDate) === formatDate(new Date());
+ let isInSelectedWeek = false;
+ let isWeekStart = false;
+ let isWeekEnd = false;
+
+ if (selectedDate) {
+ const selectedWeek = parseDate(selectedDate);
+ if (selectedWeek) {
+ const selectedWeekDates = getWeekDates(selectedWeek);
+ isInSelectedWeek = dayDate >= selectedWeekDates.start && dayDate <= selectedWeekDates.end;
+ if (isInSelectedWeek) {
+ const dayOfWeekNum = dayDate.getDay();
+ isWeekStart = dayOfWeekNum === 1;
+ isWeekEnd = dayOfWeekNum === 0;
+ }
+ }
+ }
+
+ const dayElement = document.createElement('div');
+ dayElement.className = `inula-datepicker-week ${!isCurrentMonth ? 'other-month' : ''} ${isToday ? 'today' : ''} ${isInSelectedWeek ? 'week-selected' : ''} ${isWeekStart ? 'week-start' : ''} ${isWeekEnd ? 'week-end' : ''} ${disabled ? 'disabled' : ''}`;
+ dayElement.textContent = day;
+
+ if (!disabled) {
+ const handler = useNextHandler ? () => handleNextMonthDateSelect(day) : () => handleDateSelect(day);
+ dayElement.addEventListener('click', handler);
+ }
+
+ if (!isCurrentMonth) {
+ dayElement.style.color = '#ccc';
+ }
+
+ weekRowElement.appendChild(dayElement);
+ }
+
+ weeksContainer.appendChild(weekRowElement);
+ currentDateLocal.setDate(currentDateLocal.getDate() + 7);
+ }
+ }
+ }
+
+ // 更新月份视图
+ function updateMonthView(dropdown) {
+ const monthsContainer = dropdown.querySelector('.inula-datepicker-months');
+
+ if (monthsContainer) {
+ // 清空现有内容
+ monthsContainer.innerHTML = '';
+
+ for (let month = 0; month < 12; month++) {
+ const date = new Date(currentYear, month, 1);
+ const isSelected = selectedDate === formatMonth(date);
+
+ const monthElement = document.createElement('div');
+ monthElement.className = `inula-datepicker-month ${isSelected ? 'selected' : ''}`;
+ monthElement.textContent = monthNames[month];
+ monthElement.addEventListener('click', () => handleMonthSelect(month));
+
+ monthsContainer.appendChild(monthElement);
+ }
+ }
+ }
+
+ // 更新季度视图
+ function updateQuarterView(dropdown) {
+ const quartersContainer = dropdown.querySelector('.inula-datepicker-quarters');
+
+ if (quartersContainer) {
+ // 清空现有内容
+ quartersContainer.innerHTML = '';
+
+ for (let quarter = 1; quarter <= 4; quarter++) {
+ const date = new Date(currentYear, (quarter - 1) * 3, 1);
+ const isSelected = selectedDate === formatQuarter(date);
+
+ const quarterElement = document.createElement('div');
+ quarterElement.className = `inula-datepicker-quarter ${isSelected ? 'selected' : ''}`;
+ quarterElement.textContent = `Q${quarter}`;
+ quarterElement.addEventListener('click', () => handleQuarterSelect(quarter));
+
+ quartersContainer.appendChild(quarterElement);
+ }
+ }
+ }
+
+ // 更新年份视图
+ function updateYearView(dropdown) {
+ const yearsContainer = dropdown.querySelector('.inula-datepicker-years');
+
+ if (yearsContainer) {
+ // 清空现有内容
+ yearsContainer.innerHTML = '';
+
+ const startYear = currentYear - 5;
+
+ for (let year = startYear; year <= startYear + 9; year++) {
+ const date = new Date(year, 0, 1);
+ const isSelected = selectedDate === formatYear(date);
+
+ const yearElement = document.createElement('div');
+ yearElement.className = `inula-datepicker-year ${isSelected ? 'selected' : ''}`;
+ yearElement.textContent = year;
+ yearElement.addEventListener('click', () => handleYearSelect(year));
+
+ yearsContainer.appendChild(yearElement);
+ }
+ }
+ }
+
+ // Handle today button click
+ function handleTodayClick() {
+ const today = new Date();
+ let formattedToday;
+
+ switch (mode) {
+ case 'date':
+ formattedToday = formatDate(today);
+ break;
+ case 'week':
+ formattedToday = formatWeek(today);
+ break;
+ case 'month':
+ formattedToday = formatMonth(today);
+ break;
+ case 'quarter':
+ formattedToday = formatQuarter(today);
+ break;
+ case 'year':
+ formattedToday = formatYear(today);
+ break;
+ default:
+ formattedToday = formatDate(today);
+ }
+
+ // 对于范围选择器,今天按钮只设置单个日期
+ const todayValue = picker === 'range' ? [formattedToday] : formattedToday;
+
+ if (value === undefined) {
+ selectedDate = todayValue;
+ }
+
+ // 重置范围选择状态
+ if (picker === 'range') {
+ rangeStart = today;
+ rangeEnd = null;
+ hoverDate = null;
+ }
+
+ currentMonth = today.getMonth();
+ currentYear = today.getFullYear();
+
+ if (!needConfirm) {
+ if (onChange) {
+ onChange(todayValue);
+ }
+ setTimeout(() => {
+ isOpen = false;
+ }, 100);
+ }
+ }
+
+ // Handle confirm button click
+ function handleConfirm() {
+ isOpen = false;
+ if (onChange) {
+ onChange(selectedDate);
+ }
+ }
+
+ // Handle clear button click
+ function handleClear(e) {
+ e.stopPropagation();
+ const emptyValue = picker === 'range' ? [] : '';
+ if (value === undefined) {
+ selectedDate = emptyValue;
+ }
+ rangeStart = null;
+ rangeEnd = null;
+ hoverDate = null;
+ if (onChange) {
+ onChange(emptyValue);
+ }
+ }
+
+ // Toggle calendar visibility
+ function handleToggle(e) {
+ e.stopPropagation();
+ if (!disabled) {
+ isOpen = !isOpen;
+
+ // 如果打开日历,确保使用最新的年月数据渲染
+ if (isOpen) {
+ // 如果有选中日期,使用选中日期的年月
+ if (selectedDate) {
+ let dateToUse = selectedDate;
+ // For range picker, use the first date if it's an array
+ if (Array.isArray(selectedDate) && selectedDate.length > 0) {
+ dateToUse = selectedDate[0];
+ }
+
+ const date = parseDate(dateToUse);
+ if (date) {
+ currentMonth = date.getMonth();
+ currentYear = date.getFullYear();
+ }
+ }
+ }
+ }
+ }
+
+ // Handle click outside
+ function handleBlur() {
+ isOpen = false;
+ }
+
+ // Render calendar days
+ function renderCalendarDays() {
+ const daysInMonth = getDaysInMonth(currentYear, currentMonth);
+ const firstDayOfMonth = getFirstDayOfMonth(currentYear, currentMonth);
+ const days = [];
+
+ // Add empty cells for days before the first day of the month
+ for (let i = 0; i < firstDayOfMonth; i++) {
+ days.push();
+ }
+
+ // Add cells for each day of the month
+ for (let day = 1; day <= daysInMonth; day++) {
+ const date = new Date(currentYear, currentMonth, day);
+ const isToday = formatDate(date) === formatDate(new Date());
+ let isSelected = false;
+ let isInSelectedWeek = false;
+ let isRangeStart = false;
+ let isRangeEnd = false;
+ let isInRange = false;
+ let isRangeHover = false;
+
+ if (picker === 'range' && Array.isArray(selectedDate)) {
+ if (selectedDate.length === 2) {
+ const startDate = parseDate(selectedDate[0]);
+ const endDate = parseDate(selectedDate[1]);
+ if (startDate && endDate) {
+ if (mode === 'week') {
+ // 周模式下的范围选择
+ const startWeekDates = getWeekDates(startDate);
+ const endWeekDates = getWeekDates(endDate);
+ isInRange = date >= startWeekDates.start && date <= endWeekDates.end;
+ isRangeStart = date >= startWeekDates.start && date <= startWeekDates.end;
+ isRangeEnd = date >= endWeekDates.start && date <= endWeekDates.end;
+ } else {
+ // 日期模式下的范围选择
+ isRangeStart = formatDate(date) === formatDate(startDate);
+ isRangeEnd = formatDate(date) === formatDate(endDate);
+ isInRange = date >= startDate && date <= endDate;
+ }
+ }
+ } else if (selectedDate.length === 1 && rangeStart) {
+ if (mode === 'week') {
+ // 周模式下的悬停效果
+ const startWeekDates = getWeekDates(rangeStart);
+ isInRange = date >= startWeekDates.start && date <= startWeekDates.end;
+ if (hoverDate) {
+ const hoverWeekDates = getWeekDates(hoverDate);
+ isInRange = date >= startWeekDates.start && date <= hoverWeekDates.end;
+ }
+ } else {
+ // 日期模式下的悬停效果
+ isRangeStart = formatDate(date) === formatDate(rangeStart);
+ if (hoverDate && date >= rangeStart && date <= hoverDate) {
+ isRangeHover = true;
+ }
+ }
+ }
+ } else if (picker === 'single') {
+ if (mode === 'date') {
+ isSelected = selectedDate === formatDate(date);
+ } else if (mode === 'week' && selectedDate) {
+ const selectedWeek = parseDate(selectedDate);
+ if (selectedWeek) {
+ const selectedWeekDates = getWeekDates(selectedWeek);
+ // 比较日期是否在选中周内
+ const currentDate = new Date(currentYear, currentMonth, day);
+ isInSelectedWeek = currentDate >= selectedWeekDates.start && currentDate <= selectedWeekDates.end;
+ }
+ }
+ }
+
+ const isDisabled = disabled;
+
+ days.push(
+ handleDateSelect(day)}
+ onMouseEnter={() => {
+ if (picker === 'range' && rangeStart && !rangeEnd) {
+ hoverDate = date;
+ }
+ }}
+ onMouseLeave={() => {
+ if (picker === 'range') {
+ hoverDate = null;
+ }
+ }}
+ >
+ {day}
+
+ );
+ }
+
+ return days;
+ }
+
+ // Get next month and year for range picker
+ function getNextMonthYear() {
+ let nextMonth = currentMonth + 1;
+ let nextYear = currentYear;
+
+ if (nextMonth > 11) {
+ nextMonth = 0;
+ nextYear = currentYear + 1;
+ }
+
+ return { month: nextMonth, year: nextYear };
+ }
+
+ // Render next month calendar days for range picker
+ function renderNextMonthCalendarDays() {
+ const { month: nextMonth, year: nextYear } = getNextMonthYear();
+ const daysInMonth = getDaysInMonth(nextYear, nextMonth);
+ const firstDayOfMonth = getFirstDayOfMonth(nextYear, nextMonth);
+ const days = [];
+
+ // Add empty cells for days before the first day of the month
+ for (let i = 0; i < firstDayOfMonth; i++) {
+ days.push();
+ }
+
+ // Add cells for each day of the month
+ for (let day = 1; day <= daysInMonth; day++) {
+ const date = new Date(nextYear, nextMonth, day);
+ const isToday = formatDate(date) === formatDate(new Date());
+ let isSelected = false;
+ let isRangeStart = false;
+ let isRangeEnd = false;
+ let isInRange = false;
+ let isRangeHover = false;
+
+ if (picker === 'range' && Array.isArray(selectedDate)) {
+ if (selectedDate.length === 2) {
+ const startDate = parseDate(selectedDate[0]);
+ const endDate = parseDate(selectedDate[1]);
+ if (startDate && endDate) {
+ if (mode === 'week') {
+ // 周模式下的范围选择
+ const startWeekDates = getWeekDates(startDate);
+ const endWeekDates = getWeekDates(endDate);
+ isInRange = date >= startWeekDates.start && date <= endWeekDates.end;
+ isRangeStart = date >= startWeekDates.start && date <= startWeekDates.end;
+ isRangeEnd = date >= endWeekDates.start && date <= endWeekDates.end;
+ } else {
+ // 日期模式下的范围选择
+ isRangeStart = formatDate(date) === formatDate(startDate);
+ isRangeEnd = formatDate(date) === formatDate(endDate);
+ isInRange = date >= startDate && date <= endDate;
+ }
+ }
+ } else if (selectedDate.length === 1 && rangeStart) {
+ if (mode === 'week') {
+ // 周模式下的悬停效果
+ const startWeekDates = getWeekDates(rangeStart);
+ isInRange = date >= startWeekDates.start && date <= startWeekDates.end;
+ if (hoverDate) {
+ const hoverWeekDates = getWeekDates(hoverDate);
+ isInRange = date >= startWeekDates.start && date <= hoverWeekDates.end;
+ }
+ } else {
+ // 日期模式下的悬停效果
+ isRangeStart = formatDate(date) === formatDate(rangeStart);
+ if (hoverDate && date >= rangeStart && date <= hoverDate) {
+ isRangeHover = true;
+ }
+ }
+ }
+ }
+
+ const isDisabled = disabled;
+
+ days.push(
+ handleNextMonthDateSelect(day)}
+ onMouseEnter={() => {
+ if (picker === 'range' && rangeStart && !rangeEnd) {
+ hoverDate = date;
+ }
+ }}
+ onMouseLeave={() => {
+ if (picker === 'range') {
+ hoverDate = null;
+ }
+ }}
+ >
+ {day}
+
+ );
+ }
+
+ return days;
+ }
+
+ // Handle date selection for next month in range picker
+ function handleNextMonthDateSelect(day) {
+ const { month: nextMonth, year: nextYear } = getNextMonthYear();
+ const newDate = new Date(nextYear, nextMonth, day);
+ let formattedValue;
+
+ switch (mode) {
+ case 'date':
+ formattedValue = formatDate(newDate);
+ break;
+ case 'week':
+ formattedValue = formatWeek(newDate);
+ break;
+ case 'month':
+ formattedValue = formatMonth(newDate);
+ break;
+ case 'quarter':
+ formattedValue = formatQuarter(newDate);
+ break;
+ case 'year':
+ formattedValue = formatYear(newDate);
+ break;
+ default:
+ formattedValue = formatDate(newDate);
+ }
+
+ if (picker === 'range') {
+ handleRangeSelect(formattedValue, newDate);
+ }
+ }
+
+ // Render week view
+ function renderWeekView() {
+ // 当mode为week时,按周来渲染
+ const weeks = [];
+ const weekNumbers = [];
+
+ // 获取当月第一天
+ const firstDayOfMonth = new Date(currentYear, currentMonth, 1);
+
+ // 获取当月第一天所在周的周一
+ const firstMonday = new Date(firstDayOfMonth);
+ const dayOfWeek = firstDayOfMonth.getDay();
+ const diff = dayOfWeek === 0 ? -6 : 1 - dayOfWeek; // 如果是周日,则往前推6天;否则,往前推(1-dayOfWeek)天
+ firstMonday.setDate(firstDayOfMonth.getDate() + diff);
+
+ // 计算当月有多少天
+ const daysInMonth = getDaysInMonth(currentYear, currentMonth);
+
+ // 计算当月最后一天
+ const lastDayOfMonth = new Date(currentYear, currentMonth, daysInMonth);
+
+ // 计算当月最后一天所在周的周日
+ const lastSunday = new Date(lastDayOfMonth);
+ const lastDayOfWeek = lastDayOfMonth.getDay();
+ lastSunday.setDate(lastDayOfMonth.getDate() + (lastDayOfWeek === 0 ? 0 : 7 - lastDayOfWeek));
+
+ // 计算总周数
+ const totalDays = Math.round((lastSunday - firstMonday) / (24 * 60 * 60 * 1000)) + 1;
+ const totalWeeks = Math.ceil(totalDays / 7);
+
+ // 从第一个周一开始,生成每周的日期
+ let currentDate = new Date(firstMonday);
+
+ for (let week = 0; week < totalWeeks; week++) {
+ const weekDays = [];
+ const weekStartDate = new Date(currentDate);
+ const weekNumber = getWeekNumber(weekStartDate);
+
+ // 为这一周添加7天
+ for (let dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
+ const dayDate = new Date(currentDate);
+ dayDate.setDate(currentDate.getDate() + dayOfWeek);
+
+ const day = dayDate.getDate();
+ const month = dayDate.getMonth();
+ const year = dayDate.getFullYear();
+ const isCurrentMonth = month === currentMonth && year === currentYear;
+ const isToday = formatDate(dayDate) === formatDate(new Date());
+ let isInSelectedWeek = false;
+ let isWeekStart = false;
+ let isWeekEnd = false;
+
+ if (picker === 'range' && Array.isArray(selectedDate)) {
+ // 周范围选择逻辑
+ if (selectedDate.length === 2) {
+ const startDate = parseDate(selectedDate[0]);
+ const endDate = parseDate(selectedDate[1]);
+ if (startDate && endDate) {
+ const startWeekDates = getWeekDates(startDate);
+ const endWeekDates = getWeekDates(endDate);
+
+ // 检查日期是否在周范围内
+ isInSelectedWeek = (dayDate >= startWeekDates.start && dayDate <= endWeekDates.end);
+
+ // 判断是否是范围的开始和结束
+ if (isInSelectedWeek) {
+ const dayOfWeekNum = dayDate.getDay();
+ // 周开始:周一且在开始周内
+ isWeekStart = dayOfWeekNum === 1 && dayDate >= startWeekDates.start && dayDate <= startWeekDates.end;
+ // 周结束:周日且在结束周内
+ isWeekEnd = dayOfWeekNum === 0 && dayDate >= endWeekDates.start && dayDate <= endWeekDates.end;
+ }
+ }
+ } else if (selectedDate.length === 1 && rangeStart) {
+ const startWeekDates = getWeekDates(rangeStart);
+ isInSelectedWeek = dayDate >= startWeekDates.start && dayDate <= startWeekDates.end;
+
+ if (hoverDate) {
+ const hoverWeekDates = getWeekDates(hoverDate);
+ // 检查是否在悬停的周范围内
+ isInSelectedWeek = isInSelectedWeek || (dayDate >= startWeekDates.start && dayDate <= hoverWeekDates.end);
+ }
+ }
+ } else if (picker === 'single' && selectedDate) {
+ const selectedWeek = parseDate(selectedDate);
+ if (selectedWeek) {
+ const selectedWeekDates = getWeekDates(selectedWeek);
+ isInSelectedWeek = dayDate >= selectedWeekDates.start && dayDate <= selectedWeekDates.end;
+
+ // 判断是否是周的开始和结束
+ if (isInSelectedWeek) {
+ const dayOfWeekNum = dayDate.getDay();
+ isWeekStart = dayOfWeekNum === 1; // 周一
+ isWeekEnd = dayOfWeekNum === 0; // 周日
+ }
+ }
+ }
+
+ const isDisabled = disabled;
+
+ weekDays.push(
+ handleDateSelect(day)}
+ onMouseEnter={() => {
+ if (picker === 'range' && rangeStart && !rangeEnd) {
+ hoverDate = dayDate;
+ }
+ }}
+ onMouseLeave={() => {
+ if (picker === 'range') {
+ hoverDate = null;
+ }
+ }}
+ style={!isCurrentMonth ? { color: '#ccc' } : {}}
+ >
+ {day}
+
+ );
+ }
+
+ weeks.push(
+
+ {weekDays}
+
+ );
+
+ weekNumbers.push(
+
+ {weekNumber}
+
+ );
+
+ // 移动到下一周的周一
+ currentDate.setDate(currentDate.getDate() + 7);
+ }
+
+ return { weeks, weekNumbers };
+ }
+
+ // Render next month week view for range picker
+ function renderNextMonthWeekView() {
+ const { month: nextMonth, year: nextYear } = getNextMonthYear();
+ const weeks = [];
+ const weekNumbers = [];
+
+ const firstDayOfMonth = new Date(nextYear, nextMonth, 1);
+ const firstMonday = new Date(firstDayOfMonth);
+ const dayOfWeek = firstDayOfMonth.getDay();
+ const diff = dayOfWeek === 0 ? -6 : 1 - dayOfWeek;
+ firstMonday.setDate(firstDayOfMonth.getDate() + diff);
+
+ const daysInMonth = getDaysInMonth(nextYear, nextMonth);
+ const lastDayOfMonth = new Date(nextYear, nextMonth, daysInMonth);
+ const lastSunday = new Date(lastDayOfMonth);
+ const lastDayOfWeek = lastDayOfMonth.getDay();
+ lastSunday.setDate(lastDayOfMonth.getDate() + (lastDayOfWeek === 0 ? 0 : 7 - lastDayOfWeek));
+
+ const totalDays = Math.round((lastSunday - firstMonday) / (24 * 60 * 60 * 1000)) + 1;
+ const totalWeeks = Math.ceil(totalDays / 7);
+
+ let currentDate = new Date(firstMonday);
+
+ for (let week = 0; week < totalWeeks; week++) {
+ const weekDays = [];
+ const weekStartDate = new Date(currentDate);
+ const weekNumber = getWeekNumber(weekStartDate);
+
+ for (let dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
+ const dayDate = new Date(currentDate);
+ dayDate.setDate(currentDate.getDate() + dayOfWeek);
+
+ const day = dayDate.getDate();
+ const month = dayDate.getMonth();
+ const year = dayDate.getFullYear();
+ const isCurrentMonth = month === nextMonth && year === nextYear;
+ const isToday = formatDate(dayDate) === formatDate(new Date());
+ let isInSelectedWeek = false;
+ let isWeekStart = false;
+ let isWeekEnd = false;
+
+ if (picker === 'range' && Array.isArray(selectedDate)) {
+ if (selectedDate.length === 2) {
+ const startDate = parseDate(selectedDate[0]);
+ const endDate = parseDate(selectedDate[1]);
+ if (startDate && endDate) {
+ const startWeekDates = getWeekDates(startDate);
+ const endWeekDates = getWeekDates(endDate);
+ isInSelectedWeek = (dayDate >= startWeekDates.start && dayDate <= endWeekDates.end);
+ if (isInSelectedWeek) {
+ const dayOfWeekNum = dayDate.getDay();
+ isWeekStart = dayOfWeekNum === 1 && dayDate >= startWeekDates.start && dayDate <= startWeekDates.end;
+ isWeekEnd = dayOfWeekNum === 0 && dayDate >= endWeekDates.start && dayDate <= endWeekDates.end;
+ }
+ }
+ } else if (selectedDate.length === 1 && rangeStart) {
+ const startWeekDates = getWeekDates(rangeStart);
+ isInSelectedWeek = dayDate >= startWeekDates.start && dayDate <= startWeekDates.end;
+ if (hoverDate) {
+ const hoverWeekDates = getWeekDates(hoverDate);
+ isInSelectedWeek = isInSelectedWeek || (dayDate >= startWeekDates.start && dayDate <= hoverWeekDates.end);
+ }
+ }
+ } else if (picker === 'single' && selectedDate) {
+ const selectedWeek = parseDate(selectedDate);
+ if (selectedWeek) {
+ const selectedWeekDates = getWeekDates(selectedWeek);
+ isInSelectedWeek = dayDate >= selectedWeekDates.start && dayDate <= selectedWeekDates.end;
+ if (isInSelectedWeek) {
+ const dayOfWeekNum = dayDate.getDay();
+ isWeekStart = dayOfWeekNum === 1;
+ isWeekEnd = dayOfWeekNum === 0;
+ }
+ }
+ }
+
+ const isDisabled = disabled;
+
+ weekDays.push(
+ handleNextMonthDateSelect(day)}
+ onMouseEnter={() => {
+ if (picker === 'range' && rangeStart && !rangeEnd) {
+ hoverDate = dayDate;
+ }
+ }}
+ onMouseLeave={() => {
+ if (picker === 'range') {
+ hoverDate = null;
+ }
+ }}
+ style={!isCurrentMonth ? { color: '#ccc' } : {}}
+ >
+ {day}
+
+ );
+ }
+
+ weeks.push(
+
+ {weekDays}
+
+ );
+
+ weekNumbers.push(
+
+ {weekNumber}
+
+ );
+
+ currentDate.setDate(currentDate.getDate() + 7);
+ }
+
+ return { weeks, weekNumbers };
+ }
+
+ // Render month view
+ function renderMonthView() {
+ const months = [];
+
+ for (let month = 0; month < 12; month++) {
+ const date = new Date(currentYear, month, 1);
+ let isSelected = false;
+ let isRangeStart = false;
+ let isRangeEnd = false;
+ let isInRange = false;
+
+ if (picker === 'range' && Array.isArray(selectedDate)) {
+ if (selectedDate.length === 2) {
+ const startDate = parseDate(selectedDate[0]);
+ const endDate = parseDate(selectedDate[1]);
+ if (startDate && endDate) {
+ isRangeStart = formatMonth(date) === formatMonth(startDate);
+ isRangeEnd = formatMonth(date) === formatMonth(endDate);
+ isInRange = date >= startDate && date <= endDate;
+ }
+ } else if (selectedDate.length === 1 && rangeStart) {
+ isRangeStart = formatMonth(date) === formatMonth(rangeStart);
+ }
+ } else if (picker === 'single') {
+ isSelected = selectedDate === formatMonth(date);
+ }
+
+ months.push(
+ handleMonthSelect(month)}
+ >
+ {monthNames[month]}
+
+ );
+ }
+
+ return months;
+ }
+
+ // Render quarter view
+ function renderQuarterView() {
+ const quarters = [];
+
+ for (let quarter = 1; quarter <= 4; quarter++) {
+ const date = new Date(currentYear, (quarter - 1) * 3, 1);
+ let isSelected = false;
+ let isRangeStart = false;
+ let isRangeEnd = false;
+ let isInRange = false;
+
+ if (picker === 'range' && Array.isArray(selectedDate)) {
+ if (selectedDate.length === 2) {
+ const startDate = parseDate(selectedDate[0]);
+ const endDate = parseDate(selectedDate[1]);
+ if (startDate && endDate) {
+ isRangeStart = formatQuarter(date) === formatQuarter(startDate);
+ isRangeEnd = formatQuarter(date) === formatQuarter(endDate);
+ isInRange = date >= startDate && date <= endDate;
+ }
+ } else if (selectedDate.length === 1 && rangeStart) {
+ isRangeStart = formatQuarter(date) === formatQuarter(rangeStart);
+ }
+ } else if (picker === 'single') {
+ isSelected = selectedDate === formatQuarter(date);
+ }
+
+ quarters.push(
+ handleQuarterSelect(quarter)}
+ >
+ Q{quarter}
+
+ );
+ }
+
+ return quarters;
+ }
+
+ // Render year view
+ function renderYearView() {
+ const years = [];
+ const startYear = currentYear - 5;
+
+ for (let year = startYear; year <= startYear + 9; year++) {
+ const date = new Date(year, 0, 1);
+ let isSelected = false;
+ let isRangeStart = false;
+ let isRangeEnd = false;
+ let isInRange = false;
+
+ if (picker === 'range' && Array.isArray(selectedDate)) {
+ if (selectedDate.length === 2) {
+ const startDate = parseDate(selectedDate[0]);
+ const endDate = parseDate(selectedDate[1]);
+ if (startDate && endDate) {
+ isRangeStart = formatYear(date) === formatYear(startDate);
+ isRangeEnd = formatYear(date) === formatYear(endDate);
+ isInRange = date >= startDate && date <= endDate;
+ }
+ } else if (selectedDate.length === 1 && rangeStart) {
+ isRangeStart = formatYear(date) === formatYear(rangeStart);
+ }
+ } else if (picker === 'single') {
+ isSelected = selectedDate === formatYear(date);
+ }
+
+ years.push(
+ handleYearSelect(year)}
+ >
+ {year}
+
+ );
+ }
+
+ return years;
+ }
+
+ // Month names for display
+ const monthNames = [
+ '1月', '2月', '3月', '4月', '5月', '6月',
+ '7月', '8月', '9月', '10月', '11月', '12月'
+ ];
+
+ // Day names for display
+ const dayNames = ['日', '一', '二', '三', '四', '五', '六'];
+
+ // Week names for display
+ const weekNames = ['一', '二', '三', '四', '五', '六', '日'];
+
+ // Determine size class
+ const sizeClass = size === 'small' ? 'inula-datepicker-small' :
+ size === 'large' ? 'inula-datepicker-large' : '';
+
+ // Get placeholder based on mode and picker type
+ const getPlaceholder = () => {
+ if (placeholder) return placeholder;
+
+ const baseText = (() => {
+ switch (mode) {
+ case 'week':
+ return '周';
+ case 'month':
+ return '月份';
+ case 'quarter':
+ return '季度';
+ case 'year':
+ return '年份';
+ default:
+ return '日期';
+ }
+ })();
+
+ return picker === 'range' ? `请选择${baseText}范围` : `请选择${baseText}`;
+ };
+
+ // Get display value for input
+ const getDisplayValue = () => {
+ if (picker === 'range') {
+ if (Array.isArray(selectedDate)) {
+ if (selectedDate.length === 2) {
+ return `${selectedDate[0]} ~ ${selectedDate[1]}`;
+ } else if (selectedDate.length === 1) {
+ return selectedDate[0];
+ }
+ }
+ return '';
+ }
+ return selectedDate || '';
+ };
+
+ // Get range start value
+ const getRangeStartValue = () => {
+ if (Array.isArray(selectedDate) && selectedDate.length > 0) {
+ return selectedDate[0];
+ }
+ return '';
+ };
+
+ // Get range end value
+ const getRangeEndValue = () => {
+ if (Array.isArray(selectedDate) && selectedDate.length > 1) {
+ return selectedDate[1];
+ }
+ return '';
+ };
+
+ return (
+
+
handleToggle(e)}
+ >
+ {picker === 'range' ? (
+ <>
+
+ ~
+
+ 0)) && clearable && !disabled && hoverIcon}>
+
+
+
+
+
+ >
+ ) : (
+ <>
+
+
+
+
+
+
+
+ >
+ )}
+
+
+ {isOpen && (
+
e.stopPropagation()}>
+ {picker !== 'range' && (
+
+
+ {(mode === 'date' || mode === 'week') && (
+
+ )}
+
+ {mode === 'date' && `${currentYear}年 ${monthNames[currentMonth]}`}
+ {mode === 'week' && `${currentYear}年 ${monthNames[currentMonth]}`}
+ {mode === 'month' && `${currentYear}年`}
+ {mode === 'quarter' && `${currentYear}年`}
+ {mode === 'year' && `${currentYear - 5}年-${currentYear + 4}年`}
+
+ {(mode === 'date' || mode === 'week') && (
+
+ )}
+
+
+ )}
+
+
+ {picker === 'range' && mode === 'date' ? (
+ <>
+ {/* 左侧月份面板 */}
+
+
+
+
+
+ {currentYear}年 {monthNames[currentMonth]}
+
+
+
+
+ {dayNames.map((day, index) => (
+
{day}
+ ))}
+
+
+ {renderCalendarDays()}
+
+
+
+ {/* 右侧月份面板 */}
+
+
+
+
+ {getNextMonthYear().year}年 {monthNames[getNextMonthYear().month]}
+
+
+
+
+
+ {dayNames.map((day, index) => (
+
{day}
+ ))}
+
+
+ {renderNextMonthCalendarDays()}
+
+
+ >
+ ) : picker === 'range' && mode === 'week' ? (
+ <>
+ {/* 左侧周面板 */}
+
+
+
+
+
+ {currentYear}年 {monthNames[currentMonth]}
+
+
+
+
+ {weekNames.map((day, index) => (
+
{day}
+ ))}
+
+
+
+ {renderWeekView().weekNumbers}
+
+
+ {renderWeekView().weeks}
+
+
+
+
+ {/* 右侧周面板 */}
+
+
+
+
+ {getNextMonthYear().year}年 {monthNames[getNextMonthYear().month]}
+
+
+
+
+
+ {weekNames.map((day, index) => (
+
{day}
+ ))}
+
+
+
+ {renderNextMonthWeekView().weekNumbers}
+
+
+ {renderNextMonthWeekView().weeks}
+
+
+
+ >
+ ) : (
+ <>
+ {mode === 'date' && (
+ <>
+
+ {dayNames.map((day, index) => (
+
{day}
+ ))}
+
+
+ {renderCalendarDays()}
+
+ >
+ )}
+ {mode === 'week' && (
+ <>
+
+ {weekNames.map((day, index) => (
+
{day}
+ ))}
+
+
+
+ {renderWeekView().weekNumbers}
+
+
+ {renderWeekView().weeks}
+
+
+ >
+ )}
+ {mode === 'month' && (
+
+ {renderMonthView()}
+
+ )}
+ {mode === 'quarter' && (
+
+ {renderQuarterView()}
+
+ )}
+ {mode === 'year' && (
+
+ {renderYearView()}
+
+ )}
+ >
+ )}
+
+
+
+
+ {showToday && (
+
+ )}
+
+
+ {needConfirm && (
+
+ )}
+
+
+
+ )}
+
+ );
+};
+
+export default DatePicker;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demo.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..73a3d9e65b72f3f4f12b16901a54fa178b6c016f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demo.jsx
@@ -0,0 +1,85 @@
+import Demo1 from "./demos/demo1.jsx";
+import Demo2 from "./demos/demo2.jsx";
+import Demo3 from "./demos/demo3.jsx";
+import Demo4 from "./demos/demo4.jsx";
+import Demo5 from "./demos/demo5.jsx";
+import Demo6 from "./demos/demo6.jsx";
+
+function DatePickerDemo() {
+ return (
+
+
+
+
基础用法
+
最简单的用法,在浮层中可以选择或者输入日期。
+
+
+
+
+
+
+ {/*
+
+
日期范围选择器
+
通过设置 picker 属性,指定范围选择器类型。
+
+
+
+
+
+
+
+
+
基础选择器回调受控
+
测试回调函数和受控实现
+
+
+
+
+
+
+
+
+
rangePicker
+
+ 可以通过picker改变选择器功能,size分为大中小,支持禁用、支持varient变体,status状态。
+
+
+
+
+
+
+
+
+
+
rangepikcer进阶
+
+ 图标自定义,自定义defaultValue、defaultPickerValue,format,时期范围限定
+
+
+
+
+
+
+
+
+
+
range选择器回调受控
+
测试回调函数和受控实现
+
+
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c44023b88cd7c3ce031be950f0ccd308bdc3be06
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo1.jsx
@@ -0,0 +1,97 @@
+import { DatePicker } from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+function Demo1() {
+ const handleChange = (value) => {
+ console.log("选择的值:", value);
+ };
+
+ return (
+
+
+ 五种picker基本日期选择器
+
+
+
+
+
+
+
+
+ 不同尺寸日期选择器
+
+
+
+
+
+
+ 禁用状态基本日期选择器
+
+
+
+
+ 四种varient变体基本选择器
+
+
+
+
+
+
+
+ 两种status基本日期选择器
+
+
+
+
+ );
+}
+
+export default Demo1;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7d9081543fe3396e3ce85c83a3deb0a1d15698f9
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo2.jsx
@@ -0,0 +1,100 @@
+import { DatePicker } from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+import Icon from "../../icon/index.jsx";
+
+function DatePickerDemo() {
+ return (
+
+
+ 需要确认的日期选择器
+
+
+
+
+
+
+
+
+ showNow控制今天按钮显示
+
+
+
+
+ 自定义prefix,suffixIcon图标
+ }
+ placeholder="prefix"
+ />
+ }
+ placeholder="suffixIcon"
+ />
+
+
+
+ 自定义日历title切换图标
+ }
+ style={{ width: 200 }}
+ placeholder="prevIcon"
+ placement="topLeft"
+ />
+ }
+ style={{ width: 200 }}
+ placeholder="nextIcon"
+ placement="topLeft"
+ />
+ }
+ style={{ width: 200 }}
+ placeholder="superPrevIcon"
+ placement="topLeft"
+ />
+ }
+ style={{ width: 200 }}
+ placeholder="superNextIcon"
+ placement="topLeft"
+ />
+
+
+ );
+}
+
+export default DatePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..57de303ba243f2665df303eba9a5d18e2adae211
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo3.jsx
@@ -0,0 +1,73 @@
+import { DatePicker } from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+function DatePickerDemo() {
+ return (
+
+
+ 日期默认值
+
+
+
+
+
+
+
+
+ calendar浮窗面板默认值
+
+
+
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..a7374158b0a8f33078f39973e14749ee00254029
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo4.jsx
@@ -0,0 +1,59 @@
+import { DatePicker } from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+function DatePickerDemo() {
+ return (
+
+ 范围和选中限制
+
+
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..d6d1a46c1cbb0df700e7cecb7e22df42c20046c5
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo5.jsx
@@ -0,0 +1,161 @@
+import { DatePicker } from "../index.jsx";
+import Button from "../../button/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+function DatePickerDemo() {
+ let open = false;
+ let defaultOpen = false;
+ let placement = "bottomLeft";
+ let picker = "date";
+ let size = "default";
+
+ const handleControllOpenChange = (isOpen) => {
+ open = !isOpen;
+ };
+
+ const handleChange = (value) => {
+ console.log("选择的值:", value);
+ };
+
+ const handleOpenChange = (isOpen) => {
+ console.log(isOpen);
+ };
+
+ const handlePanleChange = (value, mode) => {
+ console.log(value, mode);
+ };
+
+ const handleClickOk = (value) => {
+ console.log("ok", value);
+ };
+
+ const onBlur = () => {
+ console.log(111);
+ };
+
+ const onFocus = () => {
+ console.log(111);
+ };
+
+ return (
+
+
+
+ 回调函数示例
+
+
+
+
+
+
+
+
+
+
+
+
+ 日历弹出位置控制
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default DatePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..05bc125b966abe6fac98b7c2ddb49b8853123f11
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo6.jsx
@@ -0,0 +1,143 @@
+import { RangePicker } from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+function RangePickerDemo() {
+ const handleChange = (value) => {
+ console.log("选择的值:", value);
+ };
+
+ return (
+
+
+
+ 五种picker-range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+ 三种size-range日期选择器
+
+
+
+
+
+
+
+
+
+
+ 禁用状态range日期选择器
+
+
+
+
+
+
+
+
+ 四种varient-range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+ 两种status-range日期选择器
+
+
+
+
+
+
+
+ );
+}
+
+export default RangePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo7.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo7.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6e0e9a655f2498aed0c520fc74d898b71f306f24
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo7.jsx
@@ -0,0 +1,199 @@
+import { RangePicker } from "../index.jsx";
+import Icon from "../../icon/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+function RangePickerDemo() {
+ const handleChange = (value) => {
+ console.log("选择的值:", value);
+ };
+
+ return (
+
+
+
+ 需要确认的rang日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+ 自定义前后缀图标和title切换图标的range日期选择器
+
+
+ }
+ placeholder="prefix"
+ />
+ }
+ placeholder="suffixIcon"
+ />
+ }
+ placeholder="prevIcon"
+ />
+ }
+ placeholder="nextIcon"
+ />
+ }
+ placeholder="superPrevIcon"
+ />
+ }
+ placeholder="superNextIcon"
+ />
+
+
+
+
+
+ 带defaultValue的range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+ 带日期范围限制的range日期选择器
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default RangePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo8.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo8.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7d94f491e29a7e5cc1f22b15f3d5de40a2a7effc
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/demos/demo8.jsx
@@ -0,0 +1,183 @@
+import { RangePicker } from "../index.jsx";
+import Button from "../../button/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+function RangePickerDemo() {
+ let open = false;
+ let defaultOpen = false;
+ let placement = "bottomLeft";
+ let picker = "date";
+ let size = "default";
+
+ const handleControllOpenChange = (isOpen) => {
+ open = !isOpen;
+ };
+
+ const handleChange = (value) => {
+ console.log("选择的值:", value);
+ };
+
+ const handleOpenChange = (isOpen) => {
+ console.log(isOpen);
+ };
+
+ const handlePanleChange = (value, mode) => {
+ console.log(value, mode);
+ };
+
+ const handleClickOk = (value) => {
+ console.log("ok", value);
+ };
+
+ const onBlur = () => {
+ console.log(111);
+ };
+
+ const onFocus = () => {
+ console.log(111);
+ };
+
+ return (
+
+
+
+ 自定义回调函数的range日期选择器
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 控制日历弹出位置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default RangePickerDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/index.css b/packages/inula2-ui2/library_code/src/components/datepicker2/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..86ad96ea5eb0d32a01e5c65211390a1e84de9916
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/index.css
@@ -0,0 +1,599 @@
+.inula-datepicker {
+ position: relative;
+}
+
+/* 输入框样式 */
+.inula-datepicker-input-contiainer {
+ position: relative;
+}
+
+/* 普通输入框 */
+.inula-datepicker-input {
+ width: 112px;
+ height: 24px;
+ border-radius: 6px;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+
+ padding: 4px 11px;
+
+ font-size: 14px;
+ line-height: 24px;
+}
+
+.inula-datepicker-input:hover {
+ border-color: #1677ff;
+}
+
+.inula-datepicker-input:focus {
+ border-color: #1677ff;
+ outline: none;
+ box-shadow: 0 0 0 2px rgba(22, 119, 255, 0.2);
+}
+
+.inula-datepicker-input-icon {
+ position: absolute;
+ right: 8px;
+ top: 16px;
+ transform: translateY(-50%);
+
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.inula-datepicker-input-icon .clear {
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ background-color: rgba(0, 0, 0, 0.45);
+
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ cursor: pointer;
+}
+
+/* 禁用态 */
+.inula-datepicker-input-disabled,
+.inula-datepicker-input-disabled:hover {
+ background-color: #f5f5f5;
+ border-color: rgba(0, 0, 0, 0.08);
+ color: rgba(0, 0, 0, 0.25);
+ cursor: not-allowed;
+}
+
+.icon-disabled .inula-icon:hover {
+ cursor: not-allowed !important;
+}
+
+/* 小尺寸 */
+.inula-datepicker-input-small {
+ width: 112px;
+ height: 24px;
+ font-size: 12px;
+ line-height: 20px;
+ padding: 0 7px;
+
+ font-size: 12px;
+}
+
+.inula-datepicker-input-small + .inula-datepicker-input-icon .inula-icon {
+ font-size: 12px !important;
+}
+
+.inula-datepicker-input-small + .inula-datepicker-input-icon .clear {
+ width: 12px;
+ height: 12px;
+}
+
+.inula-datepicker-input-small + .inula-datepicker-input-icon {
+ top: 13px;
+}
+
+/* 大尺寸 */
+.inula-datepicker-input-large {
+ width: 112px;
+ height: 24px;
+ font-size: 16px;
+ line-height: 32px;
+ padding: 7px 11px;
+
+ font-size: 16px;
+}
+
+.inula-datepicker-input-large + .inula-datepicker-input-icon .inula-icon {
+ font-size: 16px !important;
+}
+
+.inula-datepicker-input-large + .inula-datepicker-input-icon .clear {
+ width: 20px;
+ height: 20px;
+}
+
+.inula-datepicker-input-large + .inula-datepicker-input-icon {
+ top: 20px;
+}
+
+/* variant线条边框样式 */
+/* filled */
+.inula-datepicker-input.inula-datepicker-input-filled {
+ border: 1px solid transparent;
+ background-color: #f0f0f0;
+}
+
+.inula-datepicker-input.inula-datepicker-input-filled:focus {
+ border: 1px solid #1677ff;
+ outline: none;
+ box-shadow: none;
+}
+
+/* bordless */
+.inula-datepicker-input.inula-datepicker-input-borderless {
+ border: none;
+}
+
+.inula-datepicker-input.inula-datepicker-input-borderless:focus {
+ outline: none;
+ box-shadow: none;
+}
+
+/* underline */
+.inula-datepicker-input.inula-datepicker-input-underline {
+ border: 0;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.25);
+ border-radius: 0;
+}
+
+.inula-datepicker-input.inula-datepicker-input-underline:focus {
+ border-color: #1677ff;
+ outline: none;
+ box-shadow: none;
+}
+
+/* status 状态样式 */
+/* error */
+.inula-datepicker-input.inula-datepicker-input-error {
+ border: 1px solid #ff4d4f;
+}
+
+.inula-datepicker-input.inula-datepicker-input-error:hover {
+ border-color: #ffa39e;
+}
+
+.inula-datepicker-input.inula-datepicker-input-error:focus {
+ box-shadow: 0 0 0 2px rgba(255, 38, 5, 0.06);
+}
+
+.inula-datepicker-input.inula-datepicker-input-error
+ + .inula-datepicker-input-icon
+ .inula-icon {
+ color: #ff4d4f !important;
+}
+
+/* 不改变清除按钮颜色 */
+.inula-datepicker-input.inula-datepicker-input-error
+ + .inula-datepicker-input-icon
+ .clear
+ .inula-icon {
+ color: #fff !important;
+}
+
+/* warning */
+.inula-datepicker-input.inula-datepicker-input-warning {
+ border: 1px solid #faad14;
+}
+
+.inula-datepicker-input.inula-datepicker-input-warning:hover {
+ border-color: #ffd666;
+}
+
+.inula-datepicker-input.inula-datepicker-input-warning:focus {
+ box-shadow: 0 0 0 2px rgba(255, 215, 5, 0.1);
+}
+
+.inula-datepicker-input.inula-datepicker-input-warning
+ + .inula-datepicker-input-icon
+ .inula-icon {
+ color: #faad14 !important;
+}
+
+.inula-datepicker-input.inula-datepicker-input-warning
+ + .inula-datepicker-input-icon
+ .clear
+ .inula-icon {
+ color: #fff !important;
+}
+
+/* RangePicker */
+.inula-datepicker-input-container.range-container {
+ width: 300px;
+}
+
+.inula-datepicker-input.range-input {
+ width: 45%;
+}
+
+/* 日历样式 */
+.inula-calendar {
+ position: absolute;
+ z-index: 100;
+ top: 33px;
+
+ width: 287x !important;
+ background-color: #fff;
+
+ display: flex;
+ flex-direction: column;
+
+ border-radius: 6px;
+ box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),
+ 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+}
+
+.inula-calendar.closed {
+ display: none;
+}
+
+/* 日历头部样式 */
+.inula-calendar-header {
+ width: calc(100% - 8px);
+ height: 32px;
+
+ padding: 4px;
+
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ border-bottom: 1px solid rgba(0, 0, 0, 0.08);
+}
+
+.inula-calendar-header-title {
+ font-size: 14px;
+ font-weight: bold;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.range-title.inula-calendar-header-title {
+ width: 65%;
+ display: flex;
+ justify-content: space-between;
+}
+
+/* 左右切换箭头 */
+.inula-calendar-header-left {
+ display: flex;
+ gap: 7px;
+ margin-left: 8px;
+}
+
+.inula-calendar-header-left .inula-icon:hover {
+ cursor: pointer;
+ color: rgba(0, 0, 0, 0.88) !important;
+}
+
+.inula-calendar-header-right {
+ display: flex;
+ gap: 7px;
+ margin-right: 8px;
+}
+
+.inula-calendar-header-right .inula-icon:hover {
+ cursor: pointer;
+ color: rgba(0, 0, 0, 0.88) !important;
+}
+
+/* 日历内容样式 */
+.inula-calendar-content {
+ width: calc(100% - 21px);
+ padding: 10.5px;
+ display: grid;
+ grid-template-columns: repeat(var(--grid-columns), 1fr);
+}
+
+/* rangpicker */
+.inula-calendar-range-content {
+ display: flex;
+}
+
+/*
+
+item通用样式
+
+*/
+/* 容器 */
+.item-container {
+ width: 36px;
+ height: px;
+
+ margin: 6px 0;
+
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ position: relative;
+
+ transition: all 0.1s ease-in-out;
+}
+
+.item-container::before {
+ content: "";
+
+ width: 100%;
+ height: 6px;
+
+ position: absolute;
+ top: -6px;
+}
+
+.item-container::after {
+ content: "";
+
+ width: 100%;
+ height: 6px;
+
+ position: absolute;
+ bottom: -6px;
+}
+
+/*
+
+日期选择器、周选择器共用
+
+*/
+/* 星期标签item */
+.inula-calendar-content-weekday {
+ height: 32px;
+ line-height: 32px;
+ text-align: center;
+}
+
+/* 今天选中样式 */
+.inula-calendar-content-date-item.inula-calendar-content-date-item-today {
+ border: 1px solid #1677ff;
+ box-sizing: border-box;
+}
+
+/*
+通用hover样式,week特殊
+
+*/
+/* 容器 */
+.item-container:not(.week-container):hover {
+ cursor: pointer;
+}
+
+/* item本身 */
+.inula-calendar-content-date-item {
+ height: 24px;
+ width: 24px;
+ margin: 5px 7px;
+ border-radius: 6px;
+
+ font-size: 14px;
+ text-align: center;
+ line-height: 24px;
+
+ transition: all 0.3s ease-in-out;
+}
+
+/* item本身,selected时不生效 */
+.item-container:not(.week-container):hover
+ .inula-calendar-content-date-item:not(
+ .inula-calendar-content-date-item-selected
+ ) {
+ background-color: #f5f5f5;
+ cursor: pointer;
+}
+
+/* rangepicker的hover样式 */
+.inula-calendar-content.inula-range-calendar-content
+ .item-container:not(.week-container, .item-container-disabled):hover
+ .inula-calendar-content-date-item:not(
+ .inula-calendar-content-date-item-notThisTitleRange
+ ) {
+ color: #fff;
+ background-color: #1677ff;
+}
+
+/* 通用非标题范围样式 */
+.inula-calendar-content-date-item.inula-calendar-content-date-item-notThisTitleRange {
+ color: rgba(0, 0, 0, 0.25);
+}
+
+.inula-calendar-content-date-item.inula-calendar-content-date-item-today {
+ border: 1px solid #1677ff;
+ box-sizing: border-box;
+}
+
+.inula-calendar-content-date-item.inula-calendar-content-date-item-selected {
+ color: #fff;
+ background-color: #1677ff;
+}
+
+/* row只给周选择器用 */
+.inula-calendar-content-week-row-header {
+ display: grid;
+ grid-template-columns: repeat(8, 1fr);
+ border-radius: 6px;
+}
+
+.inula-calendar-content-week-row {
+ height: 24px;
+ border-radius: 6px;
+
+ margin: 4px 0;
+
+ line-height: 32px;
+ text-align: center;
+ grid-column: 1;
+
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+}
+
+/* hover */
+.inula-calendar-content-week-row:hover {
+ color: #fff;
+ background-color: #1677ff;
+ cursor: pointer;
+}
+
+.inula-calendar-content-week-row:hover .inula-calendar-content-date-item {
+ color: #fff;
+}
+
+.inula-calendar-content-week-row .inula-calendar-content-date-item:hover {
+ background-color: #1572f5;
+}
+
+/* 选中 */
+.inula-calendar-content-week-row.inula-calendar-content-week-row-selected {
+ color: #fff;
+ background-color: #1677ff;
+}
+
+.inula-calendar-content-week-row.inula-calendar-content-week-row-selected
+ .inula-calendar-content-date-item {
+ color: #fff;
+}
+
+/* 月选择器 */
+.item-container.month-container {
+ height: 24px;
+ width: 88px;
+
+ margin: 18px 0;
+}
+
+.item-container.month-container::before {
+ height: 18px;
+ top: -18px;
+}
+
+.item-container.month-container::after {
+ height: 18px;
+ bottom: -18px;
+}
+
+.item-container.month-container .inula-calendar-content-date-item {
+ height: 24px;
+ width: 64px;
+ border-radius: 6px;
+
+ margin: 18px 12px;
+
+ line-height: 24px;
+ text-align: center;
+}
+
+/* hover */
+.inula-calendar-content-month-item:hover {
+ background-color: #f5f5f5;
+ cursor: pointer;
+}
+
+/* 选中 */
+.inula-calendar-content-month-item.inula-calendar-content-month-item-selected {
+ color: #fff;
+ background-color: #1677ff;
+}
+
+/* 季度选择器 */
+.item-container.quarter-container {
+ height: 24px;
+ width: 68px;
+
+ margin: 10px 0;
+}
+
+.item-container.quarter-container::before {
+ height: 24px;
+ top: -24px;
+}
+
+.item-container.quarter-container::after {
+ height: 24px;
+ bottom: -24px;
+}
+
+.item-container.quarter-container .inula-calendar-content-date-item {
+ height: 24px;
+ width: 56px;
+ border-radius: 6px;
+
+ margin: 10px 6px;
+
+ line-height: 24px;
+ text-align: center;
+}
+
+/* hover */
+.inula-calendar-content-quarter-item:hover {
+ background-color: #f5f5f5;
+ cursor: pointer;
+}
+
+/* 选中 */
+.inula-calendar-content-quarter-item.inula-calendar-content-quarter-item-selected {
+ color: #fff;
+ background-color: #1677ff;
+}
+
+/* 年选择器 */
+.item-container.year-container {
+ height: 24px;
+ width: 88px;
+
+ margin: 18px 0;
+}
+
+.item-container.year-container::before {
+ height: 18px;
+ top: -18px;
+}
+
+.item-container.year-container::after {
+ height: 18px;
+ bottom: -18px;
+}
+
+.item-container.year-container .inula-calendar-content-date-item {
+ height: 24px;
+ width: 64px;
+}
+
+/* rangepicker在范围内item样式 */
+.item-container.item-container-in-range {
+ background-color: #e6f4ff;
+}
+
+/* 非title范围 */
+.inula-calendar-content-year-item.inula-calendar-content-year-item-notthispage {
+ color: rgba(0, 0, 0, 0.25);
+}
+
+/* 日历底部样式 */
+.inula-calendar-footer {
+ width: calc(100% - 8px);
+ height: 40px;
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
+
+ padding: 4px;
+
+ display: flex;
+ align-items: center;
+}
+
+.inula-calendar-footer-today {
+ font-size: 14px;
+ color: #1677ff;
+}
+
+.inula-calendar-footer-today:hover {
+ color: #69b1ff;
+ cursor: pointer;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/index.jsx b/packages/inula2-ui2/library_code/src/components/datepicker2/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1daffe5269ff7d508ee013758093249c12805133
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/index.jsx
@@ -0,0 +1,1891 @@
+import { didMount, watch, createContext, useContext } from "@openinula/next";
+import "./index.css";
+import Icon from "../icon";
+import Button from "../button";
+import {
+ calculateDaysInYearMonth,
+ calculateFirstWeekDayInYearMonth,
+ calculateCurWeek,
+ calculateRenderDateItems,
+ calculateRenderYQMItems,
+ calculateRenderWeekItems,
+ calculateNextRange,
+ getTodayDate,
+ formatDate,
+ formatDateToObject,
+ formatDateToYearMonth,
+ compareDate,
+ isEqualedDate,
+ isInRangeDate,
+} from "./utils";
+
+const ValueContext = createContext({
+ confirmValue: "",
+ selectValue: "",
+});
+
+const RangeValueContext = createContext({
+ startConfirmValue: "",
+ endConfirmValue: "",
+ startSelectValue: "",
+ endSelectValue: "",
+ rangeHoverValue: "",
+ rangeDefaultValue: "",
+ focusState: "00",
+});
+
+const DatePicker = ({
+ allowClear, //自定义清除按钮
+ autoFocus = false, //自动获取焦点
+ cellRender, //自定义单元格内容
+ components, //自定义面板
+ defaultOpen, //是否默认展开控制弹层
+ disabled = false, //禁用
+ disabledDate, //不可选择的日期
+ format, //设置日期格式
+ order = true, //多选、范围事是否自动排序
+ preserveInvalidOnBlur = false, //失去焦点是否要清空输入框内无效内容
+ getPopupContainer, //自定义浮层的容器,默认为body上新建div
+ inputReadOnly = false, //设置输入框只读
+ minDate, //最小日期
+ maxDate, //最大日期
+ needConfirm, //是否需要确认按钮
+ open, //控制弹层是否展开
+ // panekRender, //自定义渲染面板
+ picker = "date", //设置选择器类型, date | week | month | quarter | year
+ placeholder, //输入框提示文字
+ placement, //选择器弹出的位置bottomLeft | bottomRight | toLeft | toRight
+ prefix, //自定义前缀
+ prevIcon, //自定义上一个图标-月
+ nextIcon, //自定义下一个图标-月
+ suffixIcon, //自定义后缀
+ superNextIcon, //自定义下一个图标-年
+ superPrevIcon, //自定义上一个图标-年
+ size = "middle", //input大小,large高40px,small24px,default32px
+ variant = "outlined", // outlined | borderless | filled | underlined
+ status, //设置校验状态
+ onOpenChange,
+ onPanleChange,
+ className, //自定义类名
+ style,
+}) => {
+ let selectValue = "";
+ let confirmValue = "";
+ let isOpen = initialOpen;
+ let isClearIcon = false;
+ let curYear;
+ let curMonth;
+ let hoverValue;
+ let inputRef;
+
+ watch(() => {
+ if (defaultPickerValue || defaultValue) {
+ const parsedYearMonth = formatDateToYearMonth(
+ defaultPickerValue || defaultValue,
+ "",
+ picker
+ );
+ curYear = parsedYearMonth?.year || new Date().getFullYear();
+ curMonth = parsedYearMonth?.month || new Date().getMonth() + 1;
+ if (defaultValue) confirmValue = defaultValue;
+ } else {
+ curYear = new Date().getFullYear();
+ curMonth = new Date().getMonth() + 1;
+ }
+ });
+
+ watch(() => {
+ if (open !== undefined) {
+ isOpen = open;
+ }
+ });
+
+ const initialPlaceholder = () => {
+ if (placeholder) return placeholder;
+ switch (picker) {
+ case "date":
+ return "请选择日期";
+ case "week":
+ return "请选择周";
+ case "month":
+ return "请选择月份";
+ case "quarter":
+ return "请选择季度";
+ case "year":
+ return "请选择年份";
+ default:
+ return "请选择日期";
+ }
+ };
+
+ //选择某个日期
+ const handleSelect = (type, item) => {
+ console.log(type, item);
+ switch (type) {
+ case "date": {
+ selectValue = `${item.year}-${item.month}-${item.day}`;
+ if (item.year !== curYear) curYear = item.year;
+ if (item.month !== curMonth) curMonth = item.month;
+ break;
+ }
+ case "week": {
+ selectValue = `${curYear}-${item.week}周`;
+ if (item.year !== curYear) curYear = item.year;
+ if (item.month !== curMonth) curMonth = item.month;
+ break;
+ }
+ case "month": {
+ selectValue = `${curYear}-${item.month}`;
+ break;
+ }
+ case "quarter": {
+ selectValue = `${curYear}-Q${item.quarter}`;
+ break;
+ }
+ case "year": {
+ selectValue = `${item.year}`;
+ if (item.year !== curYear) curYear = item.year;
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ if (!needConfirm) {
+ hoverValue = "";
+ confirmValue = formatDate(selectValue, defaultValue, format, picker);
+ if (onChange) onChange(selectValue);
+ if (!defaultPickerValue) {
+ if (item.year !== curYear || (item.month && item.month !== curMonth)) {
+ if (onPanleChange) onPanleChange({ curYear, curMonth }, picker);
+ }
+ if (item.year && item.year !== curYear) curYear = item.year;
+ if (item.month && type !== "month" && item.month !== curMonth)
+ curMonth = item.month;
+ } else {
+ if (onPanleChange) onPanleChange(selectValue, picker);
+ curYear = formatDateToYearMonth(defaultPickerValue, "", picker)?.year;
+ curMonth = formatDateToYearMonth(defaultPickerValue, "", picker)?.month;
+ }
+ handleChangeOpen("close");
+ }
+ };
+
+ const mouseEnterItem = (type, item) => {
+ let tempValue;
+ switch (type) {
+ case "date": {
+ tempValue = `${item.year}-${item.month}-${item.day}`;
+ break;
+ }
+ case "week": {
+ tempValue = `${item.year}-${item.week}周`;
+ break;
+ }
+ case "month": {
+ tempValue = `${item.year}-${item.month}`;
+ break;
+ }
+ case "quarter": {
+ tempValue = `${item.year}-Q${item.quarter}`;
+ break;
+ }
+ case "year": {
+ tempValue = `${item.year}`;
+ break;
+ }
+ default: {
+ handleChangeOpen("close");
+ break;
+ }
+ }
+ hoverValue = formatDate(tempValue, defaultValue, format, picker);
+ };
+
+ const mouseLeaveItem = () => {
+ hoverValue = "";
+ };
+
+ const handleConfirm = () => {
+ confirmValue = selectValue;
+ isOpen = false;
+ };
+
+ //targer: year | month, action: add minus
+ const handleChangeTitle = (target, action) => {
+ if (target === "year") {
+ curYear = action === "add" ? curYear + 1 : curYear - 1;
+ } else {
+ if (action === "add") {
+ if (curMonth === 12) {
+ curMonth = 1;
+ curYear += 1;
+ } else curMonth += 1;
+ } else {
+ if (curMonth === 1) {
+ curMonth = 12;
+ curYear -= 1;
+ } else curMonth -= 1;
+ }
+ }
+ };
+
+ const handleClear = (e) => {
+ e.stopPropagation();
+ if (isClearIcon) {
+ selectValue = "";
+ confirmValue = "";
+ isClearIcon = false;
+ }
+ };
+
+ const handleOnBlur = () => {
+ if (onBlur) {
+ onBlur();
+ }
+ if (defaultPickerValue) {
+ curYear = formatDateToYearMonth(defaultPickerValue, "", picker)?.year;
+ curMonth = formatDateToYearMonth(defaultPickerValue, "", picker)?.month;
+ }
+ handleChangeOpen("close");
+ };
+
+ const handleOnFocus = () => {
+ if (onFocus) onFocus();
+ handleChangeOpen("open");
+ };
+
+ const handleChangeOpen = (action) => {
+ if (action === "open") {
+ if (onOpenChange && isOpen === false) onOpenChange(isOpen);
+ else isOpen = true;
+ } else if (action === "close") {
+ if (selectValue) selectValue = "";
+ inputRef.blur();
+ if (onOpenChange && isOpen === true) onOpenChange(isOpen);
+ else isOpen = false;
+ }
+ };
+
+ const inputContainerClassNames = [
+ "inula-datepicker-input-container",
+ size === "large" && "inula-datepicker-input-container-large",
+ size === "small" && "inula-datepicker-input-container-small",
+ disabled && "inula-datepicker-input-container-disabled",
+ variant === "filled" && "inula-datepicker-input-container-filled",
+ variant === "outlined" && "inula-datepicker-input-container-outlined",
+ variant === "borderless" && "inula-datepicker-input-container-borderless",
+ variant === "underline" && "inula-datepicker-input-container-underline",
+ status === "error" && "inula-datepicker-input-container-error",
+ status === "warning" && "inula-datepicker-input-container-warning",
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const inputClassNames = [
+ "inula-datepicker-input",
+ size === "large" && "inula-datepicker-input-large",
+ size === "small" && "inula-datepicker-input-small",
+ disabled && "inula-datepicker-input-disabled",
+ variant === "filled" && "inula-datepicker-input-filled",
+ variant === "outlined" && "inula-datepicker-input-outlined",
+ variant === "borderless" && "inula-datepicker-input-borderless",
+ variant === "underline" && "inula-datepicker-input-underline",
+ status === "error" && "inula-datepicker-input-error",
+ status === "warning" && "inula-datepicker-input-warning",
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ return (
+
+
{
+ if (disabled) return;
+ handleChangeOpen("open");
+ if (inputRef) inputRef.focus();
+ }}
+ >
+
+ {prefix}
+
+
(isOpen = true)}
+ onBlur={() => (isOpen = false)}
+ >
+
confirmValue && (isClearIcon = true)}
+ onMouseLeave={() => (isClearIcon = false)}
+ onMouseDown={(e) => e.preventDefault()}
+ onClick={(e) => {
+ e.stopPropagation();
+ handleClear(e);
+ }}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+const RangePicker = ({
+ allowClear, //自定义清除按钮
+ showNow = true, //是否展示“今天”按钮
+ autoFocus = false, //自动获取焦点
+ inputReadOnly = false, //设置输入框只读
+ defaultOpen = false, //是否默认展开控制弹层
+ disabled = false, //禁用
+ disabledDate, //不可选择的日期
+ format, //设置日期格式
+ onChange, //时间变化回调
+ onOk, //点击确定回调
+ open, //控制弹层是否展开
+ initialOpen = open !== undefined ? open : defaultOpen || false,
+ order = true,
+ defaultPickerValue, //默认面板日期,每次打开面板会被重置到该日期,格式为YYYY-MM-DD
+ defaultValue = ["", ""], //默认值,与format对应,如果开始或结束时间为null或undefined,日期范围将是一个开区间
+ minDate, //最小日期
+ maxDate, //最大日期
+ needConfirm, //是否需要确认按钮 // panekRender, //自定义渲染面板
+ picker = "date", //设置选择器类型, date | week | month | quarter | year
+ placeholder, //输入框提示文字
+ placement = "bottomLeft", //选择器弹出的位置bottomLeft | bottomRight | toLeft | toRight
+ prefix, //自定义前缀
+ prevIcon, //自定义上一个图标-月
+ nextIcon, //自定义下一个图标-月
+ suffixIcon, //自定义后缀
+ superNextIcon, //自定义下一个图标-年
+ superPrevIcon, //自定义上一个图标-年
+ size = "middle", //input大小,large高40px,small24px,default32px
+ variant = "outlined", // outlined | borderless | filled | underlined
+ status, //设置校验状态
+ onOpenChange,
+ onPanleChange,
+ onBlur,
+ onFocus,
+ className, //自定义类名
+ style,
+}) => {
+ let hoverValue;
+ let startConfirmValue = "";
+ let endConfirmValue = "";
+ let focusState = "00";
+ let isOpen = initialOpen;
+ let startSelectValue = "";
+ let endSelectValue = "";
+ let isClearIcon = false;
+ let curYear;
+ let curMonth;
+ let startInputRef;
+ let endInputRef;
+
+ didMount(() => {
+ if (defaultValue) {
+ const parsedYearMonth = formatDateToYearMonth(
+ defaultValue[0],
+ "",
+ picker
+ );
+ curYear = parsedYearMonth?.year || new Date().getFullYear();
+ curMonth = parsedYearMonth?.month || new Date().getMonth() + 1;
+ if (defaultValue[0] && defaultValue[1]) {
+ startConfirmValue = compareDate(
+ defaultValue[0],
+ defaultValue[1],
+ picker
+ )
+ ? defaultValue[0]
+ : defaultValue[1];
+ endConfirmValue = compareDate(defaultValue[0], defaultValue[1], picker)
+ ? defaultValue[1]
+ : defaultValue[0];
+ }
+ } else {
+ curYear = new Date().getFullYear();
+ curMonth = new Date().getMonth() + 1;
+ }
+ });
+
+ watch(() => {
+ if (open !== undefined) {
+ isOpen = open;
+ }
+ });
+
+ const initialPlaceholder = (inputType) => {
+ if (placeholder) {
+ if (String.prototype.toString.call(inputType).slice(8, -1) !== "Array") {
+ return placeholder;
+ } else {
+ if (inputType === "start") {
+ return placeholder[0];
+ } else {
+ return placeholder[1];
+ }
+ }
+ }
+
+ switch (picker) {
+ case "date":
+ return "请选择日期";
+ case "week":
+ return "请选择周";
+ case "month":
+ return "请选择月份";
+ case "quarter":
+ return "请选择季度";
+ case "year":
+ return "请选择年份";
+ default:
+ return "请选择日期";
+ }
+ }; //选择某个日期
+
+ const handleSelect = (type, item) => {
+ switch (type) {
+ case "date": {
+ if (focusState === "10")
+ startSelectValue = `${item.year}-${item.month}-${item.day}`;
+ else if (focusState === "01")
+ endSelectValue = `${item.year}-${item.month}-${item.day}`;
+ break;
+ }
+ case "week": {
+ if (focusState === "10")
+ startSelectValue = `${item.year}-${item.week}周`;
+ else if (focusState === "01")
+ endSelectValue = `${item.year}-${item.week}周`;
+ break;
+ }
+ case "month": {
+ if (focusState === "10")
+ startSelectValue = `${item.year}-${item.month}`;
+ else if (focusState === "01")
+ endSelectValue = `${item.year}-${item.month}`;
+ break;
+ }
+ case "quarter": {
+ if (focusState === "10")
+ startSelectValue = `${item.year}-Q${item.quarter}`;
+ else if (focusState === "01")
+ endSelectValue = `${item.year}-Q${item.quarter}`;
+ break;
+ }
+ case "year": {
+ if (focusState === "10") startSelectValue = `${item.year}`;
+ else if (focusState === "01") endSelectValue = `${item.year}`;
+ break;
+ }
+ default: {
+ handleChangeOpen("close");
+ break;
+ }
+ }
+
+ if (!needConfirm) {
+ hoverValue = "";
+
+ if (focusState === "10") {
+ startConfirmValue = formatDate(
+ startSelectValue,
+ defaultValue[0],
+ format,
+ picker
+ );
+ focusState = "01";
+ endInputRef.focus();
+ } else if (focusState === "01") {
+ endConfirmValue = formatDate(
+ endSelectValue,
+ defaultValue[1],
+ format,
+ picker
+ );
+ focusState = "10";
+ startInputRef.focus();
+ }
+
+ if (!defaultPickerValue) {
+ switch (type) {
+ case "date":
+ case "week": {
+ if (curYear < item.year) {
+ curYear = item.year;
+ curMonth = 1;
+ } else if (curYear > item.year) {
+ curYear = item.year;
+ curMonth = 12;
+ } else {
+ if (item.month > curMonth + 1 || item.month < curMonth) {
+ curMonth = item.month;
+ }
+ }
+ break;
+ }
+ case "month":
+ case "quarter": {
+ if (Math.abs(curYear - item.year) > 1) curYear = item.year;
+ break;
+ }
+ case "year": {
+ if (
+ Math.floor(curYear / 10) * 10 + 20 === item.year ||
+ Math.floor(curYear / 10) * 10 - 1 === item.year
+ )
+ curYear = item.year;
+ }
+ }
+ } else {
+ if (onPanleChange)
+ onPanleChange(startSelectValue, endSelectValue, picker);
+ curYear = formatDateToYearMonth(defaultPickerValue, "", picker)?.year;
+ curMonth = formatDateToYearMonth(defaultPickerValue, "", picker)?.month;
+ }
+
+ if (onChange) onChange(startSelectValue, endSelectValue);
+ if (startConfirmValue && endConfirmValue) handleChangeOpen("close", item);
+ }
+ };
+
+ const mouseEnterItem = (type, item) => {
+ let tempValue;
+
+ switch (type) {
+ case "date": {
+ tempValue = `${item.year}-${item.month}-${item.day}`;
+ break;
+ }
+ case "week": {
+ tempValue = `${item.year}-${item.week}周`;
+ break;
+ }
+ case "month": {
+ tempValue = `${item.year}-${item.month}`;
+ break;
+ }
+ case "quarter": {
+ tempValue = `${item.year}-Q${item.quarter}`;
+ break;
+ }
+ case "year": {
+ tempValue = `${item.year}`;
+ break;
+ }
+
+ default: {
+ handleChangeOpen("close");
+ break;
+ }
+ }
+
+ hoverValue = formatDate(tempValue, defaultValue[0], format, picker);
+ };
+
+ const mouseLeaveItem = () => {
+ hoverValue = "";
+ };
+
+ const handleConfirm = () => {
+ hoverValue = "";
+ let item;
+
+ if (focusState === "10") {
+ if (!startSelectValue) return;
+ startConfirmValue = formatDate(
+ startSelectValue,
+ defaultValue[0],
+ format,
+ picker
+ );
+ item = formatDateToObject(startSelectValue, "", picker);
+ focusState = "01";
+ endInputRef.focus();
+ } else if (focusState === "01") {
+ if (!endSelectValue) return;
+ endConfirmValue = formatDate(
+ endSelectValue,
+ defaultValue[1],
+ format,
+ picker
+ );
+ item = formatDateToObject(endSelectValue, "", picker);
+ focusState = "10";
+ startInputRef.focus();
+ }
+
+ if (!defaultPickerValue) {
+ switch (picker) {
+ case "date":
+ case "week": {
+ if (curYear < item.year) {
+ curYear = item.year;
+ curMonth = 1;
+ } else if (curYear > item.year) {
+ curYear = item.year;
+ curMonth = 12;
+ } else {
+ if (item.month > curMonth + 1 || item.month < curMonth) {
+ curMonth = item.month;
+ }
+ }
+ break;
+ }
+ case "month":
+ case "quarter": {
+ if (Math.abs(curYear - item.year) > 1) curYear = item.year;
+ break;
+ }
+ case "year": {
+ if (
+ Math.floor(curYear / 10) * 10 + 20 === item.year ||
+ Math.floor(curYear / 10) * 10 - 1 === item.year
+ )
+ curYear = item.year;
+ }
+ }
+ } else {
+ if (onPanleChange)
+ onPanleChange(startSelectValue, endSelectValue, picker);
+ curYear = formatDateToYearMonth(defaultPickerValue, "", picker)?.year;
+ curMonth = formatDateToYearMonth(defaultPickerValue, "", picker)?.month;
+ }
+
+ if (onChange) onChange(startSelectValue, endSelectValue);
+
+ if (startConfirmValue && endConfirmValue) handleChangeOpen("close");
+ };
+
+ //target: year | month, action: add minus
+ const handleChangeTitle = (target, action, type = "date") => {
+ if (onPanleChange)
+ onPanleChange({ curYear, curMonth }, endSelectValue, picker);
+
+ if (target === "year") {
+ if (type === "year")
+ curYear = action === "add" ? curYear + 10 : curYear - 10;
+ else curYear = action === "add" ? curYear + 1 : curYear - 1;
+ } else {
+ if (action === "add") {
+ if (curMonth === 12) {
+ curMonth = 1;
+ curYear += 1;
+ } else curMonth += 1;
+ } else {
+ if (curMonth === 1) {
+ curMonth = 12;
+ curYear -= 1;
+ } else curMonth -= 1;
+ }
+ }
+ };
+
+ const handleClear = (e) => {
+ e.stopPropagation();
+ if (isClearIcon) {
+ startSelectValue = "";
+ endSelectValue = "";
+ startConfirmValue = "";
+ endConfirmValue = "";
+ isClearIcon = false;
+ }
+ };
+
+ const handleOnBlur = (curRef) => {
+ if (onBlur) {
+ onBlur();
+ }
+
+ if (defaultPickerValue) {
+ curYear = formatDateToYearMonth(defaultPickerValue, "", picker)?.year;
+ curMonth = formatDateToYearMonth(defaultPickerValue, "", picker)?.month;
+ }
+
+ if (curRef === "start" && focusState === "10") {
+ focusState = "00";
+ handleChangeOpen("close");
+ } else if (curRef === "end" && focusState === "01") {
+ focusState = "00";
+ handleChangeOpen("close");
+ }
+ };
+
+ const handleOnFocus = (curRef) => {
+ if (onFocus) onFocus();
+ handleChangeOpen("open");
+
+ if (curRef === "start") {
+ focusState = "10";
+ } else {
+ focusState = "01";
+ }
+ };
+
+ const handleOnClickContainer = () => {
+ if (disabled) return;
+ handleChangeOpen("open");
+
+ if (focusState === "00") {
+ startInputRef.focus();
+ }
+ };
+
+ const handleChangeOpen = (action) => {
+ if (action === "open") {
+ if (onOpenChange && isOpen === false) onOpenChange(isOpen);
+ else isOpen = true;
+ } else if (action === "close") {
+ startSelectValue = "";
+ endSelectValue = "";
+ if (startConfirmValue && endConfirmValue && order) {
+ if (!compareDate(startConfirmValue, endConfirmValue, picker)) {
+ const temp = startConfirmValue;
+ startConfirmValue = endConfirmValue;
+ endConfirmValue = temp;
+ }
+ }
+ startInputRef.blur();
+ endInputRef.blur();
+ if (onOpenChange && isOpen === true) onOpenChange(isOpen);
+ else isOpen = false;
+ }
+ };
+
+ const inputContainerClassNames = [
+ "inula-datepicker-input-container",
+ "range-container",
+ size === "large" && "inula-datepicker-input-container-large",
+ size === "small" && "inula-datepicker-input-container-small",
+ disabled && "inula-datepicker-input-container-disabled",
+ variant === "filled" && "inula-datepicker-input-container-filled",
+ variant === "outlined" && "inula-datepicker-input-container-outlined",
+ variant === "borderless" && "inula-datepicker-input-container-borderless",
+ variant === "underline" && "inula-datepicker-input-container-underline",
+ status === "error" && "inula-datepicker-input-container-error",
+ status === "warning" && "inula-datepicker-input-container-warning",
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const startInputClassNames = [
+ "inula-datepicker-input",
+ "range-input",
+ size === "large" && "inula-datepicker-input-large",
+ size === "small" && "inula-datepicker-input-small",
+ focusState === "10" && hoverValue && "inula-datepicker-input-hover-value",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const endInputClassNames = [
+ "inula-datepicker-input",
+ "range-input",
+ size === "large" && "inula-datepicker-input-large",
+ size === "small" && "inula-datepicker-input-small",
+ focusState === "01" && hoverValue && "inula-datepicker-input-hover-value",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const inputIconClassNames = [
+ "inula-datepicker-input-icon",
+ disabled && "icon-disabled",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ return (
+
+
handleOnClickContainer()}
+ >
+
+ {prefix}
+
+ {/* start */}
+
e.stopPropagation()}
+ onBlur={() => handleOnBlur("start")}
+ onFocus={() => handleOnFocus("start")}
+ >
+
+
+ {/* end */}
+
e.stopPropagation()}
+ onBlur={() => handleOnBlur("end")}
+ onFocus={() => handleOnFocus("end")}
+ >
+
+
{
+ if (startConfirmValue || endConfirmValue) isClearIcon = true;
+ }}
+ onMouseLeave={() => (isClearIcon = false)}
+ onMouseDown={(e) => e.preventDefault()}
+ onClick={(e) => {
+ e.stopPropagation();
+ handleClear(e);
+ }}
+ >
+
{
+ if (startConfirmValue || endConfirmValue) isClearIcon = true;
+ }}
+ onMouseLeave={() => (isClearIcon = false)}
+ onMouseDown={(e) => e.preventDefault()}
+ onClick={() => handleClear()}
+ >
+
+
+ {suffixIcon ? (
+ suffixIcon
+ ) : (
+
+ )}
+
+
+ {allowClear ? (
+ allowClear
+ ) : (
+
+
+
+ )}
+
+
+
+
+
+
+
+ );
+};
+
+const Calendar = ({
+ type = "date",
+ mode = "date",
+ size = "default",
+ curYear = new Date().getFullYear(),
+ curMonth = new Date().getMonth() + 1,
+ curDay = new Date().getDate(),
+ isOpen = false,
+ placement,
+ defaultValue,
+ disabledDate,
+ minDate,
+ maxDate,
+ needConfirm,
+ handleConfirm,
+ prevIcon,
+ nextIcon,
+ superPrevIcon,
+ superNextIcon,
+}) => {
+ const { selectValue, confirmValue } = useContext(ValueContext);
+ const { rangeDefaultValue } = useContext(RangeValueContext);
+
+ const today = `${new Date().getFullYear()}-${
+ new Date().getMonth() + 1
+ }-${new Date().getDate()}`;
+
+ const calendarClassNames = ["inula-calendar", !isOpen && "closed"]
+ .filter(Boolean)
+ .join(" ");
+
+ //通过minDate、maxDate、disabledDate判断元素是否为禁用
+ const isDisabled = (item) => {
+ if (!minDate && !maxDate && !disabledDate) return false;
+ const miniDate = formatDateToObject(minDate, "", type);
+ const maxiDate = formatDateToObject(maxDate, "", type);
+ const disabledDates = disabledDate
+ ? disabledDate.map((date) => formatDateToObject(date, "", type))
+ : null;
+ switch (type) {
+ case "date": {
+ if (miniDate) {
+ if (item.year < miniDate.year) return true;
+ else if (item.year === miniDate.year && item.month < miniDate.month)
+ return true;
+ else if (
+ item.year === miniDate.year &&
+ item.month === miniDate.month &&
+ item.day <= miniDate.day
+ )
+ return true;
+ }
+
+ if (maxiDate) {
+ if (item.year > maxiDate.year) return true;
+ else if (item.year === maxiDate.year && item.month > maxiDate.month)
+ return true;
+ else if (
+ item.year === maxiDate.year &&
+ item.month === maxiDate.month &&
+ item.day >= maxiDate.day
+ )
+ return true;
+ }
+
+ if (disabledDates)
+ for (const date of disabledDates)
+ if (
+ date.year === item.year &&
+ date.month === item.month &&
+ date.day === item.day
+ )
+ return true;
+ break;
+ }
+
+ case "week": {
+ if (miniDate) {
+ if (item.year < miniDate.year) return true;
+ else if (item.year === miniDate.year && item.week <= miniDate.week)
+ return true;
+ }
+
+ if (maxiDate) {
+ if (item.year > maxiDate.year) return true;
+ else if (item.year === maxiDate.year && item.week >= maxiDate.week)
+ return true;
+ }
+
+ if (disabledDates)
+ for (const date of disabledDates)
+ if (date.year === item.year && date.week === item.week) return true;
+ break;
+ }
+
+ case "month": {
+ if (miniDate) {
+ if (item.year < miniDate.year) return true;
+ else if (item.year === miniDate.year && item.month <= miniDate.month)
+ return true;
+ }
+
+ if (maxiDate) {
+ if (item.year > maxiDate.year) return true;
+ else if (item.year === maxiDate.year && item.month >= maxiDate.month)
+ return true;
+ }
+
+ if (disabledDates)
+ for (const date of disabledDates)
+ if (date.year === item.year && date.month === item.month)
+ return true;
+ break;
+ }
+
+ case "quarter": {
+ if (miniDate) {
+ if (item.year < miniDate.year) return true;
+ else if (
+ item.year === miniDate.year &&
+ item.quarter <= miniDate.quarter
+ )
+ return true;
+ }
+
+ if (maxiDate) {
+ if (item.year > maxiDate.year) return true;
+ else if (
+ item.year === maxiDate.year &&
+ item.quarter >= maxiDate.quarter
+ )
+ return true;
+ }
+
+ if (disabledDates)
+ for (const date of disabledDates)
+ if (date.year === item.year && date.quarter === item.quarter)
+ return true;
+ break;
+ }
+
+ case "year": {
+ if (miniDate && item.year <= miniDate.year) return true;
+ if (maxiDate && item.year >= maxiDate.year) return true;
+
+ if (disabledDates)
+ for (const date of disabledDates)
+ if (date.year === item.year) return true;
+ break;
+ }
+ }
+
+ return false;
+ };
+
+ const getGridColumns = () => {
+ switch (type) {
+ case "date":
+ return 7;
+ case "week":
+ return 1;
+ case "month":
+ return 3;
+ case "quarter":
+ return 4;
+ case "year":
+ return 3;
+ default:
+ return 7;
+ }
+ };
+
+ //日历头部
+ const CalendarHeader = () => {
+ return (
+
+
+ {superPrevIcon ? (
+ superPrevIcon
+ ) : (
+ handleChangeTitle("year", "minus")}
+ />
+ )}
+ {type === "date" ||
+ (type === "week" &&
+ (prevIcon ? (
+ prevIcon
+ ) : (
+ handleChangeTitle("month", "minus")}
+ />
+ )))}
+
+
+
+
+
+ {`${curYear}年 ${curMonth}月`}
+
+
+ {`${curYear}年`}
+
+ {`${Math.floor(curYear / 10) * 10}年-${
+ Math.floor(curYear / 10) * 10 + 9
+ }年`}
+
+
+
+
+ {`${calculateNextRange(curYear, curMonth, type).nextYear}年 ${
+ calculateNextRange(curYear, curMonth, type).nextMonth
+ }月`}
+
+
+ {`${calculateNextRange(curYear, curMonth, type).nextYear}年`}
+
+ {`${
+ Math.floor(
+ calculateNextRange(curYear, curMonth, type).nextYear / 10
+ ) * 10
+ }年-${
+ Math.floor(
+ calculateNextRange(curYear, curMonth, type).nextYear / 10
+ ) *
+ 10 +
+ 9
+ }年`}
+
+
+
+
+ {type === "date" ||
+ (type === "week" &&
+ (nextIcon ? (
+ nextIcon
+ ) : (
+ handleChangeTitle("month", "add")}
+ />
+ )))}
+ {superNextIcon ? (
+ superNextIcon
+ ) : (
+ handleChangeTitle("year", "add")}
+ />
+ )}
+
+
+ );
+ };
+
+ //日历内容
+ const CalendarContent = () => {
+ return (
+
+
+
+ {(item) => (
+
+ {item}
+
+ )}
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+
+ {(item) => (
+
+ {item}
+
+ )}
+
+
+
+ {(row, index) => (
+ handleClick(e, "week", row[0])}
+ onMouseEnter={() => handleMounseEnter("week", row[0])}
+ onMouseLeave={() => handleMounseLeave(row[0])}
+ >
+
+ {(item, index) => (
+
+ )}
+
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+ );
+ };
+
+ const CalendarRangeContent = () => {
+ return (
+
+
+
+
+ {(item) => (
+
+ {item}
+
+ )}
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+
+ {(item) => (
+
+ {item}
+
+ )}
+
+
+
+ {(row, index) => (
+
+ !isDisabled(row[0]) && onSelect && onSelect("week", row[0])
+ }
+ onMouseEnter={() =>
+ !isDisabled(row[0]) && mouseEnterItem("week", row[0])
+ }
+ onMouseLeave={() => !isDisabled(row[0]) && mouseLeaveItem()}
+ >
+
+ {(item, index) => (
+
+ )}
+
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+
+
+ {(item) => (
+
+ {item}
+
+ )}
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+
+ {(item) => (
+
+ {item}
+
+ )}
+
+
+
+ {(row, index) => (
+
+ !isDisabled(row[0]) && onSelect && onSelect("week", row[0])
+ }
+ onMouseEnter={() =>
+ !isDisabled(row[0]) && mouseEnterItem("week", row[0])
+ }
+ onMouseLeave={() => !isDisabled(row[0]) && mouseLeaveItem()}
+ >
+
+ {(item, index) => (
+
+ )}
+
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+ {(item, index) => (
+
+ )}
+
+
+
+
+ );
+ };
+
+ //日历底部
+ const CalendarFooter = () => {
+ const justifyContent = () => {
+ if (type === "date" && needConfirm) return "space-between";
+ if (type === "date" && !needConfirm) return "center";
+ if (type !== "date" && needConfirm) return "flex-end";
+ return "center";
+ };
+
+ return (
+
+
+ onSelect && onSelect("date", getTodayDate())}
+ >
+ 今天
+
+
+
+
+
+
+ );
+ };
+
+ return (
+ e.preventDefault()}>
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+const CalendarContentItem = ({
+ type = "date", //日历类型
+ mode = "date",
+ item, //item日期信息{year, quarter, month, week, day, isThisTitleRange}
+ defaultValue, //默认日期
+ disabled, //是否禁用
+ onClick,
+ onMouseEnter,
+ onMouseLeave,
+ className,
+}) => {
+ const { confirmValue, selectValue } = useContext(ValueContext);
+ const {
+ startConfirmValue,
+ endConfirmValue,
+ startSelectValue,
+ endSelectValue,
+ focusState,
+ rangeHoverValue,
+ } = useContext(RangeValueContext);
+
+ const today = `${new Date().getFullYear()}-${
+ new Date().getMonth() + 1
+ }-${new Date().getDate()}`;
+
+ const isTody =
+ (type === "date" || "week") &&
+ today === `${item.year}-${item.month}-${item.day}`;
+
+ const defaultString = (item) => {
+ switch (type) {
+ case "date":
+ return `${item.year}-${item.month}-${item.day}`;
+ case "week":
+ return `${item.year}-${item.week}周`;
+ case "month":
+ return `${item.year}-${item.month}`;
+ case "quarter":
+ return `${item.year}-Q${item.quarter}`;
+ case "year":
+ return `${item.year}`;
+ }
+ };
+
+ const itemContainerClassNames = [
+ "item-container",
+ disabled && "item-container-disabled",
+ isInRangeDate(
+ focusState,
+ rangeHoverValue,
+ startConfirmValue,
+ endConfirmValue,
+ startSelectValue,
+ endSelectValue,
+ item,
+ type
+ ) && "item-container-in-range",
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const itemClassNames = [
+ "inula-calendar-content-date-item",
+ !item.isThisTitleRange &&
+ "inula-calendar-content-date-item-notThisTitleRange",
+ isTody && "inula-calendar-content-date-item-today",
+ type !== "week" &&
+ item.isThisTitleRange &&
+ mode === "date" &&
+ (selectValue
+ ? selectValue === defaultString(item)
+ : confirmValue
+ ? isEqualedDate(confirmValue, item, type)
+ : isEqualedDate(defaultValue, item, type)) &&
+ "inula-calendar-content-date-item-selected",
+ type !== "week" &&
+ item.isThisTitleRange &&
+ mode === "range" &&
+ !(focusState === "10" && rangeHoverValue) &&
+ (startSelectValue
+ ? startSelectValue === defaultString(item)
+ : startConfirmValue
+ ? isEqualedDate(startConfirmValue, item, type)
+ : isEqualedDate(defaultValue, item, type)) &&
+ "inula-calendar-content-date-item-selected",
+ type !== "week" &&
+ item.isThisTitleRange &&
+ mode === "range" &&
+ !(focusState === "01" && rangeHoverValue) &&
+ (endSelectValue
+ ? endSelectValue === defaultString(item)
+ : endConfirmValue
+ ? isEqualedDate(endConfirmValue, item, type)
+ : isEqualedDate(defaultValue, item, type)) &&
+ "inula-calendar-content-date-item-selected",
+ type !== "week" &&
+ item.isThisTitleRange &&
+ mode === "range" &&
+ rangeHoverValue &&
+ isEqualedDate(rangeHoverValue, item, type) &&
+ "inula-calendar-content-date-item-selected",
+ disabled && "inula-calendar-content-date-item-disabled",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ return (
+ onMouseEnter && onMouseEnter(type, item)}
+ onMouseLeave={() => onMouseLeave && onMouseLeave(item)}
+ >
+
onClick(e, type, item)}>
+ {item.day}
+ {item.day || item.week}
+ {`${item.month}月`}
+ {`Q${item.quarter}`}
+ {item.year}
+
+
+ );
+};
+
+export { DatePicker, RangePicker };
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/utils/calculateFunc.js b/packages/inula2-ui2/library_code/src/components/datepicker2/utils/calculateFunc.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2bb78af61fbe8f260414a4c903adb66e976bd87
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/utils/calculateFunc.js
@@ -0,0 +1,471 @@
+import { formatDateToObject } from "./formatFunc";
+//计算给定年月有多少天
+export function calculateDaysInYearMonth(year, month) {
+ return new Date(year, month, 0).getDate();
+}
+
+//计算当年当月的下一个区间
+export function calculateNextRange(year, month, type) {
+ switch (type) {
+ case "date":
+ case "week": {
+ const nextYear = month === 12 ? year + 1 : year;
+ const nextMonth = month === 12 ? 1 : month + 1;
+ return { nextYear, nextMonth };
+ }
+ case "month":
+ case "quarter": {
+ const nextYear = year + 1;
+ const nextMonth = month;
+ return { nextYear, nextMonth };
+ }
+ case "year": {
+ const nextYear = year + 10;
+ const nextMonth = month;
+ return { nextYear, nextMonth };
+ }
+ }
+}
+
+//计算给定年月的当月第一天是星期几
+export function calculateFirstWeekDayInYearMonth(year, month) {
+ return ((new Date(year, month - 1, 1).getDay() + 6) % 7) + 1;
+}
+
+//日期选择器,计算当前渲染年月的calendar渲染数组
+export function calculateRenderDateItems(year, month) {
+ const curMonthDays = calculateDaysInYearMonth(year, month);
+ const curStartWeek = calculateFirstWeekDayInYearMonth(year, month);
+ const preMonthDays = calculateDaysInYearMonth(
+ month === 1 ? year - 1 : year,
+ month === 1 ? 12 : month - 1
+ );
+ const preMonth = month === 1 ? 12 : month - 1;
+ const preYear = month === 1 ? year - 1 : year;
+ const nextMonth = month === 12 ? 1 : month + 1;
+ const nextYear = month === 12 ? year + 1 : year;
+ const items = [];
+ for (let i = curStartWeek - 1; i >= 1; i--) {
+ items.push({
+ year: preYear,
+ month: preMonth,
+ day: preMonthDays - i + 1,
+ isThisPage: false,
+ });
+ }
+
+ for (let i = 1; i <= curMonthDays; i++) {
+ items.push({
+ year: year,
+ month: month,
+ day: i,
+ isThisPage: true,
+ });
+ }
+
+ for (let i = 1; i <= 42 - (curStartWeek + curMonthDays) + 1; i++) {
+ items.push({
+ year: nextYear,
+ month: nextMonth,
+ day: i,
+ isThisPage: false,
+ });
+ }
+
+ return items;
+}
+
+//周选择器,计算当前的calendar渲染数组
+export function calculateRenderWeekItems(year, month) {
+ const curMonthDays = calculateDaysInYearMonth(year, month);
+ const curStartWeek = calculateFirstWeekDayInYearMonth(year, month);
+ const preMonthDays = calculateDaysInYearMonth(
+ month === 1 ? year - 1 : year,
+ month === 1 ? 12 : month - 1
+ );
+ const preMonth = month === 1 ? 12 : month - 1;
+ const preYear = month === 1 ? year - 1 : year;
+ const nextMonth = month === 12 ? 1 : month + 1;
+ const nextYear = month === 12 ? year + 1 : year;
+ const items = [];
+ let weekCount = calculateWeekOfYearForFirstDay(year, month);
+ let dayCount = 0;
+ for (let i = curStartWeek - 1; i >= 1; i--) {
+ if (dayCount % 7 === 0) {
+ items.push({
+ year: preYear,
+ month: preMonth,
+ week: weekCount,
+ day: null,
+ isThisPage: false,
+ });
+ weekCount++;
+ }
+ items.push({
+ year: preYear,
+ month: preMonth,
+ week: weekCount - 1,
+ day: preMonthDays - i + 1,
+ isThisPage: false,
+ });
+ dayCount++;
+ }
+
+ for (let i = 1; i <= curMonthDays; i++) {
+ if (dayCount % 7 === 0) {
+ items.push({
+ year: year,
+ month: month,
+ week: weekCount,
+ day: null,
+ isThisPage: false,
+ });
+ weekCount++;
+ }
+ items.push({
+ year: year,
+ month: month,
+ week: weekCount - 1,
+ day: i,
+ isThisPage: true,
+ });
+ dayCount++;
+ }
+
+ for (let i = 1; i <= 42 - (curStartWeek + curMonthDays) + 1; i++) {
+ if (dayCount % 7 === 0) {
+ items.push({
+ year: nextYear,
+ month: nextMonth,
+ week: weekCount,
+ day: null,
+ isThisPage: false,
+ });
+ weekCount++;
+ }
+ items.push({
+ year: nextYear,
+ month: nextMonth,
+ week: weekCount - 1,
+ day: i,
+ isThisPage: false,
+ });
+ dayCount++;
+ }
+
+ const ROW = 6,
+ COL = 8,
+ TOTAL = ROW * COL;
+ while (items.length < TOTAL) items.push({});
+
+ const matrix = [];
+ for (let r = 0; r < ROW; r++) {
+ matrix.push(items.slice(r * COL, (r + 1) * COL));
+ }
+ return matrix;
+}
+
+//年、季度、月选择器,计算当前calendar渲染数组
+export function calculateRenderYQMItems(type, year) {
+ const items = [];
+ switch (type) {
+ case "year": {
+ const curYearStart = Math.floor(year / 10) * 10;
+ items.push({ year: curYearStart - 1, isThisPage: false });
+ for (let i = curYearStart; i <= curYearStart + 9; i++) {
+ items.push({ year: i, isThisPage: true });
+ }
+ items.push({ year: curYearStart + 10, isThisPage: false });
+
+ return items;
+ }
+ case "month": {
+ for (let i = 1; i <= 12; i++) {
+ items.push({ month: i, isThisPage: true });
+ }
+ return items;
+ }
+ case "quarter": {
+ for (let i = 1; i <= 4; i++) {
+ items.push({ quarter: i, isThisPage: true });
+ }
+ return items;
+ }
+ }
+}
+
+//计算某年某月某日是某年第几周
+export function calculateCurWeek(year, month, day) {
+ const date = new Date(year, month - 1, day);
+
+ // 设置日期为当前日期的周四(ISO周计算中,周四决定属于哪一周)
+ const thursday = new Date(date);
+ thursday.setDate(date.getDate() + 4 - (date.getDay() || 7)); // 周日为0,转为7
+
+ const yearStart = new Date(thursday.getFullYear(), 0, 1);
+
+ const week = Math.ceil(((thursday - yearStart) / 86400000 + 1) / 7);
+
+ return week;
+}
+
+//根据年、月计算当月第一天是当年第几周
+export function calculateWeekOfYearForFirstDay(year, month) {
+ // 当月第一天
+ const firstDay = new Date(year, month - 1, 1);
+
+ // 复制一份,避免污染原日期
+ const target = new Date(firstDay);
+ const WEEK_START = 1;
+
+ const day = target.getDay();
+ const offset = (day + 7 - WEEK_START) % 7;
+ target.setDate(target.getDate() - offset);
+
+ // 当年 1 月 1 日
+ const yearStart = new Date(year, 0, 1);
+ const yearStartDay = yearStart.getDay();
+ const yearStartOffset = (yearStartDay + 7 - WEEK_START) % 7;
+
+ yearStart.setDate(yearStart.getDate() - yearStartOffset);
+
+ const delta = firstDay - yearStart; // 毫秒
+ const week = Math.floor(delta / (7 * 24 * 3600 * 1000)) + 1;
+
+ return week;
+}
+
+//计算当前状态的年月日
+export function getTodayDate() {
+ const date = new Date();
+ return {
+ year: date.getFullYear(),
+ month: date.getMonth() + 1,
+ day: date.getDate(),
+ };
+}
+
+//对比函数,targetDate > baseDate ? true : false
+export function compareDate(baseDate, targetDate, type) {
+ if (!baseDate || !targetDate) return false;
+ let baseDateObj;
+ let targetDateObj;
+ if (Object.prototype.toString.call(targetDate).slice(8, -1) === "String")
+ targetDateObj = formatDateToObject(targetDate, "", type);
+ else targetDateObj = targetDate;
+ if (Object.prototype.toString.call(baseDate).slice(8, -1) === "String")
+ baseDateObj = formatDateToObject(baseDate, "", type);
+ else baseDateObj = baseDate;
+
+ switch (type) {
+ case "date": {
+ if (targetDateObj.year > baseDateObj.year) {
+ return true;
+ } else if (
+ targetDateObj.year === baseDateObj.year &&
+ targetDateObj.month > baseDateObj.month
+ ) {
+ return true;
+ } else if (
+ targetDateObj.year === baseDateObj.year &&
+ targetDateObj.month === baseDateObj.month &&
+ targetDateObj.day >= baseDateObj.day
+ ) {
+ return true;
+ }
+ break;
+ }
+ case "week": {
+ if (targetDateObj.year > baseDateObj.year) {
+ return true;
+ } else if (
+ targetDateObj.year === baseDateObj.year &&
+ targetDateObj.week >= baseDateObj.week
+ ) {
+ return true;
+ }
+ break;
+ }
+ case "month": {
+ if (targetDateObj.year > baseDateObj.year) {
+ return true;
+ } else if (
+ targetDateObj.year === baseDateObj.year &&
+ targetDateObj.month >= baseDateObj.month
+ ) {
+ return true;
+ }
+ break;
+ }
+ case "quarter": {
+ if (targetDateObj.year > baseDateObj.year) {
+ return true;
+ } else if (
+ targetDateObj.year === baseDateObj.year &&
+ targetDateObj.quarter >= baseDateObj.quarter
+ ) {
+ return true;
+ }
+ break;
+ }
+ case "year": {
+ return targetDateObj.year >= baseDateObj.year;
+ }
+ }
+
+ return false;
+}
+
+export function isEqualedDate(stringBaseDate, objTargetDate, type) {
+ if (!stringBaseDate) return false;
+ const objBaseDate = formatDateToObject(stringBaseDate, "", type);
+ if (type === "week") console.log(111);
+ switch (type) {
+ case "date": {
+ return (
+ objBaseDate.year === objTargetDate.year &&
+ objBaseDate.month === objTargetDate.month &&
+ objBaseDate.day === objTargetDate.day
+ );
+ }
+ case "week": {
+ console.log(
+ stringBaseDate,
+ objTargetDate,
+ objBaseDate.year === objTargetDate.year &&
+ objBaseDate.week === objTargetDate.week
+ );
+ return (
+ objBaseDate.year === objTargetDate.year &&
+ objBaseDate.week === objTargetDate.week
+ );
+ }
+ case "month": {
+ return (
+ objBaseDate.year === objTargetDate.year &&
+ objBaseDate.month === objTargetDate.month
+ );
+ }
+ case "quarter": {
+ return (
+ objBaseDate.year === objTargetDate.year &&
+ objBaseDate.quarter === objTargetDate.quarter
+ );
+ }
+ case "year": {
+ return objBaseDate.year === objTargetDate.year;
+ }
+ }
+ return false;
+}
+
+const defaultString = (item, type) => {
+ switch (type) {
+ case "date":
+ return `${item.year}-${item.month}-${item.day}`;
+ case "week":
+ return `${item.year}-${item.week}周`;
+ case "month":
+ return `${item.year}-${item.month}`;
+ case "quarter":
+ return `${item.year}-Q${item.quarter}`;
+ case "year":
+ return `${item.year}`;
+ }
+};
+
+export function isSelected(
+ selectValue,
+ confirmValue,
+ startConfirmValue,
+ endConfirmValue,
+ defaultValue,
+ hoverValue,
+ focusState,
+ item,
+ type
+) {
+ if (type === "week" || item.isThisTitleRange) return false;
+
+ if (selectValue) {
+ return selectValue === defaultString(item, type);
+ } else {
+ if (confirmValue) {
+ return isEqualedDate(confirmValue, item, type);
+ }
+ if (startConfirmValue) {
+ if (focusState === "10" && hoverValue) return false;
+ return isEqualedDate(startConfirmValue, item, type);
+ }
+ if (endConfirmValue) {
+ if (focusState === "01" && hoverValue) return false;
+ return isEqualedDate(endConfirmValue, item, type);
+ }
+ if (defaultValue) {
+ return isEqualedDate(defaultValue, item, type);
+ }
+ }
+}
+
+// range样式计算函数
+export function isInRangeDate(
+ focusState,
+ rangeHoverValue,
+ startConfirmValue,
+ endConfirmValue,
+ startSelectValue,
+ endSelectValue,
+ item,
+ type
+) {
+ if (type === "week" || !item.isThisTitleRange) return false;
+ if (!rangeHoverValue) {
+ if (startSelectValue && endSelectValue) {
+ return (
+ (compareDate(startSelectValue, item, type) &&
+ compareDate(item, endSelectValue, type)) ||
+ (compareDate(endSelectValue, item, type) &&
+ compareDate(item, startSelectValue, type))
+ );
+ }
+ if (startSelectValue) {
+ return (
+ (compareDate(startSelectValue, item, type) &&
+ compareDate(item, endConfirmValue, type)) ||
+ (compareDate(endConfirmValue, item, type) &&
+ compareDate(item, startSelectValue, type))
+ );
+ } else if (endSelectValue) {
+ return (
+ (compareDate(startConfirmValue, item, type) &&
+ compareDate(item, endSelectValue, type)) ||
+ (compareDate(endSelectValue, item, type) &&
+ compareDate(item, startConfirmValue, type))
+ );
+ }
+ return (
+ compareDate(startConfirmValue, item, type) &&
+ compareDate(item, endConfirmValue, type)
+ );
+ } else {
+ if (focusState === "01") {
+ return (
+ (compareDate(rangeHoverValue, startConfirmValue, type) &&
+ compareDate(rangeHoverValue, item, type) &&
+ compareDate(item, startConfirmValue, type)) ||
+ (compareDate(startConfirmValue, rangeHoverValue, type) &&
+ compareDate(startConfirmValue, item, type) &&
+ compareDate(item, rangeHoverValue, type))
+ );
+ } else if (focusState === "10") {
+ return (
+ (compareDate(rangeHoverValue, endConfirmValue, type) &&
+ compareDate(rangeHoverValue, item, type) &&
+ compareDate(item, endConfirmValue, type)) ||
+ (compareDate(endConfirmValue, rangeHoverValue, type) &&
+ compareDate(endConfirmValue, item, type) &&
+ compareDate(item, rangeHoverValue, type))
+ );
+ }
+ }
+}
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/utils/formatFunc.js b/packages/inula2-ui2/library_code/src/components/datepicker2/utils/formatFunc.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/packages/inula2-ui2/library_code/src/components/datepicker2/utils/index.js b/packages/inula2-ui2/library_code/src/components/datepicker2/utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e472d2fac15f17757c8e01625034345cfaf4f4b8
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/datepicker2/utils/index.js
@@ -0,0 +1,43 @@
+import {
+ calculateDaysInYearMonth,
+ calculateFirstWeekDayInYearMonth,
+ calculateCurWeek,
+ calculateRenderDateItems,
+ calculateRenderYQMItems,
+ calculateRenderWeekItems,
+<<<<<<< HEAD
+=======
+ calculateDateWeek,
+ calculateNextRange,
+>>>>>>> 0cc3e56 (bug: 修复datepicker选择逻辑bug,初始化rangepicker)
+ getTodayDate,
+ compareDate,
+ isEqualedDate,
+ isInRangeDate,
+ isSelected,
+} from "./calculateFunc";
+
+export {
+ calculateDaysInYearMonth,
+ calculateFirstWeekDayInYearMonth,
+ calculateCurWeek,
+ calculateRenderDateItems,
+ calculateRenderYQMItems,
+ calculateRenderWeekItems,
+<<<<<<< HEAD
+ getTodayDate,
+=======
+ calculateDateWeek,
+ calculateNextRange,
+ getTodayDate,
+ formatDate,
+ compareDate,
+ isEqualedDate,
+ isInRangeDate,
+ isSelected,
+ formatDateToYYYYMM,
+ parseDefaultToFormat,
+ formatDateToObject,
+ formatDateToYearMonth,
+>>>>>>> 0cc3e56 (bug: 修复datepicker选择逻辑bug,初始化rangepicker)
+};
diff --git a/packages/inula2-ui2/library_code/src/components/form/demo.jsx b/packages/inula2-ui2/library_code/src/components/form/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..58f1a7364837baaf87c8999d50a03494e12949ed
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demo.jsx
@@ -0,0 +1,57 @@
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+import demo6 from './demos/demo6.jsx';
+import demo7 from './demos/demo7.jsx';
+
+function FormDemo() {
+ let loading = false;
+ return (
+
+
+
基本
+
基本的表单数据域控制展示,包含布局、初始化、验证、提交。
+
+
+
+
+
表单方法调用
+
展示表单的各种方法调用,包括校验、重置、设置值等。
+
+
+
+
+
+
+
+
表单禁用
+
展示表单的禁用功能,包括禁用状态切换、表单重置等。
+
+
+
+
+
表单变体
+
展示四种不同的表单变体:outlined(默认)、filled、borderless、underlined。
+
+
+
+ {/*
+
交互加载
+
演示点击按钮后进入加载中状态,1.5秒后恢复。
+
+
*/}
+
+
+
自定义必填标记
+
展示自定义必填标记的功能,包括默认、可选、隐藏、自定义。
+
+
+
+ );
+}
+export default FormDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/form/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/form/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..cafcd8e19cf5085e17e3aaacbe0b3daddf49c0c7
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demos/demo1.jsx
@@ -0,0 +1,80 @@
+import '../index.css';
+import Input from '../../input';
+import Button from '../../button';
+import { Form, FormItem, setValueByPath } from '../index';
+import { Checkbox } from '../../checkbox';
+
+const Demo1 = () => {
+ let layout = 'horizontal';
+ let user = {
+ username: '',
+ password: '',
+ remember: false,
+ };
+
+ const rules = {
+ username: [
+ { required: true, message: '请输入用户名' },
+ { min: 3, message: '至少 3 个字符' }
+ ],
+ password: [
+ { required: true, message: '请输入密码' },
+ { min: 6, message: '至少 6 位' }
+ ],
+ };
+
+ const handleFinish = (values) => {
+ console.log('提交成功:', values);
+ alert('提交成功: ' + JSON.stringify(values));
+ };
+
+ const handleFailed = ({ errors }) => {
+ console.log('提交失败:', errors);
+ // alert('提交失败: ' + JSON.stringify(errors));
+ };
+
+ return (
+
+
+
+ );
+};
+
+export default Demo1;
+
diff --git a/packages/inula2-ui2/library_code/src/components/form/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/form/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..508010ef84a5505c82ccdddfffcc930f8672eea9
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demos/demo2.jsx
@@ -0,0 +1,95 @@
+import '../index.css';
+import Input from '../../input';
+import Button from '../../button';
+import { Form, FormItem, setValueByPath } from '../index';
+
+
+const Demo = () => {
+ let layout = 'horizontal';
+ let user = {
+ username: '',
+ email: '',
+ phone: ''
+ };
+
+ const rules = {
+ username: [
+ { required: true, message: '请输入用户名' },
+ { min: 3, message: '至少 3 个字符' }
+ ],
+ email: [
+ { required: true, message: '请输入邮箱' },
+ { pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/, message: '邮箱格式不正确' }
+ ],
+ phone: [
+ { required: true, message: '请输入手机号' },
+ { pattern: /^1[3-9]\d{9}$/, message: '手机号格式不正确' }
+ ]
+ };
+
+ let formRef = null;
+
+ const handleFinish = (values) => {
+ console.log('提交成功:', values);
+ };
+
+ const handleFailed = ({ errors }) => {
+ console.log('提交失败:', errors);
+ };
+
+ const handleSetValues = () => {
+
+ // 尝试通过重新赋值整个对象来触发响应式更新
+ user.username = 'testuser';
+ user.email = 'test@example.com';
+ user.phone = '13800138000';
+
+ // 强制触发响应式更新
+ // user = { ...user };
+
+ console.log('SetValues - user:', user);
+ alert('表单值已设置');
+ };
+
+ return (
+
+ );
+};
+
+export default Demo;
diff --git a/packages/inula2-ui2/library_code/src/components/form/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/form/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..dc63c2efe53d19ee7f0e3198bf193762cb2b2c8b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demos/demo3.jsx
@@ -0,0 +1,72 @@
+import '../index.css';
+import Input from '../../input';
+import Button from '../../button';
+import { Form, FormItem, setValueByPath } from '../index';
+import Select from '../../select';
+
+const Demo3 = () => {
+ let layout = 'inline';
+ let searchForm = {
+ keyword: '',
+ category: ''
+ };
+
+ const categoryOptions = [
+ { label: '全部', value: 'all' },
+ { label: '技术', value: 'tech' },
+ { label: '设计', value: 'design' },
+ { label: '产品', value: 'product' }
+ ];
+
+ const handleSearch = (values) => {
+ console.log('搜索条件:', values);
+ };
+
+ const handleReset = () => {
+ searchForm.keyword = '';
+ searchForm.category = '';
+ };
+
+ return (
+
+ );
+};
+
+export default Demo3;
diff --git a/packages/inula2-ui2/library_code/src/components/form/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/form/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e73a9e8123d1d9fb9a20a4e06fb03f673d5c0c2c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demos/demo4.jsx
@@ -0,0 +1,126 @@
+import '../index.css';
+import Input from '../../input';
+import Button from '../../button';
+import { Form, FormItem, setValueByPath } from '../index';
+import Select from '../../select';
+import Radio from '../../radio';
+import Switch from '../../switch';
+
+const Demo4 = () => {
+ let isDisabled = false;
+ let formData = {
+ radio: '',
+ input: '',
+ select: '',
+ textarea: '',
+ switch: false
+ };
+
+ const selectOptions = [
+ { label: '选项1', value: 'option1' },
+ { label: '选项2', value: 'option2' },
+ { label: '选项3', value: 'option3' }
+ ];
+
+ const radioOptions = [
+ { label: 'Apple', value: 'apple' },
+ { label: 'Pear', value: 'pear' }
+ ];
+
+ const handleFinish = (values) => {
+ console.log('提交成功:', values);
+ alert('提交成功: ' + JSON.stringify(values));
+ };
+
+ const handleFailed = ({ errors }) => {
+ console.log('提交失败:', errors);
+ };
+
+ const toggleDisabled = () => {
+ isDisabled = !isDisabled;
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Demo4;
diff --git a/packages/inula2-ui2/library_code/src/components/form/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/form/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..335b215286bf2487b8a327f0c7ec50ecf5dcb43f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demos/demo5.jsx
@@ -0,0 +1,96 @@
+import { Form, FormItem, getValueByPath, setValueByPath } from "../index.jsx";
+import Input from "../../input/index.jsx";
+import Select from "../../select/index.jsx";
+import Button from "../../button/index.jsx";
+import { Checkbox } from "../../checkbox/index.jsx";
+import Radio from "../../radio/index.jsx";
+import Switch from "../../switch/index.jsx";
+
+function Demo5() {
+ let variant = 'outlined';
+ // 创建表单数据模型
+ let formData = {
+ username: '',
+ email: '',
+ country: '',
+ description: '',
+ agree: false,
+ gender: '',
+ notifications: false
+ };
+
+ const selectOptions = [
+ // { label: '中国', value: 'china' },
+ // { label: '美国', value: 'usa' },
+ // { label: '日本', value: 'japan' },
+ // { label: '韩国', value: 'korea' },
+ ];
+
+ const handleFinish = (values) => {
+ console.log('表单提交成功:', values);
+ alert('表单提交成功!请查看控制台输出。');
+ };
+
+ const handleFailed = (errors) => {
+ console.log('表单校验失败:', errors);
+ alert('表单校验失败,请检查输入!');
+ };
+
+ return (
+
+ );
+}
+
+export default Demo5;
diff --git a/packages/inula2-ui2/library_code/src/components/form/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/form/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..a260ec2bb415ee63238556f2052fed3ee4210911
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demos/demo6.jsx
@@ -0,0 +1,76 @@
+import '../index.css';
+import Input from '../../input';
+import Button from '../../button';
+import { Form, FormItem, setValueByPath } from '../index';
+import { Checkbox } from '../../checkbox';
+
+const Demo6 = () => {
+ let size = 'medium';
+ let user = {
+ username: '',
+ password: '',
+ remember: false,
+ };
+
+ const rules = {
+ username: [
+ { required: true, message: '请输入用户名' },
+ { min: 3, message: '至少 3 个字符' }
+ ],
+ password: [
+ { required: true, message: '请输入密码' },
+ { min: 6, message: '至少 6 位' }
+ ],
+ };
+
+ const handleFinish = (values) => {
+ console.log('提交成功:', values);
+ alert('提交成功: ' + JSON.stringify(values));
+ };
+
+ const handleFailed = ({ errors }) => {
+ console.log('提交失败:', errors);
+ // alert('提交失败: ' + JSON.stringify(errors));
+ };
+
+ return (
+
+ );
+};
+
+export default Demo6;
+
diff --git a/packages/inula2-ui2/library_code/src/components/form/demos/demo7.jsx b/packages/inula2-ui2/library_code/src/components/form/demos/demo7.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4073e8f34fdd64dc3ac416748ba010c3ae7c01b8
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/demos/demo7.jsx
@@ -0,0 +1,80 @@
+import '../index.css';
+import Input from '../../input/index.jsx';
+import Button from '../../button/index.jsx';
+import Tag from '../../tag';
+import { Form, FormItem, setValueByPath } from '../index.jsx';
+
+const Demo7 = () => {
+ let layout = 'vertical';
+ let requiredMark = 'default'; // default | optional | hidden | customize
+
+ let formModel = {
+ fieldA: '',
+ fieldB: ''
+ };
+
+ const rules = {
+ fieldA: [{ required: true, message: 'Field A 为必填项' }],
+ fieldB: []
+ };
+
+
+ const customizeRequiredMark = (label, { required }) => (
+ <>
+ {required ? Required : optional}
+ {label}
+ >
+ );
+
+ const onFinish = (values) => {
+ console.log('提交成功: ', values);
+ };
+
+ const onFailed = ({ errors }) => {
+ console.log('提交失败: ', errors);
+ };
+
+ return (
+
+ );
+};
+
+export default Demo7;
+
diff --git a/packages/inula2-ui2/library_code/src/components/form/index.css b/packages/inula2-ui2/library_code/src/components/form/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..171c64b6ceced7bb7997001ea285dd70889e7d4e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/index.css
@@ -0,0 +1,297 @@
+@import '../../colors.css';
+.inula-form {
+ width: 100%;
+}
+
+.inula-form-vertical .inula-form-item {
+ display: block;
+}
+
+.inula-form-horizontal .inula-form-item {
+ display: flex;
+}
+
+.inula-form-inline .inula-form-item {
+ display: inline-flex;
+ margin-right: 16px;
+ margin-bottom: 16px;
+ align-items: center;
+ vertical-align: middle;
+}
+
+.inula-form-inline .inula-form-item:last-child {
+ margin-right: 0;
+}
+
+.inula-form-inline .inula-form-item-label {
+ flex: 0 0 auto;
+ margin-right: 8px;
+ white-space: nowrap;
+ display: flex;
+ align-items: center;
+ line-height: 1;
+ height: 32px;
+}
+
+.inula-form-inline .inula-form-item-label label {
+ display: flex;
+ align-items: center;
+ height: 32px;
+ margin: 0;
+}
+
+.inula-form-inline .inula-form-item-control {
+ flex: 0 0 auto;
+ display: flex;
+ align-items: center;
+ height: 32px;
+}
+
+.inula-form-inline .inula-form-item-control-input {
+ min-width: 120px;
+ display: flex;
+ align-items: center;
+ height: 32px;
+}
+
+.inula-form-inline .inula-form-item-control-input > * {
+ height: 100%;
+ display: flex;
+ align-items: center;
+}
+
+.inula-form-label-left .inula-form-item-label {
+ text-align: left;
+}
+
+.inula-form-label-right .inula-form-item-label {
+ text-align: right;
+}
+
+.inula-form-item {
+ margin-bottom: 16px;
+}
+
+.inula-form-item-label {
+ flex: 0 0 120px;
+ line-height: 32px;
+ color: #333;
+ font-size: 14px;
+}
+
+.inula-form-item-required .inula-form-item-label label::before {
+ display: inline-block;
+ margin-right: 4px;
+ color: #ff4d4f;
+ content: '*';
+}
+
+/* Required Mark 样式 */
+.inula-form-item-required-asterisk {
+ color: #ff4d4f;
+ margin-right: 4px;
+ font-weight: normal;
+}
+
+.inula-form-item-required-text {
+ color: var(--inula-color-disabled-text);
+ font-size: 12px;
+ margin-left: 4px;
+ font-weight: normal;
+}
+
+.inula-form-item-optional {
+ color: #999;
+ font-size: 12px;
+ margin-left: 4px;
+ font-weight: normal;
+ display: inline-block;
+}
+
+.inula-form-item-required-custom {
+ background: #ff4d4f;
+ color: white;
+ padding: 2px 6px;
+ border-radius: 4px;
+ font-size: 12px;
+ margin-right: 4px;
+ font-weight: normal;
+ display: inline-block;
+}
+
+.inula-form-item-optional-custom {
+ background: #f0f0f0;
+ color: #666;
+ padding: 2px 6px;
+ border-radius: 4px;
+ font-size: 12px;
+ margin-right: 4px;
+ font-weight: normal;
+ display: inline-block;
+}
+
+/* Required Mark 模式样式 */
+.inula-form-required-mark-hidden .inula-form-item-required .inula-form-item-label label::before {
+ display: none;
+}
+
+.inula-form-required-mark-optional .inula-form-item-required .inula-form-item-label label::before {
+ display: none;
+}
+
+.inula-form-required-mark-customize .inula-form-item-required .inula-form-item-label label::before {
+ display: none;
+}
+
+.inula-form-item-control {
+ flex: 1;
+}
+
+.inula-form-item-control-input {
+ min-height: 32px;
+ display: flex;
+ align-items: center;
+}
+
+.inula-form-item-has-error .inula-form-item-control-input .inula-input,
+.inula-form-item-has-error .inula-form-item-control-input .inula-input-affix-wrapper {
+ border-color: #ff4d4f;
+}
+
+.inula-form-item-explain {
+ color: #ff4d4f;
+ font-size: 12px;
+ line-height: 1.6;
+ margin-top: 4px;
+ text-align: left;
+}
+
+.inula-form-item-extra {
+ color: #666;
+ font-size: 12px;
+ line-height: 1.6;
+ margin-top: 4px;
+}
+
+.inula-form-disabled {
+ /* 表单禁用状态,具体禁用效果由各个控件自己处理 */
+ opacity: 0.6;
+}
+
+/* Form 变体样式 */
+
+/* Filled 变体 - 参考 Ant Design 5.0 设计规范 */
+.inula-form-filled {
+ /* 提供给子组件读取的边框/背景变量 */
+ --inula-form-variant-bg: var(--inula-variant-filled-bg);
+ --inula-form-variant-hover-bg: var(--inula-variant-filled-hover-bg);
+ --inula-form-variant-focus-bg: var(--inula-variant-filled-focus-bg);
+ --inula-form-variant-border-color: transparent;
+ --inula-form-variant-focus-border-color: var(--inula-color-primary);
+}
+
+.inula-form-filled .inula-form-item-control-input .inula-input,
+.inula-form-filled .inula-form-item-control-input .inula-input-affix-wrapper,
+.inula-form-filled .inula-form-item-control-input .inula-select {
+ background: var(--inula-form-variant-bg);
+ border-color: var(--inula-form-variant-border-color);
+}
+
+.inula-form-filled .inula-form-item-control-input .inula-input:hover,
+.inula-form-filled .inula-form-item-control-input .inula-input-affix-wrapper:hover,
+.inula-form-filled .inula-form-item-control-input .inula-select:hover {
+ background: var(--inula-variant-filled-hover-bg);
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.inula-form-filled .inula-form-item-control-input .inula-input:focus-within,
+.inula-form-filled .inula-form-item-control-input .inula-input-affix-wrapper:focus-within,
+.inula-form-filled .inula-form-item-control-input .inula-select:focus-within {
+ background: var(--inula-form-variant-focus-bg);
+ border-color: var(--inula-form-variant-focus-border-color);
+}
+
+/* Borderless 变体 - 参考 Ant Design 5.0 设计规范 */
+.inula-form-borderless {
+ --inula-form-variant-bg: transparent;
+ --inula-form-variant-hover-bg: var(--inula-variant-borderless-hover-bg);
+ --inula-form-variant-focus-bg: var(--inula-variant-borderless-focus-bg);
+ --inula-form-variant-border-color: transparent;
+ --inula-form-variant-focus-border-color: transparent;
+}
+
+.inula-form-borderless .inula-form-item-control-input .inula-input,
+.inula-form-borderless .inula-form-item-control-input .inula-input-affix-wrapper,
+.inula-form-borderless .inula-form-item-control-input .inula-select {
+ border: none !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-bg);
+}
+
+.inula-form-borderless .inula-form-item-control-input .inula-input:hover,
+.inula-form-borderless .inula-form-item-control-input .inula-input-affix-wrapper:hover,
+.inula-form-borderless .inula-form-item-control-input .inula-select:hover {
+ border: none !important;
+ box-shadow: none !important;
+ background: var(--inula-variant-borderless-hover-bg);
+}
+
+.inula-form-borderless .inula-form-item-control-input .inula-input:focus-within,
+.inula-form-borderless .inula-form-item-control-input .inula-input-affix-wrapper:focus-within,
+.inula-form-borderless .inula-form-item-control-input .inula-select:focus-within {
+ border: none !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-focus-bg);
+}
+
+/* Underlined 变体 - 参考 Ant Design 5.0 设计规范 */
+.inula-form-underlined .inula-form-item-control-input .inula-input,
+.inula-form-underlined .inula-form-item-control-input .inula-input-affix-wrapper,
+.inula-form-underlined .inula-form-item-control-input .inula-select {
+ border: none !important;
+ border-bottom: 0.5px solid var(--inula-variant-underlined-border) !important;
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ background: transparent;
+}
+
+.inula-form-underlined .inula-form-item-control-input .inula-input:hover,
+.inula-form-underlined .inula-form-item-control-input .inula-input-affix-wrapper:hover,
+.inula-form-underlined .inula-form-item-control-input .inula-select:hover {
+ border: none !important;
+ border-bottom: 0.5px solid var(--inula-variant-underlined-hover-border) !important;
+ box-shadow: none !important;
+}
+
+.inula-form-underlined .inula-form-item-control-input .inula-input:focus-within,
+.inula-form-underlined .inula-form-item-control-input .inula-input-affix-wrapper:focus-within,
+.inula-form-underlined .inula-form-item-control-input .inula-select:focus-within {
+ border: none !important;
+ border-bottom: 0.5px solid var(--inula-variant-underlined-focus-border) !important;
+ box-shadow: none !important;
+}
+
+/* 额外覆盖:让 Select 在 Form 的 underlined 形态下仅显示底边框 */
+.inula-form-underlined .inula-select .inula-select-selection {
+ border: none !important;
+ border-bottom: 0.5px solid var(--inula-variant-underlined-border) !important;
+ background: transparent;
+ border-radius: 0 !important;
+ box-shadow: none !important;
+}
+.inula-form-underlined .inula-select .inula-select-selection:hover {
+ border: none !important;
+ border-bottom: 0.5px solid var(--inula-variant-underlined-hover-border) !important;
+ background: transparent;
+}
+.inula-form-underlined .inula-select .inula-select-selection:focus,
+.inula-form-underlined .inula-select .inula-select-selection:focus-within {
+ border: none !important;
+ border-bottom: 0.5px solid var(--inula-variant-underlined-focus-border) !important;
+ background: transparent;
+}
+
+/* 表单尺寸样式 */
+
+
diff --git a/packages/inula2-ui2/library_code/src/components/form/index.jsx b/packages/inula2-ui2/library_code/src/components/form/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e1792bd728d6d6dd04a3a6279a7f90b4fb7667cc
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/form/index.jsx
@@ -0,0 +1,428 @@
+import { watch, createContext, useContext } from '@openinula/next';
+import './index.css';
+
+/**
+ * Form 组件(openinula2.0)
+ * - 使用响应式变量作为表单状态(例如:let form = { username: '' })
+ * - 简易校验:required、min、max、pattern、validator(同步)
+ * - 布局:horizontal/vertical/inline
+ * - 支持通过props传递disabled状态
+ */
+
+// 按 openinula 文档创建 Context(作为 Provider/Consumer 使用)
+const FormContext = createContext({
+ model: {},
+ rules: {},
+ variant: 'outlined',
+ size: 'medium',
+ disabled: false,
+ requiredMark: 'default',
+ requiredMarkRender: null,
+});
+
+const getValueByPath = (obj, path) => {
+ if (!obj || !path) return undefined;
+ const segments = Array.isArray(path) ? path : String(path).split('.');
+ let cur = obj;
+ for (let i = 0; i < segments.length; i++) {
+ if (cur == null) return undefined;
+ cur = cur[segments[i]];
+ }
+ return cur;
+};
+
+const setValueByPath = (obj, path, value) => {
+ const segments = Array.isArray(path) ? path : String(path).split('.');
+ let cur = obj;
+ for (let i = 0; i < segments.length - 1; i++) {
+ const key = segments[i];
+ if (cur[key] == null || typeof cur[key] !== 'object') cur[key] = {};
+ cur = cur[key];
+ }
+ cur[segments[segments.length - 1]] = value;
+};
+
+// 每个表单模型对应的字段校验注册表(model -> Map)
+const fieldValidatorsRegistry = new WeakMap();
+// 每个表单模型对应的表单级规则(model -> rules 对象)
+const formRulesRegistry = new WeakMap();
+
+const runRules = (value, model, rules = []) => {
+ if (!Array.isArray(rules)) rules = [rules].filter(Boolean);
+ for (let i = 0; i < rules.length; i++) {
+ const rule = rules[i] || {};
+ if (rule.required) {
+ const empty = value === undefined || value === null || String(value).trim() === '';
+ if (empty) return rule.message || '该字段为必填项';
+ }
+ if (rule.min != null) {
+ if (typeof value === 'number') {
+ if (value < rule.min) return rule.message || `不能小于 ${rule.min}`;
+ } else if (String(value).length < rule.min) {
+ return rule.message || `最少 ${rule.min} 个字符`;
+ }
+ }
+ if (rule.max != null) {
+ if (typeof value === 'number') {
+ if (value > rule.max) return rule.message || `不能大于 ${rule.max}`;
+ } else if (String(value).length > rule.max) {
+ return rule.message || `最多 ${rule.max} 个字符`;
+ }
+ }
+ if (rule.pattern && rule.pattern instanceof RegExp) {
+ if (!rule.pattern.test(String(value || ''))) return rule.message || '格式不正确';
+ }
+ if (typeof rule.validator === 'function') {
+ const res = rule.validator(value, model);
+ if (res === false) return rule.message || '校验未通过';
+ if (typeof res === 'string') return res;
+ if (res && res.valid === false) return res.message || '校验未通过';
+ }
+ }
+ return '';
+};
+
+const Form = ({
+ model = {},
+ rules = {},
+ layout = 'horizontal', // horizontal | vertical | inline
+ labelAlign = 'right', // left | right
+ colon = true,
+ disabled = false,
+ variant = 'outlined', // outlined | filled | borderless | underlined
+ size = 'medium', // small | medium | large
+ requiredMark = 'default', // default | optional | hidden | customize
+ requiredMarkRender,
+ onFinish,
+ onFinishFailed,
+ className = '',
+ style = {},
+ children,
+ ref,
+ ...rest
+}) => {
+ let submitting = false;
+ let formRef = ref;
+ // 记录当前表单的表单级规则(兼容已有字段校验实现)
+ formRulesRegistry.set(model, rules || {});
+
+ // 表单方法
+ const validate = (fieldNames) => {
+ const errors = {};
+ const values = model;
+
+ const fieldsToValidate = fieldNames || Object.keys(rules || {});
+ for (let i = 0; i < fieldsToValidate.length; i++) {
+ const name = fieldsToValidate[i];
+ const fieldRules = rules[name];
+ if (fieldRules) {
+ const value = getValueByPath(model, name);
+ const msg = runRules(value, model, fieldRules);
+ if (msg) errors[name] = msg;
+ }
+ }
+
+ return {
+ valid: Object.keys(errors).length === 0,
+ errors,
+ values
+ };
+ };
+
+ const validateField = (fieldName) => {
+ const fieldRules = rules[fieldName];
+ if (!fieldRules) return { valid: true, error: '', value: getValueByPath(model, fieldName) };
+
+ const value = getValueByPath(model, fieldName);
+ const error = runRules(value, model, fieldRules);
+
+ return {
+ valid: !error,
+ error,
+ value
+ };
+ };
+
+ const resetFields = (fieldNames) => {
+ const fieldsToReset = fieldNames || Object.keys(model);
+ for (let i = 0; i < fieldsToReset.length; i++) {
+ const name = fieldsToReset[i];
+ setValueByPath(model, name, '');
+ }
+ };
+
+ const setFieldsValue = (values) => {
+ Object.keys(values).forEach(name => {
+ setValueByPath(model, name, values[name]);
+ });
+ };
+
+ const getFieldsValue = (fieldNames) => {
+ if (!fieldNames) return model;
+
+ const result = {};
+ fieldNames.forEach(name => {
+ result[name] = getValueByPath(model, name);
+ });
+ return result;
+ };
+
+ const clearValidate = (fieldNames) => {
+ // 清除校验状态,这里可以通过触发重新渲染来实现
+ // 在 openinula2.0 中,直接修改响应式变量即可
+ if (fieldNames) {
+ fieldNames.forEach(name => {
+ // 可以在这里添加清除校验状态的逻辑
+ });
+ }
+ };
+
+ const handleSubmit = (e) => {
+ e && e.preventDefault && e.preventDefault();
+ if (submitting) return;
+ submitting = true;
+
+ const result = validate();
+ if (result.valid) {
+ onFinish && onFinish(result.values);
+ } else {
+ onFinishFailed && onFinishFailed({ errors: result.errors, values: result.values });
+ }
+ // 提交后触发当前表单内各字段的校验以更新错误提示
+ try {
+ const registry = fieldValidatorsRegistry.get(model);
+ if (registry) {
+ registry.forEach((fn, fieldName) => {
+ const currentVal = getValueByPath(model, fieldName);
+ if (typeof fn === 'function') fn(currentVal);
+ });
+ }
+ } catch (err) { }
+ submitting = false;
+ };
+
+ const formClassNames = [
+ 'inula-form',
+ `inula-form-${layout}`,
+ `inula-form-label-${labelAlign}`,
+ `inula-form-${variant}`,
+ `inula-form-${size}`,
+ disabled ? 'inula-form-disabled' : '',
+ requiredMark ? `inula-form-required-mark-${requiredMark}` : '',
+ className,
+ ].filter(Boolean).join(' ');
+
+ // 暴露表单方法给 ref
+ if (formRef) {
+ formRef.current = {
+ validate,
+ validateField,
+ resetFields,
+ setFieldsValue,
+ getFieldsValue,
+ clearValidate,
+ submit: handleSubmit
+ };
+ }
+
+ return (
+
+
+
+ );
+};
+
+const FormItem = ({
+ name,
+ label,
+ required = false,
+ rules = [],
+ model,
+ validateOn = 'change', // change | blur | submit
+ help,
+ extra,
+ className = '',
+ style = {},
+ children,
+ colon = true,
+ disabled, // 从Form父组件传递,不设默认值
+ variant, // 从Form父组件传递,不设默认值
+ size, // 从Form父组件传递,不设默认值
+ requiredMark, // 从Form父组件传递,不设默认值
+ ...rest
+}) => {
+ let error = '';
+
+ // 确保 requiredMark 有默认值
+
+ const { model: ctxModel, rules: ctxRules, variant: ctxVariant, size: ctxSize, disabled: ctxDisabled, requiredMark: ctxRequiredMark, requiredMarkRender: ctxRequiredMarkRender } = useContext(FormContext);
+ const fieldValue = getValueByPath(ctxModel, name);
+
+ const triggerValidate = (val) => {
+ const formLevelRules = formRulesRegistry.get(ctxModel) || {};
+ const nameRules = formLevelRules ? formLevelRules[name] : undefined;
+ const mergedRules = [
+ required ? { required: true, message: '该字段为必填项' } : null,
+ ...(Array.isArray(rules) ? rules : [rules]),
+ ...(Array.isArray(nameRules) ? nameRules : (nameRules ? [nameRules] : []))
+ ].filter(Boolean);
+ error = runRules(val, model, mergedRules);
+ };
+
+ // 注册字段的提交时触发校验函数(按当前表单 model 作用域)
+ if (name && model) {
+ let registry = fieldValidatorsRegistry.get(model);
+ if (!registry) {
+ registry = new Map();
+ fieldValidatorsRegistry.set(model, registry);
+ }
+ registry.set(name, (val) => triggerValidate(val));
+ }
+
+ const onInputCapture = (e) => {
+ if (validateOn === 'change') {
+ const val = e && e.target ? e.target.value : getValueByPath(ctxModel, name);
+ triggerValidate(val);
+ }
+ };
+
+ const onBlurCapture = (e) => {
+ if (validateOn === 'blur') {
+ const val = e && e.target ? e.target.value : getValueByPath(ctxModel, name);
+ triggerValidate(val);
+ }
+ };
+
+ // 初始 required 态(不显示红字,但显示 * 标识)
+ const hasError = !!error;
+
+ // 根据requiredMark属性决定是否添加required类
+ const shouldShowRequiredMark = ctxRequiredMark !== 'hidden' && required;
+
+ const itemClassNames = [
+ 'inula-form-item',
+ `inula-form-item-${ctxSize === 'medium' ? 'default' : ctxSize}`,
+ hasError ? 'inula-form-item-has-error' : '',
+ shouldShowRequiredMark && (ctxRequiredMark || 'default') === 'default' ? 'inula-form-item-required' : '',
+ className,
+ ].filter(Boolean).join(' ');
+
+ // 计算标签内容(纯派生,无副作用)
+ const computedDefaultLabel = (() => {
+ if (ctxRequiredMark === 'default') return null;
+ if (ctxRequiredMark === 'optional' && !required) {
+ return (可选);
+ }
+ if (ctxRequiredMark === 'customize' && required) {
+ return (必填);
+ }
+ if (ctxRequiredMark === 'customize' && !required) {
+ return optional;
+ }
+ return null;
+ })();
+
+ const labelContent = ctxRequiredMarkRender
+ ? ctxRequiredMarkRender(computedDefaultLabel, { required, requiredMark: ctxRequiredMark })
+ : computedDefaultLabel;
+
+
+
+ return (
+
+ {label !== null ? (
+
+
+
+ ) : (
)}
+
+ {/*
+ {ctxVariant ? (
+ // 克隆子组件并传递variant和size属性
+ typeof children === 'function' ?
+ (() => {
+ const childrenResult = children();
+
+ return Array.isArray(childrenResult) ?
+ childrenResult.map((child, index) =>
+ child && typeof child === 'object' && child.type ?
+ { ...child, props: { ...child.props, variant: ctxVariant, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || child.props?.disabled, requiredMark: ctxRequiredMark } } :
+ child
+ ) :
+ childrenResult && typeof childrenResult === 'object' && childrenResult.type ?
+ { ...childrenResult, props: { ...childrenResult.props, variant: ctxVariant, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || childrenResult.props?.disabled, requiredMark: ctxRequiredMark } } :
+ childrenResult;
+ })() :
+ Array.isArray(children) ?
+ children.map((child, index) =>
+ child && typeof child === 'object' && child.type ?
+ { ...child, props: { ...child.props, variant: ctxVariant, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || child.props?.disabled, requiredMark: ctxRequiredMark } } :
+ child
+ ) :
+ children && typeof children === 'object' && children.type ?
+ { ...children, props: { ...children.props, variant: ctxVariant, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || children.props?.disabled, requiredMark: ctxRequiredMark } } :
+ children
+ ) : (
+ // 如果没有variant,传递size和disabled状态(来自上下文)
+ typeof children === 'function' ?
+ (() => {
+ const childrenResult = children();
+
+ { Array.isArray(childrenResult) }
+ return Array.isArray(childrenResult) ?
+ childrenResult.map((child, index) =>
+ child && typeof child === 'object' && child.type ?
+ { ...child, props: { ...child.props, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || child.props?.disabled, requiredMark: ctxRequiredMark } } :
+ child
+ ) :
+ childrenResult && typeof childrenResult === 'object' && childrenResult.type ?
+ { ...childrenResult, props: { ...childrenResult.props, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || childrenResult.props?.disabled, requiredMark: ctxRequiredMark } } :
+ childrenResult;
+ })() :
+ Array.isArray(children) ?
+ children.map((child, index) =>
+ child && typeof child === 'object' && child.type ?
+ { ...child, props: { ...child.props, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || child.props?.disabled, requiredMark: ctxRequiredMark } } :
+ child
+ ) :
+ children && typeof children === 'object' && children.type ?
+ { ...children, props: { ...children.props, size: (ctxSize === 'medium' ? 'default' : ctxSize), disabled: ctxDisabled || children.props?.disabled, requiredMark: ctxRequiredMark } } :
+ children
+ )}
+
*/}
+
+ {typeof children === 'function' ? children() : children}
+
+ {help ? (
+
{help}
+ ) : null}
+ {error ? (
+
{error}
+ ) : null}
+ {extra ? (
+
{extra}
+ ) : null}
+
+
+ );
+};
+
+export { Form, FormItem, getValueByPath, setValueByPath };
+export default Form;
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demo.jsx b/packages/inula2-ui2/library_code/src/components/icon/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..281ce7be4a1311c679a95105e5b7e620500c225a
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demo.jsx
@@ -0,0 +1,28 @@
+import Icon from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+
+function IconDemo() {
+ return (
+
+
+
基本Icon
+
支持实体、品牌图标,可改大小、颜色、旋转角度,支持旋转动画
+
+
+
+
+
+
+
Icon表
+
点击复制value和theme
+
+
+
+ );
+}
+
+export default IconDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/icon/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..cf6ea145adc774628589a1c7ac9a7a16821a02a7
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demos/demo1.jsx
@@ -0,0 +1,22 @@
+import Icon from "../index.jsx";
+
+function IconDemo() {
+ return (
+
+
+
+ user默认实体
+
+
+
+ user实体
+
+
+
+ user实体蓝色
+
+
+ );
+}
+
+export default IconDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/icon/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..67780356896b8210fa80e14e8a41ab7775f7ce60
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demos/demo2.jsx
@@ -0,0 +1,30 @@
+import Icon from "../index.jsx";
+
+function IconDemo() {
+ return (
+
+
+
+ 下箭头默认实体
+
+ {/*
+
+ 下箭头线条
+
*/}
+
+
+ 下箭头实体
+
+ {/*
+
+ 下箭头双色
+
*/}
+
+
+ 下箭头实体32px
+
+
+ );
+}
+
+export default IconDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/icon/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..01aa23a173633cf92d0f9159bb93489bb9ecec5b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demos/demo3.jsx
@@ -0,0 +1,30 @@
+import Icon from "../index.jsx";
+
+function IconDemo() {
+ return (
+
+
+
+ caret-left默认实体
+
+
+
+ caret-left实体
+
+
+
+ caret-left实体蓝色
+
+
+
+ caret-left实体天蓝色旋转45
+
+
+
+ caret-left实体天蓝色旋转
+
+
+ );
+}
+
+export default IconDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/icon/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..cddc63c0e147714722a1342a78ca4196949fe168
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demos/demo4.jsx
@@ -0,0 +1,30 @@
+import Icon from "../index.jsx";
+
+function IconDemo() {
+ return (
+
+
+
+ 苹果品牌图标
+
+
+
+ 苹果品牌图标32px
+
+
+
+ 苹果品牌图标绿色
+
+
+
+ 苹果品牌图标绿色旋转120度
+
+
+
+ 苹果品牌图标绿色旋转
+
+
+ );
+}
+
+export default IconDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/icon/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..89141d1e365a6149da6396eba20fcb7c2f21779b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demos/demo5.jsx
@@ -0,0 +1,51 @@
+import Icon from "../index.jsx";
+import { success, error } from "../../Notification/index.jsx";
+import "../index.css";
+import { filledIconValueList } from "./iconlist.ts";
+import Tag from "../../tag/index.jsx";
+
+const handleCopy = async (text) => {
+ try {
+ await navigator.clipboard.writeText(text);
+ success({ message: "Copy success!", placement: "top" });
+ } catch (err) {
+ error({ message: "Copy failed!", placement: "top" });
+ }
+};
+
+const IconItem = ({ value, theme }) => {
+ const text = ``;
+ return (
+ handleCopy(text)}>
+
+
+
+
{value}
+
+ );
+};
+
+const IconDemo = () => {
+ return (
+
+
+ 实体图标表
+
+
+
+ {filledIconValueList.map((value) => (
+
+ ))}
+
+
+
+ );
+};
+
+export default IconDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/icon/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..29694d1f5abf38a21eb1d30a8843c30eeae7d313
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demos/demo6.jsx
@@ -0,0 +1,43 @@
+import Icon from "../index.jsx";
+import { success, error } from "../../Notification/index.jsx";
+import "../index.css";
+import { brandIconValueList } from "./iconlist.ts";
+import Tag from "../../tag/index.jsx";
+
+const handleCopy = async (text) => {
+ try {
+ await navigator.clipboard.writeText(text);
+ success({ message: "Copy success!", placement: "top" });
+ } catch (err) {
+ error({ message: "Copy failed!", placement: "top" });
+ }
+};
+
+const IconItem = ({ value, theme }) => {
+ const text = ``;
+ return (
+ handleCopy(text)}>
+
+
+
+
{value}
+
+ );
+};
+
+const IconDemo = () => {
+ return (
+
+
+ 品牌图标表
+
+
+ {brandIconValueList.map((value) => (
+
+ ))}
+
+
+ );
+};
+
+export default IconDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/icon/demos/iconlist.ts b/packages/inula2-ui2/library_code/src/components/icon/demos/iconlist.ts
new file mode 100644
index 0000000000000000000000000000000000000000..550512166beb93258932bbf649495371483addf0
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/demos/iconlist.ts
@@ -0,0 +1,1852 @@
+const filledIconValueList = [
+ "house",
+ "circle-user",
+ "image",
+ "file",
+ "camera",
+ "calendar",
+ "cloud",
+ "truck",
+ "thumbs-up",
+ "face-smile",
+ "headphones",
+ "bell",
+ "user",
+ "comment",
+ "envelope",
+ "magnifying-glass",
+ "check",
+ "download",
+ "font-awesome",
+ "web-awesome",
+ "phone",
+ "bars",
+ "star",
+ "location-dot",
+ "music",
+ "wand-magic-sparkles",
+ "heart",
+ "arrow-right",
+ "circle-xmark",
+ "bomb",
+ "poo",
+ "camera-retro",
+ "x",
+ "xmark",
+ "caret-up",
+ "truck-fast",
+ "pen-nib",
+ "arrow-up",
+ "hippo",
+ "calendar-days",
+ "paperclip",
+ "shield-halved",
+ "cart-shopping",
+ "clipboard",
+ "filter",
+ "circle-info",
+ "arrow-up-from-bracket",
+ "bolt",
+ "car",
+ "ghost",
+ "mug-hot",
+ "pen",
+ "umbrella",
+ "gift",
+ "film",
+ "list",
+ "gear",
+ "trash",
+ "circle-up",
+ "circle-down",
+ "inbox",
+ "rotate-right",
+ "lock",
+ "barcode",
+ "tag",
+ "book",
+ "bookmark",
+ "print",
+ "a",
+ "font",
+ "video",
+ "circle-half-stroke",
+ "droplet",
+ "pen-to-square",
+ "share-from-square",
+ "plus",
+ "minus",
+ "share",
+ "circle-exclamation",
+ "fire",
+ "eye",
+ "eye-slash",
+ "plane",
+ "magnet",
+ "hand",
+ "folder",
+ "folder-open",
+ "money-bill",
+ "thumbs-down",
+ "comments",
+ "lemon",
+ "key",
+ "thumbtack",
+ "paper-plane",
+ "code",
+ "globe",
+ "city",
+ "ticket",
+ "tree",
+ "wifi",
+ "paint-roller",
+ "bicycle",
+ "sliders",
+ "brush",
+ "hashtag",
+ "flask",
+ "briefcase",
+ "compass",
+ "dumpster-fire",
+ "person",
+ "person-dress",
+ "address-book",
+ "bath",
+ "handshake",
+ "snowflake",
+ "right-to-bracket",
+ "earth-americas",
+ "cloud-arrow-up",
+ "binoculars",
+ "palette",
+ "layer-group",
+ "users",
+ "gamepad",
+ "business-time",
+ "feather",
+ "sun",
+ "link",
+ "pen-fancy",
+ "fish",
+ "bug",
+ "shop",
+ "mug-saucer",
+ "landmark",
+ "poo-storm",
+ "chart-simple",
+ "shirt",
+ "anchor",
+ "quote-left",
+ "bag-shopping",
+ "code-compare",
+ "user-secret",
+ "stethoscope",
+ "car-side",
+ "hand-holding-heart",
+ "truck-front",
+ "cable-car",
+ "mountain-sun",
+ "location-pin",
+ "info",
+ "user-minus",
+ "cart-plus",
+ "clock",
+ "circle",
+ "play",
+ "cross",
+ "backward",
+ "handshake-slash",
+ "chevron-up",
+ "passport",
+ "question",
+ "pencil",
+ "phone-volume",
+ "upload",
+ "strikethrough",
+ "credit-card",
+ "street-view",
+ "database",
+ "copy",
+ "mobile",
+ "square",
+ "sort",
+ "forward",
+ "hourglass-start",
+ "newspaper",
+ "notes-medical",
+ "table",
+ "building",
+ "stop",
+ "store",
+ "flag",
+ "file-excel",
+ "network-wired",
+ "cash-register",
+ "file-export",
+ "hand-point-up",
+ "angle-up",
+ "shield",
+ "address-card",
+ "expand",
+ "flag-checkered",
+ "quote-right",
+ "tags",
+ "server",
+ "user-nurse",
+ "video-slash",
+ "arrow-down",
+ "blog",
+ "school",
+ "file-invoice",
+ "rocket",
+ "spinner",
+ "tty",
+ "exclamation",
+ "water",
+ "registered",
+ "signature",
+ "laptop",
+ "restroom",
+ "power-off",
+ "sitemap",
+ "icons",
+ "desktop",
+ "moon",
+ "calendar-week",
+ "pause",
+ "file-word",
+ "vials",
+ "language",
+ "door-open",
+ "brain",
+ "hotel",
+ "marker",
+ "star-of-life",
+ "leaf",
+ "walkie-talkie",
+ "shower",
+ "caret-down",
+ "file-import",
+ "place-of-worship",
+ "wallet",
+ "slash",
+ "award",
+ "toggle-on",
+ "ship",
+ "chalkboard",
+ "hands",
+ "signal",
+ "motorcycle",
+ "arrow-up-right-from-square",
+ "audio-description",
+ "square",
+ "seedling",
+ "closed-captioning",
+ "train",
+ "arrow-left",
+ "wrench",
+ "microchip",
+ "record-vinyl",
+ "trophy",
+ "hammer",
+ "diamond",
+ "robot",
+ "file-pdf",
+ "hospital",
+ "file-contract",
+ "square-xmark",
+ "square-check",
+ "crown",
+ "user-plus",
+ "virus",
+ "child",
+ "repeat",
+ "cube",
+ "copyright",
+ "medal",
+ "bullseye",
+ "mask",
+ "circle-check",
+ "radio",
+ "reply",
+ "chair",
+ "route",
+ "plug",
+ "calculator",
+ "dragon",
+ "certificate",
+ "fingerprint",
+ "road",
+ "crosshairs",
+ "heading",
+ "percent",
+ "user-tie",
+ "square-minus",
+ "i-cursor",
+ "church",
+ "joint",
+ "comments-dollar",
+ "truck-monster",
+ "recycle",
+ "warehouse",
+ "ruler",
+ "soap",
+ "scroll",
+ "wind",
+ "coins",
+ "baby",
+ "voicemail",
+ "puzzle-piece",
+ "keyboard",
+ "clone",
+ "eraser",
+ "wine-bottle",
+ "dice",
+ "receipt",
+ "ring",
+ "unlock",
+ "solar-panel",
+ "ruler-vertical",
+ "circle-notch",
+ "people-arrows",
+ "dollar-sign",
+ "tablet",
+ "not-equal",
+ "glasses",
+ "headset",
+ "code-branch",
+ "gopuram",
+ "images",
+ "window-restore",
+ "industry",
+ "stamp",
+ "microphone-slash",
+ "cookie-bite",
+ "otter",
+ "chevron-down",
+ "kiwi-bird",
+ "viruses",
+ "umbrella-beach",
+ "subscript",
+ "tablets",
+ "microphone",
+ "border-none",
+ "dumbbell",
+ "plane-departure",
+ "yin-yang",
+ "yen-sign",
+ "xmarks-lines",
+ "x-ray",
+ "worm",
+ "won-sign",
+ "wine-glass-empty",
+ "wine-glass",
+ "window-minimize",
+ "window-maximize",
+ "whiskey-glass",
+ "wheelchair-move",
+ "wheelchair",
+ "wheat-awn-circle-exclamation",
+ "wheat-awn",
+ "weight-scale",
+ "weight-hanging",
+ "wave-square",
+ "water-ladder",
+ "wand-magic",
+ "vr-cardboard",
+ "wand-sparkles",
+ "volume-xmark",
+ "volume-off",
+ "volume-low",
+ "volume-high",
+ "volleyball",
+ "volcano",
+ "virus-slash",
+ "virus-covid-slash",
+ "virus-covid",
+ "vihara",
+ "vial-virus",
+ "vial-circle-check",
+ "vial",
+ "vest-patches",
+ "vest",
+ "venus-mars",
+ "venus-double",
+ "venus",
+ "vector-square",
+ "vault",
+ "van-shuttle",
+ "utensils",
+ "users-viewfinder",
+ "users-slash",
+ "users-rectangle",
+ "users-rays",
+ "users-line",
+ "users-gear",
+ "users-between-lines",
+ "user-xmark",
+ "user-tag",
+ "user-slash",
+ "user-shield",
+ "user-pen",
+ "user-ninja",
+ "user-lock",
+ "user-large-slash",
+ "user-large",
+ "user-injured",
+ "user-group",
+ "user-graduate",
+ "user-gear",
+ "user-doctor",
+ "user-clock",
+ "user-check",
+ "user-astronaut",
+ "up-right-from-square",
+ "up-right-and-down-left-from-center",
+ "up-long",
+ "up-down-left-right",
+ "up-down",
+ "unlock-keyhole",
+ "universal-access",
+ "underline",
+ "turn-up",
+ "turn-down",
+ "turkish-lira-sign",
+ "truck-ramp-box",
+ "truck-plane",
+ "truck-pickup",
+ "truck-moving",
+ "truck-medical",
+ "truck-field-un",
+ "truck-field",
+ "truck-droplet",
+ "truck-arrow-right",
+ "trowel-bricks",
+ "trowel",
+ "triangle-exclamation",
+ "tree-city",
+ "trash-can-arrow-up",
+ "trash-can",
+ "trash-arrow-up",
+ "transgender",
+ "train-tram",
+ "train-subway",
+ "trailer",
+ "traffic-light",
+ "tractor",
+ "tower-observation",
+ "tower-cell",
+ "tower-broadcast",
+ "tornado",
+ "torii-gate",
+ "tooth",
+ "toolbox",
+ "toilets-portable",
+ "toilet-portable",
+ "toilet-paper-slash",
+ "toilet-paper",
+ "toilet",
+ "toggle-off",
+ "timeline",
+ "ticket-simple",
+ "thumbtack-slash",
+ "thermometer",
+ "text-width",
+ "text-slash",
+ "text-height",
+ "terminal",
+ "tents",
+ "tent-arrows-down",
+ "tent-arrow-turn-left",
+ "tent-arrow-left-right",
+ "tent-arrow-down-to-line",
+ "tent",
+ "tenge-sign",
+ "temperature-three-quarters",
+ "temperature-quarter",
+ "temperature-low",
+ "temperature-high",
+ "temperature-half",
+ "temperature-full",
+ "temperature-empty",
+ "temperature-arrow-up",
+ "temperature-arrow-down",
+ "teeth-open",
+ "teeth",
+ "taxi",
+ "tarp-droplet",
+ "tarp",
+ "tape",
+ "tachograph-digital",
+ "tablet-screen-button",
+ "tablet-button",
+ "table-tennis-paddle-ball",
+ "table-list",
+ "table-columns",
+ "table-cells-row-unlock",
+ "table-cells-row-lock",
+ "table-cells-large",
+ "table-cells-column-lock",
+ "table-cells",
+ "syringe",
+ "synagogue",
+ "superscript",
+ "swatchbook",
+ "sun-plant-wilt",
+ "suitcase-rolling",
+ "suitcase-medical",
+ "suitcase",
+ "stroopwafel",
+ "store-slash",
+ "stopwatch-20",
+ "stopwatch",
+ "sterling-sign",
+ "star-of-david",
+ "star-half-stroke",
+ "star-half",
+ "star-and-crescent",
+ "stapler",
+ "stairs",
+ "staff-snake",
+ "square-virus",
+ "square-up-right",
+ "square-share-nodes",
+ "square-rss",
+ "square-root-variable",
+ "square-poll-vertical",
+ "square-poll-horizontal",
+ "square-plus",
+ "square-phone-flip",
+ "square-phone",
+ "square-person-confined",
+ "square-pen",
+ "square-parking",
+ "square-nfi",
+ "square-h",
+ "square-full",
+ "square-envelope",
+ "square-caret-up",
+ "square-binary",
+ "square-caret-down",
+ "square-caret-right",
+ "square-caret-left",
+ "square-arrow-up-right",
+ "spray-can-sparkles",
+ "spray-can",
+ "splotch",
+ "spider",
+ "spell-check",
+ "spaghetti-monster-flying",
+ "sort-up",
+ "sort-down",
+ "socks",
+ "snowplow",
+ "snowman",
+ "smoking",
+ "smog",
+ "sleigh",
+ "skull-crossbones",
+ "skull",
+ "sink",
+ "sim-card",
+ "signs-post",
+ "sign-hanging",
+ "shuttle-space",
+ "shuffle",
+ "shrimp",
+ "shop-slash",
+ "shop-lock",
+ "shoe-prints",
+ "shield-virus",
+ "shield-heart",
+ "shield-dog",
+ "shield-cat",
+ "shekel-sign",
+ "sheet-plastic",
+ "share-nodes",
+ "shapes",
+ "section",
+ "sd-card",
+ "scroll-torah",
+ "screwdriver-wrench",
+ "screwdriver",
+ "scissors",
+ "school-lock",
+ "school-flag",
+ "school-circle-exclamation",
+ "school-circle-xmark",
+ "school-circle-check",
+ "scale-unbalanced-flip",
+ "scale-unbalanced",
+ "scale-balanced",
+ "satellite-dish",
+ "satellite",
+ "sailboat",
+ "sack-xmark",
+ "sack-dollar",
+ "rupiah-sign",
+ "rupee-sign",
+ "ruler-horizontal",
+ "ruler-combined",
+ "ruble-sign",
+ "rug",
+ "rss",
+ "rotate-left",
+ "rotate",
+ "road-spikes",
+ "road-lock",
+ "road-circle-xmark",
+ "road-circle-exclamation",
+ "road-circle-check",
+ "road-bridge",
+ "road-barrier",
+ "right-long",
+ "right-left",
+ "right-from-bracket",
+ "ribbon",
+ "retweet",
+ "republican",
+ "reply-all",
+ "rectangle-xmark",
+ "rectangle-list",
+ "rectangle-ad",
+ "ranking-star",
+ "rainbow",
+ "radiation",
+ "qrcode",
+ "pump-medical",
+ "prescription-bottle-medical",
+ "prescription-bottle",
+ "prescription",
+ "podcast",
+ "plus-minus",
+ "plug-circle-xmark",
+ "plug-circle-plus",
+ "plug-circle-minus",
+ "plug-circle-exclamation",
+ "plug-circle-check",
+ "plug-circle-bolt",
+ "plate-wheat",
+ "plant-wilt",
+ "plane-up",
+ "plane-slash",
+ "plane-lock",
+ "plane-circle-xmark",
+ "plane-circle-exclamation",
+ "plane-circle-check",
+ "plane-arrival",
+ "pizza-slice",
+ "pills",
+ "piggy-bank",
+ "photo-film",
+ "phone-slash",
+ "phone-flip",
+ "peso-sign",
+ "peseta-sign",
+ "person-walking-with-cane",
+ "person-walking-luggage",
+ "person-walking-dashed-line-arrow-right",
+ "person-walking-arrow-right",
+ "person-walking-arrow-loop-left",
+ "person-walking",
+ "person-through-window",
+ "person-swimming",
+ "person-snowboarding",
+ "person-skiing-nordic",
+ "person-skiing",
+ "person-skating",
+ "person-shelter",
+ "person-running",
+ "person-rifle",
+ "person-rays",
+ "person-praying",
+ "person-military-to-person",
+ "person-pregnant",
+ "person-military-rifle",
+ "person-military-pointing",
+ "person-hiking",
+ "person-harassing",
+ "person-half-dress",
+ "person-falling-burst",
+ "person-falling",
+ "person-drowning",
+ "person-dress-burst",
+ "person-dots-from-line",
+ "person-digging",
+ "person-circle-xmark",
+ "person-circle-question",
+ "person-circle-exclamation",
+ "person-circle-plus",
+ "person-circle-minus",
+ "person-circle-check",
+ "person-chalkboard",
+ "person-cane",
+ "person-burst",
+ "person-breastfeeding",
+ "person-booth",
+ "person-biking",
+ "person-arrow-up-from-line",
+ "person-arrow-down-to-line",
+ "pepper-hot",
+ "people-roof",
+ "people-robbery",
+ "people-pulling",
+ "people-line",
+ "people-group",
+ "people-carry-box",
+ "pen-ruler",
+ "pen-clip",
+ "peace",
+ "paw",
+ "paste",
+ "parachute-box",
+ "pallet",
+ "paragraph",
+ "panorama",
+ "paintbrush",
+ "pager",
+ "outdent",
+ "oil-well",
+ "oil-can",
+ "object-ungroup",
+ "object-group",
+ "note-sticky",
+ "neuter",
+ "naira-sign",
+ "mountain-city",
+ "mountain",
+ "mound",
+ "mosquito-net",
+ "mosquito",
+ "mosque",
+ "mortar-pestle",
+ "monument",
+ "money-check-dollar",
+ "money-check",
+ "money-bills",
+ "money-bill-wheat",
+ "money-bill-wave",
+ "money-bill-trend-up",
+ "money-bill-transfer",
+ "money-bill-1-wave",
+ "money-bill-1",
+ "mobile-screen-button",
+ "mobile-screen",
+ "mobile-retro",
+ "mobile-button",
+ "mitten",
+ "minimize",
+ "mill-sign",
+ "microscope",
+ "microphone-lines-slash",
+ "microphone-lines",
+ "meteor",
+ "message",
+ "mercury",
+ "menorah",
+ "memory",
+ "maximize",
+ "mattress-pillow",
+ "masks-theater",
+ "mask-ventilator",
+ "mask-face",
+ "martini-glass-empty",
+ "martini-glass-citrus",
+ "martini-glass",
+ "mars-stroke-up",
+ "mars-stroke-right",
+ "mars-stroke",
+ "mars-double",
+ "mars-and-venus-burst",
+ "mars-and-venus",
+ "mars",
+ "map-pin",
+ "map-location-dot",
+ "map-location",
+ "map",
+ "manat-sign",
+ "magnifying-glass-plus",
+ "magnifying-glass-minus",
+ "magnifying-glass",
+ "magnifying-glass-dollar",
+ "magnifying-glass-chart",
+ "magnifying-glass-arrow-right",
+ "lungs-virus",
+ "lungs",
+ "locust",
+ "lock-open",
+ "location-pin-lock",
+ "location-crosshairs",
+ "location-arrow",
+ "litecoin-sign",
+ "list-ul",
+ "list-ol",
+ "list-check",
+ "lira-sign",
+ "link-slash",
+ "lines-leaning",
+ "life-ring",
+ "less-than-equal",
+ "less-than",
+ "left-right",
+ "left-long",
+ "lari-sign",
+ "laptop-medical",
+ "laptop-file",
+ "laptop-code",
+ "landmark-flag",
+ "landmark-dome",
+ "land-mine-on",
+ "kitchen-set",
+ "kit-medical",
+ "kip-sign",
+ "khanda",
+ "kaaba",
+ "jug-detergent",
+ "jet-fighter-up",
+ "jet-fighter",
+ "jedi",
+ "jar-wheat",
+ "jar",
+ "italic",
+ "infinity",
+ "indian-rupee-sign",
+ "indent",
+ "image-portrait",
+ "igloo",
+ "id-card-clip",
+ "id-card",
+ "id-badge",
+ "icicles",
+ "ice-cream",
+ "hurricane",
+ "hryvnia-sign",
+ "house-user",
+ "house-tsunami",
+ "house-signal",
+ "house-medical-flag",
+ "house-medical-circle-exclamation",
+ "house-medical-circle-xmark",
+ "house-medical-circle-check",
+ "house-medical",
+ "house-flood-water-circle-arrow-right",
+ "house-lock",
+ "house-laptop",
+ "house-flood-water",
+ "house-flag",
+ "house-fire",
+ "house-crack",
+ "house-circle-xmark",
+ "house-circle-exclamation",
+ "house-circle-check",
+ "house-chimney-window",
+ "house-chimney-user",
+ "house-chimney-medical",
+ "house-chimney-crack",
+ "house-chimney",
+ "hourglass-half",
+ "hourglass-end",
+ "hourglass",
+ "hotdog",
+ "hot-tub-person",
+ "hospital-user",
+ "horse-head",
+ "horse",
+ "holly-berry",
+ "hockey-puck",
+ "hill-rockslide",
+ "hill-avalanche",
+ "highlighter",
+ "hexagon-nodes-bolt",
+ "hexagon-nodes",
+ "helmet-un",
+ "helmet-safety",
+ "helicopter-symbol",
+ "helicopter",
+ "heart-pulse",
+ "heart-crack",
+ "heart-circle-xmark",
+ "heart-circle-plus",
+ "heart-circle-minus",
+ "heart-circle-exclamation",
+ "headphones-simple",
+ "heart-circle-check",
+ "heart-circle-bolt",
+ "head-side-virus",
+ "head-side-mask",
+ "head-side-cough-slash",
+ "head-side-cough",
+ "hat-wizard",
+ "hat-cowboy-side",
+ "hat-cowboy",
+ "hard-drive",
+ "hanukiah",
+ "handshake-simple-slash",
+ "handshake-simple",
+ "handshake-angle",
+ "hands-praying",
+ "hands-holding-circle",
+ "hands-holding-child",
+ "hands-holding",
+ "hands-clapping",
+ "hands-bubbles",
+ "hands-bound",
+ "hands-asl-interpreting",
+ "handcuffs",
+ "hand-spock",
+ "hand-sparkles",
+ "hand-scissors",
+ "hand-pointer",
+ "hand-point-right",
+ "hand-point-left",
+ "hand-point-down",
+ "hand-peace",
+ "hand-middle-finger",
+ "hand-lizard",
+ "hand-holding-medical",
+ "hand-holding-hand",
+ "hand-holding-droplet",
+ "hand-holding-dollar",
+ "hand-holding",
+ "hand-fist",
+ "hand-dots",
+ "hand-back-fist",
+ "hamsa",
+ "gun",
+ "guitar",
+ "guarani-sign",
+ "group-arrows-rotate",
+ "grip-vertical",
+ "grip-lines-vertical",
+ "grip-lines",
+ "grip",
+ "greater-than-equal",
+ "greater-than",
+ "graduation-cap",
+ "golf-ball-tee",
+ "glass-water-droplet",
+ "glass-water",
+ "gifts",
+ "genderless",
+ "gem",
+ "gavel",
+ "gauge-simple-high",
+ "gauge-simple",
+ "gauge-high",
+ "gas-pump",
+ "futbol",
+ "frog",
+ "franc-sign",
+ "forward-step",
+ "forward-fast",
+ "football",
+ "folder-tree",
+ "folder-plus",
+ "folder-minus",
+ "folder-closed",
+ "florin-sign",
+ "floppy-disk",
+ "flask-vial",
+ "flag-usa",
+ "fish-fins",
+ "fire-flame-simple",
+ "fire-flame-curved",
+ "fire-extinguisher",
+ "fire-burner",
+ "filter-circle-xmark",
+ "filter-circle-dollar",
+ "fill-drip",
+ "fill",
+ "file-zipper",
+ "file-waveform",
+ "file-video",
+ "file-signature",
+ "file-shield",
+ "file-prescription",
+ "file-powerpoint",
+ "file-pen",
+ "file-medical",
+ "file-lines",
+ "file-invoice-dollar",
+ "file-image",
+ "file-half-dashed",
+ "file-fragment",
+ "file-csv",
+ "file-code",
+ "file-circle-xmark",
+ "file-circle-question",
+ "file-circle-plus",
+ "file-circle-minus",
+ "file-circle-exclamation",
+ "file-circle-check",
+ "file-audio",
+ "file-arrow-up",
+ "file-arrow-down",
+ "ferry",
+ "feather-pointed",
+ "fax",
+ "faucet-drip",
+ "faucet",
+ "fan",
+ "face-tired",
+ "face-surprise",
+ "face-smile-wink",
+ "face-smile-beam",
+ "face-sad-tear",
+ "face-sad-cry",
+ "face-rolling-eyes",
+ "face-meh-blank",
+ "face-meh",
+ "face-laugh-wink",
+ "face-laugh-squint",
+ "face-laugh-beam",
+ "face-laugh",
+ "face-kiss-wink-heart",
+ "face-kiss-beam",
+ "face-kiss",
+ "face-grin-wink",
+ "face-grin-wide",
+ "face-grin-tongue-wink",
+ "face-grin-tongue-squint",
+ "face-grin-tongue",
+ "face-grin-tears",
+ "face-grin-stars",
+ "face-grin-squint-tears",
+ "face-grin-squint",
+ "face-grin-hearts",
+ "face-grin-beam-sweat",
+ "face-grin-beam",
+ "face-grin",
+ "face-grimace",
+ "face-frown-open",
+ "face-frown",
+ "face-flushed",
+ "face-dizzy",
+ "face-angry",
+ "eye-low-vision",
+ "eye-dropper",
+ "explosion",
+ "euro-sign",
+ "ethernet",
+ "equals",
+ "envelopes-bulk",
+ "envelope-open-text",
+ "envelope-open",
+ "envelope-circle-check",
+ "ellipsis-vertical",
+ "ellipsis",
+ "elevator",
+ "eject",
+ "egg",
+ "earth-oceania",
+ "earth-europe",
+ "earth-asia",
+ "earth-africa",
+ "ear-listen",
+ "ear-deaf",
+ "dungeon",
+ "drumstick-bite",
+ "drum",
+ "dumpster",
+ "drum-steelpan",
+ "droplet-slash",
+ "draw-polygon",
+ "down-long",
+ "down-left-and-up-right-to-center",
+ "dove",
+ "door-closed",
+ "dong-sign",
+ "dolly",
+ "dog",
+ "dna",
+ "divide",
+ "display",
+ "disease",
+ "dice-two",
+ "dice-three",
+ "dice-six",
+ "dice-one",
+ "dice-four",
+ "dice-five",
+ "dice-d6",
+ "dice-d20",
+ "diamond-turn-right",
+ "diagram-successor",
+ "diagram-project",
+ "diagram-predecessor",
+ "diagram-next",
+ "dharmachakra",
+ "democrat",
+ "delete-left",
+ "cubes-stacked",
+ "cubes",
+ "cruzeiro-sign",
+ "crutch",
+ "crow",
+ "crop-simple",
+ "crop",
+ "cow",
+ "couch",
+ "cookie",
+ "computer-mouse",
+ "computer",
+ "compress",
+ "compass-drafting",
+ "compact-disc",
+ "comment-sms",
+ "comment-slash",
+ "comment-nodes",
+ "comment-medical",
+ "comment-dots",
+ "comment-dollar",
+ "colon-sign",
+ "code-pull-request",
+ "code-merge",
+ "code-fork",
+ "code-commit",
+ "clover",
+ "cloud-sun-rain",
+ "cloud-sun",
+ "cloud-showers-water",
+ "cloud-showers-heavy",
+ "cloud-rain",
+ "cloud-moon-rain",
+ "cloud-moon",
+ "cloud-meatball",
+ "cloud-bolt",
+ "cloud-arrow-down",
+ "clock-rotate-left",
+ "clipboard-user",
+ "clipboard-question",
+ "clipboard-list",
+ "clipboard-check",
+ "clapperboard",
+ "circle-stop",
+ "circle-right",
+ "circle-radiation",
+ "circle-question",
+ "circle-plus",
+ "circle-play",
+ "circle-pause",
+ "circle-nodes",
+ "circle-minus",
+ "circle-left",
+ "circle-h",
+ "circle-dot",
+ "circle-dollar-to-slot",
+ "circle-chevron-up",
+ "circle-chevron-right",
+ "circle-chevron-left",
+ "circle-chevron-down",
+ "circle-arrow-up",
+ "circle-arrow-right",
+ "circle-arrow-left",
+ "circle-arrow-down",
+ "children",
+ "child-reaching",
+ "child-dress",
+ "child-combatant",
+ "chevron-right",
+ "chevron-left",
+ "chess-rook",
+ "chess-queen",
+ "chess-pawn",
+ "chess-knight",
+ "chess-king",
+ "chess-board",
+ "chess-bishop",
+ "chess",
+ "cheese",
+ "check-to-slot",
+ "check-double",
+ "chart-pie",
+ "chart-line",
+ "chart-gantt",
+ "chart-diagram",
+ "chart-column",
+ "chart-bar",
+ "chart-area",
+ "charging-station",
+ "champagne-glasses",
+ "chalkboard-user",
+ "cent-sign",
+ "cedi-sign",
+ "cat",
+ "cart-flatbed-suitcase",
+ "cart-flatbed",
+ "cart-arrow-down",
+ "carrot",
+ "caret-right",
+ "caret-left",
+ "caravan",
+ "car-tunnel",
+ "car-rear",
+ "car-on",
+ "car-burst",
+ "car-battery",
+ "capsules",
+ "cannabis",
+ "candy-cane",
+ "campground",
+ "camera-rotate",
+ "calendar-xmark",
+ "calendar-plus",
+ "calendar-minus",
+ "calendar-day",
+ "calendar-check",
+ "cake-candles",
+ "bus-simple",
+ "bus",
+ "burst",
+ "burger",
+ "bullhorn",
+ "building-wheat",
+ "building-user",
+ "building-un",
+ "building-shield",
+ "building-ngo",
+ "building-lock",
+ "building-flag",
+ "building-columns",
+ "building-circle-xmark",
+ "building-circle-exclamation",
+ "building-circle-check",
+ "building-circle-arrow-right",
+ "bugs",
+ "bug-slash",
+ "bucket",
+ "broom-ball",
+ "broom",
+ "briefcase-medical",
+ "bridge-water",
+ "bridge-lock",
+ "bridge-circle-xmark",
+ "bridge-circle-exclamation",
+ "bridge-circle-check",
+ "bridge",
+ "brazilian-real-sign",
+ "braille",
+ "bread-slice",
+ "boxes-stacked",
+ "boxes-packing",
+ "box-tissue",
+ "box-open",
+ "box-archive",
+ "box",
+ "bowling-ball",
+ "bowl-rice",
+ "bowl-food",
+ "bottle-water",
+ "bottle-droplet",
+ "bore-hole",
+ "border-top-left",
+ "border-all",
+ "book-tanakh",
+ "book-skull",
+ "book-quran",
+ "book-open-reader",
+ "book-open",
+ "book-medical",
+ "book-journal-whills",
+ "book-bookmark",
+ "book-bible",
+ "book-atlas",
+ "bong",
+ "bone",
+ "bolt-lightning",
+ "bold",
+ "blender-phone",
+ "blender",
+ "bitcoin-sign",
+ "biohazard",
+ "bezier-curve",
+ "bell-slash",
+ "bell-concierge",
+ "beer-mug-empty",
+ "bed-pulse",
+ "bed",
+ "battery-three-quarters",
+ "battery-quarter",
+ "battery-half",
+ "battery-full",
+ "battery-empty",
+ "basketball",
+ "basket-shopping",
+ "baseball-bat-ball",
+ "baseball",
+ "bars-staggered",
+ "bars-progress",
+ "bangladeshi-taka-sign",
+ "bandage",
+ "ban-smoking",
+ "ban",
+ "baht-sign",
+ "bahai",
+ "bacterium",
+ "bacteria",
+ "bacon",
+ "backward-step",
+ "backward-fast",
+ "baby-carriage",
+ "austral-sign",
+ "atom",
+ "asterisk",
+ "arrows-up-to-line",
+ "arrows-up-down-left-right",
+ "arrows-up-down",
+ "arrows-turn-to-dots",
+ "arrows-turn-right",
+ "arrows-to-eye",
+ "arrows-to-dot",
+ "arrows-to-circle",
+ "arrows-split-up-and-left",
+ "arrows-spin",
+ "arrows-rotate",
+ "arrows-left-right-to-line",
+ "arrows-left-right",
+ "arrows-down-to-people",
+ "arrows-down-to-line",
+ "arrow-up-z-a",
+ "arrow-up-wide-short",
+ "arrow-up-short-wide",
+ "arrow-up-right-dots",
+ "arrow-up-long",
+ "arrow-up-from-water-pump",
+ "arrow-up-from-ground-water",
+ "arrow-up-a-z",
+ "arrow-up-9-1",
+ "arrow-up-1-9",
+ "arrow-turn-up",
+ "arrow-turn-down",
+ "arrow-trend-up",
+ "arrow-trend-down",
+ "arrow-rotate-right",
+ "arrow-rotate-left",
+ "arrow-right-to-city",
+ "arrow-right-to-bracket",
+ "arrow-right-long",
+ "arrow-right-from-bracket",
+ "arrow-right-arrow-left",
+ "arrow-pointer",
+ "arrow-left-long",
+ "arrow-down-up-across-line",
+ "arrow-down-z-a",
+ "arrow-down-wide-short",
+ "arrow-down-up-lock",
+ "arrow-down-short-wide",
+ "arrow-down-long",
+ "arrow-down-a-z",
+ "arrow-down-9-1",
+ "arrow-down-1-9",
+ "archway",
+ "apple-whole",
+ "ankh",
+ "angles-up",
+ "angles-right",
+ "angles-left",
+ "angles-down",
+ "angle-right",
+ "angle-left",
+ "angle-down",
+ "anchor-lock",
+ "anchor-circle-xmark",
+ "anchor-circle-exclamation",
+ "anchor-circle-check",
+ "align-right",
+ "align-left",
+ "align-justify",
+ "align-center",
+ "a",
+ "9",
+ "8",
+ "7",
+ "6",
+ "5",
+ "4",
+ "3",
+ "2",
+ "1",
+ "0",
+];
+
+const brandIconValueList = [
+ "font-awesome",
+ "web-awesome",
+ "github",
+ "bluesky",
+ "facebook",
+ "linkedin",
+ "discord",
+ "slack",
+ "algolia",
+ "figma",
+ "youtube",
+ "apple",
+ "google",
+ "pied-piper-hat",
+ "kickstarter",
+ "docker",
+ "instagram",
+ "tiktok",
+ "wordpress",
+ "stripe",
+ "windows",
+ "paypal",
+ "stack-overflow",
+ "dribbble",
+ "dropbox",
+ "squarespace",
+ "android",
+ "shopify",
+ "medium",
+ "codepen",
+ "cloudflare",
+ "airbnb",
+ "vimeo",
+ "whatsapp",
+ "intercom",
+ "wix",
+ "line",
+ "behance",
+ "openid",
+ "product-hunt",
+ "internet-explorer",
+ "pagelines",
+ "teamspeak",
+ "html5",
+ "telegram",
+ "pinterest",
+ "dashcube",
+ "ideal",
+ "salesforce",
+ "readme",
+ "free-code-camp",
+ "soundcloud",
+ "square-twitter",
+ "accessible-icon",
+ "visa",
+ "cc-visa",
+ "goodreads-g",
+ "google-play",
+ "react",
+ "wikipedia-w",
+ "square-js",
+ "square-pinterest",
+ "python",
+ "skype",
+ "linux",
+ "node",
+ "rebel",
+ "etsy",
+ "discourse",
+ "amazon",
+ "glide-g",
+ "gitlab",
+ "spotify",
+ "think-peaks",
+ "microsoft",
+ "elementor",
+ "square-youtube",
+ "cc-mastercard",
+ "facebook-messenger",
+ "atlassian",
+ "playstation",
+ "fly",
+ "meetup",
+ "twitch",
+ "waze",
+ "zhihu",
+ "yoast",
+ "yelp",
+ "yarn",
+ "yandex-international",
+ "yandex",
+ "yammer",
+ "yahoo",
+ "y-combinator",
+ "xing",
+ "xbox",
+ "x-twitter",
+ "wpressr",
+ "wpforms",
+ "wpexplorer",
+ "wpbeginner",
+ "wordpress-simple",
+ "wolf-pack-battalion",
+ "wodu",
+ "wizards-of-the-coast",
+ "wirsindhandwerk",
+ "whmcs",
+ "weixin",
+ "weibo",
+ "weebly",
+ "webflow",
+ "watchman-monitoring",
+ "vuejs",
+ "vine",
+ "vimeo-v",
+ "viber",
+ "viadeo",
+ "viacoin",
+ "vaadin",
+ "ussunnah",
+ "usb",
+ "upwork",
+ "untappd",
+ "unsplash",
+ "unity",
+ "uniregistry",
+ "uncharted",
+ "umbraco",
+ "uikit",
+ "ubuntu",
+ "uber",
+ "typo3",
+ "twitter",
+ "tumblr",
+ "trello",
+ "trade-federation",
+ "threads",
+ "themeisle",
+ "themeco",
+ "the-red-yeti",
+ "tencent-weibo",
+ "symfony",
+ "swift",
+ "suse",
+ "supple",
+ "superpowers",
+ "stumbleupon-circle",
+ "stumbleupon",
+ "studiovinari",
+ "stubber",
+ "stripe-s",
+ "strava",
+ "sticker-mule",
+ "steam-symbol",
+ "steam",
+ "staylinked",
+ "stackpath",
+ "stack-exchange",
+ "square-xing",
+ "square-x-twitter",
+ "square-whatsapp",
+ "square-web-awesome-stroke",
+ "square-web-awesome",
+ "square-vimeo",
+ "square-viadeo",
+ "square-upwork",
+ "square-tumblr",
+ "square-threads",
+ "square-steam",
+ "square-snapchat",
+ "square-reddit",
+ "square-pied-piper",
+ "square-odnoklassniki",
+ "square-lastfm",
+ "square-letterboxd",
+ "square-instagram",
+ "square-hacker-news",
+ "square-google-plus",
+ "square-gitlab",
+ "square-github",
+ "git",
+ "square-git",
+ "square-font-awesome-stroke",
+ "square-font-awesome",
+ "square-facebook",
+ "square-dribbble",
+ "square-bluesky",
+ "square-behance",
+ "speaker-deck",
+ "speakap",
+ "space-awesome",
+ "sourcetree",
+ "snapchat",
+ "slideshare",
+ "skyatlas",
+ "sketch",
+ "sitrox",
+ "sith",
+ "sistrix",
+ "simplybuilt",
+ "signal-messenger",
+ "shopware",
+ "shoelace",
+ "shirtsinbulk",
+ "servicestack",
+ "sellsy",
+ "sellcast",
+ "searchengin",
+ "scribd",
+ "screenpal",
+ "schlix",
+ "safari",
+ "rust",
+ "rockrms",
+ "rocketchat",
+ "resolving",
+ "researchgate",
+ "replyd",
+ "renren",
+ "redhat",
+ "reddit-alien",
+ "reddit",
+ "red-river",
+ "reacteurope",
+ "ravelry",
+ "raspberry-pi",
+ "r-project",
+ "quinscape",
+ "quora",
+ "pushed",
+ "pixiv",
+ "pix",
+ "pinterest-p",
+ "pied-piper-pp",
+ "pied-piper-alt",
+ "pied-piper",
+ "php",
+ "phoenix-squadron",
+ "phoenix-framework",
+ "phabricator",
+ "periscope",
+ "perbyte",
+ "patreon",
+ "palfed",
+ "page4",
+ "padlet",
+ "osi",
+ "orcid",
+ "optin-monster",
+ "opera",
+ "opensuse",
+ "opencart",
+ "old-republic",
+ "odysee",
+ "odnoklassniki",
+ "octopus-deploy",
+ "nutritionix",
+ "ns8",
+ "npm",
+ "node-js",
+ "nimblr",
+ "nfc-directional",
+ "neos",
+ "napster",
+ "monero",
+ "modx",
+ "mizuni",
+ "mixer",
+ "mixcloud",
+ "mix",
+ "mintbit",
+ "microblog",
+ "meta",
+ "mendeley",
+ "megaport",
+ "medrt",
+ "medapps",
+ "mdb",
+ "maxcdn",
+ "mastodon",
+ "markdown",
+ "mandalorian",
+ "mailchimp",
+ "magento",
+ "lyft",
+ "linode",
+ "linkedin-in",
+ "letterboxd",
+ "less",
+ "leanpub",
+ "lastfm",
+ "laravel",
+ "korvue",
+ "kickstarter-k",
+ "keycdn",
+ "keybase",
+ "kaggle",
+ "jxl",
+ "jsfiddle",
+ "joomla",
+ "joget",
+ "jira",
+ "jenkins",
+ "jedi-order",
+ "itunes-note",
+ "itunes",
+ "itch-io",
+ "ioxhost",
+ "invision",
+ "instalod",
+ "imdb",
+ "hubspot",
+ "houzz",
+ "hotjar",
+ "hornbill",
+ "hooli",
+ "hive",
+ "hire-a-helper",
+ "hips",
+ "hashnode",
+ "hackerrank",
+ "hacker-news",
+ "gulp",
+ "guilded",
+ "grunt",
+ "gripfire",
+ "gratipay",
+ "google-wallet",
+ "google-scholar",
+ "google-plus-g",
+ "google-plus",
+ "google-pay",
+ "google-drive",
+ "goodreads",
+ "golang",
+ "glide",
+ "gofore",
+ "gitter",
+ "gitkraken",
+ "github-alt",
+ "git-alt",
+ "git",
+ "gg-circle",
+ "get-pocket",
+ "galactic-senate",
+ "galactic-republic",
+ "fulcrum",
+ "freebsd",
+ "foursquare",
+ "forumbee",
+ "font-awesome-alt",
+ "fort-awesome",
+ "fonticons-fi",
+ "fonticons",
+ "flutter",
+ "flipboard",
+ "flickr",
+ "firstdraft",
+ "first-order-alt",
+ "first-order",
+ "firefox-browser",
+ "firefox",
+ "files-pinwheel",
+ "fedora",
+ "fedex",
+ "fantasy-flight-games",
+ "facebook-f",
+ "expeditedssl",
+ "evernote",
+ "ethereum",
+ "erlang",
+ "envira",
+ "empire",
+ "ember",
+ "ello",
+ "edge-legacy",
+ "edge",
+ "ebay",
+ "earlybirds",
+ "dyalog",
+ "drupal",
+ "draft2digital",
+ "dochub",
+ "digital-ocean",
+ "digg",
+ "diaspora",
+ "dhl",
+ "deviantart",
+ "dev",
+ "deskpro",
+ "deploydog",
+ "delicious",
+ "deezer",
+ "debian",
+ "dart-lang",
+ "dailymotion",
+ "d-and-d-beyond",
+ "d-and-d",
+ "cuttlefish",
+ "css3-alt",
+ "critical-role",
+ "creative-commons-zero",
+ "creative-commons-share",
+ "creative-commons-sampling-plus",
+ "creative-commons-sampling",
+ "creative-commons-remix",
+ "creative-commons-pd",
+ "creative-commons-nd",
+ "creative-commons-nc-jp",
+ "creative-commons-nc-eu",
+ "creative-commons-nc",
+ "creative-commons-by",
+ "creative-commons",
+ "cpanel",
+ "cotton-bureau",
+ "contao",
+ "connectdevelop",
+ "confluence",
+ "codiepie",
+ "cloudversify",
+ "cloudsmith",
+ "cloudscale",
+ "chromecast",
+ "chrome",
+ "centos",
+ "centercode",
+ "cc-stripe",
+ "cc-paypal",
+ "cc-jcb",
+ "cc-discover",
+ "cc-diners-club",
+ "cc-apple-pay",
+ "cc-amex",
+ "cc-amazon-pay",
+ "canadian-maple-leaf",
+ "buysellads",
+ "buy-n-large",
+ "buromobelexperte",
+ "buffer",
+ "btc",
+ "brave-reverse",
+ "brave",
+ "bootstrap",
+ "bluetooth",
+ "blogger",
+ "blackberry",
+ "black-tie",
+ "bity",
+ "bitcoin",
+ "bitbucket",
+ "bimobject",
+ "bilibili",
+ "battle-net",
+ "bandcamp",
+ "aws",
+ "aviato",
+ "avianex",
+ "autoprefixer",
+ "audible",
+ "asymmetrik",
+ "artstation",
+ "apple-pay",
+ "apper",
+ "app-store-ios",
+ "app-store",
+ "angular",
+ "angrycreative",
+ "angellist",
+ "amilia",
+ "amazon-pay",
+ "alipay",
+ "affiliatetheme",
+ "adversal",
+ "adn",
+ "accusoft",
+ "500px",
+ "42-group",
+];
+
+export { filledIconValueList, brandIconValueList };
diff --git a/packages/inula2-ui2/library_code/src/components/icon/index.css b/packages/inula2-ui2/library_code/src/components/icon/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..5377313110c0ff1055e23c70f143cbe12440a7cc
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/index.css
@@ -0,0 +1,54 @@
+.inula-icon {
+ font-size: 24px;
+ color: var(--inula-icon-default);
+}
+
+@keyframes icon-spin {
+ from { transform: rotate(0deg); }
+ to { transform: rotate(360deg); }
+}
+
+.inula-icon-spin {
+ animation: icon-spin 1.5s linear infinite;
+ transform-origin: center center;
+}
+
+/* Icon表样式 */
+.inula-icon-table {
+ /* width: 80%; */
+ /* height: 600px; */
+ overflow-y: scroll;
+ /* border: 1px solid #f0f0f0; */
+ /* background-color: #fAf8f9; */
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: flex-start;
+ padding: 20px;
+ gap:20px;
+}
+
+.inula-icon-item {
+ display: flex;
+ flex-direction: column;
+ background-color: #fff;
+ border-radius: 1px solid #f0f0f0;
+ height: 90px;
+ width: 10%;
+ padding: 20px;
+ justify-content: flex-start;
+ gap: 20px;
+ border-radius: 8px;
+}
+
+.inula-icon-item:hover {
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+ transform: scale(1.01);
+ transition: all 0.3s ease-in-out;
+ cursor: pointer;
+}
+
+.inula-icon-item-text {
+ font-size: 16px;
+ font-family: "宋体";
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/icon/index.jsx b/packages/inula2-ui2/library_code/src/components/icon/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1e592a5c869e1ca775fd79ed6c2ffbf7bdf343c8
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/icon/index.jsx
@@ -0,0 +1,65 @@
+import "./index.css";
+
+const Icon = ({
+ value,
+ // theme = "outline", // outline, filled, twoTone
+ theme = "filled", // filled, brand
+ size, //number
+ color, //string
+ rotate, //number
+ spin = false,
+ style,
+ onClick,
+ ...rest
+}) => {
+ // const iconTheme = (theme) => {
+ // switch (theme) {
+ // case "filled":
+ // return "fas";
+ // case "twoTone":
+ // return "fad";
+ // default:
+ // return "fal";
+ // }
+ // };
+ const iconTheme = (theme) => {
+ switch (theme) {
+ case "filled":
+ return "fas";
+ case "brand":
+ return "fab";
+ default:
+ alert(`Invalid theme: ${theme}`);
+ return "";
+ }
+ };
+
+ const classNames = [
+ "inula-icon",
+ iconTheme(theme),
+ value ? `fa-${value}` : "",
+ spin ? "inula-icon-spin" : "" // 新增动画类
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const styles = {
+ ...style,
+ ...(rotate && { transform: `rotate(${rotate}deg)` }),
+ fontSize: `${size}px`,
+ color: `${color}`,
+ }
+
+ // console.log("Icon props:", rest);
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demo.jsx b/packages/inula2-ui2/library_code/src/components/input/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ae84b9ff3a2a88a498a00b9383bd95428d98d43b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demo.jsx
@@ -0,0 +1,70 @@
+// import Button from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+import demo6 from './demos/demo6.jsx';
+import demo7 from './demos/demo7.jsx';
+import demo8 from './demos/demo8.jsx';
+import demo9 from './demos/demo9.jsx';
+
+function InputDemo() {
+ return (
+
+
+
+
+
+
Textarea 自动调整高度
+
演示 textarea 的自动调整高度功能。
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+export default InputDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7089dc2bbab16741596c7d26d612789912deacf7
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo1.jsx
@@ -0,0 +1,32 @@
+import Input from "../index.jsx";
+import Tag from "../../tag/index.jsx"
+
+function Demo1() {
+ let value = "";
+
+ function handleInput(e) {
+ value = e.target.value;
+ }
+ return (
+
+ );
+}
+
+export default Demo1;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e29a5dae6511dc003b82c44bff2e1ab1790506a3
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo2.jsx
@@ -0,0 +1,43 @@
+import Input from "../index.jsx";
+import Tag from "../../tag/index.jsx"
+
+function Demo2() {
+
+ return (
+
+ );
+
+}
+
+export default Demo2;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..86e75a57e981150c20c7c69b1636ad0f47be836f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo3.jsx
@@ -0,0 +1,55 @@
+import Input from "../index.jsx";
+import Tag from "../../tag/index.jsx"
+
+function Demo3() {
+
+ return (
+
+ );
+
+}
+
+export default Demo3;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7b207c7b038f59b8dcc861793c5e16bbc2e2091f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo4.jsx
@@ -0,0 +1,13 @@
+import Input from "../index.jsx";
+
+function Demo4() {
+
+ return (
+
+
+
+ )
+
+}
+
+export default Demo4;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6b9d2b2b4dd7a5622341015c2e4c551d7abe376e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo5.jsx
@@ -0,0 +1,36 @@
+import Input from "../index.jsx";
+
+function Demo5() {
+ let value = "这是一个输入框";
+
+ function handleInput(e) {
+ value = e.target.value;
+ }
+
+ return (
+
+
+
+
+
+ );
+}
+
+export default Demo5;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7e2e305d5a189893b0ba20e8ef97226d091a2547
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo6.jsx
@@ -0,0 +1,27 @@
+import Input from "../index.jsx";
+
+function Demo6() {
+ let value = "";
+
+ function handleInput(e) {
+ value = e.target.value;
+ }
+
+ return (
+
+
+
+
+ );
+}
+
+export default Demo6;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo7.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo7.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..18fe793b278007a03519e7700e51495022c93dba
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo7.jsx
@@ -0,0 +1,36 @@
+import Input from '../index.jsx';
+import Tag from "../../tag/index.jsx"
+
+const Demo7 = () => {
+ return (
+
+ );
+};
+
+export default Demo7;
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo8.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo8.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e6da62d0c0b2675d50759412d21729a8bfbc6d7c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo8.jsx
@@ -0,0 +1,35 @@
+
+import Input from '../index.jsx';
+
+const Demo8 = () => {
+
+ let value = "";
+
+ function handleInput(e) {
+ console.log("handleInput111", e.target.value);
+ value = e.target.value;
+ }
+ return (
+
+
+
+
+
+ );
+}
+
+export default Demo8;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/input/demos/demo9.jsx b/packages/inula2-ui2/library_code/src/components/input/demos/demo9.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..953f0f5a533162019ed08d721b3b6ea22777756e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/demos/demo9.jsx
@@ -0,0 +1,14 @@
+import Input from '../index.jsx';
+
+let password = '';
+
+function handlePasswordInput(e) {
+ password = e.target.value;
+}
+
+
+const Demo9 = () => {
+ return
+}
+
+export default Demo9;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/input/index.css b/packages/inula2-ui2/library_code/src/components/input/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..fbccf1c9403fd8d8040c61b22f8d0f75d4f34a4b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/index.css
@@ -0,0 +1,651 @@
+@import '../../colors.css';
+
+/* 输入框外层包装器 */
+.inula-input-affix-wrapper {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ width: 100%;
+ color: var(--inula-color-primary-text);
+ background: var(--inula-color-default-bg);
+ border: 1px solid var(--inula-color-default-border);
+ border-radius: 4px;
+ outline: none;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ box-sizing: border-box;
+ /* overflow: hidden; */
+}
+
+.inula-input-affix-wrapper:hover {
+ border-color: var(--inula-color-primary-hover);
+ box-shadow: 0 2px 8px rgba(22, 119, 255, 0.1);
+}
+
+.inula-input-affix-wrapper:focus-within {
+ border-color: var(--inula-color-primary);
+ box-shadow: 0 0 0 3px rgba(22, 119, 255, 0.1);
+}
+
+/* 输入框本体 */
+.inula-input {
+ flex: 1 1 auto;
+ /* 关键:允许在有清除/统计/后缀时可收缩,避免把右侧元素挤没 */
+ min-width: 0;
+ /* 不强制占满 100%,交给 flex 分配剩余空间 */
+ width: auto;
+ font-size: 14px;
+ line-height: 1.5;
+ background: transparent;
+ border: none;
+ outline: none;
+ height: 40px;
+ padding: 0 16px;
+ color: var(--inula-color-primary-text);
+ transition: all 0.3s ease;
+ border-radius: 4px;
+}
+
+.inula-input::placeholder {
+ color: #999;
+ font-size: 14px;
+}
+
+/* 尺寸变体 */
+.inula-input-large {
+ height: 40px;
+ font-size: 16px;
+ padding: 0 20px;
+}
+
+.inula-input-large::placeholder {
+ font-size: 16px;
+}
+
+.inula-input-default,
+.inula-input-medium {
+ height: 32px;
+ font-size: 14px;
+ padding: 0 16px;
+}
+
+.inula-input-small {
+ height: 24px;
+ font-size: 13px;
+ padding: 0 12px;
+}
+
+.inula-input-small::placeholder {
+ font-size: 13px;
+}
+
+/* 形态变体 - 支持Form传递的CSS变量 */
+.inula-input-outlined {
+ background: var(--inula-color-default-bg);
+}
+
+.inula-input-filled {
+ background: var(--inula-form-variant-bg, var(--inula-variant-filled-bg));
+ border: 1px solid var(--inula-form-variant-border, transparent);
+ box-shadow: none !important;
+}
+
+/* 让 textarea 与 input 的 filled 形态一致:把样式下沉到外层包装器 */
+.inula-input-affix-wrapper:has(.inula-input-filled) {
+ background: var(--inula-form-variant-bg, var(--inula-variant-filled-bg));
+ border-color: var(--inula-form-variant-border, transparent);
+ box-shadow: none !important;
+}
+
+/* borderless 形态的特殊处理 */
+.inula-input-affix-wrapper-borderless {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-bg, transparent);
+}
+
+.inula-input-affix-wrapper-borderless:hover {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-hover-bg, var(--inula-variant-borderless-hover-bg));
+}
+
+.inula-input-affix-wrapper-borderless:focus-within {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-focus-bg, var(--inula-variant-borderless-focus-bg));
+}
+
+/* borderless 形态禁用状态 */
+.inula-input-affix-wrapper-borderless.inula-input-disabled:hover,
+.inula-input-affix-wrapper-borderless:has(.inula-input:disabled):hover {
+ border: none !important;
+ box-shadow: none !important;
+ background: var(--inula-color-disabled-bg);
+ border-radius: 4px;
+}
+
+.inula-input-affix-wrapper-borderless.inula-input-disabled:focus-within,
+.inula-input-affix-wrapper-borderless:has(.inula-input:disabled):focus-within {
+ border: none !important;
+ box-shadow: none !important;
+ background: var(--inula-color-disabled-bg);
+ border-radius: 4px;
+}
+
+.inula-input-filled:hover {
+ background: var(--inula-variant-filled-hover-bg);
+ box-shadow: none !important;
+}
+.inula-input-affix-wrapper:has(.inula-input-filled):hover {
+ background: var(--inula-variant-filled-hover-bg);
+ box-shadow: none !important;
+}
+
+.inula-input-filled:focus-within {
+ background: var(--inula-variant-filled-focus-bg);
+ border: 1px solid var(--inula-color-primary);
+ box-shadow: 0 0 0 3px rgba(22, 119, 255, 0.1);
+}
+.inula-input-affix-wrapper:has(.inula-input-filled):focus-within {
+ background: var(--inula-variant-filled-focus-bg);
+ box-shadow: 0 0 0 3px rgba(22, 119, 255, 0.1);
+}
+
+/* filled 形态禁用状态 */
+.inula-input-affix-wrapper.inula-input-disabled .inula-input-filled:hover,
+.inula-input-affix-wrapper:has(.inula-input:disabled) .inula-input-filled:hover {
+ background: var(--inula-color-disabled-bg);
+}
+
+.inula-input-affix-wrapper.inula-input-disabled .inula-input-filled:focus-within,
+.inula-input-affix-wrapper:has(.inula-input:disabled) .inula-input-filled:focus-within {
+ background: var(--inula-color-disabled-bg);
+}
+
+.inula-input-borderless {
+ background: transparent;
+ border: none;
+ box-shadow: none;
+}
+
+.inula-input-borderless:hover {
+ background: transparent;
+ border: none;
+ box-shadow: none;
+}
+
+.inula-input-borderless:focus-within {
+ background: transparent;
+ border: none;
+ box-shadow: none;
+}
+
+/* borderless 形态禁用状态 */
+.inula-input-affix-wrapper.inula-input-disabled .inula-input-borderless:hover,
+.inula-input-affix-wrapper:has(.inula-input:disabled) .inula-input-borderless:hover {
+ background: transparent;
+ border: none;
+ box-shadow: none;
+}
+
+.inula-input-affix-wrapper.inula-input-disabled .inula-input-borderless:focus-within,
+.inula-input-affix-wrapper:has(.inula-input:disabled) .inula-input-borderless:focus-within {
+ background: transparent;
+ border: none;
+ box-shadow: none;
+}
+
+/* .inula-input-underlined {
+ background: transparent;
+ border: none;
+ border-radius: 0;
+} */
+
+.inula-input-underlined:hover {
+ border-bottom-color: var(--inula-color-primary-hover);
+}
+
+.inula-input-underlined:focus-within {
+ border-bottom-color: var(--inula-color-primary);
+ box-shadow: none;
+}
+
+/* underlined 形态的特殊处理 - 支持Form传递的CSS变量 */
+.inula-input-affix-wrapper-underlined {
+ border: var(--inula-form-variant-border, none) !important;
+ border-bottom: var(--inula-form-variant-bottom-border, 1px solid var(--inula-variant-underlined-border)) !important;
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-bg, transparent);
+}
+
+.inula-input-affix-wrapper-underlined:hover {
+ border: var(--inula-form-variant-border, none) !important;
+ border-bottom: var(--inula-form-variant-bottom-hover-border, 1px solid var(--inula-variant-underlined-hover-border)) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-hover-bg, transparent);
+}
+
+.inula-input-affix-wrapper-underlined:focus-within {
+ border: var(--inula-form-variant-border, none) !important;
+ border-bottom: var(--inula-form-variant-bottom-focus-border, 1px solid var(--inula-variant-underlined-focus-border)) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-focus-bg, transparent);
+}
+
+/* underlined 形态禁用状态 */
+.inula-input-affix-wrapper-underlined.inula-input-disabled:hover,
+.inula-input-affix-wrapper-underlined:has(.inula-input:disabled):hover {
+ border: none !important;
+ border-bottom: 2px solid var(--inula-color-disabled-border) !important;
+ box-shadow: none !important;
+}
+
+.inula-input-affix-wrapper-underlined.inula-input-disabled:focus-within,
+.inula-input-affix-wrapper-underlined:has(.inula-input:disabled):focus-within {
+ border: none !important;
+ border-bottom: 2px solid var(--inula-color-disabled-border) !important;
+ box-shadow: none !important;
+}
+
+/* 禁用状态 */
+.inula-input-disabled,
+.inula-input:disabled {
+ background: var(--inula-color-disabled-bg);
+ color: var(--inula-color-disabled-text);
+ border-color: var(--inula-color-disabled-border);
+ cursor: not-allowed;
+ opacity: 1;
+}
+
+/* 禁用状态下禁用hover效果 */
+.inula-input-affix-wrapper.inula-input-disabled:hover,
+.inula-input-affix-wrapper:has(.inula-input:disabled):hover {
+ border-color: var(--inula-color-disabled-border);
+ box-shadow: none;
+}
+
+.inula-input-disabled:hover,
+.inula-input:disabled:hover {
+ border-color: var(--inula-color-disabled-border);
+ box-shadow: none;
+}
+
+.inula-input-disabled:focus-within,
+.inula-input:disabled:focus-within {
+ border-color: var(--inula-color-disabled-border);
+ box-shadow: none;
+}
+
+/* 禁用状态下禁用focus效果 */
+.inula-input-affix-wrapper.inula-input-disabled:focus-within,
+.inula-input-affix-wrapper:has(.inula-input:disabled):focus-within {
+ border-color: var(--inula-color-disabled-border);
+ box-shadow: none;
+}
+
+/* 输入框包装器 */
+.inula-input-wrapper {
+ display: inline-flex;
+ align-items: stretch;
+ vertical-align: middle;
+ width: 100%;
+ border-radius: 4px;
+}
+
+/* 前后缀标签 */
+.inula-input-addon {
+ display: inline-flex;
+ align-items: center;
+ background: #f8f9fa;
+ color: #666;
+ font-size: 14px;
+ font-weight: 500;
+ padding: 0 16px;
+ border: 1px solid var(--inula-color-default-border);
+ border-radius: 8px;
+ white-space: nowrap;
+ transition: all 0.3s ease;
+}
+
+.inula-input-addon:hover {
+ background: #f0f2f5;
+ border-color: var(--inula-color-primary-hover);
+}
+
+.inula-input-addon-before {
+ border-right: none;
+ border-radius: 8px 0 0 8px;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.inula-input-addon-after {
+ border-left: none;
+ border-radius: 0 8px 8px 0;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.inula-input-has-addon-before .inula-input-affix-wrapper {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.inula-input-has-addon-after .inula-input-affix-wrapper {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+/* 尺寸适配 */
+.inula-input-wrapper-large .inula-input-addon {
+ font-size: 16px;
+ padding: 0 20px;
+ min-height: 48px;
+}
+
+.inula-input-wrapper-small .inula-input-addon {
+ font-size: 13px;
+ padding: 0 12px;
+ min-height: 32px;
+}
+
+/* 补充 medium 尺寸别名以便与 Form 的 size 对齐 */
+.inula-input-wrapper-medium .inula-input-addon {
+ font-size: 14px;
+ padding: 0 16px;
+ min-height: 40px;
+}
+
+/* 字数统计 */
+.inula-input-count {
+ display: inline-flex;
+ align-items: center;
+ margin-left: 8px;
+ color: #999;
+ font-size: 12px;
+ user-select: none;
+ white-space: nowrap;
+ font-weight: 400;
+}
+
+.inula-input-has-count {
+ /* 为右侧预留最小空间,避免计数器被挤压隐藏 */
+ padding-right: 0;
+}
+
+.inula-input-count-inside {
+ /* position: absolute; */
+ margin-right: 12px;
+ /* top: 50%;
+ transform: translateY(-50%); */
+ color: #999;
+ font-size: 12px;
+ background: transparent;
+ pointer-events: none;
+ user-select: none;
+ font-weight: 400;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+}
+
+/* 清除按钮样式 */
+.inula-input-clear {
+ /* position: absolute; */
+ margin-right: 12px;
+ /* top: 50%;
+ transform: translateY(-50%); */
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ background: rgba(0, 0, 0, 0.1);
+ color: #666;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ opacity: 0;
+ pointer-events: none;
+}
+
+.inula-input-affix-wrapper:hover .inula-input-clear {
+ opacity: 1;
+ pointer-events: auto;
+}
+
+.inula-input-clear:hover {
+ background: rgba(0, 0, 0, 0.2);
+ color: #333;
+}
+
+
+
+
+/* 响应式设计 */
+@media (max-width: 768px) {
+ .inula-input {
+ font-size: 16px; /* 防止iOS缩放 */
+ border-radius: 4px;
+ }
+
+ .inula-input-large {
+ font-size: 16px;
+ border-radius: 4px;
+ }
+
+ .inula-input-small {
+ font-size: 16px;
+ border-radius: 4px;
+ }
+}
+
+/* 深色模式支持 */
+@media (prefers-color-scheme: dark) {
+ .inula-input-affix-wrapper {
+ background: #1f1f1f;
+ border-color: #434343;
+ color: #fff;
+ }
+
+ .inula-input {
+ color: #fff;
+ }
+
+ .inula-input::placeholder {
+ color: #666;
+ }
+
+ .inula-input-filled {
+ background: #262626;
+ }
+
+ .inula-input-filled:hover {
+ background: #303030;
+ }
+
+ .inula-input-addon {
+ background: #262626;
+ color: #ccc;
+ border-color: #434343;
+ }
+
+ .inula-input-addon:hover {
+ background: #303030;
+ }
+}
+
+/* textarea 样式 */
+.inula-textarea {
+ flex: 1;
+ width: 100%;
+ font-size: 14px;
+ line-height: 1.5;
+ background: transparent;
+ border: none;
+ outline: none;
+ padding: 10px 16px;
+ color: var(--inula-color-primary-text);
+ transition: all 0.3s ease;
+ font-family: inherit;
+ resize: vertical;
+}
+
+.inula-textarea, textarea {
+ height: auto;
+ box-sizing: border-box;
+}
+
+.inula-textarea::placeholder {
+ color: #999;
+ font-size: 14px;
+}
+
+/* textarea 尺寸变体 */
+.inula-textarea.inula-input-large {
+ font-size: 16px;
+ padding: 12px 20px;
+}
+
+.inula-textarea.inula-input-large::placeholder {
+ font-size: 16px;
+}
+
+.inula-textarea.inula-input-default {
+ font-size: 14px;
+ padding: 10px 16px;
+}
+
+.inula-textarea.inula-input-small {
+ font-size: 13px;
+ padding: 8px 12px;
+}
+
+.inula-textarea.inula-input-small::placeholder {
+ font-size: 13px;
+}
+
+/* textarea 自动调整高度样式 */
+.inula-textarea.inula-input-auto-size {
+ resize: none;
+ overflow: auto;
+ transition: height 0.3s ease;
+}
+
+/* textarea 禁用状态 */
+.inula-textarea:disabled {
+ background: var(--inula-color-disabled-bg);
+ color: var(--inula-color-disabled-text);
+ cursor: not-allowed;
+}
+
+/* textarea 聚焦状态 */
+.inula-textarea:focus {
+ outline: none;
+}
+
+/* textarea 响应式设计 */
+@media (max-width: 768px) {
+ .inula-textarea {
+ font-size: 16px; /* 防止iOS缩放 */
+ }
+
+ .inula-textarea.inula-input-large {
+ font-size: 16px;
+ }
+
+ .inula-textarea.inula-input-small {
+ font-size: 16px;
+ }
+}
+
+/* 深色模式下的 textarea */
+@media (prefers-color-scheme: dark) {
+ .inula-textarea {
+ color: #fff;
+ }
+
+ .inula-textarea::placeholder {
+ color: #666;
+ }
+}
+
+/* 滚动条美化 */
+.inula-input,
+.inula-textarea {
+ scrollbar-width: thin;
+ scrollbar-color: var(--inula-select-disabled-text);
+}
+
+.inula-input::-webkit-scrollbar,
+.inula-textarea::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ background: transparent;
+ border-radius: 8px;
+}
+
+.inula-input::-webkit-scrollbar-thumb,
+.inula-textarea::-webkit-scrollbar-thumb {
+ background: #b3b3b3;
+ border-radius: 8px;
+ transition: background 0.3s;
+}
+
+.inula-input::-webkit-scrollbar-thumb:hover,
+.inula-textarea::-webkit-scrollbar-thumb:hover {
+ background: #888;
+}
+
+.inula-input::-webkit-scrollbar-corner,
+.inula-textarea::-webkit-scrollbar-corner {
+ background: transparent;
+}
+
+@media (prefers-color-scheme: dark) {
+ .inula-input,
+ .inula-textarea {
+ scrollbar-color: #444 transparent;
+ }
+ .inula-input::-webkit-scrollbar,
+ .inula-textarea::-webkit-scrollbar {
+ background: transparent;
+ }
+ .inula-input::-webkit-scrollbar-thumb,
+ .inula-textarea::-webkit-scrollbar-thumb {
+ background: #444;
+ }
+ .inula-input::-webkit-scrollbar-thumb:hover,
+ .inula-textarea::-webkit-scrollbar-thumb:hover {
+ background: #888;
+ }
+ .inula-input::-webkit-scrollbar-corner,
+ .inula-textarea::-webkit-scrollbar-corner {
+ background: transparent;
+ }
+}
+
+/* error 状态 */
+.inula-input-error,
+.inula-input-affix-wrapper.inula-input-error {
+ border-color: #ff4d4f !important;
+ box-shadow: 0 0 0 2px rgba(255,77,79,0.1) !important;
+}
+.inula-input-error:focus,
+.inula-input-affix-wrapper.inula-input-error:focus-within {
+ border-color: #ff4d4f !important;
+ box-shadow: 0 0 0 3px rgba(255,77,79,0.15) !important;
+}
+
+/* warning 状态 */
+.inula-input-warning,
+.inula-input-affix-wrapper.inula-input-warning {
+ border-color: #faad14 !important;
+ box-shadow: 0 0 0 2px rgba(250,173,20,0.1) !important;
+}
+.inula-input-warning:focus,
+.inula-input-affix-wrapper.inula-input-warning:focus-within {
+ border-color: #faad14 !important;
+ box-shadow: 0 0 0 3px rgba(250,173,20,0.15) !important;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/input/index.jsx b/packages/inula2-ui2/library_code/src/components/input/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..2bee6fa77b30e2d47aa30ca1a9a272d93ebb9e8d
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/input/index.jsx
@@ -0,0 +1,273 @@
+import "./index.css";
+import Icon from '../icon';
+
+/**
+ * 通用 Input 输入框组件
+ * 支持受控/非受控、前后缀、数字统计、禁用、尺寸、形态等
+ * openinula2.0 响应式兼容
+ */
+const Input = ({
+ value, // 受控模式下输入值
+ defaultValue = "", // 非受控模式下初始值
+ allowClear = false, // 是否显示清除按钮
+ onInput, // 输入事件
+ onChange, // 变更事件
+ disabled = false, // 是否禁用
+ placeholder = "", // 占位符
+ type = "text", // 输入类型
+ className = "", // 自定义类名
+ style = {}, // 自定义样式
+ size = "default", // 输入框尺寸 large/default/small
+ variant = "outlined", // 形态 outlined/filled/borderless/underlined
+ addonBefore, // 前置标签
+ addonAfter, // 后置标签
+ showCount = false, // 是否显示字数统计
+ maxLength = 5000, // 最大长度
+ autoSize = false, // 自动调整大小,可以是布尔值或对象 { minRows: 2, maxRows: 6 }
+ status, // 新增:输入框状态 error/warning
+ ...rest
+}) => {
+ let innerValue = value !== undefined ? value : defaultValue;
+ let count = innerValue.length;
+ let showPassword = false; // 密码可见性响应式变量
+
+ // 处理 autoSize 配置
+ const getAutoSizeConfig = () => {
+ if (!autoSize) return null;
+
+ if (autoSize === true) {
+ return { unlimited: true };
+ }
+
+ if (typeof autoSize === 'object') {
+ return {
+ minRows: autoSize.minRows || 2,
+ maxRows: autoSize.maxRows || 6
+ };
+ }
+
+ return null;
+ };
+
+ const autoSizeConfig = getAutoSizeConfig();
+ const isTextarea = type === 'textarea';
+
+ // 兼容性查找:从任意子节点向上查找 .inula-input-affix-wrapper(不依赖 Element.closest)
+ const findAffixWrapper = (startNode) => {
+ let node = startNode;
+ // 仅在存在且是元素节点时向上遍历
+ while (node && node !== document) {
+ if (node.classList && node.classList.contains('inula-input-affix-wrapper')) {
+ return node;
+ }
+ node = node.parentNode;
+ }
+ return null;
+ };
+
+ // 计算 textarea 的样式
+ const getTextareaStyle = () => {
+ if (!isTextarea || !autoSizeConfig) return {};
+ if (autoSizeConfig.unlimited) {
+ return {
+ resize: 'none',
+ overflow: 'auto'
+ };
+ }
+ const lineHeight = size === 'large' ? 24 : size === 'small' ? 18 : 20;
+ const padding = size === 'large' ? 12 : size === 'small' ? 8 : 10;
+ const borderWidth = 1;
+ const minHeight = autoSizeConfig.minRows * lineHeight + padding * 2 + borderWidth * 2;
+ const maxHeight = autoSizeConfig.maxRows * lineHeight + padding * 2 + borderWidth * 2;
+ return {
+ minHeight: `${minHeight}px`,
+ maxHeight: `${maxHeight}px`,
+ resize: 'none',
+ overflow: 'auto'
+ };
+ };
+
+ // 自动调整 textarea 高度的函数
+ const adjustTextareaHeight = (element) => {
+ if (!isTextarea || !autoSizeConfig || !element) return;
+ element.style.height = 'auto';
+ if (autoSizeConfig.unlimited) {
+ element.style.height = `${element.scrollHeight}px`;
+ return;
+ }
+ const lineHeight = size === 'large' ? 24 : size === 'small' ? 18 : 20;
+ const padding = size === 'large' ? 12 : size === 'small' ? 8 : 10;
+ const borderWidth = 1;
+ const minHeight = autoSizeConfig.minRows * lineHeight + padding * 2 + borderWidth * 2;
+ const maxHeight = autoSizeConfig.maxRows * lineHeight + padding * 2 + borderWidth * 2;
+ const scrollHeight = element.scrollHeight;
+ const newHeight = Math.max(minHeight, Math.min(scrollHeight, maxHeight));
+ element.style.height = `${newHeight}px`;
+ };
+
+ // 事件处理,自动调用父组件传递的 onInput/onChange
+ const handleInput = (e) => {
+ if (value !== undefined) {
+ // 受控:更新统计基于当前输入值
+ count = (e && e.target ? e.target.value.length : 0);
+ onInput && onInput(e);
+ onChange && onChange(e);
+ } else {
+ // 非受控:同步内部值并更新统计
+ innerValue = e.target.value;
+ count = innerValue.length;
+ onInput && onInput(e);
+ onChange && onChange(e.target.value);
+ }
+
+ // 如果是 textarea 且启用了 autoSize,调整高度
+ if (isTextarea && autoSizeConfig) {
+ adjustTextareaHeight(e.target);
+ }
+ }
+
+ const handleClear = (e) => {
+ // 区分受控和非受控模式
+ if (value !== undefined) {
+ // 受控模式:只调用回调,不修改内部状态
+ count = 0;
+ onChange && onChange("");
+ onInput && onInput({ target: { value: "" } });
+ } else {
+ // 非受控模式:修改内部状态并调用回调
+ innerValue = "";
+ count = 0;
+ onChange && onChange("");
+ onInput && onInput({ target: { value: "" } });
+ }
+
+ // 无 ref 方案:从事件 target 向上遍历拿到包装器,再定位到对应的 input/textarea
+ const wrapper = e && e.target ? findAffixWrapper(e.target) : null;
+ const el = wrapper ? wrapper.querySelector(isTextarea ? 'textarea' : 'input') : null;
+ if (el) {
+ // 立即同步清空,避免外部受控延迟导致的视觉滞后
+ try { el.value = ""; } catch (_) {}
+ if (isTextarea && autoSizeConfig) {
+ adjustTextareaHeight(el);
+ }
+ try { el.focus(); } catch (_) {}
+ }
+ }
+
+ // 密码显示/隐藏切换
+ const handleTogglePassword = () => {
+ console.log("handleTogglePassword", showPassword);
+ showPassword = !showPassword;
+ };
+
+ // 拼接输入框样式类名
+ const inputClassNames = [
+ "inula-input",
+ `inula-input-${size}`,
+ `inula-input-${variant}`,
+ showCount ? "inula-input-has-count" : "",
+ allowClear ? "inula-input-has-clear" : "",
+ disabled ? "inula-input-disabled" : "",
+ status ? `inula-input-${status}` : "",
+ isTextarea ? "inula-textarea" : "",
+ autoSizeConfig ? "inula-input-auto-size" : "",
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ // 拼接外层包裹样式类名
+ const wrapperClassNames = [
+ "inula-input-wrapper",
+ addonBefore ? "inula-input-has-addon-before" : "",
+ addonAfter ? "inula-input-has-addon-after" : "",
+ `inula-input-wrapper-${size}`,
+ autoSizeConfig ? "inula-input-wrapper-auto-size" : "",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ // 拼接外层包装器样式类名
+ const affixWrapperClassNames = [
+ "inula-input-affix-wrapper",
+ variant === "borderless" ? "inula-input-affix-wrapper-borderless" : "",
+ variant === "underlined" ? "inula-input-affix-wrapper-underlined" : "",
+ status ? `inula-input-${status}` : "",
+ autoSizeConfig ? "inula-input-affix-wrapper-auto-size" : "",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ // 不让 rest 里的 className 覆盖 inputClassNames
+ // const { className: _ignore, ...restProps } = rest;
+
+ // 渲染
+ return (
+
+ {/* 前置标签 */}
+ {addonBefore && (
+
+ {addonBefore}
+
+ )}
+
+ {/* 输入框本体,受控/非受控兼容 */}
+ {isTextarea ? (
+
+ {/* 后置标签 */}
+ {addonAfter && (
+
+ {addonAfter}
+
+ )}
+
+ );
+};
+
+export default Input;
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demo.jsx b/packages/inula2-ui2/library_code/src/components/modal/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1ab13ae239501eee93963ffd20361fccd5871a0c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demo.jsx
@@ -0,0 +1,65 @@
+// import Button from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+import demo6 from './demos/demo6.jsx';
+import demo7 from './demos/demo7.jsx';
+
+function ModalDemo() {
+ let loading = false;
+ return (
+
+
+
+
+
+
+
自定义标题样式
+
演示如何自定义弹窗的标题样式。
+
+
+
+
+
自定义内容
+
可以在对话框内放置任何内容。
+
+
+
+
+
自定义页脚
+
演示如何为弹窗添加自定义页脚。
+
+
+
+
+
+
+
居中弹窗
+
设置 centered 可以让对话框垂直居中。
+
+
+
+
+
异步关闭弹窗
+
演示如何设置异步关闭弹窗。
+
+
+
+
+
+
+
+
+
+
+ );
+}
+export default ModalDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/modal/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..59e081fd0d07f49c38e10ee567144967be99662c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demos/demo1.jsx
@@ -0,0 +1,20 @@
+import Modal from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo1() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ title="普通弹窗"
+ >
+ 这是一个最基础的弹出框内容。
+
+
+ );
+}
+export default Demo1;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/modal/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4f9ad48ac989ee0ea9528577bb5c2c53a18e56f3
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demos/demo2.jsx
@@ -0,0 +1,20 @@
+import Modal from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo2() {
+ let open = false;
+
+ return (
+
+
+ 自定义标题样式
}
+ onClose={() => open = false}
+ >
+ 对话框内容。
+
+
+ );
+}
+export default Demo2;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/modal/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..bb3c196b1c01fff76bd8df0f5826e6d7641f5401
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demos/demo3.jsx
@@ -0,0 +1,24 @@
+import Modal from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo3() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ >
+
+
这是一个自定义内容
+
可以放置任何内容
+

+
+
+
+ );
+}
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/modal/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ce26e4b76ef3b1f28ab5cbbe0e8a1b30eb670537
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demos/demo4.jsx
@@ -0,0 +1,23 @@
+import Modal from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo3() {
+ let open = false;
+
+ return (
+
+
+ 自定义标题样式
}
+ onClose={() => open = false}
+ footer={
+
+ }
+ >
+ 对话框内容。
+
+
+ );
+}
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/modal/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1a7913021185df2e332bffc4d5ed166a8548ded3
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demos/demo5.jsx
@@ -0,0 +1,21 @@
+import Modal from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo3() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ centered={true}
+ >
+ 对话框内容。
+
+
+ );
+}
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/modal/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f593fc9e2d6229537c567d1db1b74ef723f68121
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demos/demo6.jsx
@@ -0,0 +1,29 @@
+import Modal from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo3() {
+ let open = false;
+
+ const handleOk = async () => {
+ try {
+ await new Promise(resolve => setTimeout(resolve, 2000));
+ open = false;
+ } catch (error) {
+ console.error('操作失败:', error);
+ }
+ };
+ return (
+
+
+
open = false}
+ onBeforeClose={handleOk}
+ title="异步关闭弹窗"
+ >
+ 内容
+
+
+ );
+}
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/demos/demo7.jsx b/packages/inula2-ui2/library_code/src/components/modal/demos/demo7.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1a13c2c4655f184699ac2433e1439a424890c2fd
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/demos/demo7.jsx
@@ -0,0 +1,21 @@
+import Modal from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo7() {
+ let open = false;
+
+ return (
+
+
+
open = false}
+ title="全屏弹窗"
+ fullscreen={true}
+ >
+ 这是全屏弹窗内容
+
+
+ );
+}
+export default Demo7;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/modal/index.css b/packages/inula2-ui2/library_code/src/components/modal/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..5c0bb6c81b1ba423d1755cd454aad5564651b465
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/index.css
@@ -0,0 +1,136 @@
+/* 遮罩层 */
+.inula-modal-mask {
+ position: fixed;
+ inset: 0;
+ background: rgba(0,0,0,0.45);
+ padding-top: 100px;
+ display: flex;
+ align-items: flex-start;
+ justify-content: center;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 0.2s cubic-bezier(.4,0,.2,1);
+ z-index: 1000;
+}
+.inula-modal-mask-center{
+ align-items: center;
+ padding-top: 0;
+}
+.inula-modal-mask-show {
+ opacity: 1;
+ pointer-events: auto;
+}
+
+/* 弹窗主体 */
+.inula-modal {
+ background: #fff;
+ border-radius: 8px;
+ padding: 20px 24px;
+ box-shadow: 0 8px 40px rgba(0,0,0,0.18), 0 1.5px 6px rgba(0,0,0,0.08);
+ min-width: 320px;
+ max-width: 90vw;
+ width: 520px;
+ max-height: 80vh;
+ display: flex;
+ flex-direction: column;
+ animation: modal-fade-in 0.2s cubic-bezier(.4,0,.2,1);
+}
+@keyframes modal-fade-in {
+ from { transform: scale(0.98) translateY(16px); opacity: 0.7; }
+ to { transform: scale(1) translateY(0); opacity: 1; }
+}
+
+/* 标题栏 */
+.inula-modal-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+.inula-modal-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #1d2129;
+ line-height: 1.4;
+}
+.inula-modal-close {
+ background: none;
+ border: none;
+ font-size: 20px;
+ color: #bfbfbf;
+ cursor: pointer;
+ transition: color 0.2s, background 0.2s;
+ padding: 0;
+ width: 32px;
+ height: 32px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.inula-modal-close:hover {
+ color: #1677ff;
+ background: #f0f5ff;
+}
+
+/* 内容区 */
+.inula-modal-body {
+ font-size: 15px;
+ color: #333;
+ overflow: auto;
+ flex: 1;
+ line-height: 1.7;
+}
+
+.inula-modal-footer-default {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ padding: 10px 0 0;
+ cursor: pointer;
+}
+
+/* 页脚 */
+.inula-modal-footer {
+ padding: 10px 0 0;
+ text-align: right;
+ border-radius: 0 0 8px 8px;
+}
+
+/* 移动端适配 */
+@media (max-width: 600px) {
+ .inula-modal {
+ min-width: 0;
+ width: 98vw;
+ max-width: 99vw;
+ padding: 0;
+ }
+ .inula-modal-header, .inula-modal-body, .inula-modal-footer {
+ padding-left: 8px;
+ padding-right: 8px;
+ }
+}
+
+.inula-modal-fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw !important;
+ height: 100% !important;
+ padding: 10px 0!important;
+ max-width: none !important;
+ max-height: none !important;
+ border-radius: 0 !important;
+ padding: 0 !important;
+ display: flex;
+ flex-direction: column;
+ z-index: 1001;
+}
+.inula-modal-fullscreen .inula-modal-header,
+.inula-modal-fullscreen .inula-modal-footer,
+.inula-modal-fullscreen .inula-modal-footer-default {
+ padding: 24px !important;
+}
+.inula-modal-fullscreen .inula-modal-body {
+ flex: 1;
+ padding: 24px !important;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/modal/index.jsx b/packages/inula2-ui2/library_code/src/components/modal/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..9b19c64c0ec9d3cbeb764804230c85220d317a5f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/modal/index.jsx
@@ -0,0 +1,98 @@
+import { Portal } from '@openinula/next';
+import Icon from '../icon';
+import Button from '../button';
+import './index.css';
+
+const Modal = ({
+ open,
+ onClose,
+ title,
+ children,
+ footer,
+ className = '',
+ style = {},
+ maskClosable = true,
+ zIndex = 1000,
+ fullscreen = false,
+ centered = false,
+ onBeforeClose,
+}) => {
+ let closing = false;
+
+ // 每次 open 变为 true 时重置 closing
+ if (open) {
+ console.log(closing);
+ closing = false;
+ }
+
+ async function handleClose() {
+ if (onBeforeClose) {
+ closing = true;
+ console.log('1',closing); //true
+ let result = onBeforeClose();
+ if (result instanceof Promise) {
+ result = await result;
+ }
+ closing = false;
+ console.log('2',closing); //false
+ if (result === false) return;
+ }
+ onClose && onClose();
+ }
+
+ // 遮罩点击关闭
+ function onMaskClick(e) {
+ if (e.target === e.currentTarget && maskClosable) {
+ handleClose();
+ }
+ }
+
+ // 获取 portal-root
+ const portalRoot = document.getElementById('root');
+ if (!portalRoot) return null;
+
+ // Modal 内容
+ const modalNode = (
+
+
+
+
{children}
+ {footer && (
+
+ {footer}
+
+ )}
+ {!footer && (
+
+
+
+
+ )}
+
+
+ );
+
+ return open ? {modalNode} : null;
+};
+
+export default Modal;
diff --git a/packages/inula2-ui2/library_code/src/components/radio/demo.jsx b/packages/inula2-ui2/library_code/src/components/radio/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..d87703058d890e47ea1b952fbfe20423cd70a6f2
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/demo.jsx
@@ -0,0 +1,69 @@
+// import Button from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+import demo6 from './demos/demo6.jsx';
+
+function RadioDemo() {
+ let loading = false;
+ return (
+
+
+
+
+
基础用法
+
最基础的单选框,支持选项切换。
+
+
+
+
+
+
+
不同尺寸
+
展示单选框的三种尺寸:大号、默认、小号。
+
+
+
+
+
+
+
+
+
选项组用法
+
通过 options 属性批量渲染单选框组。
+
+
+
+
+
+
+
混合状态
+
同一组内同时包含普通、禁用和只读的单选框。
+
+
+
+
+
+
+
+
+
禁用状态
+
展示禁用的单选框,用户无法进行选择。
+
+
+
+
+
+
+
只读状态
+
展示只读的单选框,选中状态不可更改。
+
+
+
+
+
+ );
+}
+export default RadioDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/radio/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f12ff1fc058c87e306ff673e232f575fe583145e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/demos/demo1.jsx
@@ -0,0 +1,18 @@
+import Radio from '../index.jsx';
+
+function Demo1() {
+ let selected = 'a';
+
+ function handleRadioChange(val) {
+ selected = val;
+ }
+
+ return (
+
+
+
+
+ );
+}
+
+export default Demo1;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/radio/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..22cca657b00cf589db8c82f5832e99421062cb6f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/demos/demo2.jsx
@@ -0,0 +1,17 @@
+import Radio from '../index.jsx';
+
+function Demo2() {
+ let selected = 'a';
+ function handleRadioChange(val) {
+ selected = val;
+ }
+ const options = [
+ { label: '选项A', value: 'a', checked: selected === 'a' },
+ { label: '选项B', value: 'b', checked: selected === 'b' },
+ { label: '选项C', value: 'c', checked: selected === 'c' },
+ ];
+ return (
+
+ );
+}
+export default Demo2;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/radio/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..3f21622e96f24b88ad74cd30adcba412fc0217d5
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/demos/demo3.jsx
@@ -0,0 +1,19 @@
+import Radio from '../index.jsx';
+
+function Demo3() {
+ let selected = 'a';
+
+ function handleRadioChange(val) {
+ selected = val;
+ }
+
+ return (
+
+
+
+
+
+ );
+}
+
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/radio/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..472118824e277e665b5801eb998443a8cbddd915
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/demos/demo4.jsx
@@ -0,0 +1,11 @@
+import Radio from '../index.jsx';
+
+function Demo4() {
+ return (
+
+
+
+
+ );
+}
+export default Demo4;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/radio/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e1e45d6a123af957c39af5fa7f78b5478d77c67c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/demos/demo5.jsx
@@ -0,0 +1,15 @@
+import Radio from '../index.jsx';
+
+function Demo5() {
+ let selected = 'a';
+ function handleRadioChange(val) {
+ selected = val;
+ }
+ return (
+
+
+
+
+ );
+}
+export default Demo5;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/radio/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4bf8290d91b42ac302610884e1d8ef837b030ab6
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/demos/demo6.jsx
@@ -0,0 +1,17 @@
+import Radio from '../index.jsx';
+
+function Demo6() {
+ let selected = 'a';
+ function handleRadioChange(val) {
+ selected = val;
+ }
+ const options = [
+ { label: 'A', value: 'a', checked: selected === 'a' },
+ { label: 'B(禁用)', value: 'b', checked: selected === 'b', disabled: true },
+ { label: 'C(只读)', value: 'c', checked: selected === 'c', readOnly: true },
+ ];
+ return (
+
+ );
+}
+export default Demo6;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/index.css b/packages/inula2-ui2/library_code/src/components/radio/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..89b86bea707284e87bc55022eb59eb86596e41b6
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/index.css
@@ -0,0 +1,157 @@
+@import '../../colors.css';
+
+.radio-group {
+ display: flex;
+ gap: 16px;
+}
+.radio-item {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+}
+.radio-item input[type="radio"] {
+ margin-right: 6px;
+}
+
+.inula-radio-group {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.inula-radio-group.horizontal {
+ flex-direction: row;
+ gap: 24px;
+ justify-content: flex-start;
+ align-items: flex-start;
+}
+
+.inula-radio-wrapper {
+ display: inline-flex;
+ align-items: center;
+ cursor: pointer;
+ font-size: 14px;
+ user-select: none;
+ margin-bottom: 0;
+ margin-right: 16px;
+}
+
+.inula-radio-wrapper:last-child {
+ margin-right: 0;
+}
+
+.inula-radio-large .inula-radio-inner {
+ width: 20px;
+ height: 20px;
+}
+.inula-radio-large .inula-radio-label {
+ font-size: 16px;
+}
+
+.inula-radio-small .inula-radio-inner {
+ width: 12px;
+ height: 12px;
+}
+.inula-radio-small .inula-radio-label {
+ font-size: 12px;
+}
+
+.inula-radio {
+ position: relative;
+ display: inline-block;
+ line-height: 1;
+ vertical-align: middle;
+ margin-right: 8px;
+}
+
+.inula-radio-input {
+ position: absolute;
+ opacity: 0;
+ cursor: pointer;
+ width: 0;
+ height: 0;
+}
+
+.inula-radio-inner {
+ display: block;
+ width: 16px;
+ height: 16px;
+ background-color: var(--inula-radio-bg);
+ border: 1px solid var(--inula-radio-border);
+ border-radius: 50%;
+ transition: all 0.2s;
+ box-sizing: border-box;
+ position: relative;
+}
+
+.inula-radio:hover .inula-radio-inner {
+ border-color: var(--inula-radio-hover-border);
+ box-shadow: var(--inula-radio-hover-shadow);
+}
+
+.inula-radio-checked .inula-radio-inner {
+ border-color: var(--inula-radio-checked-border);
+}
+
+.inula-radio-checked .inula-radio-inner::after {
+ content: '';
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ width: 8px;
+ height: 8px;
+ background: var(--inula-radio-checked-bg);
+ border-radius: 50%;
+ transform: translate(-50%, -50%) scale(1);
+ transition: all 0.2s;
+}
+
+.inula-radio-disabled .inula-radio-inner,
+.inula-radio-wrapper--disabled .inula-radio-inner {
+ background-color: var(--inula-radio-disabled-bg);
+ border-color: var(--inula-radio-disabled-border);
+ cursor: not-allowed;
+}
+
+.inula-radio-disabled .inula-radio-label,
+.inula-radio-wrapper--disabled .inula-radio-label {
+ color: var(--inula-radio-disabled-label);
+}
+
+.inula-radio-readonly .inula-radio-inner,
+.inula-radio-wrapper--readonly .inula-radio-inner {
+ background-color: var(--inula-radio-readonly-bg);
+ border-color: var(--inula-radio-readonly-border);
+ cursor: not-allowed;
+}
+
+.inula-radio-readonly .inula-radio-label,
+.inula-radio-wrapper--readonly .inula-radio-label {
+ color: var(--inula-radio-readonly-label);
+}
+
+.inula-radio-disabled.inula-radio-checked .inula-radio-inner::after,
+.inula-radio-wrapper--disabled.inula-radio-checked .inula-radio-inner::after {
+ background: var(--inula-radio-disabled-dot);
+}
+
+.inula-radio-readonly.inula-radio-checked .inula-radio-inner::after,
+.inula-radio-wrapper--readonly.inula-radio-checked .inula-radio-inner::after {
+ background: var(--inula-radio-readonly-dot);
+}
+
+.inula-radio-disabled:hover .inula-radio-inner,
+.inula-radio-wrapper--disabled:hover .inula-radio-inner,
+.inula-radio-readonly:hover .inula-radio-inner,
+.inula-radio-wrapper--readonly:hover .inula-radio-inner {
+ border-color: var(--inula-radio-disabled-border);
+ box-shadow: none;
+}
+
+.inula-radio-readonly:hover .inula-radio-inner,
+.inula-radio-wrapper--readonly:hover .inula-radio-inner,
+.inula-radio-readonly .inula-radio-inner:hover,
+.inula-radio-wrapper--readonly .inula-radio-inner:hover {
+ border-color: var(--inula-radio-readonly-border) !important;
+ box-shadow: none !important;
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/radio/index.jsx b/packages/inula2-ui2/library_code/src/components/radio/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f6f72f403661622cbfc18d737985190244980cfd
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/radio/index.jsx
@@ -0,0 +1,104 @@
+// openInula 2.0 Radio 组件
+import './index.css';
+
+const sizeMap = {
+ large: 'inula-radio-large',
+ small: 'inula-radio-small',
+ default: '',
+};
+
+function Radio({
+ checked = false,
+ disabled = false,
+ readOnly = false,
+ value = '',
+ name = '',
+ label = '',
+ onChange,
+ size = 'default',
+ options,
+ style = {},
+ className = '',
+ variant = 'outlined', // outlined | filled | borderless | underlined
+}) {
+ // 如果有 options,渲染为 RadioGroup
+ if (Array.isArray(options)) {
+ return (
+
+
+ {(opt, index) => (
+ {
+ // 确保单选逻辑:先清除所有选中状态,再设置当前选中
+ if (onChange) {
+ onChange(val, e);
+ }
+ }}
+ />
+ )}
+
+
+ );
+ }
+
+ function handleChange(e) {
+ if (disabled || readOnly) return;
+
+ // 确保单选逻辑
+ const radioGroup = e.target.closest('.inula-radio-group') || e.target.closest('[class*="radio"]').parentElement;
+ if (radioGroup) {
+ // 清除同组内其他radio的选中状态
+ const otherRadios = radioGroup.querySelectorAll('input[type="radio"]');
+ otherRadios.forEach(radio => {
+ if (radio !== e.target) {
+ radio.checked = false;
+ const radioWrapper = radio.closest('.inula-radio');
+ if (radioWrapper) {
+ radioWrapper.classList.remove('inula-radio-checked');
+ }
+ }
+ });
+
+ // 设置当前radio为选中状态
+ e.target.checked = true;
+ const currentWrapper = e.target.closest('.inula-radio');
+ if (currentWrapper) {
+ currentWrapper.classList.add('inula-radio-checked');
+ }
+ }
+
+ onChange && onChange(value, e);
+ }
+
+ return (
+
+ );
+}
+
+export default Radio;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demo.jsx b/packages/inula2-ui2/library_code/src/components/select/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ebf18a9de76f2add6b27445c7366453577983c3b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demo.jsx
@@ -0,0 +1,79 @@
+// import Select from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+import demo4 from './demos/demo4.jsx';
+import demo5 from './demos/demo5.jsx';
+import demo6 from './demos/demo6.jsx';
+import demo7 from './demos/demo7.jsx';
+import demo8 from './demos/demo8.jsx';
+
+function SelectDemo() {
+ return (
+
+
+
+
+
基础用法
+
最基础的下拉选择框,支持选项切换。
+
+
+
+
+
+
禁用
+
可禁用整个下拉选择框和单个选项。
+
+
+
+
+
+
+
+
+
+
+
受控用法
+
通过 value 属性控制选中项。
+
+
+
+
+
+
+
+
分组/复杂用法
+
支持分组选项、多选等复杂场景。
+
+
+
+
+
+
+ );
+}
+export default SelectDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..975b4ce5cbf2b6bff03c5f31e4cf02fd74fce30e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo1.jsx
@@ -0,0 +1,19 @@
+import Select from "../index.jsx";
+
+function Demo1() {
+ let value = '';
+ const options = [
+ { label: 'Option A', value: 'a' },
+ { label: 'Option B', value: 'b' },
+ { label: 'Option C', value: 'c' },
+ { label: 'Option D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val
+ }
+
+ return
+}
+
+export default Demo1;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..5d9d046fe0db2b79677174217584fb338ce9514e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo2.jsx
@@ -0,0 +1,20 @@
+import Select from "../index.jsx";
+
+function Demo2() {
+ let value = 'b';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo2;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..a08133f0270678faa72acc4b99c0abce193a63a2
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo3.jsx
@@ -0,0 +1,20 @@
+import Select from "../index.jsx";
+
+function Demo3() {
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c', disabled: true },
+ { label: '选项D', value: 'd' },
+ ];
+
+ return (
+
+
+
+
+ )
+}
+
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..754580aca5cf1f5ed9a0fa505c4364634f596702
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo4.jsx
@@ -0,0 +1,20 @@
+import Select from "../index.jsx";
+
+function Demo4() {
+ let value = '';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo4;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..5346bc31ba1645d9df667211db5c6add50325d1b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo5.jsx
@@ -0,0 +1,20 @@
+import Select from "../index.jsx";
+
+function Demo5() {
+ let value = '';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo5;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ec02af23197eb5842a0945da7d895bfb92734a51
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo6.jsx
@@ -0,0 +1,20 @@
+import Select from "../index.jsx";
+
+function Demo6() {
+ let value = '';
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c' },
+ { label: '选项D', value: 'd' },
+ ];
+
+ function handleChange(val) {
+ value = val;
+ }
+
+ return
+}
+
+export default Demo6;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo7.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo7.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..0f66469065d143039ef1e982764bd8d67d064113
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo7.jsx
@@ -0,0 +1,32 @@
+import Select from "../index.jsx";
+
+function Demo7() {
+ let values = [];
+
+ const options = [
+ {
+ label: '热门城市',
+ options: [
+ { value: 'Shanghai', label: '上海' },
+ { value: 'Beijing', label: '北京' },
+ ],
+ },
+ {
+ label: '城市名',
+ options: [
+ { value: 'Chengdu', label: '成都' },
+ { value: 'Shenzhen', label: '深圳' },
+ { value: 'Guangzhou', label: '广州' },
+ { value: 'Dalian', label: '大连' },
+ ],
+ },
+ ];
+
+ function handleChange(val) {
+ values = [...val];
+ }
+
+ return
+}
+
+export default Demo7;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/demos/demo8.jsx b/packages/inula2-ui2/library_code/src/components/select/demos/demo8.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..26150ad2e24840d464c9b0c226490f83da9a1ec2
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/demos/demo8.jsx
@@ -0,0 +1,22 @@
+import Select from "../index.jsx";
+
+function Demo8() {
+
+ const options = [
+ { label: '选项A', value: 'a' },
+ { label: '选项B', value: 'b' },
+ { label: '选项C', value: 'c', disabled: true },
+ { label: '选项D', value: 'd' },
+ ];
+
+ return (
+
+
+
+
+
+
+ )
+}
+
+export default Demo8;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/select/index.css b/packages/inula2-ui2/library_code/src/components/select/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..7b1f56c2900b27c37e7e5f0d74e5e93bb144a1ff
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/index.css
@@ -0,0 +1,293 @@
+@import '../../colors.css';
+
+.inula-select {
+ position: relative;
+ display: inline-block;
+ min-width: 160px;
+ font-size: 14px;
+ color: var(--inula-color-primary-text);
+ background: var(--inula-select-bg);
+}
+
+.inula-select-disabled {
+ opacity: 0.6;
+ background: var(--inula-color-disabled-bg);
+ cursor: not-allowed;
+}
+
+.inula-select-disabled .inula-select-selection {
+ background: var(--inula-color-disabled-bg);
+ border-color: var(--inula-color-disabled-border);
+ color: var(--inula-color-disabled-text);
+ cursor: not-allowed;
+}
+
+.inula-select-disabled .inula-select-selection:hover {
+ border-color: var(--inula-color-disabled-border);
+ box-shadow: none;
+}
+
+.inula-select-disabled .inula-select-arrow {
+ color: var(--inula-color-disabled-text);
+}
+
+.inula-select-disabled .inula-select-placeholder {
+ color: var(--inula-color-disabled-text);
+}
+
+.inula-select-selection {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ /* 让表单级变体生效:优先使用表单注入的变量 */
+ border: 1px solid var(--inula-select-border);
+ /* 通过可选的变量单独控制边框颜色,避免 border 简写被忽略 */
+ border-color: var(--inula-form-variant-border-color, var(--inula-select-border));
+ background: var(--inula-form-variant-bg, var(--inula-select-bg));
+ border-radius: 4px;
+ padding: 0 12px;
+ height: 32px;
+ cursor: pointer;
+ transition: border 0.2s, box-shadow 0.2s, background 0.2s;
+ box-sizing: border-box;
+}
+
+.inula-select:not(.inula-select-disabled) .inula-select-selection:hover,
+.inula-select:not(.inula-select-disabled) .inula-select-selection:focus {
+ border-color: var(--inula-form-variant-focus-border-color, var(--inula-select-hover-border));
+ /* 若表单级提供了 hover 背景,则使用之 */
+ background: var(--inula-form-variant-hover-bg, var(--inula-form-variant-bg, var(--inula-select-bg)));
+ box-shadow: 0 0 0 2px rgba(24,144,255,0.12);
+}
+
+.inula-select-placeholder {
+ color: var(--inula-select-disabled-text);
+}
+
+.inula-select-arrow {
+ margin-left: 8px;
+ font-size: 12px;
+ color: var(--inula-select-arrow-color);
+ display: flex;
+ align-items: center;
+}
+
+.inula-select-dropdown {
+ position: absolute;
+ left: 0;
+ top: 100%;
+ z-index: 1000;
+ min-width: 100%;
+ background: var(--inula-select-bg);
+ border: 1px solid var(--inula-select-border);
+ border-radius: 6px;
+ margin-top: 4px;
+ box-shadow: 0 4px 12px rgba(0,0,0,0.12);
+ max-height: 240px;
+ overflow-y: auto;
+ padding: 4px 0;
+ animation: selectDropdownIn 0.2s cubic-bezier(0.23, 1, 0.32, 1);
+}
+
+@keyframes selectDropdownIn {
+ 0% { opacity: 0; transform: translateY(-8px); }
+ 100% { opacity: 1; transform: translateY(0); }
+}
+
+.inula-select-option {
+ padding: 8px 16px;
+ cursor: pointer;
+ display: flex;
+ justify-content: space-between;
+ transition: background 0.2s, color 0.2s;
+ font-size: 14px;
+ line-height: 1.5;
+ border-radius: 0;
+ color: var(--inula-select-tag-text);
+}
+
+.inula-select-option:hover {
+ background: var(--inula-select-option-hover-bg);
+ color: var(--inula-select-tag-hover-text);
+}
+
+.inula-select-option-selected {
+ background: var(--inula-select-active-bg);
+ color: var(--inula-select-tag-hover-text);
+ font-weight: 500;
+}
+
+.inula-select-option-disabled {
+ color: var(--inula-select-disabled-text);
+ cursor: not-allowed;
+ background: var(--inula-select-bg);
+}
+
+.inula-select-option-disabled:hover {
+ background: var(--inula-select-bg);
+ color: var(--inula-select-disabled-text);
+}
+
+.inula-select-clear {
+ display: flex;
+ align-items: center;
+ margin-left: 8px;
+ color: var(--inula-select-disabled-text);
+ cursor: pointer;
+ transition: color 0.2s;
+}
+.inula-select-clear:hover {
+ color: var(--inula-select-tag-hover-text);
+}
+
+.inula-select-multiple .inula-select-selection {
+ min-height: 36px;
+ flex-wrap: wrap;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+
+.inula-select-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+ flex: 1;
+ align-items: center;
+ min-width: 0;
+}
+
+.inula-select-tag {
+ display: inline-flex;
+ align-items: center;
+ background: var(--inula-select-disabled-bg);
+ color: var(--inula-select-tag-text);
+ border-radius: 3px;
+ padding: 0 6px;
+ font-size: 13px;
+ margin-right: 2px;
+ cursor: pointer;
+ user-select: none;
+ transition: background 0.2s;
+}
+.inula-select-tag:hover {
+ background: var(--inula-select-tag-hover-bg);
+}
+.inula-select-tag-close {
+ margin-left: 4px;
+ font-size: 12px;
+ color: var(--inula-select-disabled-text);
+ cursor: pointer;
+ transition: color 0.2s;
+}
+.inula-select-tag-close:hover {
+ color: var(--inula-select-tag-hover-text);
+}
+.inula-select-arrow-container {
+ display: flex;
+ align-items: center;
+}
+.inula-select-group-title {
+ padding: 8px 12px;
+ font-size: 12px;
+ color: var(--inula-select-arrow-color);
+ background-color: var(--inula-select-disabled-bg);
+ font-weight: 500;
+ border-bottom: 1px solid var(--inula-select-border-top);
+}
+
+.inula-select-group-title:not(:first-child) {
+ border-top: 1px solid var(--inula-select-border-top);
+}
+
+/* Select 变体样式 */
+
+/* Filled 变体 - 支持Form传递的CSS变量 */
+.inula-select-filled .inula-select-selection {
+ background: var(--inula-form-variant-bg, var(--inula-variant-filled-bg));
+ border: 1px solid var(--inula-form-variant-border, transparent);
+}
+
+.inula-select-filled .inula-select-selection:hover {
+ background: var(--inula-form-variant-hover-bg, var(--inula-variant-filled-hover-bg));
+ border-color: var(--inula-form-variant-border, transparent);
+}
+
+.inula-select-filled .inula-select-selection:focus-within {
+ background: var(--inula-form-variant-focus-bg, var(--inula-variant-filled-focus-bg));
+ border-color: var(--inula-form-variant-focus-border, var(--inula-select-hover-border));
+}
+
+.inula-select-filled.inula-select-disabled .inula-select-selection {
+ background: var(--inula-color-disabled-bg);
+ border-color: transparent;
+}
+
+/* Borderless 变体 - 支持Form传递的CSS变量 */
+.inula-select-borderless .inula-select-selection {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-bg, transparent);
+}
+
+.inula-select-borderless .inula-select-selection:hover {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-hover-bg, var(--inula-variant-borderless-hover-bg));
+}
+
+.inula-select-borderless .inula-select-selection:focus-within {
+ border: var(--inula-form-variant-border, none) !important;
+ box-shadow: none !important;
+ background: var(--inula-form-variant-focus-bg, var(--inula-variant-borderless-focus-bg));
+}
+
+.inula-select-borderless.inula-select-disabled .inula-select-selection {
+ background: var(--inula-color-disabled-bg);
+ border: none !important;
+ box-shadow: none !important;
+}
+
+/* Underlined 变体 - 支持Form传递的CSS变量 */
+.inula-select-underlined .inula-select-selection {
+ /* 组件级 underlined:优先显示底部边框 */
+ border: none !important;
+ border-bottom: 1px solid var(--inula-variant-underlined-border) !important;
+ border-radius: 0 !important;
+ box-shadow: none !important;
+ background: transparent;
+}
+
+.inula-select-underlined .inula-select-selection:hover {
+ border: none !important;
+ border-bottom: 1px solid var(--inula-variant-underlined-hover-border) !important;
+ box-shadow: none !important;
+ background: transparent;
+}
+
+.inula-select-underlined .inula-select-selection:focus-within {
+ border: none !important;
+ border-bottom: 1px solid var(--inula-variant-underlined-focus-border) !important;
+ box-shadow: none !important;
+ background: transparent;
+}
+
+.inula-select-underlined.inula-select-disabled .inula-select-selection {
+ border: none !important;
+ border-bottom: 1px solid var(--inula-color-disabled-border) !important;
+ box-shadow: none !important;
+}
+
+.inula-select-no-data {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 30px;
+ color: var(--inula-select-disabled-text);
+ font-size: 14px;
+ line-height: 1.5;
+}
+
+.inula-select-no-data:hover {
+ background: var(--inula-select-bg);
+ color: var(--inula-select-disabled-text);
+}
diff --git a/packages/inula2-ui2/library_code/src/components/select/index.jsx b/packages/inula2-ui2/library_code/src/components/select/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..29bc28f22151cdb0de34229dbf49e0ff0f6678ae
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/select/index.jsx
@@ -0,0 +1,213 @@
+import "./index.css";
+import Icon from "../icon";
+
+const Select = ({
+ options = [],
+ value,
+ defaultValue = "",
+ disabled = false,
+ placeholder = "",
+ onChange,
+ allowClear = false,
+ className = "",
+ style = {},
+ multiple = false,
+ variant = "outlined", // outlined | filled | borderless | underlined
+ size = "default", // small | default | large | medium(等同 default)
+ ...rest
+}) => {
+ let isOpen = false;
+ let selectedValue = value !== undefined ? value : defaultValue;
+
+ // 判断是否为分组数据
+ const isGrouped = options.length > 0 && options[0].options;
+
+ // 扁平化选项数据,用于查找选中项
+ const flatOptions = isGrouped
+ ? options.reduce((acc, group) => acc.concat(group.options), [])
+ : options;
+
+ function handleSelect(val) {
+ console.log('val:', val);
+ if (disabled) return;
+ if (multiple) {
+ let newValue = Array.isArray(selectedValue) ? [...selectedValue] : [];
+ const idx = newValue.indexOf(val);
+ if (idx > -1) {
+ newValue.splice(idx, 1);
+ } else {
+ newValue.push(val);
+ }
+ if (value === undefined) {
+ selectedValue = newValue;
+ }
+ onChange && onChange(newValue);
+ } else {
+ if (value === undefined) {
+ selectedValue = val;
+ }
+ onChange && onChange(val);
+ isOpen = false;
+ }
+ if (!multiple) isOpen = false;
+ console.log('【渲染时】selectedOptions:', selectedOptions.map(opt => opt.value), typeof selectedValue, selectedValue);
+ }
+
+ function handleToggle() {
+ if (disabled) return;
+ isOpen = !isOpen;
+ }
+
+ function handleBlur(e) {
+ isOpen = false;
+ }
+
+ function handleClear(e) {
+ e.stopPropagation();
+ if (disabled) return;
+ if (multiple) {
+ if (value === undefined) {
+ selectedValue = [];
+ }
+ onChange && onChange([]);
+ } else {
+ if (value === undefined) {
+ selectedValue = '';
+ }
+ onChange && onChange('');
+ }
+ isOpen = false;
+ }
+
+ function handleRemoveTag(e, val) {
+ e.stopPropagation();
+ if (disabled) return;
+ let newValue = Array.isArray(selectedValue) ? selectedValue.filter(v => v !== val) : [];
+ if (value === undefined) {
+ selectedValue = newValue;
+ }
+ onChange && onChange(newValue);
+ }
+
+ const normalizedSize = size === 'medium' ? 'default' : size;
+ const classNames = [
+ "inula-select",
+ `inula-select-${variant}`,
+ `inula-select-${normalizedSize}`,
+ disabled ? "inula-select-disabled" : "",
+ multiple ? "inula-select-multiple" : "",
+ className,
+ ].filter(Boolean).join(" ");
+
+ // 使用扁平化的选项数据查找选中项
+ const selectedOptions = multiple
+ ? flatOptions.filter(opt => Array.from(selectedValue) && selectedValue.includes(opt.value))
+ : flatOptions.find(opt => opt.value === selectedValue);
+
+ // 渲染选项列表
+ const renderOptions = () => {
+ if (isGrouped) {
+ return options.length > 0 ? options.map(group => (
+
+
{group.label}
+ {group.options.map(opt => (
+
!opt.disabled && handleSelect(opt.value)}
+ >
+ {opt.label}
+ {multiple && Array.isArray(selectedValue) && selectedValue.includes(opt.value) && (
+
+ )}
+
+ ))}
+
+ )) : (
+
+ 暂无数据~
+
+ );
+ } else {
+ return options.length > 0 ? options.map(opt => (
+ !opt.disabled && handleSelect(opt.value)}
+ >
+ {opt.label}
+ {multiple && Array.isArray(selectedValue) && selectedValue.includes(opt.value) && (
+
+ )}
+
+ )) : (
+
+ 暂无数据~
+
+ );
+ }
+ };
+
+ return (
+
+
+
+ {multiple ? (
+
+ {Array.isArray(selectedOptions) && selectedOptions.length > 0 ? (
+
+ {(opt) => (
+
+ {opt.label} handleRemoveTag(e, opt.value)} />
+
+ )}
+
+ ) : (
+ {placeholder}
+ )}
+
+ ) : (
+
+ {selectedOptions ? selectedOptions.label : placeholder}
+
+ )}
+
+ {allowClear && ((multiple && selectedOptions && selectedOptions.length > 0) || (!multiple && selectedOptions)) && !disabled && (
+
+
+
+ )}
+
+
+
+
+
+ {isOpen && (
+
+ )}
+
+ );
+};
+
+export default Select;
diff --git a/packages/inula2-ui2/library_code/src/components/spin/demo.jsx b/packages/inula2-ui2/library_code/src/components/spin/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e0e5525ba235ccea4ee2e13f8402fcbcc63d2cfe
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/demo.jsx
@@ -0,0 +1,36 @@
+import demo1 from "./demos/demo1.jsx";
+import demo2 from "./demos/demo2.jsx";
+import demo3 from "./demos/demo3.jsx";
+import demo4 from "./demos/demo4.jsx";
+import demo5 from "./demos/demo5.jsx";
+
+const SpinDemo = () => {
+ return (
+
+
+
+
+
嵌套状态样式
+
包裹子组件且不为全屏状态情况,加载覆盖子组件、自定义tip
+
+
+
+
带delay延迟触发加载动画
+
+
+
+
全屏覆盖加载动画
+
+
+
+
永不停止的进度条加载
+
+
+
+ )
+}
+
+export default SpinDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/spin/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/spin/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..438fb94937355425ac407359794b2b162ac8d547
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/demos/demo1.jsx
@@ -0,0 +1,22 @@
+import Spin from "../index.jsx";
+import Tag from "../../tag/index.jsx"
+
+const SpinDemo = () => {
+
+ return (
+
+
+ 最简单的Spin
+
+
+
+ 小中大的Spin
+
+
+
+
+
+ );
+};
+
+export default SpinDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/spin/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/spin/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e333bffc4f925235b7ca7475aef21d6e133ed4bb
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/demos/demo2.jsx
@@ -0,0 +1,76 @@
+import Spin from "../index.jsx";
+import Switch from "../../switch/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const SpinDemo = () => {
+ let loading = false;
+
+ return (
+
+
+
简单嵌套状态
+
+
+ 这是子组件
+
+
+
(loading = !loading)} />
+ 切换嵌套组件的加载状态
+
+
+
自定义tip的Spin,小中大样式
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default SpinDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/spin/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/spin/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4fd2be1c0bbc47aeeeee04a79ef970e3f5af6b29
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/demos/demo3.jsx
@@ -0,0 +1,43 @@
+import Spin from "../index.jsx";
+import Switch from "../../switch/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const SpinDemo = () => {
+ let loading = false;
+
+ return (
+
+
+
+ 点击延迟一秒触发加载
+
+
+
+ 这是子组件
+
+
+
(loading = !loading)} />
+ 延迟触发切换状态按钮
+
+
+ );
+};
+
+export default SpinDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/spin/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/spin/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..1231c587d31f39b9059a839d063551b44fb5a9dd
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/demos/demo4.jsx
@@ -0,0 +1,29 @@
+import Spin from "../index.jsx";
+import Button from "../../button/index.jsx";
+const SpinDemo = () => {
+ let showFullScreen = false;
+ let percent = -100;
+
+ const showLoader = () => {
+ showFullScreen = true;
+ const interval = setInterval(() => {
+ percent += 10;
+ if (percent >= 100) {
+ clearInterval(interval);
+ showFullScreen = false;
+ percent = -100;
+ }
+ }, 100);
+ };
+
+ return (
+
+ );
+};
+
+export default SpinDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/spin/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/spin/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c4c2ce4d264ed0e9c19c64c97835ebabd41fc9b8
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/demos/demo5.jsx
@@ -0,0 +1,54 @@
+import Spin from "../index.jsx";
+import Switch from "../../switch/index.jsx";
+const SpinDemo = () => {
+ let auto = false;
+ let percent = -50;
+
+ watch(() => {
+ if (auto) {
+ percent = "auto";
+ return;
+ } else {
+ percent = -50;
+ const interval = setInterval(() => {
+ percent += 10;
+ if (percent >= 100) {
+ percent = -50;
+ }
+ }, 100);
+
+ return () => {
+ clearInterval(interval);
+ };
+ }
+ });
+
+ return (
+
+
+
+
+
+
+
+ (auto = !auto)}
+ unCheckedChildren="auto"
+ checkedChildren="auto"
+ />
+ 点击切换auto,进度条永不停止
+
+
+ );
+};
+
+export default SpinDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/spin/index.css b/packages/inula2-ui2/library_code/src/components/spin/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..44bee4c10602c3d782182b72085a403ca4a51321
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/index.css
@@ -0,0 +1,211 @@
+.inula-spin-wrapper {
+ position: relative;
+}
+
+.inula-spin-fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.6);
+ z-index: 100;
+ display: none;
+}
+
+.inula-spin-fullscreen-show {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.inula-spin-indicator {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 5px;
+}
+
+/* 旋转动画 */
+.inula-spin-indicator-rotate {
+ position: relative;
+ animation: inula-spin-rotate 1.2s linear infinite;
+}
+
+@keyframes inula-spin-rotate {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+/* 尺寸适配 */
+.inula-spin-indicator-rotate-default {
+ width: 20px;
+ height: 20px;
+}
+
+.inula-spin-indicator-rotate-small {
+ width: 14px;
+ height: 14px;
+}
+
+.inula-spin-indicator-rotate-large {
+ width: 32px;
+ height: 32px;
+}
+
+.inula-spin-indicator-dot {
+ position: absolute;
+ width: 36%;
+ height: 36%;
+ border-radius: 50%;
+}
+
+/* 四个点的位置、动画 */
+.inula-spin-indicator-dot0 {
+ top: 0;
+ left: 0;
+ background-color: #3b8cff;
+}
+
+.inula-spin-indicator-dot1 {
+ top: 0;
+ right: 0;
+ background-color: #3388ff;
+}
+
+.inula-spin-indicator-dot2 {
+ bottom: 0;
+ left: 0;
+ background-color: #81b5ff;
+}
+
+.inula-spin-indicator-dot3 {
+ bottom: 0;
+ right: 0;
+ background-color: #b0d1ff;
+}
+
+/* 新增提示样式 */
+.inula-spin-tip {
+ font-size: 16px;
+ color: var(--inula-color-primary);
+}
+
+/* 带children的spin */
+.loading-container {
+ width: 100%;
+ height: 100%;
+ background-color: rgba(255, 255, 255, 0.6);
+
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ position: absolute;
+ z-index: 10;
+ top: 0;
+ left: 0;
+}
+
+/* 进度条 */
+.inula-spin-progress {
+ position: relative;
+ width: 44px;
+ height: 10px;
+ border-radius: 5px;
+ background-color: #f5f5f5;
+}
+
+.inula-spin-progres-small {
+ width: 32px;
+ height: 6px;
+ border-radius: 3px;
+}
+
+.inula-spin-progress-large {
+ width: 64px;
+ height: 14px;
+ border-radius: 7px;
+}
+
+.inula-spin-progress-track {
+ position: absolute;
+ left: 0;
+ top: 0;
+ height: 100%;
+ background-color: var(--inula-color-primary);
+ z-index: 10;
+ border-radius: 5px;
+}
+
+.inula-spin-progress-track-small {
+ border-radius: 3px;
+}
+
+.inula-spin-progress-track-large {
+ border-radius: 7px;
+}
+
+
+/* .outer {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.6);
+ z-index: 100;
+ display: none;
+}
+
+.left {
+ position: relative;
+ width: 100px;
+ height: 200px;
+ overflow: hidden;
+}
+
+.leftcircle {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 160px;
+ height: 160px;
+ border: 20px solid #999;
+ border-radius: 50%;
+ border-bottom-color: yellowgreen;
+ border-left-color: yellowgreen;
+ transform: rotate(-135deg);
+
+ transition: transform 0.05s;
+}
+
+.right {
+ position: relative;
+ width: 100px;
+ height: 200px;
+ overflow: hidden;
+}
+
+.rightcircle {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 160px;
+ height: 160px;
+ border: 20px solid #999;
+ border-radius: 50%;
+ border-top-color: yellowgreen;
+ border-right-color: yellowgreen;
+ transform: rotate(-135deg);
+
+ transition: transform 0.05s;
+} */
diff --git a/packages/inula2-ui2/library_code/src/components/spin/index.jsx b/packages/inula2-ui2/library_code/src/components/spin/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7d1a54e22735984f0d0c5d84aaa685aa606e69d0
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/spin/index.jsx
@@ -0,0 +1,182 @@
+import "./index.css";
+
+// 防抖函数
+const debounce = (delay, fn) => {
+ let timer = null;
+ return function () {
+ const context = this;
+ const args = arguments;
+ clearTimeout(timer);
+ timer = setTimeout(() => {
+ fn.apply(context, args);
+ }, delay);
+ };
+};
+
+function shouldDelay(spinning, delay) {
+ return !!spinning && !!delay && !Number.isNaN(Number(delay));
+}
+
+const Spin = ({
+ delay,
+ fullscreen = false,
+ indicator,
+ percent, //number | "auto"
+ size = "default",
+ spinning = true,
+ tip,
+ wrapperClassName,
+ className,
+ children,
+ style,
+ maxProgressWidth = 44,
+ ...rest
+}) => {
+ let isNestedPattern = typeof children !== "undefined" && !fullscreen;
+ let customSpinning = spinning && !shouldDelay(spinning, delay);
+
+ let infiniteProgress = percent === "auto" ? 0 : null;
+
+ if (size === "large") {
+ maxProgressWidth = 64;
+ } else if (size === "small") {
+ maxProgressWidth = 32;
+ }
+
+ // let rightTransform =
+ // percent * 3.6 >= 0
+ // ? `rotate(${-135 + Math.min(percent * 3.6, 180)}deg)`
+ // : "rotate(-135deg)";
+ // let leftTransform =
+ // percent * 3.6 >= 180 + 150
+ // ? `rotate(${-135 + Math.min(percent * 3.6 - 180, 180)}deg)`
+ // : "rotate(-135deg)";
+
+ watch(() => {
+ if (percent === "auto") {
+ const interval = setInterval(() => {
+ infiniteProgress = (infiniteProgress + 1) % 100;
+ }, 100);
+
+ return () => {
+ clearInterval(interval);
+ };
+ }
+
+ if (spinning && delay) {
+ const showSpinning = debounce(delay, () => {
+ customSpinning = true;
+ });
+
+ showSpinning();
+
+ return () => {
+ showSpinning?.cancel();
+ customSpinning = false;
+ };
+ }
+ });
+
+ const classNames = [
+ "inula-spin-wrapper",
+ wrapperClassName,
+ fullscreen && "inula-spin-fullscreen",
+ fullscreen && customSpinning && "inula-spin-fullscreen-show",
+ ]
+ .filter(Boolean)
+ .join(" ");
+ const styles = { ...style };
+
+ const SpinIndicator = () => {
+ if (indicator) {
+ return indicator;
+ }
+ if (percent >= 0 || percent === "auto") {
+ return (
+
+ //
+ );
+ }
+
+ const itemClassNames = (index) => {
+ return ["inula-spin-indicator-dot", `inula-spin-indicator-dot${index}`]
+ .filter(Boolean)
+ .join(" ");
+ };
+
+ const rotateContainerClassNames = [
+ "inula-spin-indicator-rotate",
+ `inula-spin-indicator-rotate-${size}`,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ return (
+
+
+ {Array(4)
+ .fill(0)
+ .map((_, index) => (
+
+ ))}
+
+ {tip && (isNestedPattern || fullscreen) ? (
+
{tip}
+ ) : null}
+
+ );
+ };
+
+ if (isNestedPattern) {
+ return (
+
+ {customSpinning && (
+
+
+
+ )}
+ {children}
+
+ );
+ }
+
+ if (fullscreen) {
+ return (
+
+ {customSpinning && }
+
+ );
+ }
+
+ return (
+
+ {customSpinning && }
+
+ );
+};
+
+export default Spin;
diff --git a/packages/inula2-ui2/library_code/src/components/switch/demo.jsx b/packages/inula2-ui2/library_code/src/components/switch/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..4f35888bafb8773ae86f3d04eee0625b89509f39
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/switch/demo.jsx
@@ -0,0 +1,26 @@
+import demo1 from "./demos/demo1.jsx";
+import demo2 from "./demos/demo2.jsx";
+import demo3 from "./demos/demo3.jsx";
+
+const SwitchDemo = () => {
+ return (
+
+ )
+}
+
+export default SwitchDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/switch/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/switch/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..42cfcae6d7934fe17d3314b9ff1615c7191579a1
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/switch/demos/demo1.jsx
@@ -0,0 +1,53 @@
+import Switch from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const SwitchDemo = () => {
+ let checked = false;
+
+ return (
+
+
+ 默认型号、小号开关
+
+ 默认型号
+
+ 小号
+
+
+ 默认选中
+
+ 默认选中
+
+
+ 禁用开关
+
+ 默认选中禁用
+
+ 禁用
+
+
+ );
+};
+
+export default SwitchDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/switch/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/switch/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c651beb61adb0d28f47ccf78d380f4b54909ab8c
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/switch/demos/demo2.jsx
@@ -0,0 +1,28 @@
+import Switch from "../index.jsx";
+import Button from "../../button/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const SwitchDemo = () => {
+ let checked = false;
+
+ return (
+
+
+ 外部受控开关
+
+ 选中
+
+
+
+
+ );
+};
+
+export default SwitchDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/switch/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/switch/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..5e182bad6ebfffe116b39427c1800035a9def456
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/switch/demos/demo3.jsx
@@ -0,0 +1,33 @@
+import Switch from "../index.jsx";
+import Icon from "../../icon/index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const SwitchDemo = () => {
+ return (
+
+
+ 带内容的开关
+
+
+ }
+ unCheckedChildren={}
+ defaultChecked
+ />
+
+
+ );
+};
+
+export default SwitchDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/switch/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/switch/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..57c2ab2f615eb0bd1895c4f058f7e676bf90ecaa
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/switch/demos/demo4.jsx
@@ -0,0 +1,23 @@
+import Switch from "../index.jsx";
+import Tag from "../../tag/index.jsx";
+
+const SwitchDemo = () => {
+ return (
+
+ );
+};
+
+export default SwitchDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/switch/index.css b/packages/inula2-ui2/library_code/src/components/switch/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..2058735c23ed5fcf4aa1a7fc25e33419c614b364
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/switch/index.css
@@ -0,0 +1,146 @@
+.inula-switch,
+.inula-switch-default {
+ min-width: 48px;
+ height: 22px;
+ border-radius: 11px;
+ background-color: var(--inula-switch-default-bg);
+ position: relative;
+}
+
+.inula-switch:hover {
+ cursor: pointer;
+ background-color: var(--inula-switch-default-hover-bg);
+ transition: background-color 0.2s ease-in-out;
+}
+
+.inula-switch-expand {
+ min-width: 100%;
+ opacity: 0;
+ padding: 0 13px;
+}
+
+/* 切换手柄按钮 */
+.inula-switch-btn {
+ width: 18px;
+ height: 18px;
+ border-radius: 50%;
+ background-color: #fff;
+ position: absolute;
+ top: 2px;
+ left: 2px;
+ transition: all 0.3s ease-in-out;
+ box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2);
+}
+
+.inula-switch-btn-checked {
+ left: calc(100% - 20px);
+}
+
+/* 非选中禁用状态 */
+.inula-switch-disabled {
+ background-color: var(--inula-switch-disabled-bg);
+ cursor: not-allowed;
+}
+
+.inula-switch-disabled:hover {
+ background-color: var(--inula-switch-disabled-bg);
+ cursor: not-allowed;
+}
+
+/* 选中状态 */
+.inula-switch-checked {
+ background-color: var(--inula-switch-checked-bg);
+ transition: background-color 0.3s ease-in-out;
+}
+
+.inula-switch-checked:hover {
+ background-color: var(--inula-switch-checked-hover-bg);
+}
+
+/* 选中禁用状态 */
+.inula-switch-checked-disabled {
+ background-color: var(--inula-switch-checked-disabled-bg);
+ cursor: not-allowed !important;
+}
+
+.inula-switch-checked-disabled:hover {
+ background-color: var(--inula-switch-checked-disabled-bg);
+}
+
+.inula-switch-content {
+ width: calc(100% - 18px);
+ text-align: center;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ font-size: 12px;
+ color: #fff;
+ right: 0;
+ transition: transform 0.3s;
+}
+
+.inula-switch-content-checked {
+ right: unset;
+ left: 0;
+}
+
+/* loading样式 */
+.inula-switch-loading:hover {
+ cursor: not-allowed;
+ background-color: var(--inula-switch-default-bg) !important;
+}
+
+.inula-switch-checked-loading:hover {
+ cursor: not-allowed;
+ background-color: var(--inula-switch-checked-bg) !important;
+}
+
+.inula-switch-loading-circle {
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ border: 1px solid var(--inula-switch-checked-disabled-bg);
+ border-top-color: #fff;
+ border-bottom-color: #fff;
+ border-left-color: #fff;
+ border-radius: 50%;
+ animation: inula-switch-spin 0.8s linear infinite;
+ top: 2px;
+ left: 2px;
+}
+
+@keyframes inula-switch-spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+
+/* 小尺寸开关 */
+.inula-switch-small {
+ min-width: 28px;
+ height: 16px;
+ border-radius: 8px;
+}
+
+.inula-switch-small .inula-switch-btn {
+ width: 12px;
+ height: 12px;
+}
+
+.inula-switch-small .inula-switch-btn-checked {
+ left: calc(100% - 14px);
+}
+
+.inula-switch-small .inula-switch-content {
+ width: calc(100% - 12px);
+ font-size: 10px;
+}
+
+.inula-switch-small .inula-switch-loading-circle {
+ width: 8px;
+ height: 8px;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/switch/index.jsx b/packages/inula2-ui2/library_code/src/components/switch/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..607e54d8e4a2ee2566b6e45ec677b76d06ea56b0
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/switch/index.jsx
@@ -0,0 +1,112 @@
+import "./index.css";
+
+const Switch = ({
+ defaultChecked = false,
+ defaultValue = defaultChecked,
+ disabled = false,
+ loading = false,
+ size = "default", //default, small
+ checked,
+ onChange,
+ onClick,
+ className,
+ style,
+ checkedChildren,
+ unCheckedChildren,
+ variant = "outlined", // outlined | filled | borderless | underlined
+}) => {
+ let isChecked = checked !== undefined ? checked : defaultChecked || defaultValue;
+
+ const classNames = (
+ isChecked
+ ? [
+ "inula-switch",
+ "inula-switch-checked",
+ `inula-switch-${variant}`,
+ size && `inula-switch-${size}`,
+ disabled && "inula-switch-checked-disabled",
+ loading && "inula-switch-checked-loading",
+ className,
+ ]
+ : [
+ "inula-switch",
+ `inula-switch-${variant}`,
+ size && `inula-switch-${size}`,
+ disabled && "inula-switch-disabled",
+ loading && "inula-switch-loading",
+ className,
+ ]
+ )
+ .filter(Boolean)
+ .join(" ");
+
+ // console.log("classNames", classNames);
+
+ const btnClassNames = [
+ "inula-switch-btn",
+ isChecked ? "inula-switch-btn-checked" : "",
+ loading && "inula-switch-loading"
+ ].filter(Boolean).join(" ");
+
+ const contentClassNames = [
+ "inula-switch-content",
+ isChecked ? "inula-switch-content-checked" : "",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const styles = {
+ ...style,
+ };
+
+ const handleSwitchChange = (e) => {
+
+ if (disabled || loading) return;
+
+ if (checked !== undefined) {
+ e.target.checked = checked;
+ isChecked = checked;
+ if (onChange) {
+ onChange(e);
+ }
+ if (onClick) {
+ onClick(e);
+ }
+ return;
+ }
+
+ isChecked = e.target.checked;
+ if (onChange) {
+ onChange(e);
+ }
+ if (onClick) {
+ onClick(e);
+ }
+ };
+
+ return (
+
+ );
+};
+
+export default Switch;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demo.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7eed3ecd908c77df6e2bf6714466ffa7bc851a45
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demo.jsx
@@ -0,0 +1,105 @@
+import demo1 from "./demos/demo1.jsx";
+import demo2 from "./demos/demo2.jsx";
+import demo3 from "./demos/demo3.jsx";
+import demo4 from "./demos/demo4.jsx";
+import demo5 from "./demos/demo5.jsx";
+import demo6 from "./demos/demo6.jsx";
+import demo7 from "./demos/demo7.jsx";
+import demo8 from "./demos/demo8.jsx";
+import demo9 from "./demos/demo9.jsx";
+import demo10 from "./demos/demo10.jsx";
+import demo11 from "./demos/demo11.jsx";
+
+const TabsDemo = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
指示条
+
设置 indicator 属性,自定义指示条宽度和对齐方式。
+
+
+
+
+
+
位置
+
有四个位置,tabPosition="left|right|top|bottom"。
+
+
+
+
+
+
大小
+
有三种大小,size="small|middle|large"。
+
+
+
+
+
+
新增和关闭标签
+
只有卡片样式的页签支持新增和关闭选项。使用 closable={false} 禁止关闭。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6a927c93ab4a648bc133e85ec9e716663fe0ae50
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo1.jsx
@@ -0,0 +1,39 @@
+import Tabs from "../index.jsx";
+
+const TabsDemo = () => {
+
+ const onChange = (key) => {
+ console.log(key);
+ };
+
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+
+ return (
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo10.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo10.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..2226f7c05367925b285a8d7f8eb68c62ddb0bcc2
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo10.jsx
@@ -0,0 +1,43 @@
+import Tabs from "../index.jsx";
+import Icon from "../../icon/index.jsx";
+import Button from "../../button/index.jsx";
+
+const LeftExtraContent = ;
+const RightExtraContent = ;
+
+const TabsDemo = () => {
+ let tabBarExtraContent = { left: LeftExtraContent, right: RightExtraContent };
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ icon: ,
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+ );
+};
+
+export default TabsDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo11.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo11.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..62b6c5b0e0fdefdc2e6552b84ec565784f24fdae
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo11.jsx
@@ -0,0 +1,40 @@
+import Tabs from "../index.jsx";
+import Button from "../../button/index.jsx";
+
+const TabsDemo = () => {
+ let mode = "top";
+
+ return (
+
+
+ {
+ const id = String(i);
+ return {
+ label: `Tab-${id}`,
+ key: id,
+ disabled: i === 28,
+ children: `Content of tab ${id}`,
+ };
+ })}
+ />
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..0c1d28f98555779694dc1313dac75c11ff3da160
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo2.jsx
@@ -0,0 +1,39 @@
+import Tabs from "../index.jsx";
+
+const TabsDemo = () => {
+ const onChange = (key) => {
+ console.log(key);
+ };
+
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ disabled: true,
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+
+ return (
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..84ad3a4966ee72ab92dd2303f5b9e5f91772ca3f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo3.jsx
@@ -0,0 +1,35 @@
+import Tabs from "../index.jsx";
+
+const TabsDemo = () => {
+ const onChange = (key) => {
+ console.log(key);
+ };
+ return (
+
+
+ {
+ const id = String(i + 1);
+ return {
+ label: `Tab ${id}`,
+ key: id,
+ children: `Content of Tab Pane ${id}`,
+ };
+ })}
+ centered
+ defaultActiveKey="1"
+ onChange={onChange}
+ />
+
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..5e21b9252260f9c6e1a49e759c41abdf11d3efcf
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo4.jsx
@@ -0,0 +1,35 @@
+import Tabs from "../index.jsx";
+import Icon from "../../icon/index.jsx";
+
+const TabsDemo = () => {
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ icon: ,
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ icon: ,
+ },
+ ];
+ return (
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f8cc614b8314ffbfed7cccddca7c1d7c4a2abcf2
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo5.jsx
@@ -0,0 +1,47 @@
+import Tabs from "../index.jsx";
+import Button from "../../button/index.jsx";
+
+const TabsDemo = () => {
+ let indicator = "center"; // start | center | end | { size?: number | (origin: number) => number; align: start | center | end; } 自定义指示器长度和对齐方式
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+
+ origin - 20, align: indicator }} />
+
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo6.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo6.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..73beeabbf4e0cb90dd610e5552dffc8da961c58f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo6.jsx
@@ -0,0 +1,48 @@
+import Tabs from "../index.jsx";
+import Button from "../../button/index.jsx";
+
+const TabsDemo = () => {
+ let pos = "top"; // top | bottom | left | right
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo7.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo7.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..3d61a37deb5e6f5292196725e792b86204758a3b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo7.jsx
@@ -0,0 +1,55 @@
+import Tabs from "../index.jsx";
+import Button from "../../button/index.jsx";
+
+const TabsDemo = () => {
+ let size = "default"; //small | default | large
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3" },
+ ];
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo8.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo8.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..60d3650c203f70af948f2a520bfbc97d52567a33
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo8.jsx
@@ -0,0 +1,27 @@
+import Tabs from "../index.jsx";
+
+const TabsDemo = () => {
+ const items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ { key: "3", label: "Tab 3", children: "Content of Tab Pane 3", closable: false },
+ ];
+
+ return (
+
+ )
+}
+
+export default TabsDemo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/demos/demo9.jsx b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo9.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..b641ac93d9e11bc811ee62086e8b3f26f4ca37b0
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/demos/demo9.jsx
@@ -0,0 +1,80 @@
+import Button from "../../button/index.jsx";
+import Tabs from "../index.jsx";
+
+const TabsDemo = () => {
+ let items = [
+ {
+ key: "1",
+ label: "Tab 1",
+ children: "Content of Tab Pane 1",
+ },
+ {
+ key: "2",
+ label: "Tab 2",
+ children: "Content of Tab Pane 2",
+ },
+ {
+ key: "3",
+ label: "Tab 3",
+ children: "Content of Tab Pane 3",
+ closable: false,
+ },
+ ];
+ let MyActiveKey;
+ let newTabIndex = 0;
+
+ const add = () => {
+ const newMyActiveKey = `newTab${newTabIndex++}`;
+ items.push({
+ label: "New Tab",
+ children: "New Tab Pane",
+ key: newMyActiveKey,
+ });
+ MyActiveKey = newMyActiveKey;
+ };
+
+ const remove = (targetKey) => {
+ const targetIndex = items.findIndex((item) => item.key === targetKey);
+ const newItems = items.filter((item) => item.key !== targetKey);
+ const index =
+ targetIndex === newItems.length ? targetIndex - 1 : targetIndex;
+ MyActiveKey =
+ items.length && targetKey === MyActiveKey
+ ? items[index].key
+ : MyActiveKey;
+ items = newItems;
+ };
+
+ const onEdit = (targetKey, action) => {
+ if (action === "add") {
+ add();
+ } else {
+ remove(targetKey);
+ }
+ };
+ return (
+
+ );
+};
+
+export default TabsDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/index.css b/packages/inula2-ui2/library_code/src/components/tabs/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..96a3e920fb4d3cbf9ffd9f32f12388f3993a5882
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/index.css
@@ -0,0 +1,381 @@
+.inula-tabs {
+ max-width: 100%;
+ min-height: 150px;
+ display: flex;
+}
+
+/* 选项卡bar布局 */
+.inula-tabs-bar {
+ display: flex;
+ justify-content: flex-start;
+ max-width: 100%;
+ /* type=line */
+ gap: 32px;
+ transition: all 0.3s ease-in-out;
+}
+
+.inula-tabs-bar text {
+ transition: all 0.3s ease-in-out;
+}
+
+/* 选项卡额外内容布局 */
+.inula-tabs-bar-extra-content-left {
+ height: 100%;
+ display: flex;
+ align-items: center;
+}
+
+.inula-tabs-bar-extra-content-left.inula-tabs-bar-pos-left,
+.inula-tabs-bar-extra-content-left.inula-tabs-bar-pos-right {
+ width: 100%;
+ justify-content: center;
+}
+
+.inula-tabs-bar-extra-content-right {
+ height: 100%;
+ display: flex;
+ flex: 1;
+ align-items: center;
+ justify-content: flex-end;
+}
+
+.inula-tabs-bar-extra-content-right.inula-tabs-bar-pos-left,
+.inula-tabs-bar-extra-content-right.inula-tabs-bar-pos-right {
+ width: 100%;
+ align-items: flex-end;
+ justify-content: center;
+}
+
+/* 选项卡相对bar位置布局 */
+.inula-tabs-bar.inula-tabs-bar-left {
+ justify-content: flex-start;
+}
+
+.inula-tabs-bar.inula-tabs-bar-center {
+ justify-content: center;
+}
+
+.inula-tabs-bar.inula-tabs-bar-right {
+ justify-content: flex-end;
+}
+
+/* 选项卡整体位置布局 */
+.inula-tabs-bar.inula-tabs-bar-pos-top,
+.inula-tabs-bar.inula-tabs-bar-pos-bottom {
+ max-width: 100%;
+ height: 48px;
+ flex-direction: row;
+
+ overflow-x: scroll;
+ overflow-y: hidden;
+ /* 隐藏滚动条 */
+ scrollbar-width: none;
+}
+
+.inula-tabs-bar.inula-tabs-bar-pos-left,
+.inula-tabs-bar.inula-tabs-bar-pos-right {
+ max-height: 100%;
+ min-width: 80px;
+ flex-direction: column;
+
+ overflow-x: hidden;
+ overflow-y: scroll;
+ /* 隐藏滚动条 */
+ scrollbar-width: none;
+}
+
+.inula-tabs-bar.inula-tabs-bar-pos-top {
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.inula-tabs-bar.inula-tabs-bar-pos-bottom {
+ border-top: 1px solid #f0f0f0;
+}
+
+.inula-tabs-bar.inula-tabs-bar-pos-left {
+ border-right: 1px solid #f0f0f0;
+}
+
+.inula-tabs-bar.inula-tabs-bar-pos-right {
+ border-left: 1px solid #f0f0f0;
+}
+
+.inula-tabs.inula-tabs-bar-pos-top {
+ flex-direction: column;
+ justify-content: flex-start;
+}
+
+.inula-tabs.inula-tabs-bar-pos-bottom {
+ flex-direction: column-reverse;
+ justify-content: flex-end;
+}
+
+.inula-tabs.inula-tabs-bar-pos-left {
+ flex-direction: row;
+ justify-content: flex-start;
+}
+
+.inula-tabs.inula-tabs-bar-pos-right {
+ flex-direction: row-reverse;
+ justify-content: flex-end;
+}
+
+/* 选项卡item */
+.inula-tabs-bar-item {
+ display: flex;
+ align-items: center;
+ white-space: nowrap;
+ gap: 14px;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+.inula-tabs-bar-item-content {
+ display: flex;
+ align-items: center;
+ gap: 7px;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-pos-top,
+.inula-tabs-bar-item.inula-tabs-bar-pos-bottom {
+ height: 100%;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-pos-left,
+.inula-tabs-bar-item.inula-tabs-bar-pos-right {
+ width: 100%;
+ justify-content: center;
+}
+
+.inula-tabs-bar-item .inula-icon {
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.88);
+}
+
+/* 选项卡item hover状态样式 */
+.inula-tabs-bar-item-content:hover > .inula-icon,
+.inula-tabs-bar-item-content:hover text {
+ cursor: pointer;
+ color: var(--inula-color-primary-hover);
+ transition: color 0.1s ease-in-out;
+}
+
+/* 选项卡item disabled状态样式 */
+.inula-tabs-bar-item.inula-tabs-bar-item-disabled .inula-icon,
+.inula-tabs-bar-item.inula-tabs-bar-item-disabled text {
+ color: rgba(0, 0, 0, 0.25);
+ cursor: not-allowed;
+}
+
+/** ---type=line--- **/
+/* 选项卡item active状态样式 */
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active
+ .inula-icon,
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active text {
+ color: var(--inula-color-primary);
+}
+
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active {
+ position: relative;
+}
+
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active::after {
+ content: "";
+ position: absolute;
+ background-color: var(--inula-color-text);
+}
+
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-top::after {
+ bottom: 0;
+ left: 0;
+ width: var(--indicator-size);
+ height: 2px;
+}
+
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-bottom::after {
+ top: 0;
+ left: 0;
+ width: var(--indicator-size);
+ height: 2px;
+}
+
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-left::after {
+ top: 0;
+ right: 0;
+ height: var(--indicator-size);
+ width: 2px;
+}
+
+.inula-tabs-bar-item-line.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-right::after {
+ top: 0;
+ left: 0;
+ height: var(--indicator-size);
+ width: 2px;
+}
+
+/**--- indicator ---**/
+/**--- indicator ---**/
+/* 水平方向对齐 */
+.inula-tabs-bar-indicator-start.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-top::after,
+.inula-tabs-bar-indicator-start.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-bottom::after {
+ left: 0;
+}
+
+.inula-tabs-bar-indicator-center.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-top::after,
+.inula-tabs-bar-indicator-center.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-bottom::after {
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+.inula-tabs-bar-indicator-end.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-top::after,
+.inula-tabs-bar-indicator-end.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-bottom::after {
+ left: unset;
+ right: 0;
+}
+
+/* 垂直方向对齐 */
+.inula-tabs-bar-indicator-start.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-left::after,
+.inula-tabs-bar-indicator-start.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-right::after {
+ top: 0;
+}
+
+.inula-tabs-bar-indicator-center.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-left::after,
+.inula-tabs-bar-indicator-center.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-right::after {
+ top: 50%;
+ transform: translateY(-50%);
+}
+
+.inula-tabs-bar-indicator-end.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-left::after,
+.inula-tabs-bar-indicator-end.inula-tabs-bar-item-line.inula-tabs-bar-item-active.inula-tabs-bar-pos-right::after {
+ bottom: 0;
+}
+
+/** ---type=card || editable-card--- **/
+.inula-tabs-bar.inula-tabs-bar-card,
+.inula-tabs-bar.inula-tabs-bar-editable-card {
+ gap: 2px;
+}
+
+.inula-tabs-bar.inula-tabs-bar-card.inula-tabs-bar-pos-top,
+.inula-tabs-bar.inula-tabs-bar-card.inula-tabs-bar-pos-bottom,
+.inula-tabs-bar.inula-tabs-bar-editable-card.inula-tabs-bar-pos-top,
+.inula-tabs-bar.inula-tabs-bar-editable-card.inula-tabs-bar-pos-bottom {
+ height: 32px;
+}
+
+.inula-tabs-bar.inula-tabs-bar-card.inula-tabs-bar-pos-left,
+.inula-tabs-bar.inula-tabs-bar-card.inula-tabs-bar-pos-right,
+.inula-tabs-bar.inula-tabs-bar-editable-card.inula-tabs-bar-pos-left,
+.inula-tabs-bar.inula-tabs-bar-editable-card.inula-tabs-bar-pos-right {
+ min-width: 80px;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-item-card,
+.inula-tabs-bar-item.inula-tabs-bar-item-editable-card {
+ background-color: #fafafa;
+ border: 1px solid #f0f0f0;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-item-card.inula-tabs-bar-pos-top,
+.inula-tabs-bar-item.inula-tabs-bar-item-editable-card.inula-tabs-bar-pos-top {
+ border-radius: 8px 8px 0 0;
+ padding: 0 16px;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-item-card.inula-tabs-bar-pos-bottom,
+.inula-tabs-bar-item.inula-tabs-bar-item-editable-card.inula-tabs-bar-pos-bottom {
+ border-radius: 0 0 8px 8px;
+ padding: 0 16px;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-item-card.inula-tabs-bar-pos-left,
+.inula-tabs-bar-item.inula-tabs-bar-item-editable-card.inula-tabs-bar-pos-left {
+ border-radius: 8px 0 0 8px;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-item-card.inula-tabs-bar-pos-right,
+.inula-tabs-bar-item.inula-tabs-bar-item-editable-card.inula-tabs-bar-pos-right {
+ border-radius: 0 8px 8px 0;
+}
+
+/* 选项卡item active状态样式 */
+.inula-tabs-bar-item-card.inula-tabs-bar-item.inula-tabs-bar-item-active,
+.inula-tabs-bar-item-editable-card.inula-tabs-bar-item.inula-tabs-bar-item-active,
+.inula-tabs-bar-item-card.inula-tabs-bar-item.inula-tabs-bar-item-active
+ .inula-tabs-bar-item-content
+ > .inula-icon,
+.inula-tabs-bar-item-editable-card.inula-tabs-bar-item.inula-tabs-bar-item-active
+ .inula-tabs-bar-item-content
+ > .inula-icon {
+ background-color: #fff;
+ color: var(--inula-color-text);
+}
+
+.inula-tabs-bar-item-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-top,
+.inula-tabs-bar-item-editable-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-top {
+ border-bottom: 1px solid #fff;
+}
+
+.inula-tabs-bar-item-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-bottom,
+.inula-tabs-bar-item-editable-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-bottom {
+ border-top: 1px solid #fff;
+}
+
+.inula-tabs-bar-item-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-left,
+.inula-tabs-bar-item-editable-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-left {
+ border-right: 1px solid #fff;
+}
+
+.inula-tabs-bar-item-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-right,
+.inula-tabs-bar-item-editable-card.inula-tabs-bar-item.inula-tabs-bar-item-active.inula-tabs-bar-pos-right {
+ border-left: 1px solid #fff;
+}
+
+/** ---type=editable-card--- **/
+.inula-tabs-bar-item-close:hover i {
+ color: #000 !important;
+ cursor: pointer;
+ transition: all 0.3s ease-in-out;
+}
+
+.inula-tabs-bar-item.inula-tabs-bar-item-disabled
+ .inula-tabs-bar-item-close:hover
+ i {
+ color: #8c8c8c !important;
+ cursor: not-allowed;
+}
+
+.inula-tabs-bar-item-add {
+ display: flex;
+ align-items: center;
+ border: 1px solid #f0f0f0;
+ padding: 0 8px;
+ height: 100%;
+ border-radius: 8px 8px 0 0;
+}
+
+.inula-tabs-bar-item-add i {
+ color: #000;
+}
+
+.inula-tabs-bar-item-add:hover i {
+ color: var(--inula-color-primary-hover);
+ cursor: pointer;
+ transition: all 0.1s ease-in-out;
+}
+
+/**--- size:small, default, large ---**/
+.inula-tabs-bar-small {
+ gap: 16px;
+}
+
+.inula-tabs-bar-small .inula-tabs-bar-item-content text {
+ font-size: 14px;
+}
+
+.inula-tabs-bar-large {
+ gap: 36px;
+}
+
+.inula-tabs-bar-large .inula-tabs-bar-item-content text {
+ font-size: 18px;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/tabs/index.jsx b/packages/inula2-ui2/library_code/src/components/tabs/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ce82c37378e3753eebe453c7508986d615ed8214
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tabs/index.jsx
@@ -0,0 +1,247 @@
+import "./index.css";
+import Icon from "../icon/index.jsx";
+import { watch } from "@openinula/next";
+
+/**
+TabProps: {
+ key: string; // 选项卡唯一标识
+ label: ReactNode; // 选项卡头显示文字
+ disabled?: boolean; // 是否禁用该选项卡,默认为 false
+ forceRender?: boolean; // 被隐藏时是否渲染 DOM,默认为 false
+ destoryOnHide?: boolean; // 被隐藏时是否销毁 DOM,默认为 false
+ closeIcon?: ReactNode; // 关闭按钮,只在 type="editable-card" 时有效, 设置为null或false时不显示关闭按钮
+ closable?: boolean; // 是否显示关闭按钮,只在 type="editable-card" 时有效
+ icon?: ReactNode; // 选项卡图标
+ children?: ReactNode; // 选项卡内容
+}
+**/
+
+const Tabs = ({
+ type = "line", // line | card | editable-card
+ size = "default", // default | large | small
+ tabPosition = "top", // top | bottom | left | right
+ centered = false, // true | false
+ // animated = false, // true | false
+ // destoryOnHide = false, // true | false
+ addIcon = , // ReactNode,只在 type="editable-card" 时有效
+ hideAdd = false, // true | false 只在 type="editable-card" 时有效
+ // removeIcon = , // ReactNode,只在 type="editable-card" 时有效
+ indicator, //{ size?: number | (origin: number) => number; align: start | center | end; } 自定义指示器长度和对齐方式
+ // renderTabBar, // (props: TabBarProps) => ReactNode; 自定义 TabBar 内容
+ items, // TabProps[]; 选项卡列表
+ activeKey, // string; 当前选中的选项卡的 key
+ defaultActiveKey = items[0].key, // string; 默认选中的选项卡的 key
+ tabBarExtraContent, // ReactNode | {left?: ReactNode, right?: ReactNode},TabBar 额外内容
+ tabBarGutter, // number; TabBar 的间隔距离,单位为 px
+ tabBarStyle, // CSSProperties; TabBar 的样式
+ className, // string
+ style, // CSSProperties; 选项卡的样式
+ onChange, // (key: string) => void; 选项卡切换时的回调函数
+ onTabClick, // (key: string, e: React.MouseEvent) => void; 选项卡点击时的回调函数
+ onEdit, // (targetKey: string, action: 'add' | 'remove') => void; 选项卡编辑时的回调函数, 只在 type="editable-card" 时有效
+ onTabScroll, // ({ direction: left | right | top | bottom }) => void 选项卡滚动时的回调函数
+}) => {
+ let customActiveKey = activeKey || defaultActiveKey;
+ let customItems = items || [];
+
+ watch(() => {
+ // console.log(activeKey);
+ customItems = items || [];
+ // customActiveKey = activeKey || defaultActiveKey;
+ });
+
+ function addItem(item) {
+ customItems.push(item);
+ customActiveKey = item.key;
+ }
+
+ function removeItem(key) {
+ const targetIndex = customItems.findIndex((item) => item.key === key);
+ customItems = customItems.filter((item) => item.key !== key);
+ const index =
+ targetIndex === customItems.length ? targetIndex - 1 : targetIndex;
+ customActiveKey =
+ customItems.length && key === customActiveKey
+ ? customItems[index].key
+ : customActiveKey;
+ }
+
+ function setActiveKey(key) {
+ customActiveKey = key;
+ }
+
+ const classNames = [
+ "inula-tabs",
+ `inula-tabs-bar-pos-${tabPosition}`,
+ className,
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const tabBarClassNames = [
+ "inula-tabs-bar",
+ `inula-tabs-bar-pos-${tabPosition}`,
+ `inula-tabs-bar-${type}`,
+ `inula-tabs-bar-${size}`,
+ centered ? "inula-tabs-bar-center" : "",
+ ]
+ .filter(Boolean)
+ .join(" ");
+
+ const tabBarStyles = {
+ ...tabBarStyle,
+ ...{ gap: `${tabBarGutter}px` },
+ };
+
+ const indictorSize = () => {
+ if (indicator && indicator.size) {
+ if (typeof indicator.size === "number") {
+ return `${indicator.size}px`;
+ } else if (typeof indicator.size === "function") {
+ const value = indicator.size(0);
+ const sign = value > 0 ? "+" : value < 0 ? "- " : "";
+ return `calc(100% ${sign} ${Math.abs(value)}px)`;
+ }
+ } else {
+ return "100%";
+ }
+ };
+
+ const handleTabClick = (item, e) => {
+ if (item.disabled) return;
+ if (activeKey) {
+ setActiveKey(item.key);
+ onChange && onChange(item.key, e);
+ onTabClick && onTabClick(item.key, e);
+ } else {
+ setActiveKey(item.key);
+ console.log(activeKey);
+ onChange && onChange(item.key, e);
+ onTabClick && onTabClick(item.key, e);
+ }
+ };
+
+ const handleEdit = (targetKey, action, isDisabled = false) => {
+ if (isDisabled) return;
+ if (onEdit) {
+ //受控,直接返回
+ if (!onEdit) throw new Error("受控模式没有onEdit");
+ onEdit(targetKey, action);
+ return;
+ }
+
+ if (action === "add") {
+ addItem({
+ key: `tab_${Date.now()}`, // 使用时间戳生成唯一key
+ label: "New Tab",
+ children: "New Tab Content",
+ });
+ } else if (action === "remove") {
+ removeItem(targetKey);
+ }
+ };
+
+ return (
+
+ {/* tabBar */}
+
+ {/* tabBar左侧额外内容 */}
+ {tabBarExtraContent && tabBarExtraContent.left && (
+
+ {tabBarExtraContent.left}
+
+ )}
+
+ {/* 标签项 */}
+
+ {(item) => {
+ return (
+
+
handleTabClick(item, e)}
+ >
+ {item.icon}
+ {item.label}
+
+
+
+ handleEdit(item.key, "remove", item.disabled)
+ }
+ >
+ {item.closeIcon
+ ? item.closeIcon
+ : new Icon({
+ value: "close",
+ size: 16,
+ color: "#8c8c8c",
+ })}
+
+
+
+ );
+ }}
+
+
+ {/* 可编辑卡片类型时,添加按钮位置在最后一个标签后面 */}
+ {type === "editable-card" && !hideAdd && (
+
handleEdit(`${customItems.length + 1}`, "add")}
+ >
+ {addIcon}
+
+ )}
+
+ {/* tabBar右侧额外内容 */}
+ {tabBarExtraContent && tabBarExtraContent.right && (
+
+ {tabBarExtraContent.right}
+
+ )}
+
+
+ {/* 内容区域 */}
+
+
+ {(item) => {
+ return (
+
+ {item.children}
+
+ );
+ }}
+
+
+
+ );
+};
+
+export default Tabs;
diff --git a/packages/inula2-ui2/library_code/src/components/tag/demo.jsx b/packages/inula2-ui2/library_code/src/components/tag/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..fc0a936b199260d9124487195c67f933a533a53d
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tag/demo.jsx
@@ -0,0 +1,41 @@
+import './index.css';
+import Tag, { CheckableTag } from './index.jsx';
+import Icon from '../icon/index.jsx';
+import demo1 from './demos/demo1.jsx'
+import demo2 from './demos/demo2.jsx'
+import demo3 from './demos/demo3.jsx'
+import demo4 from './demos/demo4.jsx'
+const Demo = () => {
+
+ return (
+
+
+
基本
+
基本标签的用法,可以通过设置 closeIcon 变为可关闭标签并自定义关闭按钮,设置为 true 时将使用默认关闭按钮。可关闭标签具有 onClose 事件。
+
+
+
+
+
多彩标签
+
我们添加了多种预设色彩的标签样式,用作不同场景使用。如果预设值不能满足你的需求,可以设置为具体的色值。
+
+
+
+ {/*
+
动态添加和删除
+
用数组生成一组标签,可以动态添加和删除。
+
+
*/}
+
+
+
可选中标签
+
可选中标签,第一个默认选中。
+
+
+
+ );
+};
+
+export default Demo;
+
+
diff --git a/packages/inula2-ui2/library_code/src/components/tag/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/tag/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..9d535ab75ec0d2236a5a9e1a770f63039d5bdef5
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tag/demos/demo1.jsx
@@ -0,0 +1,26 @@
+import '../index.css';
+import Tag from '../index.jsx';
+
+const Demo1 = () => {
+ return (
+
+
Tag1
+
+ Link
+
+
+
+ Prevent Default
+
+
+ );
+};
+
+export default Demo1;
+
+
diff --git a/packages/inula2-ui2/library_code/src/components/tag/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/tag/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..75aff9416a15a0e99513180ca59ed2956f18a36b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tag/demos/demo2.jsx
@@ -0,0 +1,24 @@
+import '../index.css';
+import Tag, { CheckableTag } from '../index.jsx';
+
+const Demo2 = () => {
+ const colors = ['magenta', 'red', 'volcano', 'orange', 'gold', 'lime', 'green', 'cyan', 'blue', 'geekblue', 'purple'];
+
+ return (
+
+
+
Presets
+ {colors.map(c =>
{c})}
+
+
+
Custom
+
#2db7f5
+
#87d068
+
+
+ );
+};
+
+export default Demo2;
+
+
diff --git a/packages/inula2-ui2/library_code/src/components/tag/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/tag/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c45f990e65a81c1907e42f429913e3c68f89f081
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tag/demos/demo3.jsx
@@ -0,0 +1,33 @@
+import '../index.css';
+import Tag from '../index.jsx';
+
+const Demo3 = () => {
+ let tags = ['Unremovable', 'Tag 2', '大家读'];
+ let newIndex = 1;
+
+ const handleClose = (removed) => {
+ tags = tags.filter(t => t !== removed);
+ };
+
+ const addTag = () => {
+ const next = `New Tag ${newIndex++}`;
+ tags = [...tags, next];
+ };
+
+ return (
+
+ {tags.map((tag, i) => (
+ handleClose(tag)}
+ >
+ {tag}
+
+ ))}
+ + New Tag
+
+ );
+};
+
+export default Demo3;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tag/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/tag/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..5adb326b3c21a8c63bfcc09ea6ae46cf38eed5f9
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tag/demos/demo4.jsx
@@ -0,0 +1,23 @@
+import '../index.css';
+import { CheckableTag } from '../index.jsx';
+
+const Demo4 = () => {
+ let checked = [true, false, false, false];
+ const tags = ['Movies', 'Books', 'Music', 'Sports'];
+
+ return (
+
+ {tags.map((tag, i) => (
+ { checked[i] = next; }}
+ >
+ {tag}
+
+ ))}
+
+ );
+};
+
+export default Demo4;
diff --git a/packages/inula2-ui2/library_code/src/components/tag/index.css b/packages/inula2-ui2/library_code/src/components/tag/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..8412605cab59ac582b62166d092f3d64a29a296e
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tag/index.css
@@ -0,0 +1,29 @@
+.inula-tag{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;border:1px solid var(--inula-color-default-border,#d9d9d9);border-radius:4px;background:#fafafa;color:#595959;font-size:12px;line-height:22px;user-select:none;transition:all .2s}
+.inula-tag-borderless{border-color:transparent;background:transparent}
+.inula-tag-round{border-radius:999px}
+.inula-tag-disabled{opacity:.5;cursor:not-allowed}
+.inula-tag-icon{display:inline-flex}
+.inula-tag-close{appearance:none;border:0;background:transparent;color:inherit;cursor:pointer;padding:0 2px;font-size:12px;line-height:1}
+.inula-tag-default{background:#fafafa;border-color:#d9d9d9;color:#595959}
+.inula-tag-success{background:#f6ffed;border-color:#b7eb8f;color:#389e0d}
+.inula-tag-processing{background:#e6f7ff;border-color:#91d5ff;color:#1677ff}
+.inula-tag-warning{background:#fffbe6;border-color:#ffe58f;color:#d48806}
+.inula-tag-error{background:#fff2f0;border-color:#ffccc7;color:#cf1322}
+.inula-tag-magenta{background:#fff0f6;border-color:#ffadd2;color:#eb2f96}
+.inula-tag-red{background:#fff1f0;border-color:#ffa39e;color:#cf1322}
+.inula-tag-volcano{background:#fff2e8;border-color:#ffbb96;color:#d46b08}
+.inula-tag-orange{background:#fff7e6;border-color:#ffd591;color:#fa8c16}
+.inula-tag-gold{background:#fffbe6;border-color:#ffe58f;color:#d48806}
+.inula-tag-lime{background:#fcffe6;border-color:#eaff8f;color:#7cb305}
+.inula-tag-green{background:#f6ffed;border-color:#b7eb8f;color:#389e0d}
+.inula-tag-cyan{background:#e6fffb;border-color:#87e8de;color:#08979c}
+.inula-tag-blue{background:#e6f7ff;border-color:#91d5ff;color:#1677ff}
+.inula-tag-geekblue{background:#f0f5ff;border-color:#adc6ff;color:#2f54eb}
+.inula-tag-purple{background:#f9f0ff;border-color:#d3adf7;color:#722ed1}
+.inula-tag-custom{color:#fff}
+.inula-tag-small{height:20px;padding:0 6px;font-size:12px}
+.inula-tag-large{height:28px;padding:0 10px;font-size:14px}
+.inula-tag-checkable{cursor:pointer;border-style:solid}
+.inula-tag-checkable-checked{background:#e6f4ff;border-color:#91caff;color:#1677ff}
+.inula-tag-dashed{border-style:dashed;cursor:pointer;color:#8c8c8c;background:#fafafa}
+
diff --git a/packages/inula2-ui2/library_code/src/components/tag/index.jsx b/packages/inula2-ui2/library_code/src/components/tag/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..7fb4277c3f276203bea8ce12dc050de9ebaf600f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tag/index.jsx
@@ -0,0 +1,94 @@
+import Icon from '../icon/index.jsx';
+import './index.css';
+
+const PRESET_COLORS = [
+ 'magenta','red','volcano','orange','gold','lime','green','cyan','blue','geekblue','purple',
+ 'success','processing','warning','error','default'
+];
+
+const classNames = (...args) => args.filter(Boolean).join(' ');
+
+const isPresetColor = (color) => PRESET_COLORS.includes(String(color));
+
+const Tag = ({
+ children,
+ color = 'default',
+ icon,
+ closable = false,
+ onClose,
+ bordered = true,
+ size = 'default', // small | default | large
+ round = false,
+ disabled = false,
+ className = '',
+ style = {},
+ onClick,
+ ...rest
+}) => {
+ const isPreset = isPresetColor(color);
+ const customStyle = !isPreset && color ? { backgroundColor: color, borderColor: color, color: '#fff', ...style } : style;
+
+ const tagCls = classNames(
+ 'inula-tag',
+ `inula-tag-${size}`,
+ bordered ? '' : 'inula-tag-borderless',
+ isPreset ? `inula-tag-${color}` : 'inula-tag-custom',
+ round ? 'inula-tag-round' : '',
+ disabled ? 'inula-tag-disabled' : '',
+ className,
+ );
+
+ const handleClose = (e) => {
+ e && e.stopPropagation && e.stopPropagation();
+ if (disabled) return;
+ onClose && onClose(e);
+ };
+
+ return (
+
+ {icon ? : null}
+ {children}
+ {closable ? (
+
+ ) : null}
+
+ );
+};
+
+const CheckableTag = ({
+ children,
+ checked,
+ defaultChecked = false,
+ onChange,
+ disabled = false,
+ className = '',
+ ...rest
+}) => {
+ let innerChecked = checked;
+ if (innerChecked == null) innerChecked = defaultChecked;
+
+ const toggle = (e) => {
+ if (disabled) return;
+ const next = !innerChecked;
+ onChange && onChange(next, e);
+ if (checked == null) {
+ innerChecked = next; // 非受控时,交由运行时响应式体系处理
+ }
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export { Tag, CheckableTag };
+export default Tag;
+
+
diff --git a/packages/inula2-ui2/library_code/src/components/tooltip/demo.jsx b/packages/inula2-ui2/library_code/src/components/tooltip/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..6a49fd5674bfa10b95d462ae28363f6a7756f4f0
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tooltip/demo.jsx
@@ -0,0 +1,29 @@
+// import Tooltip from './index.jsx';
+import demo1 from './demos/demo1.jsx';
+import demo2 from './demos/demo2.jsx';
+import demo3 from './demos/demo3.jsx';
+
+function Tooltip() {
+ return (
+
+
+
基本用法
+
最基础的 Tooltip 用法,鼠标悬停显示提示内容。
+
+
+
+
+
不同位置
+
Tooltip 支持在上、下、左、右等不同方向显示。
+
+
+
+
+
模式
+
Tooltip 支持hover和click模式
+
+
+
+ );
+}
+export default Tooltip;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..a944071b44bb7b7fc38a645f0032ac3ad8879011
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo1.jsx
@@ -0,0 +1,14 @@
+import Tooltip from '../index.jsx';
+import Button from '../../button/index.jsx';
+
+function Demo1() {
+ return (
+
+
+
+
+
+ );
+}
+
+export default Demo1;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c7354ffdf8ec78e8874a3f24be2846f10a6f89be
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo2.jsx
@@ -0,0 +1,31 @@
+import Tooltip from '../index.jsx';
+import Button from '../../button/index.jsx';
+import '../index.css';
+
+function Demo() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+export default Demo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..bc718ca1269e7df4c1d53cfdf14c5f1d120b4775
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tooltip/demos/demo3.jsx
@@ -0,0 +1,26 @@
+import Tooltip from '../index.jsx';
+import Button from '../../button/index.jsx';
+import '../index.css';
+
+function Demo() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {/*
+
+
+
+
*/}
+
+ );
+}
+export default Demo;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tooltip/index.css b/packages/inula2-ui2/library_code/src/components/tooltip/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..7d4bc96b55c20dc9af3ba82c8ed1ae9e24f98b61
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tooltip/index.css
@@ -0,0 +1,112 @@
+.tooltip {
+ position: relative;
+ display: inline-block;
+}
+.tooltip-content {
+ position: absolute;
+ bottom: 100%;
+ left: 50%;
+ transform: translateX(-50%);
+ margin-bottom: 8px;
+ padding: 4px 8px;
+ background: rgba(0,0,0,0.75);
+ color: #fff;
+ border-radius: 4px;
+ font-size: 14px;
+ white-space: nowrap;
+ z-index: 1000;
+}
+
+.inula-tooltip-wrapper {
+ position: relative;
+ display: inline-block;
+}
+
+.inula-tooltip {
+ position: absolute;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 0.2s;
+ z-index: 1000;
+}
+
+.inula-tooltip-visible {
+ opacity: 1;
+ pointer-events: auto;
+}
+
+.inula-tooltip-top {
+ bottom: 100%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-8px);
+}
+
+.inula-tooltip-bottom {
+ top: 100%;
+ left: 50%;
+ transform: translateX(-50%) translateY(8px);
+}
+
+.inula-tooltip-left {
+ right: 100%;
+ top: 50%;
+ transform: translateY(-50%) translateX(-8px);
+}
+
+.inula-tooltip-right {
+ left: 100%;
+ top: 50%;
+ transform: translateY(-50%) translateX(8px);
+}
+
+.inula-tooltip-content {
+ background: rgba(0,0,0,0.75);
+ color: #fff;
+ border-radius: 4px;
+ font-size: 14px;
+ padding: 8px 12px;
+ white-space: nowrap;
+ position: relative;
+}
+
+.inula-tooltip-arrow {
+ width: 0;
+ height: 0;
+ position: absolute;
+}
+
+.inula-tooltip-top .inula-tooltip-arrow {
+ left: 50%;
+ top: 100%;
+ transform: translateX(-50%);
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-top: 6px solid rgba(0,0,0,0.75);
+}
+
+.inula-tooltip-bottom .inula-tooltip-arrow {
+ left: 50%;
+ bottom: 100%;
+ transform: translateX(-50%);
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid rgba(0,0,0,0.75);
+}
+
+.inula-tooltip-left .inula-tooltip-arrow {
+ top: 50%;
+ right: -6px;
+ transform: translateY(-50%);
+ border-top: 6px solid transparent;
+ border-bottom: 6px solid transparent;
+ border-left: 6px solid rgba(0,0,0,0.75);
+}
+
+.inula-tooltip-right .inula-tooltip-arrow {
+ top: 50%;
+ left: -6px;
+ transform: translateY(-50%);
+ border-top: 6px solid transparent;
+ border-bottom: 6px solid transparent;
+ border-right: 6px solid rgba(0,0,0,0.75);
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tooltip/index.jsx b/packages/inula2-ui2/library_code/src/components/tooltip/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..c6ec3d5548debd95401282e0059c5e7b962fe8dc
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tooltip/index.jsx
@@ -0,0 +1,93 @@
+import './index.css';
+import { didMount, willUnmount } from '@openinula/next';
+
+// Tooltip 组件,支持多种触发方式和位置
+function Tooltip(props) {
+ const {
+ title,
+ children,
+ placement = 'top',
+ trigger = 'hover',
+ className = '',
+ style = {},
+ } = props;
+
+ let visible = false;
+ let tooltipRef;
+ let triggerRef;
+
+ // 事件处理
+ function handleMouseEnter() {
+ if (trigger === 'hover') visible = true;
+ console.log('handleMouseEnter', visible);
+ }
+ function handleMouseLeave() {
+ if (trigger === 'hover') visible = false;
+ }
+ function handleClick() {
+ if (trigger === 'click') visible = !visible;
+ console.log('handleClick', visible);
+ }
+ function handleFocus() {
+ if (trigger === 'focus') visible = true;
+ console.log('handleFocus111', visible);
+ }
+ function handleBlur() {
+ if (trigger === 'focus') visible = false;
+ console.log('handleBlur111', visible);
+ }
+
+ // 点击外部关闭
+ function handleDocumentClick(e) {
+ if (
+ tooltipRef &&
+ !tooltipRef.contains(e.target) &&
+ triggerRef &&
+ !triggerRef.contains(e.target)
+ ) {
+ visible = false;
+ }
+ }
+
+ // 生命周期钩子
+ didMount(() => {
+ document.addEventListener('mousedown', handleDocumentClick);
+ });
+ willUnmount(() => {
+ document.removeEventListener('mousedown', handleDocumentClick);
+ });
+
+ // className 处理
+ const tooltipPrefix = 'inula-tooltip';
+ const classes = [
+ tooltipPrefix,
+ `${tooltipPrefix}-${placement}`,
+ visible ? `${tooltipPrefix}-visible` : '',
+ ].filter(Boolean).join(' ');
+ const wrapperClasses = [`${tooltipPrefix}-wrapper`, className].filter(Boolean).join(' ');
+
+ return (
+
+ {children}
+
+ {visible}
+
+
+
+ );
+}
+
+export default Tooltip;
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/components/tree/demo.jsx b/packages/inula2-ui2/library_code/src/components/tree/demo.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..8b199c68f11ed054cab24c7f266cd4041ded77ed
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/demo.jsx
@@ -0,0 +1,58 @@
+import demo1 from "./demos/demo1.jsx";
+import demo2 from "./demos/demo2.jsx";
+import demo3 from "./demos/demo3.jsx";
+import demo4 from "./demos/demo4.jsx";
+import demo5 from "./demos/demo5.jsx";
+
+const TreeDemo = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
自定义图标、连接线
+
可以自定义文字前的图标以及展开折叠图标,展示连接线
+
+
+
+
+
+
异步加载数据
+
+ 异步加载数据,需设置loadData属性,返回Promise对象,返回值为树节点数据
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default TreeDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tree/demos/demo1.jsx b/packages/inula2-ui2/library_code/src/components/tree/demos/demo1.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..63b2c07f4bc11e28f9b992e1213d2d80178a6bb4
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/demos/demo1.jsx
@@ -0,0 +1,71 @@
+import Tree from "../index.jsx";
+
+const TreeDemo = () => {
+ const onSelect = (selectedKeys, info) => {
+ console.log("selected", selectedKeys, info);
+ };
+
+ const onCheck = (checkedKeys, info) => {
+ console.log("onCheck", checkedKeys, info);
+ };
+ const treeData = [
+ {
+ title: "parent 1",
+ key: "0-0",
+ children: [
+ {
+ title: "parent 1-0",
+ key: "0-0-0",
+ disabled: true,
+ children: [
+ {
+ title: "leaf",
+ key: "0-0-0-0",
+ disableCheckbox: true,
+ },
+ {
+ title: "leaf",
+ key: "0-0-0-1",
+ },
+ ],
+ },
+ {
+ title: "parent 1-1",
+ key: "0-0-1",
+ children: [
+ {
+ title: sss,
+ key: "0-0-1-0",
+ },
+ ],
+ },
+ { title: "parent 1-0", key: "0-0-2" },
+ ],
+ },
+ ];
+
+ return (
+
+ );
+};
+
+export default TreeDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tree/demos/demo2.jsx b/packages/inula2-ui2/library_code/src/components/tree/demos/demo2.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ef6e8027237ba755fc26f6033ac35084eb023bf2
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/demos/demo2.jsx
@@ -0,0 +1,85 @@
+import Tree from "../index.jsx";
+
+const treeData = [
+ {
+ title: "0-0",
+ key: "0-0",
+ children: [
+ {
+ title: "0-0-0",
+ key: "0-0-0",
+ children: [
+ { title: "0-0-0-0", key: "0-0-0-0" },
+ { title: "0-0-0-1", key: "0-0-0-1" },
+ { title: "0-0-0-2", key: "0-0-0-2" },
+ ],
+ },
+ {
+ title: "0-0-1",
+ key: "0-0-1",
+ children: [
+ { title: "0-0-1-0", key: "0-0-1-0" },
+ { title: "0-0-1-1", key: "0-0-1-1" },
+ { title: "0-0-1-2", key: "0-0-1-2" },
+ ],
+ },
+ {
+ title: "0-0-2",
+ key: "0-0-2",
+ },
+ ],
+ },
+ {
+ title: "0-1",
+ key: "0-1",
+ children: [
+ { title: "0-1-0-0", key: "0-1-0-0" },
+ { title: "0-1-0-1", key: "0-1-0-1" },
+ { title: "0-1-0-2", key: "0-1-0-2" },
+ ],
+ },
+ {
+ title: "0-2",
+ key: "0-2",
+ },
+];
+
+const TreeDemo = () => {
+ let expandedKeys = ["0-0-0", "0-0-1"];
+ let checkedKeys = ["0-0-0"];
+ let selectedKeys = [];
+ let autoExpandParent = true;
+
+ const onExpand = (expandedKeysValue) => {
+ console.log("onExpand", expandedKeysValue);
+ expandedKeys = expandedKeysValue;
+ autoExpandParent = false;
+ };
+
+ const onCheck = (checkedKeysValue) => {
+ console.log("onCheck", checkedKeysValue);
+ checkedKeys = checkedKeysValue;
+ };
+
+ const onSelect = (selectedKeysValue, info) => {
+ console.log("onSelect", info);
+ selectedKeys = selectedKeysValue;
+ };
+
+ return (
+
+ );
+};
+
+export default TreeDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tree/demos/demo3.jsx b/packages/inula2-ui2/library_code/src/components/tree/demos/demo3.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..dec23ccb68c836846ed71244b934acd0f4c0ebb8
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/demos/demo3.jsx
@@ -0,0 +1,125 @@
+import Tree from "../index.jsx";
+import Icon from "../../icon/index.jsx";
+
+const treeData1 = [
+ {
+ title: "parent 1",
+ key: "0-0",
+ icon: ,
+ children: [
+ {
+ title: "leaf",
+ key: "0-0-0",
+ icon: (
+
+ ),
+ },
+ {
+ title: "leaf",
+ key: "0-0-1",
+ // icon: ({ selected }) =>
+ // selected ? (
+ //
+ // ) : (
+ //
+ // ),
+ icon: ,
+ },
+ ],
+ },
+];
+
+const treeData2 = [
+ {
+ title: "parent 1",
+ key: "0-0",
+ children: [
+ {
+ title: "parent 1-0",
+ key: "0-0-0",
+ children: [
+ {
+ title: "leaf",
+ key: "0-0-0-0",
+ },
+ {
+ title: "leaf",
+ key: "0-0-0-1",
+ },
+ {
+ title: "leaf",
+ key: "0-0-0-2",
+ },
+ ],
+ },
+ {
+ title: "parent 1-1",
+ key: "0-0-1",
+ children: [
+ {
+ title: "leaf",
+ key: "0-0-1-0",
+ },
+ ],
+ },
+ {
+ title: "parent 1-2",
+ key: "0-0-2",
+ children: [
+ {
+ title: "leaf",
+ key: "0-0-2-0",
+ },
+ {
+ title: "leaf",
+ key: "0-0-2-1",
+ },
+ ],
+ },
+ ],
+ },
+];
+
+const TreeDemo = () => {
+ const onSelect = (selectedKeys, info) => {
+ console.log("selected", selectedKeys, info);
+ };
+ return (
+
+
+ }
+ treeData={treeData1}
+ />
+
+
+ }
+ defaultExpandedKeys={["0-0-0"]}
+ onSelect={onSelect}
+ treeData={treeData2}
+ />
+
+
+ );
+};
+
+export default TreeDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tree/demos/demo4.jsx b/packages/inula2-ui2/library_code/src/components/tree/demos/demo4.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..98b77277b94e099306da11552d536ec94d6e8163
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/demos/demo4.jsx
@@ -0,0 +1,48 @@
+import Tree from "../index.jsx";
+
+const initTreeData = [
+ { title: "Expand to load", key: "0" },
+ { title: "Expand to load", key: "1" },
+ { title: "Tree Node", key: "2", isLeaf: true },
+];
+
+const updateTreeData = (list, key, children) =>
+ list.map((node) => {
+ if (node.key === key) {
+ return {
+ ...node,
+ children,
+ };
+ }
+ if (node.children) {
+ return {
+ ...node,
+ children: updateTreeData(node.children, key, children),
+ };
+ }
+ return node;
+ });
+
+const TreeDemo = () => {
+ let treeData = initTreeData;
+
+ const onLoadData = ({ key, children }) =>
+ new Promise((resolve) => {
+ if (children) {
+ resolve();
+ return;
+ }
+ setTimeout(() => {
+ treeData = updateTreeData(treeData, key, [
+ { title: "Child Node", key: `${key}-0` },
+ { title: "Child Node", key: `${key}-1` },
+ ]);
+
+ resolve();
+ }, 1000);
+ });
+
+ return ;
+};
+
+export default TreeDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tree/demos/demo5.jsx b/packages/inula2-ui2/library_code/src/components/tree/demos/demo5.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..43ed5d6fe6035eaec28744d5c64d9be23d6993c6
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/demos/demo5.jsx
@@ -0,0 +1,37 @@
+import Tree from "../index.jsx";
+
+const dig = (path = "0", level = 3) => {
+ const list = [];
+ for (let i = 0; i < 10; i += 1) {
+ const key = `${path}-${i}`;
+ const treeNode = {
+ title: key,
+ key,
+ };
+
+ if (level > 0) {
+ treeNode.children = dig(key, level - 1);
+ }
+
+ list.push(treeNode);
+ }
+ return list;
+};
+
+const treeData = dig();
+
+const TreeDemo = () => (
+ {
+ const title = item.title;
+ return {title};
+ }}
+ />
+);
+
+export default TreeDemo;
diff --git a/packages/inula2-ui2/library_code/src/components/tree/index.css b/packages/inula2-ui2/library_code/src/components/tree/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..cbb1cbf3b95a090de68b865a1f52ff0cead0a5d7
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/index.css
@@ -0,0 +1,191 @@
+.inula-tree {
+ list-style: none;
+}
+
+.inula-tree li {
+ list-style: none;
+}
+
+.inula-tree ul {
+ padding-left: 24px;
+}
+
+.inula-tree-node {
+ display: flex;
+ flex-direction: column;
+}
+
+/* 节点孩子样式 */
+.inula-tree-node .inula-tree-children {
+ position: relative;
+ opacity: 1;
+ /* max-height: var(--max-height); */
+ transition: all 0.3s ease-in-out;
+}
+
+.inula-tree-node .inula-tree-children.inula-tree-children-fold {
+ opacity: 0;
+ max-height: 0;
+ overflow: hidden;
+}
+
+/* 节点内容样式 */
+.inula-tree-node-content {
+ display: flex;
+ align-items: center;
+ gap: 2px;
+ margin-bottom: 12px;
+}
+
+/* switcher展开按钮样式 */
+.inula-tree-node .inula-tree-node-content .inula-icon {
+ transition: all 0.3s ease-in-out;
+}
+
+.inula-tree-node-content .inula-tree-node-content-switcher {
+ min-width: 24px;
+ min-height: 24px;
+ border-radius: 5px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.inula-tree-node-content .inula-tree-node-content-switcher:hover {
+ cursor: pointer;
+ background-color: rgba(0, 0, 0, 0.04);
+}
+
+.inula-tree-node-content .inula-tree-node-content-switcher.noSwitcher {
+ pointer-events: none;
+}
+
+/* 异步switcher加载 */
+.inula-tree-node-content-switcher.isLoading .inula-icon {
+ animation: spin 1s linear infinite;
+}
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+/* title: checkbox + text */
+.inula-tree-node-content-title {
+ display: flex;
+ position: relative;
+ gap: 4px;
+ align-items: center;
+ justify-content: center;
+}
+
+.inula-tree-node-content .inula-tree-node-content-title.indent {
+ margin-left: 24px;
+}
+
+/* 内容中文本样式 */
+.inula-tree-node-content .inula-tree-node-content-text {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ justify-content: center;
+ height: 24px;
+ width: max-content;
+ padding: 0 4px;
+ border-radius: 5px;
+}
+
+.inula-tree-node-content .inula-tree-node-content-text.isSelected {
+ background-color: #e6f4ff;
+}
+
+.inula-tree-node-content .inula-tree-node-content-text:hover {
+ cursor: pointer;
+ background-color: rgba(0, 0, 0, 0.04);
+}
+
+.inula-tree-node-content .inula-tree-node-content-text.disabled {
+ cursor: not-allowed;
+ background-color: rgba(0, 0, 0, 0);
+ color: var(--inula-select-disabled-text);
+}
+
+/* 连接线样式 */
+.inula-tree-node-content-title.showLine::before {
+ content: "";
+ position: absolute;
+ top: -12px;
+ height: calc(100% + 12px);
+ width: 8px;
+ border-left: 1px solid #d9d9d9;
+ left: -14px;
+}
+
+.inula-tree-node[data-leaf="true"]:last-child
+ .inula-tree-node-content-title.showLine::before {
+ content: "";
+ position: absolute;
+ top: -12px;
+ height: 24px;
+ width: 8px;
+ border-left: 1px solid #d9d9d9;
+ border-bottom: 1px solid #d9d9d9;
+ left: -14px;
+}
+
+.inula-tree-node[data-leaf="true"]:first-child
+ .inula-tree-node-content-title.showLine::before {
+ content: "";
+ position: absolute;
+ top: 0px;
+ height: 100%;
+ width: 8px;
+ border-left: 1px solid #d9d9d9;
+ left: -14px;
+}
+
+.inula-tree-node[data-leaf="true"]:first-child.inula-tree-node[data-leaf="true"]:last-child
+ .inula-tree-node-content-title.showLine::before {
+ content: "";
+ position: absolute;
+ top: 0px;
+ height: 12px;
+ width: 8px;
+ border-left: 1px solid #d9d9d9;
+ border-bottom: 1px solid #d9d9d9;
+ left: -14px;
+}
+
+.inula-tree-node .inula-tree-children.showLine::before {
+ content: "";
+ position: absolute;
+ left: -12px;
+ top: -4px;
+ height: 100%;
+ border-left: 1px solid #d9d9d9;
+}
+
+.inula-tree-node-content-line {
+ width: 8px;
+ height: 1px;
+ background-color: #d9d9d9;
+
+ position: absolute;
+ left: -14px;
+ top: 12px;
+ z-index: 1;
+
+ pointer-events: none;
+}
+
+/* 虚拟列表样式 */
+.virtual-list-container {
+ position: relative;
+ overflow-y: auto;
+ will-change: transform;
+}
+
+.virtual-list-content {
+ position: relative;
+ width: 100%;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/tree/index.jsx b/packages/inula2-ui2/library_code/src/components/tree/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..29c2ea891e465c75157b85c2f8ddb999450b02a6
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/index.jsx
@@ -0,0 +1,102 @@
+import "./index.css";
+import { Checkbox } from "../checkbox/index.jsx";
+import Icon from "../icon/index.jsx";
+
+const Tree = ({
+ autoExpandParent = false, // 是否自动展开父节点
+ blockNode = false, //是否节点占据一行
+ checkable = false, // 是否显示复选框
+ checkedKeys = [], // 受控选中复选框的树节点,父节点设置时子节点自动选中,string[] | checkStrictly:{checked: string[], halfChecked: string[]}
+ checkStrictly = false, // 父子节点不再关联,完全受控
+ defaultCheckedKeys = [], // 默认选中的树节点
+ defaultExpandAll = false, // 默认展开所有树节点
+ defaultExpandParent = false, // 默认展开父节点
+ defaultExpandedKeys = [], // 默认展开指定的树节点
+ expandedKeys = [], // 受控展开的树节点
+ disabled = false, // 禁用树
+ fieldNames = {}, // 自定义字段名
+ filterTreeNode = () => true, // 按需筛选树节点
+ height, //设置虚拟滚动容器高度,设置后内部不再支持横向滚动
+ icon, //标题之前插入自定义图标,需设置showIcon为true
+ loadData, // 异步加载数据,需设置loadData属性,返回Promise对象,返回值为树节点数据
+ loadedKeys = [], // 受控已加载的树节点,用于控制异步加载,需配合loadData属性使用
+ multiple = false, // 是否支持多选
+ selectable = false, // 是否支持选中
+ selectedKeys = [], // 受控选中的树节点,多选需配合multiple属性使用
+ showIcon = false, // 是否显示图标
+ showLine = false, // 是否显示连接线
+ switcherIcon, // 自定义展开图标
+ switcherLoadingIcon, // 自定义加载中图标
+ titleRender, // 自定义渲染节点
+ rootStyle, //Tree最外层Style
+ treeData, // 树节点数据,array<{key, title, children, [disabled, selectable]}>
+ virtual = true, // 是否开启虚拟滚动,设置false关闭虚拟滚动
+ onCheck, // 点击复选框触发
+ onDrop, //drop事件触发
+ onExpand, // 展开/收起节点时触发
+ onLoad, // 异步加载数据时触发
+ onSelect, // 选中/取消选中节点时触发
+ onRightClick, // 右键点击节点时触发
+ className, // 自定义类名
+ ...rest
+}) => {
+ const classNames = ["inula-tree", className].filter(Boolean).join(" ");
+ const styles = {
+ ...rootStyle,
+ };
+
+ const treeNodeClassName = ["inula-tree-node"].filter(Boolean).join(" ");
+
+ /*TreeNode Props
+ * title: 节点标题
+ * key: 节点唯一标识,必填
+ * isLeaf: 是否为叶子节点,默认false
+ * selectable: 是否可选,默认false
+ * disabled: 是否禁用,默认false
+ * children: 子节点,array
+ * icon: 自定义图标,ReactNode
+ * disableCheckbox: 是否禁用复选框,默认false
+ */
+ const TreeNode = ({ node }) => {
+ console.log("TreeNode props:", node);
+ console.log(
+ node.isLeaf !== true && node.children && node.children.length > 0
+ );
+ const Switcher = () => {
+ if (node.isLeaf || !node.children) return <>>;
+ if (switcherIcon) {
+ return switcherIcon;
+ }
+ return ;
+ };
+
+ return (
+
+
+ {}
+ {checkable && !node.disabledCheckbox && }
+ {showIcon && node.icon && }
+ {titleRender ? titleRender(node) : <>{node.title}>}
+
+
+ {/* {!node.isLeaf &&
+ node.children &&
+ node.children.length > 0 && */}
+ {node.children.map((child) => (
+
+ ))}
+
+
+ );
+ };
+
+ return (
+
+ {treeData.map((node) => (
+
+ ))}
+
+ );
+};
+
+export default Tree;
diff --git a/packages/inula2-ui2/library_code/src/components/tree/utils/calculateCustomKeys.js b/packages/inula2-ui2/library_code/src/components/tree/utils/calculateCustomKeys.js
new file mode 100644
index 0000000000000000000000000000000000000000..523561f896b1f5ff72ef46bbc52dafa70d461e83
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/utils/calculateCustomKeys.js
@@ -0,0 +1,124 @@
+/*--- 用于点击事件计算 ---*/
+/**
+ * 计算展开节点:
+ * 能够点击当前节点,其父节点一定是展开节点,且父子不影响,所以无需考虑父节点
+ * 而父节点不影响子节点是否展开,所以直接添加删除即可
+ */
+export function calculateExpandKeys(cur = {}, preKeys = []) {
+ if (preKeys.includes(cur.key)) {
+ return preKeys.filter((key) => key !== cur.key);
+ } else {
+ return [...preKeys, cur.key];
+ }
+}
+
+/**
+ * 计算checked选择节点:
+ * 非严格模式:
+ * 1. 对于父节点:
+ * · 如果选择当前节点使父节点子节点全选,选择父节点,否则为半选节点
+ * · 如果取消当前节点,如果父节点还有已选择的子节点,则为半选节点,否则不选
+ * · 半选节点无需在意,在渲染时判断即可
+ * 2. 对于子节点:
+ * · 如果未全选子节点,则选择该节点及其全部子节点
+ * · 如果全选子节点,则取消该节点及其全部子节点
+ * 3. 如果当前节点是叶子节点,看是否在preKey即可
+ * 严格模式:看是否在preKey即可
+ */
+export function calculateCheckedKeys(
+ cur = {},
+ preKeys = [],
+ keyToNodeInfoMap = new Map(),
+ childKeys = [],
+ isCheckStrictly = false
+) {
+ let newKeys = [...preKeys];
+ /* 先处理子节点,看当前节点时选择还是取消,可以同时处理严格模式 */
+ if (!cur.children || isCheckStrictly) {
+ //叶子节点情况
+ if (newKeys.includes(cur.key)) {
+ newKeys = newKeys.filter((key) => key !== cur.key);
+ } else {
+ newKeys.push(cur.key);
+ }
+ if (isCheckStrictly) return newKeys; //严格模式直接返回newKeys
+ } else {
+ //非叶子节点情况
+ let isChildAllChecked = preKeys.includes(cur.key);
+ /**
+ * 等价写法
+ * cur.children.every((child) =>
+ * preKeys.includes(child.key)
+ * );
+ */
+ childKeys.push(cur.key); //因为操作都需要cur.key本身,可以先直接push进去
+ if (isChildAllChecked) {
+ newKeys = newKeys.filter((key) => !childKeys.includes(key));
+ } else {
+ childKeys.forEach((key) => {
+ if (!newKeys.includes(key)) {
+ newKeys.push(key);
+ }
+ });
+ }
+ }
+
+ /* 然后根据newKeys处理父节点:*/
+ let curr = cur;
+ while (true) {
+ const parent = keyToNodeInfoMap.get(curr.key).parent ?? null;
+ if (!parent) break; //代表第一层都处理完了,结束。
+ if (parent.disableCheckbox || parent.disabled) break; //disabled节点不会改变状态,也直接结束
+
+ let isChangeParent = false; //记录父节点状态是否变化,变化了则继续向上,否则结束
+ if (
+ parent.children.every(
+ (child) =>
+ newKeys.includes(child.key) || child.disabled || child.disableCheckbox
+ ) &&
+ !newKeys.includes(parent.key)
+ ) {
+ isChangeParent = true;
+ newKeys.push(parent.key);
+ } else if (!newKeys.includes(curr.key) && newKeys.includes(parent.key)) {
+ isChangeParent = true;
+ newKeys = newKeys.filter((key) => key !== parent.key);
+ }
+
+ if (isChangeParent) {
+ curr = parent;
+ } else {
+ break;
+ }
+ }
+
+ return newKeys;
+}
+
+/**
+ * 判断半选节点
+ * 所有不是disabled的及其子节点的子节点中有选中的即为半选节点
+ */
+export function judgeHalfCheckedKeys(cur = {}, nowKeys = [], childKeys = []) {
+ if (!cur.children) return false;
+ return childKeys.some((key) => nowKeys.includes(key));
+}
+
+/**
+ * 计算select选择节点:
+ * 多选模式:看是否在preKeys即可
+ * 单选模式:返回[cur.key]
+ */
+export function calculateSelectedKeys(
+ cur = {},
+ preKeys = [],
+ isMultipleMode = false
+) {
+ if (isMultipleMode) {
+ if (preKeys.includes(cur.key))
+ return preKeys.filter((key) => key !== cur.key);
+ else {
+ return [...preKeys, cur.key];
+ }
+ } else return [cur.key];
+}
diff --git a/packages/inula2-ui2/library_code/src/components/tree/utils/flattendTreeData.js b/packages/inula2-ui2/library_code/src/components/tree/utils/flattendTreeData.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8c1507087634573efcaf01ca275af48e1100da1
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/utils/flattendTreeData.js
@@ -0,0 +1,35 @@
+export const flattenTreeData = (
+ treeData,
+ expandedKeys,
+ keyToNodeInfoMap,
+ level = 0,
+ index = 0
+) => {
+ if (!treeData || treeData.length === 0) return [];
+
+ let flattenedItems = [];
+ let currentIndex = index;
+
+ treeData.forEach((node) => {
+ const nodeInfo = keyToNodeInfoMap.get(node.key) || {};
+ flattenedItems.push({ ...node, level, index: currentIndex++, ...nodeInfo });
+
+ if (
+ expandedKeys.includes(node.key) &&
+ node.children &&
+ node.children.length > 0
+ ) {
+ const childItems = flattenTreeData(
+ node.children,
+ expandedKeys,
+ keyToNodeInfoMap,
+ level + 1,
+ currentIndex
+ );
+ flattenedItems = flattenedItems.concat(childItems);
+ currentIndex = childItems[childItems.length - 1].index + 1;
+ }
+ });
+
+ return flattenedItems;
+};
diff --git a/packages/inula2-ui2/library_code/src/components/tree/utils/getKeyToTree.js b/packages/inula2-ui2/library_code/src/components/tree/utils/getKeyToTree.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e88b21e4db24c319a8416b85f40169a599621e5
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/utils/getKeyToTree.js
@@ -0,0 +1,87 @@
+/* 获得key到树节点的映射, 并打上深度标签和当前层最后一个元素的标签 */
+export function getKeyToTreeMap(treeData) {
+ const map = new Map();
+ let maxDepth = 1;
+ if (treeData.length === 0) return { map, depth: 0 };
+
+ const traverseTree = (currentTree, depth = 1, parent = null) => {
+ currentTree.forEach((node, index) => {
+ const nodeInfo = {
+ node: node,
+ parent: parent,
+ depth: depth,
+ isLast: index === currentTree.length - 1,
+ };
+
+ maxDepth = Math.max(maxDepth, depth);
+ map.set(node.key, nodeInfo);
+ if (node.children) {
+ traverseTree(node.children, depth + 1, node);
+ }
+ });
+ };
+
+ traverseTree(treeData, 1, null);
+ return { map: map, depth: maxDepth };
+}
+
+/* 获得节点所有孩子 */
+export function getAllChildKeys(curNode) {
+ const keys = [];
+
+ const traverseTree = (curr) => {
+ curr.forEach((node) => {
+ if (!keys.includes(node.key)) keys.push(node.key);
+ if (node.children) {
+ traverseTree(node.children);
+ }
+ });
+ };
+
+ if (curNode.children) {
+ traverseTree(curNode.children);
+ }
+
+ return keys;
+}
+
+/* 获得节点所有不包含disabled的节点及其子节点的孩子 */
+export function getAllRelatedChildKeys(curNode) {
+ const keys = [];
+
+ const traverseTree = (curr) => {
+ curr.forEach((node) => {
+ if (!keys.includes(node.key) && !node.disabled && !node.disableCheckbox)
+ keys.push(node.key);
+ if (node.children && !node.disabled && !node.disableCheckbox) {
+ traverseTree(node.children);
+ }
+ });
+ };
+
+ if (curNode.children) {
+ traverseTree(curNode.children);
+ }
+
+ return keys;
+}
+
+/* 获得节点到其父节点的映射 */
+export function getChildToParentMap(treeData) {
+ const map = new Map();
+ if (treeData.length === 0) return map;
+
+ const traverseTree = (curr) => {
+ curr.forEach((node) => {
+ if (node.children) {
+ node.children.forEach((child) => {
+ map.set(child.key, node);
+ });
+ traverseTree(node.children);
+ }
+ });
+ };
+
+ traverseTree(treeData);
+ return map;
+}
diff --git a/packages/inula2-ui2/library_code/src/components/tree/utils/index.js b/packages/inula2-ui2/library_code/src/components/tree/utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..38ba21b0e32d61cde653db161cc0f0c66876912b
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/utils/index.js
@@ -0,0 +1,38 @@
+import {
+ getAllChildKeys,
+ getAllRelatedChildKeys,
+ getKeyToTreeMap,
+ getChildToParentMap,
+} from "./getKeyToTree.js";
+
+import {
+ initialAllExpandedKeys,
+ initialCustomExpandedKeys,
+ initialCustomCheckedKeys,
+ initialCustomSelectedKeys,
+} from "./initialCustomKeys.js";
+
+import {
+ calculateExpandKeys,
+ calculateCheckedKeys,
+ calculateSelectedKeys,
+ judgeHalfCheckedKeys,
+} from "./calculateCustomKeys.js";
+
+import { flattenTreeData } from "./flattendTreeData.js";
+
+export {
+ getAllChildKeys,
+ getAllRelatedChildKeys,
+ getKeyToTreeMap,
+ getChildToParentMap,
+ initialAllExpandedKeys,
+ initialCustomExpandedKeys,
+ initialCustomCheckedKeys,
+ initialCustomSelectedKeys,
+ calculateExpandKeys,
+ calculateCheckedKeys,
+ calculateSelectedKeys,
+ judgeHalfCheckedKeys,
+ flattenTreeData,
+};
diff --git a/packages/inula2-ui2/library_code/src/components/tree/utils/initialCustomKeys.js b/packages/inula2-ui2/library_code/src/components/tree/utils/initialCustomKeys.js
new file mode 100644
index 0000000000000000000000000000000000000000..714e16a70c2b129289da5b67d235ade7e44aa68a
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/utils/initialCustomKeys.js
@@ -0,0 +1,150 @@
+/**
+ * 初始化展开节点
+ * 优先级:受控 > all > default
+ */
+export function initialAllExpandedKeys(currentTree) {
+ let keys = [];
+ currentTree.forEach((node) => {
+ keys.push(node.key);
+ if (node.children) {
+ keys = keys.concat(initialAllExpandedKeys(node.children));
+ }
+ });
+ return keys;
+}
+
+/**
+ * 受控或默认初始化处理:
+ * 1.父节点是否展开不影响子节点
+ * 2.在isAutoExpandParent为true的情况下,直系子节点有展开的情况下父节点展开
+ * 3.从上到下两级两级互相影响,即没有传递影响,也就是参照物始终为initialKeys
+ */
+export function initialCustomExpandedKeys(
+ treeData,
+ initialKeys = [],
+ isAutoExpandParent = true
+) {
+ const keys = [];
+
+ const traverseTree = (curr) => {
+ curr.forEach((node) => {
+ if (initialKeys.includes(node.key) && !keys.includes(node.key))
+ keys.push(node.key);
+ if (node.children) {
+ if (isAutoExpandParent) {
+ const isChildrenAllExpand = node.children.some((child) =>
+ initialKeys.includes(child.key)
+ );
+ if (isChildrenAllExpand && !keys.includes(node.key))
+ keys.push(node.key);
+ }
+ traverseTree(node.children);
+ }
+ });
+ };
+
+ traverseTree(treeData);
+
+ return keys;
+}
+
+/**
+ * 树节点check选中控制
+ * 优先级:受控>默认
+ */
+
+/**
+ * 受控或默认初始化处理
+ * 1. 在非严格模式下:
+ * · 父节点选择,其所有子节点选择
+ * · 其所有子节点选择, 父节点选择
+ * · 从上到下所有级影响,即存在传递影响,也就是参照物为initialKeys和keys
+ * · 上述三规则不影响disabled节点
+ * 2. 在严格模式下:父子不互相影响
+ */
+export function initialCustomCheckedKeys(
+ treeData,
+ initialKeys = [],
+ isCheckStrictly = false
+) {
+ let keys = [];
+
+ const traverseTree = (curr) => {
+ curr.forEach((node) => {
+ if (!isCheckStrictly) {
+ if (initialKeys.includes(node.key) && !keys.includes(node.key))
+ keys.push(node.key);
+
+ //先处理子节点,因为父节点如果不在initialKeys中,要通过子节点是否选中来选择
+ if (node.children) {
+ if (keys.includes(node.key)) {
+ node.children.forEach((child) => {
+ const related =
+ !node.disabled &&
+ !node.disabledCheckbox &&
+ !child.disabled &&
+ !child.disabledCheckbox;
+ //非严格模式不包含disabled属性节点
+ if (related && !keys.includes(child.key)) {
+ keys.push(child.key);
+ }
+ });
+ }
+ traverseTree(node.children);
+ }
+
+ /**
+ * 此时由于上面先处理子节点,所以:
+ * 1.其直系子节点如果全选中,则后续子节点一定全选中,所以只需看直系
+ * 2.非严格模式规则不包含disabled的节点
+ */
+ if (
+ node.children &&
+ !node.disabled &&
+ !node.disabledCheckbox &&
+ node.children.every((child) => {
+ return (
+ keys.includes(child.key) ||
+ child.disabled ||
+ child.disabledCheckbox
+ );
+ }) &&
+ !keys.includes(node.key)
+ ) {
+ keys.push(node.key);
+ }
+ } else {
+ //严格模式,父子不干扰
+ if (initialKeys.includes(node.key) && !keys.includes(node.key))
+ keys.push(node.key);
+ if (node.children) {
+ traverseTree(node.children);
+ }
+ }
+ });
+ };
+
+ traverseTree(treeData);
+ return keys;
+}
+
+/**
+ * 树节点selected选中控制
+ * 优先级:受控>默认
+ */
+
+/**
+ * 受控或默认初始化处理
+ * 1. 在多选模式下:直接返回initialKeys
+ * 2. 在单选模式下:返回第一个元素
+ */
+export function initialCustomSelectedKeys(
+ initialKeys = [],
+ isMultipleMode = false
+) {
+ if (!isMultipleMode) {
+ return [initialKeys[0]];
+ } else {
+ return initialKeys;
+ }
+}
diff --git a/packages/inula2-ui2/library_code/src/components/tree/virtualList.jsx b/packages/inula2-ui2/library_code/src/components/tree/virtualList.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e9b67a62231138e0fcbad4bb41553730fb2bcf94
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/components/tree/virtualList.jsx
@@ -0,0 +1,93 @@
+import { watch } from "@openinula/next";
+import "./index.css";
+
+const VirtualList = ({
+ height = 400, //虚拟列表容器高度
+ itemHeight = 30, //节点高度
+ items = [], //数据源数组
+ renderItem, //渲染节点的函数
+ buffer = 5, //缓冲区节点个数
+ className = "",
+ style = {},
+}) => {
+ let containerRef;
+ let scrollTop = 0;
+ let visibleItems = [];
+
+ // 计算可见区域内的项目
+ const calculateVisibleItems = () => {
+ if (!containerRef) return;
+ console.log(containerRef, containerRef.scrollTop);
+
+ const currentScrollTop = containerRef.scrollTop;
+ scrollTop = currentScrollTop;
+
+ // 计算可见区域的起始和结束索引
+ const startIndex = Math.max(
+ 0,
+ Math.floor(currentScrollTop / itemHeight) - buffer
+ );
+ const visibleCount = Math.ceil(height / itemHeight) + 2 * buffer;
+ const endIndex = Math.min(items.length - 1, startIndex + visibleCount);
+
+ // 更新可见项目
+ const newVisibleItems = [];
+ for (let i = startIndex; i <= endIndex; i++) {
+ newVisibleItems.push({
+ index: i,
+ item: items[i],
+ style: {
+ position: "absolute",
+ top: `${i * itemHeight}px`,
+ height: `${itemHeight}px`,
+ width: "100%",
+ },
+ });
+ }
+
+ visibleItems = newVisibleItems;
+ };
+
+ // 监听滚动事件
+ watch(() => {
+ if (containerRef) {
+ calculateVisibleItems();
+
+ const handleScroll = () => {
+ requestAnimationFrame(calculateVisibleItems);
+ };
+
+ containerRef.addEventListener("scroll", handleScroll);
+ return () => containerRef.removeEventListener("scroll", handleScroll);
+ }
+ });
+
+ // // 当items变化时重新计算
+ watch(() => {
+ calculateVisibleItems();
+ }, [items]);
+
+ return (
+
+
+ {visibleItems.map(({ index, item, style }) => (
+
+ {renderItem(item, index)}
+
+ ))}
+
+
+ );
+};
+
+export default VirtualList;
diff --git a/packages/inula2-ui2/library_code/src/index.css b/packages/inula2-ui2/library_code/src/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..08f4d40c35be9a76da37afe3311133aea853781f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/index.css
@@ -0,0 +1,151 @@
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
+ /* background-color: #f0f4f8; */
+ color: #333;
+}
+
+.container {
+ display: flex;
+ flex-direction: column;
+ align-items: left;
+ justify-content: left;
+ /* min-height: 100vh; */
+ padding-top: 20px;
+}
+
+.hero {
+ text-align: center;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ /* margin-bottom: 40px; */
+ /* width: min-content; */
+}
+
+.hero-title {
+ font-size: 3rem;
+ color: #1a73e8;
+ margin-bottom: 10px;
+}
+
+.hero-subtitle {
+ font-size: 1.5rem;
+ color: #666;
+}
+
+.content {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+ justify-content: center;
+}
+
+.card {
+ background: white;
+ border-radius: 8px;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ padding: 20px;
+ width: 300px;
+ text-align: center;
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
+}
+
+.card:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
+}
+
+.card h2 {
+ font-size: 1.5rem;
+ color: #1a73e8;
+ margin-bottom: 10px;
+}
+
+.card p {
+ font-size: 1rem;
+ color: #555;
+}
+
+.card a {
+ color: #1a73e8;
+ text-decoration: none;
+ font-weight: bold;
+}
+
+.card a:hover {
+ text-decoration: underline;
+}
+
+/* Animation delays */
+.animate__animated.animate__fadeInDown {
+ animation-delay: 0.2s;
+}
+
+.animate__animated.animate__fadeInUp {
+ animation-delay: 0.4s;
+}
+
+.animate__animated.animate__fadeInLeft {
+ animation-delay: 0.6s;
+}
+
+.animate__animated.animate__fadeInRight {
+ animation-delay: 0.8s;
+}
+
+/* 修改计数器相关的样式 */
+.counter-wrapper {
+ margin-top: 32px;
+ text-align: center;
+ animation-delay: 0.6s;
+}
+
+.counter-display {
+ font-size: 48px;
+ font-weight: 700;
+ color: #1a73e8;
+ margin-bottom: 16px;
+}
+
+.counter-display span {
+ display: inline-block;
+ min-width: 60px;
+}
+
+.counter-btn {
+ background: #1a73e8;
+ color: white;
+ border: none;
+ padding: 12px 28px;
+ border-radius: 24px;
+ font-size: 16px;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.2s ease;
+}
+
+.counter-btn:hover {
+ background: #1557b0;
+ transform: translateY(-2px);
+}
+
+.counter-btn:active {
+ transform: translateY(0);
+}
+
+@keyframes numberPop {
+ 0% { transform: scale(1); }
+ 50% { transform: scale(1.2); }
+ 100% { transform: scale(1); }
+}
+
+.number-pop {
+ animation: numberPop 0.3s ease-out;
+}
+.hero-content {
+ /*background-color: #c5d7eef6;*/
+ background-color: #fff;
+ border-radius: 10px;
+ padding: 30px;
+}
\ No newline at end of file
diff --git a/packages/inula2-ui2/library_code/src/index.js b/packages/inula2-ui2/library_code/src/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8ca43adf093aba6acf15287659607b96429ab30
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/index.js
@@ -0,0 +1,17 @@
+export { default as Button } from './components/button';
+export { default as Card } from './components/card';
+export { default as Checkbox } from './components/checkbox';
+export { default as DatePicker } from './components/datepicker';
+export { default as Form } from './components/form';
+export { default as Icon } from './components/icon';
+export { default as Input } from './components/input';
+export { default as Modal } from './components/modal';
+export { default as Notification } from './components/notification';
+export { default as Radio } from './components/radio';
+export { default as Select } from './components/select';
+export { default as Spin } from './components/spin';
+export { default as Switch } from './components/switch';
+export { default as Tabs } from './components/tabs';
+export { default as Tag } from './components/tag';
+export { default as Tooltip } from './components/tooltip';
+export { default as Tree } from './components/tree';
diff --git a/packages/inula2-ui2/library_code/src/index.jsx b/packages/inula2-ui2/library_code/src/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..f3e0e5bc31db045c745db5d5beab3071a30a619f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/index.jsx
@@ -0,0 +1,313 @@
+import { render } from '@openinula/next';
+import './index.css';
+import './colors.css';
+import Button from './components/button/demo.jsx';
+import Icon from './components/icon/demo.jsx';
+import Checkbox from './components/checkbox/demo.jsx';
+import Switch from './components/switch/demo.jsx';
+import Radio from './components/radio/demo.jsx';
+import Tooltip from './components/tooltip/demo.jsx';
+import Notification from './components/notification/demo.jsx';
+import Spin from './components/spin/demo.jsx';
+import Card from './components/card/demo.jsx';
+import Tabs from './components/tabs/demo.jsx';
+import Tree from './components/tree/demo.jsx';
+window.render = render;
+import Select from './components/select/demo.jsx';
+import Input from './components/input/demo.jsx';
+import Modal from './components/modal/demo.jsx';
+import DatePicker from './components/datepicker/demo.jsx';
+import Form from './components/form/demo.jsx';
+import Tag from './components/tag/demo.jsx';
+import { createHashRouter } from './route.js';
+
+// button demos
+import ButtonDemo1 from './components/button/demos/demo1.jsx';
+import ButtonDemo2 from './components/button/demos/demo2.jsx';
+import ButtonDemo3 from './components/button/demos/demo3.jsx';
+import ButtonDemo4 from './components/button/demos/demo4.jsx';
+import ButtonDemo5 from './components/button/demos/demo5.jsx';
+import ButtonDemo6 from './components/button/demos/demo6.jsx';
+
+// card demos
+import CardDemo1 from './components/card/demos/demo1.jsx';
+import CardDemo2 from './components/card/demos/demo2.jsx';
+import CardDemo3 from './components/card/demos/demo3.jsx';
+import CardDemo4 from './components/card/demos/demo4.jsx';
+import CardDemo5 from './components/card/demos/demo5.jsx';
+
+// checkbox demos
+import CheckboxDemo1 from './components/checkbox/demos/demo1.jsx';
+import CheckboxDemo2 from './components/checkbox/demos/demo2.jsx';
+import CheckboxDemo3 from './components/checkbox/demos/demo3.jsx';
+
+// form demos
+import FormDemo1 from './components/form/demos/demo1.jsx';
+import FormDemo2 from './components/form/demos/demo2.jsx';
+import FormDemo3 from './components/form/demos/demo3.jsx';
+import FormDemo4 from './components/form/demos/demo4.jsx';
+import FormDemo5 from './components/form/demos/demo5.jsx';
+import FormDemo6 from './components/form/demos/demo6.jsx';
+import FormDemo7 from './components/form/demos/demo7.jsx';
+
+// icon demos
+import IconDemo1 from './components/icon/demos/demo1.jsx';
+import IconDemo2 from './components/icon/demos/demo2.jsx';
+import IconDemo3 from './components/icon/demos/demo3.jsx';
+import IconDemo4 from './components/icon/demos/demo4.jsx';
+import IconDemo5 from './components/icon/demos/demo5.jsx';
+
+// input demos
+import InputDemo1 from './components/input/demos/demo1.jsx';
+import InputDemo2 from './components/input/demos/demo2.jsx';
+import InputDemo3 from './components/input/demos/demo3.jsx';
+import InputDemo4 from './components/input/demos/demo4.jsx';
+import InputDemo5 from './components/input/demos/demo5.jsx';
+import InputDemo6 from './components/input/demos/demo6.jsx';
+import InputDemo7 from './components/input/demos/demo7.jsx';
+import InputDemo8 from './components/input/demos/demo8.jsx';
+import InputDemo9 from './components/input/demos/demo9.jsx';
+
+// modal demos
+import ModalDemo1 from './components/modal/demos/demo1.jsx';
+import ModalDemo2 from './components/modal/demos/demo2.jsx';
+import ModalDemo3 from './components/modal/demos/demo3.jsx';
+import ModalDemo4 from './components/modal/demos/demo4.jsx';
+import ModalDemo5 from './components/modal/demos/demo5.jsx';
+import ModalDemo6 from './components/modal/demos/demo6.jsx';
+import ModalDemo7 from './components/modal/demos/demo7.jsx';
+
+// notification demos
+import NotificationDemo1 from './components/notification/demos/demo1.jsx';
+import NotificationDemo2 from './components/notification/demos/demo2.jsx';
+import NotificationDemo3 from './components/notification/demos/demo3.jsx';
+import NotificationDemo4 from './components/notification/demos/demo4.jsx';
+import NotificationDemo5 from './components/notification/demos/demo5.jsx';
+
+// radio demos
+import RadioDemo1 from './components/radio/demos/demo1.jsx';
+import RadioDemo2 from './components/radio/demos/demo2.jsx';
+import RadioDemo3 from './components/radio/demos/demo3.jsx';
+import RadioDemo4 from './components/radio/demos/demo4.jsx';
+import RadioDemo5 from './components/radio/demos/demo5.jsx';
+import RadioDemo6 from './components/radio/demos/demo6.jsx';
+
+// select demos
+import SelectDemo1 from './components/select/demos/demo1.jsx';
+import SelectDemo2 from './components/select/demos/demo2.jsx';
+import SelectDemo3 from './components/select/demos/demo3.jsx';
+import SelectDemo4 from './components/select/demos/demo4.jsx';
+import SelectDemo5 from './components/select/demos/demo5.jsx';
+import SelectDemo6 from './components/select/demos/demo6.jsx';
+import SelectDemo7 from './components/select/demos/demo7.jsx';
+import SelectDemo8 from './components/select/demos/demo8.jsx';
+
+// spin demos
+import SpinDemo1 from './components/spin/demos/demo1.jsx';
+import SpinDemo2 from './components/spin/demos/demo2.jsx';
+import SpinDemo3 from './components/spin/demos/demo3.jsx';
+import SpinDemo4 from './components/spin/demos/demo4.jsx';
+import SpinDemo5 from './components/spin/demos/demo5.jsx';
+
+// switch demos
+import SwitchDemo1 from './components/switch/demos/demo1.jsx';
+import SwitchDemo2 from './components/switch/demos/demo2.jsx';
+import SwitchDemo3 from './components/switch/demos/demo3.jsx';
+
+// tabs demos
+import TabsDemo1 from './components/tabs/demos/demo1.jsx';
+import TabsDemo2 from './components/tabs/demos/demo2.jsx';
+import TabsDemo3 from './components/tabs/demos/demo3.jsx';
+import TabsDemo4 from './components/tabs/demos/demo4.jsx';
+import TabsDemo5 from './components/tabs/demos/demo5.jsx';
+import TabsDemo6 from './components/tabs/demos/demo6.jsx';
+import TabsDemo7 from './components/tabs/demos/demo7.jsx';
+import TabsDemo8 from './components/tabs/demos/demo8.jsx';
+import TabsDemo9 from './components/tabs/demos/demo9.jsx';
+import TabsDemo10 from './components/tabs/demos/demo10.jsx';
+import TabsDemo11 from './components/tabs/demos/demo11.jsx';
+
+// tag demos
+import TagDemo1 from './components/tag/demos/demo1.jsx';
+import TagDemo2 from './components/tag/demos/demo2.jsx';
+import TagDemo3 from './components/tag/demos/demo3.jsx';
+import TagDemo4 from './components/tag/demos/demo4.jsx';
+
+// tooltip demos
+import TooltipDemo1 from './components/tooltip/demos/demo1.jsx';
+import TooltipDemo2 from './components/tooltip/demos/demo2.jsx';
+import TooltipDemo3 from './components/tooltip/demos/demo3.jsx';
+window.render = render;
+
+const routes = {
+ '/': () => (
+
+ {/*
欢迎使用 inula-next 组件库!
*/}
+ {/*
请选择一个组件查看示例
*/}
+ {/*
*/}
+
+ ),
+ '/button': Button,
+ '/button/demo1': ButtonDemo1,
+ '/button/demo2': ButtonDemo2,
+ '/button/demo3': ButtonDemo3,
+ '/button/demo4': ButtonDemo4,
+ '/button/demo5': ButtonDemo5,
+ '/button/demo6': ButtonDemo6,
+ '/icon': Icon,
+ '/icon/demo1': IconDemo1,
+ '/icon/demo2': IconDemo2,
+ '/icon/demo3': IconDemo3,
+ '/icon/demo4': IconDemo4,
+ '/icon/demo5': IconDemo5,
+ '/checkbox': Checkbox,
+ '/checkbox/demo1': CheckboxDemo1,
+ '/checkbox/demo2': CheckboxDemo2,
+ '/checkbox/demo3': CheckboxDemo3,
+ '/switch': Switch,
+ '/switch/demo1': SwitchDemo1,
+ '/switch/demo2': SwitchDemo2,
+ '/switch/demo3': SwitchDemo3,
+ '/radio': Radio,
+ '/radio/demo1': RadioDemo1,
+ '/radio/demo2': RadioDemo2,
+ '/radio/demo3': RadioDemo3,
+ '/radio/demo4': RadioDemo4,
+ '/radio/demo5': RadioDemo5,
+ '/radio/demo6': RadioDemo6,
+ '/tooltip': Tooltip,
+ '/tooltip/demo1': TooltipDemo1,
+ '/tooltip/demo2': TooltipDemo2,
+ '/tooltip/demo3': TooltipDemo3,
+ '/notification': Notification,
+ '/notification/demo1': NotificationDemo1,
+ '/notification/demo2': NotificationDemo2,
+ '/notification/demo3': NotificationDemo3,
+ '/notification/demo4': NotificationDemo4,
+ '/notification/demo5': NotificationDemo5,
+ '/spin': Spin,
+ '/spin/demo1': SpinDemo1,
+ '/spin/demo2': SpinDemo2,
+ '/spin/demo3': SpinDemo3,
+ '/spin/demo4': SpinDemo4,
+ '/spin/demo5': SpinDemo5,
+ '/card': Card,
+ '/card/demo1': CardDemo1,
+ '/card/demo2': CardDemo2,
+ '/card/demo3': CardDemo3,
+ '/card/demo4': CardDemo4,
+ '/card/demo5': CardDemo5,
+ '/tabs': Tabs,
+ '/tabs/demo1': TabsDemo1,
+ '/tabs/demo2': TabsDemo2,
+ '/tabs/demo3': TabsDemo3,
+ '/tabs/demo4': TabsDemo4,
+ '/tabs/demo5': TabsDemo5,
+ '/tabs/demo6': TabsDemo6,
+ '/tabs/demo7': TabsDemo7,
+ '/tabs/demo8': TabsDemo8,
+ '/tabs/demo9': TabsDemo9,
+ '/tabs/demo10': TabsDemo10,
+ '/tabs/demo11': TabsDemo11,
+ '/tree': Tree,
+ '/select': Select,
+ '/select/demo1': SelectDemo1,
+ '/select/demo2': SelectDemo2,
+ '/select/demo3': SelectDemo3,
+ '/select/demo4': SelectDemo4,
+ '/select/demo5': SelectDemo5,
+ '/select/demo6': SelectDemo6,
+ '/select/demo7': SelectDemo7,
+ '/select/demo8': SelectDemo8,
+ '/input': Input,
+ '/input/demo1': InputDemo1,
+ '/input/demo2': InputDemo2,
+ '/input/demo3': InputDemo3,
+ '/input/demo4': InputDemo4,
+ '/input/demo5': InputDemo5,
+ '/input/demo6': InputDemo6,
+ '/input/demo7': InputDemo7,
+ '/input/demo8': InputDemo8,
+ '/input/demo9': InputDemo9,
+ '/modal': Modal,
+ '/modal/demo1': ModalDemo1,
+ '/modal/demo2': ModalDemo2,
+ '/modal/demo3': ModalDemo3,
+ '/modal/demo4': ModalDemo4,
+ '/modal/demo5': ModalDemo5,
+ '/modal/demo6': ModalDemo6,
+ '/modal/demo7': ModalDemo7,
+ '/datepicker': DatePicker,
+ '/form': Form,
+ '/form/demo1': FormDemo1,
+ '/form/demo2': FormDemo2,
+ '/form/demo3': FormDemo3,
+ '/form/demo4': FormDemo4,
+ '/form/demo5': FormDemo5,
+ '/form/demo6': FormDemo6,
+ '/form/demo7': FormDemo7,
+ '/tag': Tag,
+ '/tag/demo1': TagDemo1,
+ '/tag/demo2': TagDemo2,
+ '/tag/demo3': TagDemo3,
+ '/tag/demo4': TagDemo4,
+};
+
+const router = createHashRouter(routes);
+
+function App() {
+ const Active = (router.current && router.current.component) || routes['/'];
+
+ return (
+
+ );
+}
+
+const root = document.getElementById('root');
+function mount() {
+ render(, root);
+}
+router.onChange(mount);
+mount();
diff --git a/packages/inula2-ui2/library_code/src/notification.js b/packages/inula2-ui2/library_code/src/notification.js
new file mode 100644
index 0000000000000000000000000000000000000000..63eb71488b234f01c4b08bef2e93ede0bd3e3d6f
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/notification.js
@@ -0,0 +1,2 @@
+export { open, info, success, warning, error, text } from './components/Notification/index.jsx';
+
diff --git a/packages/inula2-ui2/library_code/src/route.js b/packages/inula2-ui2/library_code/src/route.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebbc1ae1cd025bc0567fddb0711e994c8222e63a
--- /dev/null
+++ b/packages/inula2-ui2/library_code/src/route.js
@@ -0,0 +1,48 @@
+export function createHashRouter(routes) {
+ const listeners = [];
+
+ function getPath() {
+ const hash = window.location.hash || '#/';
+ const path = hash.startsWith('#') ? hash.slice(1) : hash;
+ return path || '/';
+ }
+
+ function matchRoute(pathname) {
+ return routes[pathname] || routes['/'] || null;
+ }
+
+ function notify() {
+ const path = getPath();
+ const component = matchRoute(path);
+ listeners.forEach((fn) => fn({ path, component }));
+ }
+
+ function onChange(fn) {
+ listeners.push(fn);
+ return () => {
+ const idx = listeners.indexOf(fn);
+ if (idx !== -1) listeners.splice(idx, 1);
+ };
+ }
+
+ function navigate(path) {
+ if (!path.startsWith('#')) {
+ window.location.hash = `#${path}`;
+ } else {
+ window.location.hash = path;
+ }
+ }
+
+ window.addEventListener('hashchange', notify);
+ // 初始一次
+ setTimeout(notify, 0);
+
+ return {
+ onChange,
+ navigate,
+ get current() {
+ const path = getPath();
+ return { path, component: matchRoute(path) };
+ }
+ };
+}
diff --git a/packages/inula2-ui2/library_code/vite.config.js b/packages/inula2-ui2/library_code/vite.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a68131cfc7a4e71c44781990f3d47b302972cc4
--- /dev/null
+++ b/packages/inula2-ui2/library_code/vite.config.js
@@ -0,0 +1,28 @@
+import { defineConfig } from 'vite';
+import inula from '@openinula/unplugin/vite';
+
+export default defineConfig({
+ plugins: [inula({ files: '**/*.{ts,js,tsx,jsx}' })],
+ esbuild: {
+ jsxFactory: 'Inula.createElement',
+ jsxFragment: 'Inula.Fragment',
+ jsxInject: `import * as Inula from '@openinula/next'`,
+ },
+ build: {
+ lib: {
+ entry: 'src/notification.js',
+ name: 'InulaUI',
+ fileName: (format) => `notification.${format}.js`,
+ formats: ['es','cjs'],
+ },
+ rollupOptions: {
+ external: ['@openinula/next'],
+ },
+ },
+ server: {
+ headers: {
+ 'X-Frame-Options': 'ALLOWALL',
+ 'Content-Security-Policy': 'frame-ancestors *'
+ }
+ }
+});
\ No newline at end of file