diff --git a/packages/inula2-ui/README.en.md b/packages/inula2-ui/README.en.md new file mode 100644 index 0000000000000000000000000000000000000000..6352abc7390c6e3c17a7a53fa86a5dcf14c0a09b --- /dev/null +++ b/packages/inula2-ui/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-ui/README.md b/packages/inula2-ui/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5c88ed6580e8c9d52fd88b628488d5d26bfee41c --- /dev/null +++ b/packages/inula2-ui/README.md @@ -0,0 +1,69 @@ +# openinula2.0 Component Library + +[![NPM version](https://img.shields.io/npm/v/inulaUI.svg?style=flat)](https://npmjs.org/package/inulaUI) +[![NPM downloads](http://img.shields.io/npm/dm/inulaUI.svg?style=flat)](https://npmjs.org/package/inulaUI) + +## Project Overview + +openinula2.0 Component Library is a modern React UI component library based on [openinula](https://github.com/openinula/openinula). It includes a rich set of foundational components suitable for enterprise-level middle/backend and mobile application development. The component library features a modern design style, supports light/dark theme switching, and offers excellent extensibility and usability. + +## Development Guide + +Navigate to the library directory: + +```bash +npm install +npm run dev +``` + +Components should be named in lowercase and placed in the components directory. The directory structure is as follows (using Button component as an example): + +``` +button/ +├── demos/ # Button examples (different functionalities in separate files) +├── demo.jsx # Main demo file for button +├── index.jsx # Button component implementation +└── index.css # Button styles +``` + +## Directory Structure + +``` +openInula2.0_Library/ +├── inulaUI/ # Main component library package +│ ├── docs/ # Documentation & guides +│ ├── src/ # Component source code +│ │ ├── button/ # Button component +│ │ │ ├── demos/ # Button component demos +│ │ │ ├── index.jsx # Button component implementation +│ │ │ ├── index.md # Button component documentation +│ │ │ └── index.css # Button styles +│ │ ├── index.ts # Entry file +│ │ └── global.d.ts # Global type declarations +│ ├── package.json # Component library package configuration +│ └── ... +├── library_code/ # Demo/Test project for component library +│ ├── src/ +│ │ ├── components/ +│ │ │ └── button/ +│ │ │ ├── demos/ # Button demos +│ │ │ ├── demo.jsx +│ │ │ ├── index.jsx +│ │ │ └── index.css +│ │ ├── index.jsx # Entry point +│ │ └── index.css +│ ├── index.html +│ └── ... +└── README.md # Project documentation +``` + +## Contribution Guide + +1. Fork this repository and create your feature branch. +2. Ensure all lint checks and unit tests pass before submitting code. +3. Provide detailed description of changes when submitting PR. +4. Contributions including documentation improvements, bug fixes, or new components are welcome. + +## License + +MIT diff --git a/packages/inula2-ui/inulaUI/.dumirc.ts b/packages/inula2-ui/inulaUI/.dumirc.ts new file mode 100644 index 0000000000000000000000000000000000000000..bac3f3e0efdceee275ff52619b323dc45b6b4b13 --- /dev/null +++ b/packages/inula2-ui/inulaUI/.dumirc.ts @@ -0,0 +1,74 @@ +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: 'Basic 基础组件', + children: [ + { title: 'Button 按钮', link: '/components/button' }, + // { title: 'Icon 图标', link: '/components/icon' }, + // { title: 'FloatButton 悬浮按钮', link: '/components/floatbutton' }, + { title: 'Breadcrumb 面包屑', link: '/components/breadcrumb' }, + ], + }, + { + title: '导航', + children: [{ title: 'Tabs 标签页', link: '/components/tabs' }], + }, + { + title: 'Form 表单组件', + children: [ + { title: 'Checkbox 多选框', link: '/components/checkbox' }, + { title: 'DatePicker 日期选择器', link: '/components/datepicker' }, + { 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: 'Data 数据展示', + 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-ui/inulaUI/.editorconfig b/packages/inula2-ui/inulaUI/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..e717f5eb6387be229227ad8eba6a56f4cd904ade --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/.eslintrc.js b/packages/inula2-ui/inulaUI/.eslintrc.js new file mode 100644 index 0000000000000000000000000000000000000000..28983409455cb5f31b65d20feb08096fedd3be09 --- /dev/null +++ b/packages/inula2-ui/inulaUI/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: require.resolve('@umijs/lint/dist/config/eslint'), +}; diff --git a/packages/inula2-ui/inulaUI/.fatherrc.ts b/packages/inula2-ui/inulaUI/.fatherrc.ts new file mode 100644 index 0000000000000000000000000000000000000000..dae25c88b1a4d6ccb903b44bb04cd6c60f1db328 --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/.gitignore b/packages/inula2-ui/inulaUI/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..cf89318df8a56faf24d3ea7f5237d38b21e27b6b --- /dev/null +++ b/packages/inula2-ui/inulaUI/.gitignore @@ -0,0 +1,6 @@ +node_modules +/dist +.dumi/tmp +.dumi/tmp-test +.dumi/tmp-production +.DS_Store diff --git a/packages/inula2-ui/inulaUI/.husky/commit-msg b/packages/inula2-ui/inulaUI/.husky/commit-msg new file mode 100644 index 0000000000000000000000000000000000000000..5b0b35410a273f2b7dd7e2abcfb5c5670c49eae0 --- /dev/null +++ b/packages/inula2-ui/inulaUI/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx commitlint --edit "${1}" diff --git a/packages/inula2-ui/inulaUI/.husky/pre-commit b/packages/inula2-ui/inulaUI/.husky/pre-commit new file mode 100644 index 0000000000000000000000000000000000000000..d24fdfc601b9ffe8ccc3fca5d3b873109dc56c4a --- /dev/null +++ b/packages/inula2-ui/inulaUI/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged diff --git a/packages/inula2-ui/inulaUI/.prettierignore b/packages/inula2-ui/inulaUI/.prettierignore new file mode 100644 index 0000000000000000000000000000000000000000..6a50e206c7f7445fdc8f3e2beb97101e7a9a6eb2 --- /dev/null +++ b/packages/inula2-ui/inulaUI/.prettierignore @@ -0,0 +1,2 @@ +/dist +*.yaml diff --git a/packages/inula2-ui/inulaUI/.prettierrc.js b/packages/inula2-ui/inulaUI/.prettierrc.js new file mode 100644 index 0000000000000000000000000000000000000000..e6df093da701493005c466ea6c7988a76caf364e --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/.stylelintrc b/packages/inula2-ui/inulaUI/.stylelintrc new file mode 100644 index 0000000000000000000000000000000000000000..e3621944ffb91d709242262861bc0c016a4c7754 --- /dev/null +++ b/packages/inula2-ui/inulaUI/.stylelintrc @@ -0,0 +1,3 @@ +{ + "extends": "@umijs/lint/dist/config/stylelint" +} diff --git a/packages/inula2-ui/inulaUI/LICENSE b/packages/inula2-ui/inulaUI/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..7dd6caf49d44eb306288ce09fc2fa9bd081d9d0a --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/README.md b/packages/inula2-ui/inulaUI/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e9cbbfeebd8dad73be5ea95264240b92cfd93fc3 --- /dev/null +++ b/packages/inula2-ui/inulaUI/README.md @@ -0,0 +1,43 @@ +# inulaUI + +[![NPM version](https://img.shields.io/npm/v/inulaUI.svg?style=flat)](https://npmjs.org/package/inulaUI) +[![NPM downloads](http://img.shields.io/npm/dm/inulaUI.svg?style=flat)](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-ui/inulaUI/docs/guide.md b/packages/inula2-ui/inulaUI/docs/guide.md new file mode 100644 index 0000000000000000000000000000000000000000..5504ddf6ab57cec0fe2eae5ee3972e0062aa555c --- /dev/null +++ b/packages/inula2-ui/inulaUI/docs/guide.md @@ -0,0 +1 @@ +This is a guide example. diff --git a/packages/inula2-ui/inulaUI/docs/index.md b/packages/inula2-ui/inulaUI/docs/index.md new file mode 100644 index 0000000000000000000000000000000000000000..dd7b0e17dcbea3f0c348ab7d0acbc549f0d53492 --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/package.json b/packages/inula2-ui/inulaUI/package.json new file mode 100644 index 0000000000000000000000000000000000000000..d22ef4e75c89404ae0a61a362d7b61620ac6a6dd --- /dev/null +++ b/packages/inula2-ui/inulaUI/package.json @@ -0,0 +1,72 @@ +{ + "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": "husky install && 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", + "pnpm": "^10.12.4" + } +} diff --git a/packages/inula2-ui/inulaUI/pnpm-lock.yaml b/packages/inula2-ui/inulaUI/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a4a93971475b7e35eff7953630dd472658025d9d --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/src/button/demos/demo1.jsx b/packages/inula2-ui/inulaUI/src/button/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..dc2826a4cdcbbc71defdf117948733963f8ebade --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/demos/demo1.jsx @@ -0,0 +1,15 @@ +import { h, Fragment } from '@openinula/next'; +import Button from '../index.jsx'; + +export default function ButtonDemo() { + let loading = false; + return ( +
+ + + + + +
+ ); +} \ No newline at end of file diff --git a/packages/inula2-ui/inulaUI/src/button/demos/demo2.jsx b/packages/inula2-ui/inulaUI/src/button/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..b2c199815f400a64c32a56fe73a02742ea00bd7e --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/demos/demo2.jsx @@ -0,0 +1,15 @@ +import { h, Fragment } from '@openinula/next'; +import { Button } from 'inulaUI'; + +export default function ButtonDemo() { + let loading = false; + return ( +
+ + + + + +
+ ); +} \ No newline at end of file diff --git a/packages/inula2-ui/inulaUI/src/button/demos/demo3.jsx b/packages/inula2-ui/inulaUI/src/button/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..ab1ed2f999c2f27fbb1ec13a0c5a0e46f627b18a --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/demos/demo3.jsx @@ -0,0 +1,14 @@ +import { h, Fragment } from '@openinula/next'; +import { Button } from 'inulaUI'; + +export default function ButtonDemo() { + let loading = false; + return ( +
+ + + +
+ ); +} + diff --git a/packages/inula2-ui/inulaUI/src/button/demos/demo4.jsx b/packages/inula2-ui/inulaUI/src/button/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..7dde92964c2b353585f686e77453591707777875 --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/demos/demo4.jsx @@ -0,0 +1,15 @@ +import { h, Fragment } from '@openinula/next'; +import { Button } from 'inulaUI'; + +export default function ButtonDemo() { + let loading = false; + return ( +
+ + + + + +
+ ); +} \ No newline at end of file diff --git a/packages/inula2-ui/inulaUI/src/button/demos/demo5.jsx b/packages/inula2-ui/inulaUI/src/button/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..66f722c8218aec4aca6469f2770c2460cf6c6197 --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/demos/demo5.jsx @@ -0,0 +1,15 @@ +import { h, Fragment } from '@openinula/next'; +import { Button } from 'inulaUI'; + +export default function ButtonDemo() { + let loading = false; + return ( +
+ + + + + +
+ ); +} \ No newline at end of file diff --git a/packages/inula2-ui/inulaUI/src/button/demos/demo6.jsx b/packages/inula2-ui/inulaUI/src/button/demos/demo6.jsx new file mode 100644 index 0000000000000000000000000000000000000000..735d8163c8fc75348faacae9c39dd0e8824d70c6 --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/demos/demo6.jsx @@ -0,0 +1,27 @@ +import { h, Fragment } from '@openinula/next'; +import { Button } from 'inulaUI'; + +export default function ButtonDemo() { + let loading = false; + const handleLoading = () => { + loading = true; + setTimeout(() => loading = false, 1500); + console.log(loading); + }; + return ( +
+ +
+ ); +} + +// export default function Counter() { +// let count = 0; // 直接声明状态 + +// return ( +//
+//

计数: {count}

+// +//
+// ); +// } \ No newline at end of file diff --git a/packages/inula2-ui/inulaUI/src/button/index.css b/packages/inula2-ui/inulaUI/src/button/index.css new file mode 100644 index 0000000000000000000000000000000000000000..739479c1bd1d9293f5368364dd47515dcf5d89ca --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/index.css @@ -0,0 +1,231 @@ +.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 #d9d9d9; + background: #fff; + color: #333; + cursor: pointer; + transition: all 0.2s; + outline: none; +} + +/* 主按钮 */ +.inula-btn-primary { + background: #1677ff; + border-color: #1677ff; + color: #fff; +} +.inula-btn-primary:hover { + background: #4096ff; + border-color: #4096ff; + color: #fff; +} +.inula-btn-primary:active { + background: #0958d9; + border-color: #0958d9; + color: #fff; +} + +/* 默认按钮 */ +.inula-btn-default { + background: #fff; + border-color: #d9d9d9; + color: #333; +} +.inula-btn-default:hover { + color: #1677ff; + border-color: #1677ff; + background: #f0f7ff; +} +.inula-btn-default:active { + background: #e6f4ff; + border-color: #1677ff; + color: #1677ff; +} + +/* 虚线按钮 */ +.inula-btn-dashed { + border-style: dashed; + background: #fff; + border-color: #d9d9d9; + color: #333; +} +.inula-btn-dashed:hover { + color: #1677ff; + border-color: #1677ff; + background: #f0f7ff; +} +.inula-btn-dashed:active { + background: #e6f4ff; + border-color: #1677ff; + color: #1677ff; +} + +/* 文本按钮 */ +.inula-btn-text { + background: none; + border: none; + color: #1677ff; + box-shadow: none; +} +.inula-btn-text:hover { + background: #e6f4ff; + color: #0958d9; +} +.inula-btn-text:active { + background: #bae0ff; + color: #0958d9; +} + +/* 链接按钮 */ +.inula-btn-link { + background: none; + border: none; + color: #1677ff; + text-decoration: underline; + box-shadow: none; +} +.inula-btn-link:hover { + color: #0958d9; + background: none; + text-decoration: underline; +} +.inula-btn-link:active { + color: #0958d9; + background: none; +} + +/* 危险按钮 */ +.inula-btn-danger { + color: #ff4d4f; + border-color: #ff4d4f; + background: #fff1f0; +} +.inula-btn-danger:hover { + color: #fff; + background: #ff4d4f; + border-color: #ff4d4f; +} +.inula-btn-primary.inula-btn-danger { + background: #ff4d4f; + color: #fff; + border-color: #ff4d4f; +} +.inula-btn-primary.inula-btn-danger:hover { + background: #d9363e; + border-color: #d9363e; + color: #fff; +} +.inula-btn-primary.inula-btn-danger:active { + background: #d9363e; + border-color: #d9363e; + color: #fff; +} + +/* 幽灵按钮基础样式 */ +.inula-btn-ghost { + background: transparent !important; + color: #1677ff; + border: 1px solid #1677ff; + box-shadow: none; +} + +/* 幽灵主按钮 */ +.inula-btn-primary.inula-btn-ghost { + color: #1677ff; + border-color: #1677ff; + background: transparent; +} +.inula-btn-primary.inula-btn-ghost:hover { + color: #4096ff; + border-color: #4096ff; + background: rgba(22, 119, 255, 0.08); +} +.inula-btn-primary.inula-btn-ghost:active { + color: #4096ff; + border-color: #4096ff; + background: rgba(22, 119, 255, 0.16); +} + +/* 幽灵危险按钮 */ +.inula-btn-danger.inula-btn-ghost, +.inula-btn-primary.inula-btn-danger.inula-btn-ghost { + color: #ff4d4f; + border-color: #ff4d4f; + background: transparent; +} +.inula-btn-danger.inula-btn-ghost:hover, +.inula-btn-primary.inula-btn-danger.inula-btn-ghost:hover { + color: #fff; + background: #ff4d4f; + border-color: #ff4d4f; +} +.inula-btn-danger.inula-btn-ghost:active { + color: #ff4d4f; + background: #ff4d4f; + border-color: #ff4d4f; +} + +/* 幽灵默认按钮 */ +.inula-btn-default.inula-btn-ghost { + color: #1677ff; + border-color: #1677ff; + background: transparent; +} +.inula-btn-default.inula-btn-ghost:hover { + color: #4096ff; + border-color: #4096ff; + background: rgba(22, 119, 255, 0.08); +} +.inula-btn-default.inula-btn-ghost:active { + color: #4096ff; + border-color: #4096ff; + background: rgba(22, 119, 255, 0.16); +} + +/* 禁用 */ +.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: #fff !important; + color: #333 !important; + border-color: #d9d9d9 !important; + box-shadow: none !important; +} + +/* 加载中 */ +.inula-btn-loading { + position: relative; +} +.inula-btn-spinner { + display: inline-block; + width: 16px; + height: 16px; + border: 2px solid #ccc; + border-top: 2px solid #1677ff; + 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: #222; + padding: 16px; + display: inline-block; + border-radius: 6px; +} \ No newline at end of file diff --git a/packages/inula2-ui/inulaUI/src/button/index.jsx b/packages/inula2-ui/inulaUI/src/button/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..5e88d47c66aef07078538f23e4c4660ad28682fd --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/index.jsx @@ -0,0 +1,38 @@ +import { render } from '@openinula/next'; +import './index.css'; + +const Button = ({ + type = 'default', // primary, dashed, text, link + danger = false, + ghost = false, + disabled = false, + loading = false, + children, + onClick, + ...rest +}) => { + const classNames = [ + 'inula-btn', + `inula-btn-${type}`, + 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-ui/inulaUI/src/button/index.md b/packages/inula2-ui/inulaUI/src/button/index.md new file mode 100644 index 0000000000000000000000000000000000000000..3ac8df337b306e652430ffab138fcea47538a259 --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/button/index.md @@ -0,0 +1,37 @@ +--- +title: Button 按钮组件 +description: 支持五种类型和四种状态属性。 +demo: + cols: 2 +--- + +## 按钮类型 +- 主按钮(`primary`):用于主行动点,一个操作区域只能有一个主按钮。 +- 默认按钮(`default`):用于没有主次之分的一组行动点。 +- 虚线按钮(`dashed`):常用于添加操作。 +- 文本按钮(`text`):用于最次级的行动点。 +- 链接按钮(`link`):一般用于链接,即导航至某位置。 + +## 状态属性 +- 危险(`danger`):删除/移动/修改权限等危险操作,一般需要二次确认。 +- 幽灵(`ghost`):用于背景色比较复杂的地方,常用在首页/产品页等展示场景。 +- 禁用(`disabled`):行动点不可用的时候,一般需要文案解释。 +- 加载中(`loading`):用于异步操作等待反馈的时候,也可以避免多次提交。 + +## 代码演示 +基本 +危险 +幽灵 +禁用 +加载中 +交互加载 + + +## API +| 属性 | 说明 | 类型 | 默认值 | +|---------|--------------|---------|--------| +| type | 按钮类型 | `string` | default| +| danger | 危险状态 | `boolean` | false | +| ghost | 幽灵状态 | `boolean` | false | +| disabled| 禁用状态 | `boolean` | false | +| loading | 加载中状态 | `boolean` | false | \ No newline at end of file diff --git a/packages/inula2-ui/inulaUI/src/card/index.md b/packages/inula2-ui/inulaUI/src/card/index.md new file mode 100644 index 0000000000000000000000000000000000000000..36c7dc37bc4163c3bbe850774302e87671c1b7bd --- /dev/null +++ b/packages/inula2-ui/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={ + example + } + 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={ + example + } + 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-ui/inulaUI/src/datepicker/index.md b/packages/inula2-ui/inulaUI/src/datepicker/index.md new file mode 100644 index 0000000000000000000000000000000000000000..5eec97457fbc956e15e9db1c1aaa22f6646abf7c --- /dev/null +++ b/packages/inula2-ui/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 ( +
+
+ + 回调函数示例 + +
+ + + + + +
+
+ +
+ + open受控示例 + +
+ + +
+
+ +
+ + 日历弹出位置控制 + +
+ +
+
+ + + + + + + + + + + + +
+
+
+ ); +} + +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-ui/inulaUI/src/global.d.ts b/packages/inula2-ui/inulaUI/src/global.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..b0fbe18d50db31a5ca57fa0f1435e6313afa21af --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/src/icon/index.md b/packages/inula2-ui/inulaUI/src/icon/index.md new file mode 100644 index 0000000000000000000000000000000000000000..893d1d1eb28d97147cbb906a299d594709466799 --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/icon/index.md @@ -0,0 +1,227 @@ +# Icon 图标组件 + +## 何时使用 + +当你需要通过图标表达意思时 + +## 代码演示 + + +
+ +

基本

+

仅支持实体图标和品牌图标,可以改变颜色。

+ +
+ 查看示例代码 + +```jsx | pure +import { Icon } from 'inula-ui'; + +function IconDemo() { + return ( +
+
+ + user默认实体 +
+
+ + user实体 +
+
+ + user实体蓝色 +
+
+ ); +} + +export default IconDemo; +``` + +
+
+ + + +
+ +

大小

+

通过size字段可以改变大小

+ +
+ 查看示例代码 + +```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; +``` + +
+
+ + + +
+ +

实体图标表

+

该框架支持的所有实体图标表,点击即可复制。

+ + +
+ + + +
+ +

品牌图标表

+

该框架支持的所有品牌图标表,点击即可复制。

+ + +
+ + +## API + +| 属性 | 说明 | 类型 | 可选值 | 默认值 | +| ------- | -------------------------------------------- | --------------- | --------------------- | ---------- | +| value | 图标名称 | `string` | - | - | +| theme | 图标主题,filled 或 brand 支持实体、品牌图标 | `string` | `'filled' \| 'brand'` | `'filled'` | +| size | 图标大小 | `number` | - | - | +| color | 图标颜色 | `string` | - | - | +| rotate | 图标旋转角度 | `number` | - | - | +| spin | 是否旋转动画 | `boolean` | - | `false` | +| style | 图标样式 | `CSSProperties` | - | - | +| onClick | 点击事件 | `function(e)` | - | - | +| ...rest | 其他属性 | - | - | - | diff --git a/packages/inula2-ui/inulaUI/src/index.ts b/packages/inula2-ui/inulaUI/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..6539c399fac43c9043f0f4c300be6662217d243e --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/src/notification/index.md b/packages/inula2-ui/inulaUI/src/notification/index.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/packages/inula2-ui/inulaUI/src/switch/index.md b/packages/inula2-ui/inulaUI/src/switch/index.md new file mode 100644 index 0000000000000000000000000000000000000000..655198620bcf9e782e6e01c9fac8b6facca38c6c --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/src/tag/index.md b/packages/inula2-ui/inulaUI/src/tag/index.md new file mode 100644 index 0000000000000000000000000000000000000000..7bf69359e03c7a5daf2c54769a23dd0d459e615c --- /dev/null +++ b/packages/inula2-ui/inulaUI/src/tag/index.md @@ -0,0 +1,253 @@ +# Tag 标签组件 + +## 何时使用 + +进行标记和分类的小标签。 + +## 代码演示 + + +
+ +

基本

+

基本标签、link标签、带关闭按钮的标签

+ +
+ 查看示例代码 + +```jsx | pure +import { Tag } from 'inula-ui'; + +const Demo1 = () => { + return ( +
+ 基本标签 + + + Link标签 + + + Prevent Default +
+ ); +}; + +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-ui/inulaUI/src/tree/index.md b/packages/inula2-ui/inulaUI/src/tree/index.md new file mode 100644 index 0000000000000000000000000000000000000000..c6f42006ba61a58e6c3307652dc5ca0e390273e8 --- /dev/null +++ b/packages/inula2-ui/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-ui/inulaUI/tsconfig.json b/packages/inula2-ui/inulaUI/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..2a2788847d17d544d0e1772f2e33d2ce6f9d7fa4 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/.gitignore b/packages/inula2-ui/library_code/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..40d843311c3570c1273810abfdc6c5545a12fb62 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/index.html b/packages/inula2-ui/library_code/index.html new file mode 100644 index 0000000000000000000000000000000000000000..a8b784df1b86f7888422912ccf5d1ae2f0611dc0 --- /dev/null +++ b/packages/inula2-ui/library_code/index.html @@ -0,0 +1,15 @@ + + + + + Inula-Next + + + + + + +
+ + + diff --git a/packages/inula2-ui/library_code/package.json b/packages/inula2-ui/library_code/package.json new file mode 100644 index 0000000000000000000000000000000000000000..d7678787f41efdb61316f48189d0391363b4c328 --- /dev/null +++ b/packages/inula2-ui/library_code/package.json @@ -0,0 +1,21 @@ +{ + "name": "inula-next-vite-app", + "private": true, + "version": "0.0.6", + "type": "module", + "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-ui/library_code/src/colors.css b/packages/inula2-ui/library_code/src/colors.css new file mode 100644 index 0000000000000000000000000000000000000000..e679d83d471aa7639d8fa1aa702f963d0dde93f9 --- /dev/null +++ b/packages/inula2-ui/library_code/src/colors.css @@ -0,0 +1,65 @@ +:root { + /* 主要按钮颜色 */ + --inula-color-primary: #1677ff; + --inula-color-primary-hover: #4096ff; + --inula-color-primary-active: #0958d9; + + /* 默认按钮颜色 */ + --inula-color-default-bg: #fff; + --inula-color-default-border: #d9d9d9; + --inula-color-default-text: #333; + --inula-color-default-hover-bg: #f0f7ff; + --inula-color-default-active-bg: #e6f4ff; + + /* 虚线按钮颜色 */ + --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: rgba(0,0,0,0.04); + --inula-color-disabled-text: rgba(0,0,0,0.25); + --inula-color-disabled-border: #d9d9d9; + + /* 加载中 spinner 颜色 */ + --inula-color-spinner: #ccc; + --inula-color-spinner-active: #1677ff; + + /* demo 深色背景 */ + --inula-demo-dark-bg: #222; + + /* icon 默认颜色 */ + --inula-icon-default: #555555; + + /* indeterminate-checkbox */ + --inula-checkbox-indeterminate-hover-bg: #4096ff; + --inula-checkbox-indeterminate-disabled-after: #b8b8b8; + + /* switch */ + --inula-switch-default-bg: #bfbfbf; + --inula-switch-default-hover-bg: #8c8c8c; + + --inula-switch-checked-bg: #1677ff; + --inula-switch-checked-hover-bg: #4096ff; + + --inula-switch-disabled-bg: #d5d5d5; + --inula-switch-checked-disabled-bg: #67a6ff; +} \ No newline at end of file diff --git a/packages/inula2-ui/library_code/src/components/button/demo.jsx b/packages/inula2-ui/library_code/src/components/button/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..5c88846b4a1dc0bd9e7a938e585d6e9503276803 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/button/demo.jsx @@ -0,0 +1,22 @@ +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 ( +
+
+
+
+
+
+
+
+ ); +} +export default ButtonDemo; \ No newline at end of file diff --git a/packages/inula2-ui/library_code/src/components/button/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/button/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..6cfa48925e6760dfd65add11461d63419f1c781f --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/button/demos/demo1.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-ui/library_code/src/components/button/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/button/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..318922e753f29f6d2b88c50e78f5dbff739ebd99 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/button/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/button/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..519b83e8426c7be4bde5cf2705c3bd8f45aff2d3 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/button/demos/demo3.jsx @@ -0,0 +1,13 @@ +import Button from '../index.jsx'; + +function ButtonDemo() { + let loading = false; + return ( +
+ + + +
+ ); +} +export default ButtonDemo; diff --git a/packages/inula2-ui/library_code/src/components/button/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/button/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..12bba8c5c3049d9cd5f0bd87f331579d7027cfd0 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/button/demos/demo4.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-ui/library_code/src/components/button/demos/demo5.jsx b/packages/inula2-ui/library_code/src/components/button/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..361e1d0cf8b02d254f3e0d03b13223b25f60f7f1 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/button/demos/demo5.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-ui/library_code/src/components/button/demos/demo6.jsx b/packages/inula2-ui/library_code/src/components/button/demos/demo6.jsx new file mode 100644 index 0000000000000000000000000000000000000000..baefee358596bd769f410a48a7af894fb3bc664e --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/button/index.css b/packages/inula2-ui/library_code/src/components/button/index.css new file mode 100644 index 0000000000000000000000000000000000000000..c5ad9cfa1b5240cc80c74c4bcbc213075789f697 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/button/index.css @@ -0,0 +1,231 @@ +.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-default-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-default-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-default-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; +} \ No newline at end of file diff --git a/packages/inula2-ui/library_code/src/components/button/index.jsx b/packages/inula2-ui/library_code/src/components/button/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..98aab9a50403b3064015453c94cb42588d072e1b --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/button/index.jsx @@ -0,0 +1,38 @@ +import { render } from '@openinula/next'; +import './index.css'; + +const Button = ({ + type = 'default', // primary, dashed, text, link + danger = false, + ghost = false, + disabled = false, + loading = false, + children, + onClick, + ...rest +}) => { + const classNames = [ + 'inula-btn', + `inula-btn-${type}`, + 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-ui/library_code/src/components/card/demo.jsx b/packages/inula2-ui/library_code/src/components/card/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..a8c0f9d2cff78bdec93d3fc5b6b76efc5e9245a4 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/card/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/card/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..7174e2567482a4fc71dc27a9dcb6a4b7f89a74e4 --- /dev/null +++ b/packages/inula2-ui/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={ + example + } + actions={actions} + > +
Card content
+ Card content + Card content + +
+ + 不同大小、边框、hover动效的Card + +
+ +
默认型号,无hover动效
+
+ +
小号,有hover动效
+
+
+ + ); +}; + +export default CardDemo; diff --git a/packages/inula2-ui/library_code/src/components/card/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/card/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..490b8a6fa6e43dd32f6b29d153a03099ad8de6f1 --- /dev/null +++ b/packages/inula2-ui/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={ + example + } + actions={actions} + loading={loading} + > +
Card content
+ Card content + Card content + +
+ { + loading = !loading; + }} + /> + 点击切换内容加载状态 +
+ + 嵌套Card样式 + + +
放在Card下的Card组件样式
+
+
+ + ); +}; + +export default CardDemo; diff --git a/packages/inula2-ui/library_code/src/components/card/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/card/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..e7f93ce7e697f2bc34e8243be6ff8b5652939fc8 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/card/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/card/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..53b473f1ede82627313427f55fcdad235431526f --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/card/demos/demo5.jsx b/packages/inula2-ui/library_code/src/components/card/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..4275518be117cd464a6cfeb2f861ed2c67b0fedf --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/card/index.css b/packages/inula2-ui/library_code/src/components/card/index.css new file mode 100644 index 0000000000000000000000000000000000000000..35924246a80124c0abd548306e308b96590970b4 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/card/index.jsx b/packages/inula2-ui/library_code/src/components/card/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..a08d70fcfbee49d9d07426a16d594effa41c21b8 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/checkbox/demo.jsx b/packages/inula2-ui/library_code/src/components/checkbox/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..dc0a92ca6e71736c821fa35cce8d709238c42762 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/checkbox/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/checkbox/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..8d3816c9d297d3242f4e06c2727d166e24490f21 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/checkbox/demos/demo1.jsx @@ -0,0 +1,57 @@ +import { Checkbox } from "../index.jsx"; + +const CheckboxDemo = () => { + return ( +
+
+ 基本状态 + 普通Checkbox + 选中 + 默认选中 +
+
+ indeterminate复选框样式 + indeterminate按钮 + + indeterminate选中 + +
+
+ 禁用状态 + 禁用未选中 + + 禁用选中 + + + 禁用默认选中 + + + indeterminate按钮禁用 + +
+
+ ); +}; + +export default CheckboxDemo; diff --git a/packages/inula2-ui/library_code/src/components/checkbox/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/checkbox/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..5d62408266eccd8c0db3a6d3247cebdb87045feb --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/checkbox/demos/demo2.jsx @@ -0,0 +1,60 @@ +import { CheckboxGroup } from "../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-ui/library_code/src/components/checkbox/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/checkbox/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..af09c301c08b2c83c564456b200953a58b75bc98 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/checkbox/index.css b/packages/inula2-ui/library_code/src/components/checkbox/index.css new file mode 100644 index 0000000000000000000000000000000000000000..f60a1797e14fe1705ddb925a5cc0fc0a5df0501d --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/checkbox/index.jsx b/packages/inula2-ui/library_code/src/components/checkbox/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..da0afd99e5d6df3cf847c926aac5bacfb62e7211 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/checkbox/index.jsx @@ -0,0 +1,129 @@ +import "./index.css"; + +const Checkbox = ({ + // autoFocus = false, + defaultChecked = false, + disabled = false, + indeterminate = false, + children, + checked, + className, + style, + 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", + 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-ui/library_code/src/components/datepicker2/demo.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..1cd5f817a9357bf9efc824a1cf3046969065ea2e --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..60e4ec9b438814e33b1e978af679ee9dfba29fbb --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..b2f0ba44f70e18cea2f1887432eaaaf27f6153a8 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..9f86eb25e604fdbf0abe7124991fe591b46ba855 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..55ef2e56cca619b0dfbffd707be63db397e926aa --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/demos/demo5.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..29bcef0bf3423839f91d6b3fbd28e97af6779f1b --- /dev/null +++ b/packages/inula2-ui/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 ( +
+
+ + 回调函数示例 + +
+ + + + + +
+
+
+ + open受控示例 + +
+ + +
+
+
+ + 日历弹出位置控制 + +
+ +
+
+ + + + + + + + + + + + +
+
+
+ ); +} + +export default DatePickerDemo; diff --git a/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo6.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo6.jsx new file mode 100644 index 0000000000000000000000000000000000000000..99db9edce0e737e25346adc3fceaf36212608206 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/demos/demo7.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo7.jsx new file mode 100644 index 0000000000000000000000000000000000000000..c5e1f51d74086873cbedf2ce7a5f565ac1ca50cc --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/demos/demo8.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/demos/demo8.jsx new file mode 100644 index 0000000000000000000000000000000000000000..d01819ea450fc7e7d2ba9306d993a1619c6baf44 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/index.css b/packages/inula2-ui/library_code/src/components/datepicker2/index.css new file mode 100644 index 0000000000000000000000000000000000000000..514dace2bc2c9c701eca7bce275ae8dd5cea73b6 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/index.jsx b/packages/inula2-ui/library_code/src/components/datepicker2/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..4068bf70bbfcea0afb7b1190e8535074b3723e56 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/utils/calculateFunc.js b/packages/inula2-ui/library_code/src/components/datepicker2/utils/calculateFunc.js new file mode 100644 index 0000000000000000000000000000000000000000..8da31f4d37be389b973044897da3a84f99b6a1bb --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/datepicker2/utils/formatFunc.js b/packages/inula2-ui/library_code/src/components/datepicker2/utils/formatFunc.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/packages/inula2-ui/library_code/src/components/datepicker2/utils/index.js b/packages/inula2-ui/library_code/src/components/datepicker2/utils/index.js new file mode 100644 index 0000000000000000000000000000000000000000..5f3a07947e00c9a086d53dc7357e2b5319a1145c --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demo.jsx b/packages/inula2-ui/library_code/src/components/icon/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..d0cf25e7fdc29cc39aab4df7c29a5de2d93e527a --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/icon/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..85c7d20e57999c057ecbdc9979d46f84a512ceb9 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/icon/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..f6983d5ea42b7cf0b70c90250ba149adea493834 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/icon/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..4fc1276784063e180c3a4a2f4593a3585c2d84bc --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/icon/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..7029006126c185963e6a0957d0be36fc4b121d8e --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demos/demo5.jsx b/packages/inula2-ui/library_code/src/components/icon/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..6a474b0d38c0a293b404a4610e1d8f1d03aeff7f --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demos/demo6.jsx b/packages/inula2-ui/library_code/src/components/icon/demos/demo6.jsx new file mode 100644 index 0000000000000000000000000000000000000000..2c59e1d23d6fb650c560d61f4675ec6369a975b1 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/demos/iconlist.ts b/packages/inula2-ui/library_code/src/components/icon/demos/iconlist.ts new file mode 100644 index 0000000000000000000000000000000000000000..90beba0aff624a7487fc4f7cdf588211274d6a5f --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/index.css b/packages/inula2-ui/library_code/src/components/icon/index.css new file mode 100644 index 0000000000000000000000000000000000000000..dd58a0e4a56968c94caafb9bb167d369f8b27e6d --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/icon/index.jsx b/packages/inula2-ui/library_code/src/components/icon/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..a36f246478fb3cfa9415120eb99dba32951ef826 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/spin/demo.jsx b/packages/inula2-ui/library_code/src/components/spin/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..3900520b2666258d1d739589b25a032cbf77f117 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/spin/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/spin/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..72e5e53d7c01dd223515effa367bdbda7babe6e2 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/spin/demos/demo1.jsx @@ -0,0 +1,21 @@ +import Spin from "../index.jsx"; + +const SpinDemo = () => { + + return ( +
+
+ 最简单的Spin + +
+
+ 小中大的Spin + + + +
+
+ ); +}; + +export default SpinDemo; diff --git a/packages/inula2-ui/library_code/src/components/spin/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/spin/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..8a71b7a0f6d21ef9db7a8b795b6edf95e4068f1a --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/spin/demos/demo2.jsx @@ -0,0 +1,74 @@ +import Spin from "../index.jsx"; +import Switch from "../../switch/index.jsx"; +const SpinDemo = () => { + let loading = false; + + return ( +
+
+ 简单嵌套状态 + +
+ 这是子组件 +
+
+ (loading = !loading)} /> + 切换嵌套组件的加载状态 +
+
+ 自定义tip的Spin,小中大样式 + +
+
+ +
+
+ +
+
+
+
+ ); +}; + +export default SpinDemo; diff --git a/packages/inula2-ui/library_code/src/components/spin/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/spin/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..2585139086d967ca15c31ae45e951e10240b095e --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/spin/demos/demo3.jsx @@ -0,0 +1,41 @@ +import Spin from "../index.jsx"; +import Switch from "../../switch/index.jsx"; +const SpinDemo = () => { + let loading = false; + + return ( +
+
+ + 点击延迟一秒触发加载 + + +
+ 这是子组件 +
+
+ (loading = !loading)} /> + 延迟触发切换状态按钮 +
+
+ ); +}; + +export default SpinDemo; diff --git a/packages/inula2-ui/library_code/src/components/spin/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/spin/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..9a213e56afeb194b976a5dcdd7411477e7dbac5c --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/spin/demos/demo5.jsx b/packages/inula2-ui/library_code/src/components/spin/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..1a5d904e1511426f0aee4cc6ebd2dcb2b5e1d6cb --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/spin/index.css b/packages/inula2-ui/library_code/src/components/spin/index.css new file mode 100644 index 0000000000000000000000000000000000000000..6153477f72f347f950107eeff262dfb61b5bcdd9 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/spin/index.jsx b/packages/inula2-ui/library_code/src/components/spin/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..950faf180305277d298ec9979f682017915ed32a --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/switch/demo.jsx b/packages/inula2-ui/library_code/src/components/switch/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..a88a5b86a038fd41875ce13de6521516c5d4751f --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/switch/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/switch/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..dc1c9a1305b48f059a7944eb021b97b8a2aa8ae0 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/switch/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/switch/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..3c17a13673672905419ccc7150b636f531f9ec1e --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/switch/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/switch/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..1a9cc3934b4ec5a1bcd66ded10e4a93db09b5bed --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/switch/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/switch/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..7caa21699919f77ad0df9c290994cdb567cd6f23 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/switch/index.css b/packages/inula2-ui/library_code/src/components/switch/index.css new file mode 100644 index 0000000000000000000000000000000000000000..c3b0cdcee8a9d421a5e2a4f68624415a3b8f8f45 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/switch/index.jsx b/packages/inula2-ui/library_code/src/components/switch/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..92ea639270e0d1504c5a65c6d50c97769ab09146 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/switch/index.jsx @@ -0,0 +1,109 @@ +import "./index.css"; + +const Switch = ({ + defaultChecked = false, + defaultValue = defaultChecked, + disabled = false, + loading = false, + size = "default", //default, small + checked, + onChange, + onClick, + className, + style, + checkedChildren, + unCheckedChildren, +}) => { + let isChecked = checked !== undefined ? checked : defaultChecked || defaultValue; + + const classNames = ( + isChecked + ? [ + "inula-switch", + "inula-switch-checked", + size && `inula-switch-${size}`, + disabled && "inula-switch-checked-disabled", + loading && "inula-switch-checked-loading", + className, + ] + : [ + "inula-switch", + 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-ui/library_code/src/components/tabs/demo.jsx b/packages/inula2-ui/library_code/src/components/tabs/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..e373bfc1d720a73eb91d4861875169b8906c9b34 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..d48b2a5383b7089268ee37de2f2acf4a204aa43c --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo10.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo10.jsx new file mode 100644 index 0000000000000000000000000000000000000000..1ee34271960a87a7992710d006d6d9176e8b9521 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo11.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo11.jsx new file mode 100644 index 0000000000000000000000000000000000000000..4694809e469da837b4323bcabdf45b032a1ec786 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..96a9f0fb6a3d021aad92d4975ffaf29541aa27c1 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..dfd34cda3dbc0778f135fea1f02f0a49eeb572d4 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..8ac43876c9d967978be5f5bfd7c2178cb28204bc --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo5.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..0baabf0864a5f50ab34de0a6e8c85d682a4e9169 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo6.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo6.jsx new file mode 100644 index 0000000000000000000000000000000000000000..26fec0e9636eaf3d11b18285ee4e37b27a260b39 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo7.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo7.jsx new file mode 100644 index 0000000000000000000000000000000000000000..065371dc273fedb753da445603c5cdc8be8a8ca7 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo8.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo8.jsx new file mode 100644 index 0000000000000000000000000000000000000000..5b7b040374987d577ba96989fcad0974c7ab1a86 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/demos/demo9.jsx b/packages/inula2-ui/library_code/src/components/tabs/demos/demo9.jsx new file mode 100644 index 0000000000000000000000000000000000000000..8f33bee439b804f356425d3a4137db5ccfca24e4 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/index.css b/packages/inula2-ui/library_code/src/components/tabs/index.css new file mode 100644 index 0000000000000000000000000000000000000000..f906caedfbade1ffc8e49d7118fe622e8d59d422 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tabs/index.jsx b/packages/inula2-ui/library_code/src/components/tabs/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..c262011af96c47c6d233b36bda161cb25d0a0ead --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tag/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/tag/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..bc03da5090e6ea4dcc1917146049aeef64ab3d60 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/tag/demos/demo1.jsx @@ -0,0 +1,23 @@ +import "../index.css"; +import Tag from "../index.jsx"; + +const Demo1 = () => { + return ( +
+ 基本标签 + + + Link标签 + + + Prevent Default +
+ ); +}; + +export default Demo1; diff --git a/packages/inula2-ui/library_code/src/components/tree/demo.jsx b/packages/inula2-ui/library_code/src/components/tree/demo.jsx new file mode 100644 index 0000000000000000000000000000000000000000..7e9bc750edafab4b3dce9f4c91698641b6ad8083 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/demos/demo1.jsx b/packages/inula2-ui/library_code/src/components/tree/demos/demo1.jsx new file mode 100644 index 0000000000000000000000000000000000000000..86f3a95922308e2998e961e6e9eb61fced701348 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/demos/demo2.jsx b/packages/inula2-ui/library_code/src/components/tree/demos/demo2.jsx new file mode 100644 index 0000000000000000000000000000000000000000..55a45ad46e8b775a3a2bc61559efa35cdf4b5007 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/demos/demo3.jsx b/packages/inula2-ui/library_code/src/components/tree/demos/demo3.jsx new file mode 100644 index 0000000000000000000000000000000000000000..1e9ab958e4b34b17e311c54473fb2fdfc846ef9c --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/demos/demo4.jsx b/packages/inula2-ui/library_code/src/components/tree/demos/demo4.jsx new file mode 100644 index 0000000000000000000000000000000000000000..e8963ecfc39c3e9355080c0996b6ad5b71fa10ce --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/demos/demo5.jsx b/packages/inula2-ui/library_code/src/components/tree/demos/demo5.jsx new file mode 100644 index 0000000000000000000000000000000000000000..786b0734547e2d3ed8076318ba07fc2201e95c18 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/index.css b/packages/inula2-ui/library_code/src/components/tree/index.css new file mode 100644 index 0000000000000000000000000000000000000000..447a2f78c3a165ea104d6dfd7c6a9dddb0c8bea7 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/index.jsx b/packages/inula2-ui/library_code/src/components/tree/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..e21a1d2728013c0943aa30a0481c7fb244faf2a7 --- /dev/null +++ b/packages/inula2-ui/library_code/src/components/tree/index.jsx @@ -0,0 +1,505 @@ +import "./index.css"; +import { Checkbox } from "../checkbox/index.jsx"; +import Icon from "../icon/index.jsx"; +import VirtualList from "./virtualList.jsx"; +import { didMount, watch } from "@openinula/next"; +import { + getKeyToTreeMap, + getAllRelatedChildKeys, + initialAllExpandedKeys, + initialCustomExpandedKeys, + initialCustomCheckedKeys, + initialCustomSelectedKeys, + calculateExpandKeys, + calculateCheckedKeys, + calculateSelectedKeys, + judgeHalfCheckedKeys, + flattenTreeData, +} from "./utils/index.js"; + +const Tree = ({ + autoExpandParent = false, // 是否自动展开父节点 + blockNode = false, //是否节点占据一行 + checkable = false, // 是否显示复选框 + checkedKeys = [], // 受控选中复选框的树节点,父节点设置时子节点自动选中,string[] | checkStrictly:{checked: string[], halfChecked: string[]} + checkStrictly = false, // 父子节点不再关联,完全受控 + defaultCheckedKeys = [], // 默认选中的树节点 + defaultExpandAll = false, // 默认展开所有树节点 + defaultExpandParent = true, // 默认展开父节点 + defaultExpandedKeys = [], // 默认展开指定的树节点 + expandedKeys = [], // 受控展开的树节点 + disabled = false, // 禁用树 + fieldNames = {}, // 自定义字段名 + filterTreeNode = () => true, // 按需筛选树节点 + height, //设置虚拟滚动容器高度,设置后内部不再支持横向滚动 + icon, //标题之前插入自定义图标,需设置showIcon为true + loadData, // 异步加载数据,需设置loadData属性,返回Promise对象,返回值为树节点数据 + loadedKeys = [], // 受控已加载的树节点,用于控制异步加载,需配合loadData属性使用 + multiple = false, // 是否支持多选 + selectable = true, // 是否支持选中,为false时点击为check选中 + defaultSelectedKeys = [], //默认选中的树节点,多选需配合multiple属性使用 + 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 +}) => { + //选中、展开节点 + let customCheckedKeys = []; + let customSelectedKeys = []; + let customExpandedKeys = []; + //节点树的相关信息 + let keyToNodeInfoMap = new Map(); //nodeInfo: { node, parent, depth, isLast }; + let maxDepth = 1; //树最大深度 + //异步节点管理 + let customLoadedKeys = loadedKeys; + let customLoadingKeys = []; + let flattenedTreeNodes = []; + + /** + * 树节点展开控制 + * 优先级:受控 > all > 默认 + */ + //初始化 + const initialExpandedKeys = (currentTree) => { + if (expandedKeys.length > 0) { + return initialCustomExpandedKeys( + currentTree, + expandedKeys, + autoExpandParent || defaultExpandParent + ); + } + if (defaultExpandAll) { + return initialAllExpandedKeys(currentTree); + } + if (!defaultExpandAll && defaultExpandedKeys.length > 0) { + return initialCustomExpandedKeys( + currentTree, + defaultExpandedKeys, + autoExpandParent || defaultExpandParent + ); + } + return []; + }; + + /** + * 树节点选中控制 + * 优先级:受控 > 默认 + */ + //checked选中 + const initialCheckedKeys = (currentTree) => { + if (checkedKeys.length > 0) { + return initialCustomCheckedKeys(currentTree, checkedKeys, checkStrictly); + } else { + return initialCustomCheckedKeys( + currentTree, + defaultCheckedKeys, + checkStrictly + ); + } + }; + + //selected选中 + const initialSelectedKeys = () => { + if (selectedKeys.length > 0) { + return initialCustomSelectedKeys(selectedKeys, multiple); + } else { + return initialCustomSelectedKeys(defaultSelectedKeys, multiple); + } + }; + + /** 点击事件 */ + //type = 'expand' | 'check' | 'select' + const hanldleClick = (target, type, e) => { + switch (type) { + case "expand": { + const isAlreadyLoaded = customLoadedKeys.includes(target.key); + const isLoading = customLoadingKeys.includes(target.key); + const shouldLoad = loadData && !isAlreadyLoaded && !isLoading; + + if (shouldLoad) { + customLoadingKeys = [...customLoadingKeys, target.key]; + + loadData(target) + .then(() => { + customLoadingKeys = customLoadingKeys.filter( + (key) => key !== target.key + ); + customLoadedKeys = [...customLoadedKeys, target.key]; + }) + .catch(() => { + customLoadingKeys = customLoadingKeys.filter( + (key) => key !== target.key + ); + customLoadedKeys = [...customLoadedKeys, target.key]; + }); + } + + customExpandedKeys = calculateExpandKeys(target, [ + ...customExpandedKeys, + ]); + if (onExpand) onExpand(customExpandedKeys, e); + break; + } + case "check": { + const childKeys = getAllRelatedChildKeys(target); + customCheckedKeys = calculateCheckedKeys( + target, + [...customCheckedKeys], + keyToNodeInfoMap, + childKeys, + checkStrictly + ); + if (onCheck) onCheck(customCheckedKeys, e); + break; + } + case "select": { + customSelectedKeys = calculateSelectedKeys( + target, + [...customSelectedKeys], + multiple + ); + if (onSelect) onSelect(customSelectedKeys, e); + break; + } + default: + console.error("错误操作"); + } + }; + + //样式控制 + const classNames = ["inula-tree", className].filter(Boolean).join(" "); + const styles = { + ...rootStyle, + }; + + /** TreeNode节点组件 */ + /*TreeNode Props + * title: 节点标题 + * key: 节点唯一标识,必填 + * isLeaf: 是否为叶子节点,默认false + * selectable: 是否可选,默认true,为false时点击为check选中 + * disabled: 是否禁用,默认false + * children: 子节点,array + * icon: 自定义图标,ReactNode + * disableCheckbox: 是否禁用复选框,默认false + */ + const TreeNode = ({ node }) => { + //是否为虚拟列表模式 + const isVirtualMode = virtual && height; + //节点信息:{ node:节点, parent:父节点, depth:深度, isLast:是否为当前层最后一个节点 } + const nodeInfo = keyToNodeInfoMap.get(node.key); + //非叶子结点是否展开 + const isExpanded = customExpandedKeys.includes(node.key); + //节点是否check选中,针对复选框 + const isChecked = customCheckedKeys.includes(node.key); + //是否支持select选中 + const isSelectable = selectable || node.isSelectable; + //节点是否select选中,针对text部分,需selectable为true + const isSelected = customSelectedKeys.includes(node.key) && isSelectable; + //checkbox禁用 + const isCheckDisabled = node.disabled || node.disableCheckbox || disabled; + //select禁用 + const isSelectDisabled = node.disabled || disabled; + //子节点部分选择 + const isHalfChecked = + !isChecked && + node.children && + judgeHalfCheckedKeys( + node, + customCheckedKeys, + getAllRelatedChildKeys(node) + ); + //是否为异步加载树的叶子节点 + const isLoadLeafNode = loadData && node.isLeaf; + //是否为普通树的叶子节点 + // const isSimpleLeafNode = !loadData && (node?.isLeaf || !node?.children); + //是否为叶子节点 + // const isLeafNode = isLoadLeafNode || isSimpleLeafNode; + //是否为加载中节点 + // const isLoading = customLoadingKeys.includes(node.key); + + const isSimpleLeafNode = true; + // 是否为叶子节点 + const isLeafNode = true; + // 是否为加载中节点 + const isLoading = true; + + //展开收起切换按钮 + const Switcher = () => { + if (isLeafNode) return null; //叶子节点,不渲染 + // loading状态,渲染loadingIcon + if (isLoading) + return ( + <> + {switcherLoadingIcon || ( + + )} + + ); + + //用户自定义swictherIcon优先渲染 + if (switcherIcon) { + return ( +
+ {switcherIcon} +
+ ); + } + + return ( + + ); + }; + + //子节点渲染 + const ChildrenRender = () => { + let contentRef; + if (isVirtualMode) return null; //虚拟列表模式只渲染本身 + + //如果为叶子节点或者没有孩子,不渲染 + if (isLeafNode || node.children?.length === 0) return <>; + + return ( +
+ {node.children?.map((child) => ( + + ))} +
+ ); + }; + + //TreeNode样式计算 + const treeNodeClassName = [ + "inula-tree-node", + showLine && isLeafNode && "showLine", + ] + .filter(Boolean) + .join(" "); + + //展开收起按钮样式 + const switcherClassNames = [ + "inula-tree-node-content-switcher", + isLeafNode && "noSwitcher", + isLoading && "isLoading", + ] + .filter(Boolean) + .join(" "); + + //内容部分样式 + const titleClassNames = [ + "inula-tree-node-content-title", + nodeInfo?.depth === maxDepth && isLeafNode && "indent", + showLine && isLeafNode && "showLine", + ] + .filter(Boolean) + .join(" "); + + //内容中文字部分样式 + const textClassNames = [ + "inula-tree-node-content-text", + isSelected && "isSelected", + isSelectDisabled && "disabled", + ] + .filter(Boolean) + .join(" "); + + //子节点容器渲染样式 + const childClassNames = [ + "inula-tree-children", + !isExpanded ? "inula-tree-children-fold" : "", + showLine && !nodeInfo?.isLast && "showLine", + ] + .filter(Boolean) + .join(" "); + + // 虚拟列表模式渲染; + if (isVirtualMode) { + const { level } = node; + return ( +
+
+ {(nodeInfo?.depth !== maxDepth || loadData) && ( +
hanldleClick(node, "expand", e)} + > + +
+ )} + +
+ {showLine && isSimpleLeafNode && !nodeInfo?.isLast && ( +
+ )} + + {checkable && ( + hanldleClick(node, "check", e)} + /> + )} + +
{ + if (isCheckDisabled) return; + if (isSelectable) hanldleClick(node, "select", e); + else hanldleClick(node, "check", e); + }} + > + {showIcon && (node.icon || icon) && <>{node.icon || icon}} + {titleRender ? titleRender(node) : <>{node.title}} +
+
+
+
+ ); + } + + //普通模式渲染 + return ( +
  • +
    + {(nodeInfo?.depth !== maxDepth || loadData) && ( +
    hanldleClick(node, "expand", e)} + > + +
    + )} + +
    + {/* 连接线 */} + {showLine && isLeafNode && !nodeInfo?.isLast && ( +
    + )} + + {/* 复选框,需checkable为true */} + {checkable && ( + hanldleClick(node, "check", e)} + /> + )} + + {/* 文字部分,支持自定义图标和自定义文字 */} + { + if (isCheckDisabled) return; + if (isSelectable) hanldleClick(node, "select", e); + else hanldleClick(node, "check", e); + }} + > + {showIcon && (node.icon || icon) && <>{node.icon || icon}} + {titleRender ? titleRender(node) : <>{node.title}} + +
    +
    + + {/* 子节点渲染 */} +
      + +
    +
  • + ); + }; + + // 初始化,以及受控初始化 + // didMount(() => { + // onLoad && onLoad(); + // customExpandedKeys = initialExpandedKeys(treeData); + // customCheckedKeys = initialCheckedKeys(treeData); + // customSelectedKeys = initialSelectedKeys(treeData); + // }); + + watch(() => { + onLoad && onLoad(); + customExpandedKeys = initialExpandedKeys(treeData); + customCheckedKeys = initialCheckedKeys(treeData); + customSelectedKeys = initialSelectedKeys(treeData); + }); + + watch(() => { + if (treeData) { + const { map, depth } = getKeyToTreeMap(treeData); + keyToNodeInfoMap = map; + maxDepth = depth; + } + // const { map, depth } = getKeyToTreeMap(treeData); + // keyToNodeInfoMap = map; + // maxDepth = depth; + }); + + // 虚拟列表扁平化 + watch(() => { + flattenedTreeNodes = flattenTreeData( + treeData, + customExpandedKeys, + keyToNodeInfoMap + ); + }); + + return ( +
  • + {virtual && height ? ( + } + > + ) : ( +
      + {treeData.map((node) => ( + + ))} +
    + )} +
  • + ); +}; + +export default Tree; diff --git a/packages/inula2-ui/library_code/src/components/tree/utils/calculateCustomKeys.js b/packages/inula2-ui/library_code/src/components/tree/utils/calculateCustomKeys.js new file mode 100644 index 0000000000000000000000000000000000000000..a38133bf5fd15b55528aaf57c792cbfc2d61257a --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/utils/flattendTreeData.js b/packages/inula2-ui/library_code/src/components/tree/utils/flattendTreeData.js new file mode 100644 index 0000000000000000000000000000000000000000..e5ec3d3f26d65253ea5a85e2cfcf4e5f02d7dd44 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/utils/getKeyToTree.js b/packages/inula2-ui/library_code/src/components/tree/utils/getKeyToTree.js new file mode 100644 index 0000000000000000000000000000000000000000..f4c174cff5d40531f1a2a1e79d8dd1303f4ecd08 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/utils/index.js b/packages/inula2-ui/library_code/src/components/tree/utils/index.js new file mode 100644 index 0000000000000000000000000000000000000000..9979d15ab39d5d8b0561f85b26f3a049e2a9c9ca --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/utils/initialCustomKeys.js b/packages/inula2-ui/library_code/src/components/tree/utils/initialCustomKeys.js new file mode 100644 index 0000000000000000000000000000000000000000..3156ea35dc05d58f06706ae9772d9885cee845f3 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/components/tree/virtualList.jsx b/packages/inula2-ui/library_code/src/components/tree/virtualList.jsx new file mode 100644 index 0000000000000000000000000000000000000000..9be1b604593ef146d8b1b5334d5f5253f3e79662 --- /dev/null +++ b/packages/inula2-ui/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-ui/library_code/src/index.css b/packages/inula2-ui/library_code/src/index.css new file mode 100644 index 0000000000000000000000000000000000000000..0d1e14c4b67f8b9c6dea84328860f9e7785c3632 --- /dev/null +++ b/packages/inula2-ui/library_code/src/index.css @@ -0,0 +1,141 @@ +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: center; + justify-content: center; + min-height: 100vh; + padding: 20px; +} + +.hero { + text-align: center; + margin-bottom: 40px; +} + +.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; +} \ No newline at end of file diff --git a/packages/inula2-ui/library_code/src/index.jsx b/packages/inula2-ui/library_code/src/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..75ed745a4c4d874375f9686c2942556629fc79c8 --- /dev/null +++ b/packages/inula2-ui/library_code/src/index.jsx @@ -0,0 +1,424 @@ +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"; +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/datepicker2/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"; +import IconDemo6 from "./components/icon/demos/demo6.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"; +import SwitchDemo4 from "./components/switch/demos/demo4.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"; + +//datepicker demos +import DatePickerDemo1 from "./components/datepicker2/demos/demo1.jsx"; +import DatePickerDemo2 from "./components/datepicker2/demos/demo2.jsx"; +import DatePickerDemo3 from "./components/datepicker2/demos/demo3.jsx"; +import DatePickerDemo4 from "./components/datepicker2/demos/demo4.jsx"; +import DatePickerDemo5 from "./components/datepicker2/demos/demo5.jsx"; +import DatePickerDemo6 from "./components/datepicker2/demos/demo6.jsx"; +import DatePickerDemo7 from "./components/datepicker2/demos/demo7.jsx"; +import DatePickerDemo8 from "./components/datepicker2/demos/demo8.jsx"; + +//tree demos +import TreeDemo1 from "./components/tree/demos/demo1.jsx"; +import TreeDemo2 from "./components/tree/demos/demo2.jsx"; +import TreeDemo3 from "./components/tree/demos/demo3.jsx"; +import TreeDemo4 from "./components/tree/demos/demo4.jsx"; +import TreeDemo5 from "./components/tree/demos/demo5.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, + "/icon/demo6": IconDemo6, + "/checkbox": Checkbox, + "/checkbox/demo1": CheckboxDemo1, + "/checkbox/demo2": CheckboxDemo2, + "/checkbox/demo3": CheckboxDemo3, + "/switch": Switch, + "/switch/demo1": SwitchDemo1, + "/switch/demo2": SwitchDemo2, + "/switch/demo3": SwitchDemo3, + "/switch/demo4": SwitchDemo4, + "/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, + "/tree/demo1": TreeDemo1, + "/tree/demo2": TreeDemo2, + "/tree/demo3": TreeDemo3, + "/tree/demo4": TreeDemo4, + "/tree/demo5": TreeDemo5, + "/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, + "/datepicker": DatePicker, + "/datepicker/demo1": DatePickerDemo1, + "/datepicker/demo2": DatePickerDemo2, + "/datepicker/demo3": DatePickerDemo3, + "/datepicker/demo4": DatePickerDemo4, + "/datepicker/demo5": DatePickerDemo5, + "/datepicker/demo6": DatePickerDemo6, + "/datepicker/demo7": DatePickerDemo7, + "/datepicker/demo8": DatePickerDemo8, +}; + +const router = createHashRouter(routes); + +function App() { + return ( +
    +
    +

    + 欢迎使用 inula-next 组件库! +

    + {/*

    + Button 组件 +

    +
    +
    + +

    + Checkbox 组件 +

    +
    + +
    +

    + Switch 组件 +

    +
    + +
    +

    + Radio 组件 +

    +
    + +
    +

    + Tooltip 组件 +

    +
    + +
    +

    + Notification 通知组件 +

    +
    + +
    +

    + Spin 加载组件 +

    +
    + +
    +

    + Card 组件 +

    +
    + +
    +

    + Tabs 组件 +

    +
    + +
    +

    + Tree 组件 +

    +
    + +
    +

    + Select 选择器组件 +

    +
    + +
    +

    + Modal 模态框组件 +

    +
    + +
    {" "} + */} +

    + DatePicker 日期选择器组件 +

    +
    + +
    +

    + Icon 组件 +

    +
    + +
    +

    + Form 表单组件 +

    +
    +
    +
    +
    +
    + ); +} + +const root = document.getElementById("root"); +function mount() { + render(, root); +} +router.onChange(mount); +mount(); diff --git a/packages/inula2-ui/library_code/vite.config.js b/packages/inula2-ui/library_code/vite.config.js new file mode 100644 index 0000000000000000000000000000000000000000..dbb1d80582b9bc99059e14021c0d1b2ed69b8fe6 --- /dev/null +++ b/packages/inula2-ui/library_code/vite.config.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite'; +import inula from '@openinula/unplugin/vite'; + +export default defineConfig({ + optimizeDeps: { + disabled: true, + }, + plugins: [inula({ files: '**/*.{ts,js,tsx,jsx}' })], + esbuild: { + jsxFactory: 'Inula.createElement', + jsxFragment: 'Inula.Fragment', + jsxInject: `import * as Inula from '@openinula/next'` + } +}); diff --git a/packages/website-next/.gitignore b/packages/website-next/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b967fc610bab874542dd510b2db30e0b672765ac --- /dev/null +++ b/packages/website-next/.gitignore @@ -0,0 +1,52 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/openInula/node_modules +/openInula/dist +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +#IDE +.idea/ + +package-lock.json +yarn.lock +pnpm-lock.yaml + +_pagefind/ \ No newline at end of file diff --git a/packages/website-next/README.md b/packages/website-next/README.md new file mode 100644 index 0000000000000000000000000000000000000000..af819872621a9e96615073d358bf9db16d94ee8c --- /dev/null +++ b/packages/website-next/README.md @@ -0,0 +1,166 @@ +# OpenInula 官网(Next.js 版) + +## 项目简介 + +OpenInula 是一个现代化的 JavaScript UI 框架,致力于提供极致性能和开发体验。本仓库为 OpenInula 新一代官网,基于 Next.js 13+(App Router)与 Tailwind CSS 构建,提供文档、教程、示例与 Playground 等站点能力。 + +--- + +## 核心特性 + +- **编译优先**:在编译期完成大部分工作,缩短运行时开销 +- **细粒度响应式**:自动追踪依赖,减少不必要重渲染 +- **API 兼容性**:与 React 生态高度契合,平滑迁移 +- **模板增强**:内置 if/for 等模板指令 +- **站点体验**:深色模式、搜索、高亮、课程与示例、交互动效 + +--- + +## 环境要求 + +- Node.js ≥ 18 +- 包管理器:推荐 pnpm(也可使用 yarn/npm) +- 由于本仓库包含 `openInula` 子项目(Vite 应用),其 Vite 插件要求 Node ≥ 18 + +--- + +## 安装与启动 + +1. 安装依赖(根项目): + +```bash +pnpm install +``` + +2. 安装依赖(可选,openInula 子项目用于 Playground REPL 示例): + +```bash +cd openInula && pnpm install +``` + +3. 本地开发: + +```bash +# 在根目录启动 Next.js 开发服务器 +pnpm dev + +# 如需同时启动 openInula 子项目(可选) +cd openInula && pnpm dev +``` +4. 启用文档搜索 +```bash +#首先构建项目 +pnpm build --no-lint + +#然后运行 postbuild 生成搜索索引 +pnpm postbuild +``` +--- + +## 构建与部署 + +- 根站点构建: +首先将openInula文件夹移到其他地方,不要在项目根目录。同时,也需要进入openInula文件夹进行一次pnpm build构建 + +```bash +pnpm build --no-lint +pnpm postbuild +``` + +- 站点启动(生产): + +```bash +pnpm start +``` + +- 构建后搜索索引:构建完成会自动执行 `postbuild`,用 Pagefind 生成到 `public/_pagefind`。 + +- 注意事项(重要): + - 本仓库包含 `openInula/` 子目录(一个独立的 Vite 应用,仅供 REPL/Playground),默认情况下并不会影响 Next.js 的构建。但如果你的自定义流程将其纳入同一产物或分析,请避免把 `openInula` 误当作 Next.js 的子模块进行打包。 + +--- + +## 目录结构(节选) + +``` +website-next/ +├─ src/ +│ ├─ app/ # Next.js App Router 页面与路由 +│ │ ├─ docs/ # 文档(MDX)与文档页 +│ │ ├─ playground/ # 教学与 Playground 页面 +│ │ ├─ api/ # API 文档/说明页 +│ │ └─ ... +│ ├─ components/ # 站点通用组件(含 HomePage、UI 组件等) +│ └─ lib/ # 工具、hooks、性能与 utils +├─ public/ # 静态资源(含 Pagefind 索引输出 _pagefind) +├─ openInula/ # 独立 Vite 应用(用于 REPL/Playground 示例) +├─ package.json +└─ README.md +``` + +--- + +## 常用脚本 + +根目录 `package.json`: + +```json +{ + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "postbuild": "pagefind --site .next/server/app --output-path public/_pagefind" + } +} +``` + +- **dev**: 启动 Next.js 开发服务器 +- **build**: 生产构建(会为 App Router 产出 `.next`) +- **start**: 启动生产服务 +- **lint**: 运行 ESLint 检查 +- **postbuild**: 构建后生成 Pagefind 搜索索引 + +`openInula/package.json`(子项目): + +```json +{ + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + } +} +``` + +--- + +## FAQ / 故障排查 + +- **Pagefind 索引未生成或搜索无结果** + - 确认构建成功后已执行 `postbuild`。也可手动运行: + ```bash + pnpm build && pnpm exec pagefind --site .next/server/app --output-path public/_pagefind + ``` +- **本地开发页面加载缓慢或样式异常** + - 删除 `.next/` 与 `node_modules/` 重新安装依赖;检查 `tailwindcss` 版本与 PostCSS 配置是否匹配。 +- **Playground 示例不工作** + - `openInula/` 子项目需单独 `pnpm install` 与 `pnpm dev`;确保依赖 `openinula`、`inula-router` 正常安装。 + +--- + +## 贡献 + +欢迎任何形式的贡献! + +1. Fork 本仓库并克隆到本地 +2. 从 `main` 切出特性分支进行开发 +3. 发起 MR 并补充说明变更点与动机 + +详细流程与行为准则请参阅: + +- `src/app/docs/conventional/ContributingGuide/page.mdx` +- `src/app/docs/conventional/CodeOfConduct/page.mdx` + +--- \ No newline at end of file diff --git a/packages/website-next/components.json b/packages/website-next/components.json new file mode 100644 index 0000000000000000000000000000000000000000..ffe928f5b6dfe484f57a5fd47d0487f21e164fa3 --- /dev/null +++ b/packages/website-next/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/packages/website-next/eslint.config.mjs b/packages/website-next/eslint.config.mjs new file mode 100644 index 0000000000000000000000000000000000000000..c85fb67c463f20d1ee449b0ffee725a61dfb9259 --- /dev/null +++ b/packages/website-next/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), +]; + +export default eslintConfig; diff --git a/packages/website-next/index.d.ts b/packages/website-next/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..90103deed549c74f25a4ca360162f0614163704e --- /dev/null +++ b/packages/website-next/index.d.ts @@ -0,0 +1,461 @@ +import { ReactNode } from "react"; + +// ==================== 通用类型 ==================== +export type Theme = "light" | "dark"; + +// ==================== 导航相关接口 ==================== +export interface DropdownItem { + name: string; + href: string; +} + +export interface DropdownMenuProps { + name: string; + href: string; + dropdown: DropdownItem[]; + isActive: boolean; + isHovered: boolean; + onMouseEnter: () => void; + onMouseLeave: () => void; +} + +export interface SearchBarProps { + placeholder?: string; + onSearch: (query: string) => void; +} + +export interface CustomSearchProps { + onSearch: (query: string) => void; +} + +// ==================== 首页相关接口 ==================== +export interface Partner { + name: string; + logo: string; + url: string; +} + +export interface FeatureCardProps { + title: string; + description: string; + icon: ReactNode; + className?: string; +} + +export interface ActivityProps { + tabItems?: string[]; +} + +export interface LoadMoreSectionProps { + title: string; + items: T[]; + renderItem: (item: T) => ReactNode; + initialCount?: number; + step?: number; +} + +// ==================== 活动、资讯组件相关接口 ==================== +export interface NewsItem { + key: number; + img: string; + title: string; + introduce: string; + time: string; +} + +export interface ActivityItem { + key: number; + img: string; + name: string; + introduce: string; + beginTime: string; + endTime: string; + type: string; +} + +// ==================== 博客相关接口 ==================== +export interface BlogItem { + key: number; + img?: string; + title: string; + time: string; + author: string; + type: string; + tags?: string[]; +} + +export interface BlogCardProps { + blog: BlogItem; + theme: string | undefined; +} + +export interface BlogListProps { + blogs: BlogItem[]; + theme: string | undefined; +} + +export interface BlogFilterBarProps { + onFilterChange: (filter: string) => void; + activeFilter: string; +} + +export interface BlogPaginationProps { + currentPage: number; + totalPages: number; + onPageChange: (page: number) => void; +} + +// ==================== 贡献者相关接口 ==================== +export interface Contributor { + name: string; + avatar: string; + role: string; + description: string; + github?: string; + email?: string; +} + +// ==================== 文档相关接口 ==================== +export interface DocumentItem { + id: string; + title: string; + url?: string; + description: string; +} + +export interface DocumentSidebarProps { + documents: DocumentItem[]; + defaultActiveId?: string; + title?: string; + onDocumentChange?: (docId: string) => void; + className?: string; + children?: (currentDoc: DocumentItem | undefined) => ReactNode; +} + +// ==================== Playground相关接口 ==================== +export interface PlaygroundItem { + id: number; + title: string; + description: string; + category: string; + subcategory?: string; + slug: string; + content?: string; + code?: string; +} + +export interface PlaygroundSidebarProps { + playgroundData: PlaygroundItem[]; + selectedItem: PlaygroundItem | null; + isCollapsed: boolean; + onToggleCollapse: () => void; +} + +export interface PlaygroundContentProps { + selectedItem: PlaygroundItem | null; +} + +// ==================== 项目相关接口 ==================== +export interface Course { + id: string; + title: string; + description: string; + image: string; + duration: string; + level: string; + tags: string[]; +} + +// ==================== 页面组件接口 ==================== +export interface MDXDetailPageProps { + children: ReactNode; +} + +export interface MarkdownPageProps { + title: string; + description?: string; + children: ReactNode; + className?: string; +} + +// ==================== MagicUI组件接口 ==================== +export interface AuroraTextProps { + children: ReactNode; + className?: string; +} + +export interface MeteorsProps { + number?: number; +} + +export interface MagicCardProps { + children: ReactNode; + className?: string; + gradientColor?: string; +} + +export interface CodeComparisonProps { + leftCode: string; + rightCode: string; + leftTitle?: string; + rightTitle?: string; + language?: string; +} + +// ==================== 主题相关接口 ==================== +export interface ThemeToggleProps { + className?: string; +} + +export interface ThemeScriptProps { + theme?: string; +} + +// ==================== 性能相关接口 ==================== +export interface PerformanceMetrics { + renderTime: number; + memoryUsage: number; + bundleSize: number; +} + +export interface PerformanceComparisonProps { + inulaMetrics: PerformanceMetrics; + reactMetrics: PerformanceMetrics; + vueMetrics: PerformanceMetrics; +} + +// ==================== API相关接口 ==================== +export interface ApiResponse { + success: boolean; + data?: T; + message?: string; + error?: string; +} + +export interface PaginationParams { + page: number; + limit: number; + total?: number; +} + +export interface SearchParams { + query: string; + filters?: Record; + sortBy?: string; + sortOrder?: "asc" | "desc"; +} + +// ==================== 表单相关接口 ==================== +export interface FormField { + name: string; + label: string; + type: + | "text" + | "email" + | "password" + | "textarea" + | "select" + | "checkbox" + | "radio"; + required?: boolean; + placeholder?: string; + options?: Array<{ value: string; label: string }>; + validation?: { + pattern?: RegExp; + message?: string; + minLength?: number; + maxLength?: number; + }; +} + +export interface FormProps { + fields: FormField[]; + onSubmit: (data: Record) => void; + submitText?: string; + className?: string; +} + +// ==================== 路由相关接口 ==================== +export interface RouteConfig { + path: string; + component: React.ComponentType; + exact?: boolean; + children?: RouteConfig[]; + meta?: { + title?: string; + requiresAuth?: boolean; + roles?: string[]; + }; +} + +// ==================== 国际化相关接口 ==================== +export interface LocaleConfig { + code: string; + name: string; + flag?: string; +} + +export interface I18nContextType { + locale: string; + setLocale: (locale: string) => void; + t: (key: string, params?: Record) => string; +} + +// ==================== 错误处理相关接口 ==================== +export interface ErrorBoundaryState { + hasError: boolean; + error?: Error; + errorInfo?: React.ErrorInfo; +} + +export interface ErrorBoundaryProps { + children: ReactNode; + fallback?: React.ComponentType<{ error: Error; resetError: () => void }>; +} + +// ==================== 动画相关接口 ==================== +export interface AnimationConfig { + duration: number; + easing: string; + delay?: number; + direction?: "normal" | "reverse" | "alternate" | "alternate-reverse"; + fillMode?: "none" | "forwards" | "backwards" | "both"; + iterationCount?: number | "infinite"; +} + +export interface AnimatedComponentProps { + animation: AnimationConfig; + children: ReactNode; + className?: string; + onAnimationEnd?: () => void; +} + +// ==================== 存储相关接口 ==================== +export interface StorageConfig { + key: string; + defaultValue?: any; + serializer?: { + serialize: (value: any) => string; + deserialize: (value: string) => any; + }; +} + +export interface UseStorageReturn { + value: T; + setValue: (value: T | ((prev: T) => T)) => void; + removeValue: () => void; +} + +// ==================== 网络请求相关接口 ==================== +export interface RequestConfig { + url: string; + method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; + headers?: Record; + body?: any; + timeout?: number; + retries?: number; + retryDelay?: number; +} + +export interface UseRequestReturn { + data: T | null; + loading: boolean; + error: Error | null; + execute: (config?: Partial) => Promise; + reset: () => void; +} + +// ==================== 工具函数类型 ==================== +export type DebounceFunction any> = ( + func: T, + delay: number +) => (...args: Parameters) => void; + +export type ThrottleFunction any> = ( + func: T, + delay: number +) => (...args: Parameters) => void; + +export type DeepPartial = { + [P in keyof T]?: T[P] extends object ? DeepPartial : T[P]; +}; + +export type Optional = Omit & Partial>; + +export type Required = T & Required>; + +export type ValueOf = T[keyof T]; + +export type ArrayElement = T extends Array ? U : never; + +// ==================== 事件相关接口 ==================== +export interface EventHandler { + (event: T): void; +} + +export interface KeyboardEvent { + key: string; + code: string; + ctrlKey: boolean; + shiftKey: boolean; + altKey: boolean; + metaKey: boolean; +} + +export interface MouseEvent { + x: number; + y: number; + button: number; + buttons: number; +} + +// ==================== 媒体相关接口 ==================== +export interface MediaQuery { + query: string; + matches: boolean; +} + +export interface UseMediaQueryReturn { + matches: boolean; + addListener: (callback: (matches: boolean) => void) => void; + removeListener: (callback: (callback: boolean) => void) => void; +} + +// ==================== 时间相关接口 ==================== +export interface TimeConfig { + format: string; + timezone?: string; + locale?: string; +} + +export interface UseTimerReturn { + time: Date; + start: () => void; + stop: () => void; + reset: () => void; + isRunning: boolean; +} + +// ==================== 验证相关接口 ==================== +export interface ValidationRule { + required?: boolean; + minLength?: number; + maxLength?: number; + pattern?: RegExp; + custom?: (value: any) => boolean | string; +} + +export interface ValidationResult { + isValid: boolean; + errors: string[]; +} + +export interface UseValidationReturn { + values: T; + errors: Partial>; + touched: Partial>; + handleChange: (field: keyof T, value: any) => void; + handleBlur: (field: keyof T) => void; + validate: () => ValidationResult; + reset: () => void; +} diff --git a/packages/website-next/next.config.ts b/packages/website-next/next.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..a24f1be8c258094ed590dcec54bbe4e5d1695436 --- /dev/null +++ b/packages/website-next/next.config.ts @@ -0,0 +1,22 @@ +import type { NextConfig } from "next"; +import nextra from 'nextra' + +const nextConfig: NextConfig = { + pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'], + images: { + remotePatterns: [ + { + protocol: 'https', + hostname: 'openinula-website.obs.ap-southeast-1.myhuaweicloud.com', + port: '', + pathname: '/img/**', + }, + ], + }, +}; + +const withNextra = nextra({ + defaultShowCopyCode: true, +}) + +export default withNextra(nextConfig) diff --git a/packages/website-next/openInula/README.md b/packages/website-next/openInula/README.md new file mode 100644 index 0000000000000000000000000000000000000000..542c363af9c0adaf5c7f2e51635204f0da16886f --- /dev/null +++ b/packages/website-next/openInula/README.md @@ -0,0 +1,4 @@ +# openinula + vite + +该模板提供了 `openinula` 工作在 `vite`的基础配置。 +> 请注意由于Vite插件有node版本限制,请使用`node -v`命令确认node版本大于等于node v18。 \ No newline at end of file diff --git a/packages/website-next/openInula/index.html b/packages/website-next/openInula/index.html new file mode 100644 index 0000000000000000000000000000000000000000..36465750d0be84de41dd2bd4b998348dd2a15865 --- /dev/null +++ b/packages/website-next/openInula/index.html @@ -0,0 +1,12 @@ + + + + + PlayGround + + + +
    + + + diff --git a/packages/website-next/openInula/package.json b/packages/website-next/openInula/package.json new file mode 100644 index 0000000000000000000000000000000000000000..d558964ea29e6748b6b0003a312df3ebfc73917d --- /dev/null +++ b/packages/website-next/openInula/package.json @@ -0,0 +1,28 @@ +{ + "name": "inula-vite-app", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "keywords": [], + "author": "", + "license": "MulanPSL2", + "dependencies": { + "@babytian/openinula-repl-next": "^0.0.1", + "inula-router": "^1.0.16", + "openinula": "^0.1.1" + }, + "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/preset-env": "^7.21.4", + "@babel/preset-react": "^7.18.6", + "@vitejs/plugin-react": "^3.1.0", + "@vitejs/plugin-react-refresh": "^1.3.6", + "babel-plugin-import": "^1.13.6", + "vite": "^4.2.1" + } +} diff --git a/packages/website-next/openInula/pnpm-workspace.yaml b/packages/website-next/openInula/pnpm-workspace.yaml new file mode 100644 index 0000000000000000000000000000000000000000..44c7411ca8b7024d569d4d4f4531c612cb301bc1 --- /dev/null +++ b/packages/website-next/openInula/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +overrides: + openinula-repl-next: link:../../repl diff --git a/packages/website-next/openInula/src/components/HomePage.jsx b/packages/website-next/openInula/src/components/HomePage.jsx new file mode 100644 index 0000000000000000000000000000000000000000..b0ffdb49d771c0d735f066dde01e17c908a9b4e4 --- /dev/null +++ b/packages/website-next/openInula/src/components/HomePage.jsx @@ -0,0 +1,32 @@ + +import Inula, {useMemo, useRef} from 'openinula'; +import { Repl, Editor, Viewer } from '@babytian/openinula-repl-next' + +export default function App() { + const coded = useMemo(() => ` +import { render } from '@openinula/next'; +function HelloWorld() { + return

    Hello OpenInula_next!!

    ; +} + +render(HelloWorld(), document.getElementById('app')); +`, []); + + const editorRef = useRef(); + const viewerRef = useRef(); + return ( +
    + + +
    + +
    +
    +
    + ); +} \ No newline at end of file diff --git a/packages/website-next/openInula/src/components/PlaygroundPage.jsx b/packages/website-next/openInula/src/components/PlaygroundPage.jsx new file mode 100644 index 0000000000000000000000000000000000000000..b6878492ac13f9c37fe763644a220ff92322d41e --- /dev/null +++ b/packages/website-next/openInula/src/components/PlaygroundPage.jsx @@ -0,0 +1,79 @@ +import { useRef, useEffect, useState } from 'openinula'; +import { Repl, Editor, Viewer } from '@babytian/openinula-repl-next'; +import { getCodeById } from '../lib/code.ts'; + +function PlaygroundPage() { + // 从 URL 查询参数获取初始代码 ID,避免首屏回退到 HelloWorld + let initialId = 1; + try { + const params = new URLSearchParams(window.location.search); + const idParam = params.get('id'); + if (idParam) { + const parsed = Number(idParam); + if (!Number.isNaN(parsed)) initialId = parsed; + } + } catch (e) { + // 忽略解析错误,保持默认 id = 1 + } + + const initialCode = getCodeById(initialId) || getCodeById(1) || ''; + + const [code, setCode] = useState(initialCode); + + useEffect(() => { + const handler = (event) => { + const { type, payload } = event.data || {}; + + // 处理传统的代码字符串方式(向下兼容) + if (type === "SET_CODE" && payload) { + setCode(payload); + } + + // 处理新的代码ID方式 + if (type === "SET_CODE_BY_ID" && payload) { + const codeFromId = getCodeById(payload); + if (codeFromId) { + console.log('Setting new code for ID:', payload); + setCode(codeFromId); + } else { + console.warn(`未找到ID为 ${payload} 的代码示例`); + } + } + }; + + // 添加消息监听器 + window.addEventListener("message", handler); + + // 通知父窗口 iframe 已就绪,方便外部在需要时重发 + try { + window.parent?.postMessage({ type: 'IFRAME_READY' }, '*'); + } catch (e) {} + + return () => { + window.removeEventListener("message", handler); + }; + }, []); + + const editorRef = useRef(); + const viewerRef = useRef(); + const CustomEmptyMenu = () =>
    ; + + return ( +
    + + +
    + +
    +
    +
    + ); +} + +export default PlaygroundPage; diff --git a/packages/website-next/openInula/src/index.css b/packages/website-next/openInula/src/index.css new file mode 100644 index 0000000000000000000000000000000000000000..be0ab6c6d5bd3b1406afe759ae8a4e28518e64ce --- /dev/null +++ b/packages/website-next/openInula/src/index.css @@ -0,0 +1,3 @@ +* { + box-sizing: border-box; +} \ No newline at end of file diff --git a/packages/website-next/openInula/src/index.jsx b/packages/website-next/openInula/src/index.jsx new file mode 100644 index 0000000000000000000000000000000000000000..3dfd911958cca17121502216bfaf57b9437b4dce --- /dev/null +++ b/packages/website-next/openInula/src/index.jsx @@ -0,0 +1,19 @@ +import { BrowserRouter, Route, Switch } from 'inula-router'; + +import HomePage from "./components/HomePage"; +import PlaygroundPage from "./components/PlaygroundPage"; +import Inula from "openinula"; + +function App() { + return ( + + + + + {/* 可以在这里添加更多路由 */} + + + ); +} + +Inula.render(, document.getElementById('root')); diff --git a/packages/website-next/openInula/src/lib/code.ts b/packages/website-next/openInula/src/lib/code.ts new file mode 100644 index 0000000000000000000000000000000000000000..d34c813c6ba0a5c7c8a17c198b88771d88759a35 --- /dev/null +++ b/packages/website-next/openInula/src/lib/code.ts @@ -0,0 +1,199 @@ +export const codeSamples = [ + { + id: 1, + title: "入门", + code: `import { render } from '@openinula/next'; + + function HelloWorld() { + return

    Hello World!

    ; +} + +render(HelloWorld(), document.getElementById('app'));`, + }, + { + id: 2, + title: "组件", + code: `import { render } from '@openinula/next'; + + function App() { + return

    This is my first component

    ; +} + +render(App(), document.getElementById('app'));`, + }, + { + id: 3, + title: "状态管理", + code: `import { render } from '@openinula/next'; + + function UserInput() { + let count = 0; + function incrementCount() { + count = count + 1; + } + + return ( + <> +

    {count}

    + + + ); +} + +render(UserInput(), document.getElementById('app')); +`, + }, + { + id: 4, + title: "计算属性", + code: `import { render } from '@openinula/next'; + + function DoubleCounter() { + let count = 0; + // 计算值:double 会自动随着 count 变化 + const double = count * 2; + + return ( +
    +

    当前计数:{count}

    +

    双倍值:{double}

    + +
    + ); +} + +render(, document.getElementById('app'));`, + }, + { + id: 5, + title: "监听系统", + code: `import { render, watch} from '@openinula/next'; + + function MultiWatch() { + let a = 1; + let b = 2; + + watch(() => { + console.log('a 变化:' + a); + }); + watch(() => { + console.log('b 变化:' + b); + }); + + return ( +
    + + +
    + ); +} + +render(, document.getElementById('app'));`, + }, + { + id: 6, + title: "条件渲染", + code: `import { render } from '@openinula/next'; + +function TrafficLight() { + let lightIndex = 0; + + let light = lightIndex ? 'green' : 'red'; + + function nextLight() { + lightIndex = (lightIndex + 1) % 2; + } + + return ( + <> + +

    Light is: {light}

    +

    + You must: + + STOP + + + GO + +

    + + ); +} + +render(TrafficLight(), document.getElementById('app')); +`, + }, + { + id: 7, + title: "列表渲染", + code: `import { render } from '@openinula/next'; + +function FruitList() { + const fruits = ['苹果', '香蕉', '橙子']; + + return ( +
      + + {(fruit) =>
    • {fruit}
    • } +
      +
    + ); +} + +render(, document.getElementById('app'));`, + }, + { + id: 8, + title: "事件处理", + code: `import { render } from '@openinula/next'; + +function ClickCounter() { + let count = 0; + + function handleClick() { + count++; + } + + return ( + + ); +} + +render(, document.getElementById('app'));`, + }, + { + id: 9, + title: "生命周期", + code: `import { render } from '@openinula/next'; + +function PageTitle() { + let counts = 0; + didMount(() => { + counts = counts + 5; + }); + return

    页面标题:{counts}

    ; +} + +render(, document.getElementById('app'));`, + }, +]; + +export const getCodeById = (id: number): string | null => { + console.log( + "getCodeById called with ID:", + id, + "Available samples:", + codeSamples.map((s) => ({ id: s.id, title: s.title })) + ); + const sample = codeSamples.find((sample) => sample.id === id); + if (sample) { + console.log("Found sample:", sample.title); + return sample.code; + } else { + console.warn("No sample found for ID:", id); + return null; + } +}; diff --git a/packages/website-next/openInula/vite.config.js b/packages/website-next/openInula/vite.config.js new file mode 100644 index 0000000000000000000000000000000000000000..ae06c555f366b930ab9ce77739109cd91d3f1629 --- /dev/null +++ b/packages/website-next/openInula/vite.config.js @@ -0,0 +1,58 @@ +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; + +let alias = { + react: "openinula", + "react-dom": "openinula", + "react/jsx-dev-runtime": "openinula/jsx-dev-runtime", + "react/jsx-runtime": "openinula/jsx-runtime", + "@openinula/next": "openinula", +}; + +export default defineConfig({ + plugins: [react()], + resolve: { + alias, + }, + + build: { + outDir: "dist", + assetsDir: "assets", + sourcemap: false, // 禁用 sourcemap 以避免混淆问题 + minify: false, + + rollupOptions: { + input: { + main: "./index.html", + }, + output: { + manualChunks: undefined, + globals: { + openinula: "Inula", + "inula-router": "InulaRouter", + }, + }, + }, + + target: "es2015", + cssCodeSplit: false, + chunkSizeWarningLimit: 1000, + lib: false, + ssr: false, + }, + + server: { + port: 5173, + open: true, + }, + + optimizeDeps: { + include: ["openinula", "inula-router", "@babytian/openinula-repl-next"], + force: true, + }, + + esbuild: { + keepNames: true, + legalComments: "none", + }, +}); diff --git a/packages/website-next/package.json b/packages/website-next/package.json new file mode 100644 index 0000000000000000000000000000000000000000..5591dd2028456ae3d5854766978feb6875bcfc09 --- /dev/null +++ b/packages/website-next/package.json @@ -0,0 +1,51 @@ +{ + "name": "website-next", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "postbuild": "pagefind --site .next/server/app --output-path public/_pagefind" + }, + "dependencies": { + "@ant-design/icons": "^6.0.0", + "@mdx-js/loader": "^3.1.0", + "@mdx-js/react": "^3.1.0", + "@next/mdx": "^15.3.5", + "@shikijs/transformers": "^3.7.0", + "@types/mdx": "^2.0.13", + "antd": "^5.26.5", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "gsap": "^3.13.0", + "highlight.js": "^11.11.1", + "lucide-react": "^0.525.0", + "motion": "^12.23.6", + "next": "15.4.1", + "next-themes": "^0.4.6", + "nextra": "^4.2.17", + "nextra-theme-docs": "^4.2.17", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-intersection-observer": "^9.16.0", + "react-markdown": "^10.1.0", + "shiki": "^3.7.0", + "tailwind-merge": "^3.3.1" + }, + "devDependencies": { + "@eslint/eslintrc": "^3.3.1", + "@tailwindcss/postcss": "^4.1.11", + "@tailwindcss/typography": "^0.5.16", + "@types/node": "^20.19.4", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "eslint": "^9.30.1", + "eslint-config-next": "15.3.4", + "pagefind": "^1.3.0", + "tailwindcss": "^4.1.11", + "tw-animate-css": "^1.3.5", + "typescript": "^5.8.3" + } +} diff --git a/packages/website-next/postcss.config.mjs b/packages/website-next/postcss.config.mjs new file mode 100644 index 0000000000000000000000000000000000000000..61e36849cf7cfa9f1f71b4a3964a4953e3e243d3 --- /dev/null +++ b/packages/website-next/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/packages/website-next/public/ContactUsPage/img.png b/packages/website-next/public/ContactUsPage/img.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3cb3f338c83342008c0a5f389bdc0f765f3c6e Binary files /dev/null and b/packages/website-next/public/ContactUsPage/img.png differ diff --git a/packages/website-next/public/ContactUsPage/logo.normal.png b/packages/website-next/public/ContactUsPage/logo.normal.png new file mode 100644 index 0000000000000000000000000000000000000000..44cbadcb987df16e1a83a3d37ca305ff34f1e20b Binary files /dev/null and b/packages/website-next/public/ContactUsPage/logo.normal.png differ diff --git a/packages/website-next/public/ContactUsPage/map.png b/packages/website-next/public/ContactUsPage/map.png new file mode 100644 index 0000000000000000000000000000000000000000..4cdb5d3035ac0eb66d094c4725e0c12b350ac469 Binary files /dev/null and b/packages/website-next/public/ContactUsPage/map.png differ diff --git a/packages/website-next/public/favicon.ico b/packages/website-next/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b1919800714d1ce2b1266ce7b76e42c8088b5bd9 Binary files /dev/null and b/packages/website-next/public/favicon.ico differ diff --git a/packages/website-next/public/file.svg b/packages/website-next/public/file.svg new file mode 100644 index 0000000000000000000000000000000000000000..004145cddf3f9db91b57b9cb596683c8eb420862 --- /dev/null +++ b/packages/website-next/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/website-next/public/font/geist-v3-latin-regular.woff2 b/packages/website-next/public/font/geist-v3-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a190bc9f36ee8e3453fbe6324f940cd884c727bb Binary files /dev/null and b/packages/website-next/public/font/geist-v3-latin-regular.woff2 differ diff --git a/packages/website-next/public/footerIcon.bilibili.png b/packages/website-next/public/footerIcon.bilibili.png new file mode 100644 index 0000000000000000000000000000000000000000..6445ea1850acbc4c7af12f7ec413e8bccb183b97 Binary files /dev/null and b/packages/website-next/public/footerIcon.bilibili.png differ diff --git a/packages/website-next/public/footerIcon.gitee.png b/packages/website-next/public/footerIcon.gitee.png new file mode 100644 index 0000000000000000000000000000000000000000..773358b6e3efbbed23ff81dc102bca97567aa7fc Binary files /dev/null and b/packages/website-next/public/footerIcon.gitee.png differ diff --git a/packages/website-next/public/footerIcon.qrcode.png b/packages/website-next/public/footerIcon.qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5e89bec3fb384be089060f83a4a206a9968bce Binary files /dev/null and b/packages/website-next/public/footerIcon.qrcode.png differ diff --git a/packages/website-next/public/globe.svg b/packages/website-next/public/globe.svg new file mode 100644 index 0000000000000000000000000000000000000000..567f17b0d7c7fb662c16d4357dd74830caf2dccb --- /dev/null +++ b/packages/website-next/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/website-next/public/navlogo.png b/packages/website-next/public/navlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7009246c037aaefd6f28b924be92912d67f1b696 Binary files /dev/null and b/packages/website-next/public/navlogo.png differ diff --git a/packages/website-next/public/navlogowhite.png b/packages/website-next/public/navlogowhite.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2c57b4d4410b7d0aea2790cb3f05f008650faa Binary files /dev/null and b/packages/website-next/public/navlogowhite.png differ diff --git a/packages/website-next/public/next.svg b/packages/website-next/public/next.svg new file mode 100644 index 0000000000000000000000000000000000000000..5174b28c565c285e3e312ec5178be64fbeca8398 --- /dev/null +++ b/packages/website-next/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/website-next/public/qrcode.inula.jpg b/packages/website-next/public/qrcode.inula.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f853b30799af1b418553713b3e6db076657450d0 Binary files /dev/null and b/packages/website-next/public/qrcode.inula.jpg differ diff --git a/packages/website-next/public/vercel.svg b/packages/website-next/public/vercel.svg new file mode 100644 index 0000000000000000000000000000000000000000..77053960334e2e34dc584dea8019925c3b4ccca9 --- /dev/null +++ b/packages/website-next/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/website-next/public/window.svg b/packages/website-next/public/window.svg new file mode 100644 index 0000000000000000000000000000000000000000..b2b2a44f6ebc70c450043c05a002e7a93ba5d651 --- /dev/null +++ b/packages/website-next/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/website-next/src/app/api/core/page.mdx b/packages/website-next/src/app/api/core/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..6a69239fc196fb976ed7bf9206466426c4e3addd --- /dev/null +++ b/packages/website-next/src/app/api/core/page.mdx @@ -0,0 +1,1804 @@ +# Inula + +## 组件 + +组件是构建用户界面(UI)的基础,是可重用和独立的代码单元。开发者可以将相关功能、状态以及模板封装在组件中,提高可复用性,使得程序开发具备模块化和可维护特性。 + +### Component + +**功能介绍** + +`Component` 是类组件的基础形式,可以通过继承 `Component` 组件来定义一个类组件,并且使用类的特性,如构造函数、生命周期以及内部状态。 + +**组件定义** + +```jsx +class Component { + props: P; + context: C; + state: S | null; + refs: any; + forceUpdate: any; + isReactComponent: boolean; + constructor(props: P, context: C); + setState(state: S, callback?: Callback): void; +} +``` + +- `props`:组件接收的输入属性; +- `context`:组件的上下文对象; +- `state`:组件内部的状态; +- `refs`:用于引用组件中的 DOM 元素或其他组件; +- `forceUpdate`:用于强制重新渲染组件; +- `isReactComponent`:用于标识当前类是否是 React 组件类; +- `constructor(props: p, context: c)`:构造函数用于初始化组件的状态和属性; +- `setState(state: S, callback?: Callback): void`:用于更新组件的状态,并触发重新渲染。 + +**示例** + +```jsx +import * as Inula from 'openinula'; + +class Counter extends Inula.Component { + constructor(props) { + super(props); + this.state = { + counter: 0 + }; + console.log('Constructor'); + } + + componentDidMount() { + console.log('Component Did Mount'); + } + + componentDidUpdate() { + console.log('Component Did Update'); + } + + componentWillUnmount() { + console.log('Component Will Unmount'); + } + + handleIncrement = () => { + this.setState(prevState => ({ + counter: prevState.counter + 1 + })); + }; + + render() { + console.log('Render'); + return ( +
    +

    Counter: {this.state.counter}

    + +
    + ); + } +} + +Inula.render( + , + document.getElementById('root') +); +``` + +在上述示例中,基于 `Component` 组件类创建了一个 `Component` 组件以实现计数器功能,并在组件内部测试了一些声明周期的钩子函数。 + +### PureComponent + +**功能介绍** + +`PureComponent` 类继承自 `Component`,但是它内置了 `shouldComponentUpdate` 方法,会自动比较 `props` 和 `state` 的变化,如果没有变化则不会重新渲染组件,从而提高性能。 + +**组件定义** + +```jsx +class PureComponent extends Component { + constructor(props: P, context: C); +} +``` + +**示例** + +```jsx +import Inula, { PureComponent } from 'openinula'; + +// 创建一个继承自PureComponent的组件 +class App extends PureComponent { + render() { + console.log('Render PureDemo'); + return
    {this.props.value}
    ; + } +} +``` + +上述示例中,基于 `PureComponent` 类创建了一个 `App` 组件,其使用上与 `Component` 类组件类似,但是其内置了 `shouldComponentUpdate` 方法,可以直接使用。 + +> 提示:在实际开发中,可以根据其优缺点,选择使用 `Component` 和 `PureComponent` 两种常用组件类 + +| 组件 | 优点 | 缺点 | +| ------------- |----------------------------------|--------------------------------------------------------| +| `PureComponent` | 1.自带浅比较,提高性能
    2.适用于大多数情况 | 1.复杂的数据结构可能产生错误或者性能问题
    2.对简单组件来说内置方法可能会存在额外开销 | +| `Component` | 1.较为灵活,没有内置方法,可以细粒度控制
    2.适用于多控制场景 | 需要手动编写 `shouldComponentUpdate` 方法 | + +### memo + +**功能介绍** + +`memo` 是一个高阶组件(HOC),用于封装函数组件,以使其仅在其 `props` 发生更改时重新渲染。 + +**组件定义** + +```jsx +const MemoizedComponent = memo(type, compare?: Function); +``` + +- `type`:表示需要被优化的函数式组件; +- `compare`:可选参数,用于比较前后两次渲染的属性和状态是否相同的比较函数。如果未提供该函数,默认使用浅层比较。 + +**示例** + + +```jsx +import { memo, useState, render } from 'openinula'; + +const ExpensiveComponent = ({ value }) => { + // 模拟一个昂贵的计算 + const expensiveCalculation = () => { + console.log("Calculating..."); + let result = 0; + for (let i = 0; i < value * 1000000; i++) { + result += i; + } + return result; + }; + + const result = expensiveCalculation(); + + return
    Result: {result}
    ; +}; + +const MemoizedExpensiveComponent = memo(ExpensiveComponent); + +function App() { + const [count1, setCount1] = useState(1); + const [count2, setCount2] = useState(1); + + return ( +
    + + + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + + +在上述示例中,`` 是一个昂贵的计算组件,它在每次渲染时都会执行昂贵的计算操作。通过使用 `memo`,可以对 `` 进行优化,避免在 `count1` 没有变化时重新渲染。`memo` 会对前后两次渲染的属性和状态进行浅层比较,如果相同则不会重新渲染。 + +### Fragment + +**功能介绍** + +`` 是一个虚拟组件,用于包裹一组元素而不添加额外的 DOM 元素,可以提高渲染性能并减少不必要的包装元素。它可以用来解决在渲染多个元素时产生的包裹元素问题。在一些情况下,如果你不使用 ``,可能会出现额外的 DOM 层次结构,从而可能影响性能和样式。 + +**示例** + + +```jsx +import Inula, { Fragment, render } from 'openinula'; + +function App() { + return ( +
    + {/* 使用 Fragment */} + +
    Element 4
    +
    Element 5
    +
    Element 6
    +
    + + {/* 或者使用简化形式,使用空尖括号 */} + <> +
    Element 7
    +
    Element 8
    +
    Element 9
    + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + + +在上面的示例中,你可以看到 `` 的用法。当需要在组件中渲染多个元素时,使用 `` 可以避免添加额外的 DOM 元素。除了使用完整的 `` 标签外,你还可以使用空尖括号的简化形式 `<>` 和 ``。 + +### Children + +**功能介绍** + +`Children` 用于处理组件的子元素。它允许开发者在组件中访问和操作传递给组件的子元素,无论子元素是什么类型(单个元素、多个元素、文本等)。`Children` 提供了一些方法来遍历、映射和操作子元素,使得操作子元素变得更加方便。 + +**示例** + +```jsx +import Inula, { Children, cloneElement, render } from 'openinula'; + +// 示例 1: 遍历子元素并输出它们的类型 +function ElementList({ children }) { + const childArray = Children.toArray(children); + + const childTypes = childArray.map((child, index) => ( +

    Child {index + 1} is of type: {child.type.name}

    + )); + + return
    {childTypes}
    ; +} + +// 示例 2: 映射子元素并添加额外的 props +function AddPropsToChildren({ children }) { + const enhancedChildren = Children.map(children, (child) => { + return cloneElement(child, { isHighlighted: true }); + }); + + return
    {enhancedChildren}
    ; +} + +// 示例 3: 只渲染特定类型的子元素 +function OnlyRenderCertainChildren({ children }) { + const filteredChildren = Children.toArray(children).filter(child => { + return child.type === 'p'; + }); + + return
    {filteredChildren}
    ; +} + +function App() { + return ( +
    + +

    Heading

    +

    Paragraph 1

    +

    Paragraph 2

    +
    Div element
    +
    + + + Child 1 + Child 2 + + + +

    Paragraph 1

    +
    Div element
    +

    Paragraph 2

    +
    +
    + ); +} +render( + , + document.getElementById('root') +); +``` + +上述展示了的示例包含以下方法: + +- `Children.map(children, fn, thisArg?)` +- `Children.forEach(children, fn, thisArg?)` +- `Children.only(children)` +- `Children.toArray(children)`。 + +在上面的示例中,展示了如何使用 `Children` 对子元素进行遍历、映射和筛选。`Children.toArray` 方法用于将子元素转换为数组,从而可以使用数组的方法。`Children.map` 方法可以映射子元素并为其添加额外的 `props`。同时还演示了如何通过 `child.type` 来识别子元素的类型,从而选择性地渲染特定类型的子元素。 + +### Suspense + +**功能介绍** + +``是一个组件,用于在异步加载数据时展示一个 fallback 视图 + +**接口定义** + +```tsx +}> + + +``` + +- `fallback`: 用于定义在组件加载期间显示的 fallback 视图; +- ``: 表示需要异步加载的组件。 + +**示例** + + +```jsx +import Inula, { lazy, Suspense } from 'openinula'; + +// 异步加载组件 +const AsyncComponent = lazy(() => import('./AsyncComponent')); + +const App = () => ( +
    + {/* 在加载异步组件时显示fallback元素 */} + Loading...
    }> + +
    + +); + +// 组件可以是一个普通的函数式组件或类组件 +export default AsyncComponent = () => { + // 随意模拟一个异步加载的操作 + setTimeout(() => { + console.log('AsyncComponent is loaded.'); + }, 2000); + + return
    Async Component
    ; +}; +``` + +在上面的示例中,使用 [lazy](#lazy) 函数来异步加载一个组件 ``。然后,使用 `` 组件来包裹异步组件,并在加载组件时显示 fallback 元素。在这个示例中,“fallback ...” 文本。 + +## 钩子函数 + +在 openInula 中,可以使用钩子函数来在函数组件中添加状态和其他特性函数,从而允许我们在函数组件中使用类组件拥有的功能。通过使用钩子函数,我们可以更方便地编写和管理React组件的状态和行为,使代码更简洁、可读性更高。 + +钩子函数可以让我们在函数组件中使用状态管理、生命周期方法、副作用等功能。常用的钩子函数包括 `useState`、`useEffect`、`useContext`、`useReducer` 等。 + +> 注意: +> 1. 只能在组件的顶层或自己的 Hook 中调用钩子函数。 +> 2. 不能在循环语句或条件语句中调用钩子函数。 + +### useState + +**功能介绍** + +`useState` 是一个用于在函数组件中添加状态( `state` )的钩子函数。使用 `useState` 可以让函数组件拥有类组件的状态管理能力。 + +**接口定义** + +```jsx +const [state, setState] = useState(initialState); +``` + +- `initialState`:状态的初始值,在组件挂载时使用。 + +`useState` 的返回值: + +- `state`:表示当前状态的值; +- `setState`:用于更新状态的函数,可以传递新的状态值或一个函数来计算新的状态值。 + +**示例** + +```jsx +import Inula, { useState, render } from "openinula"; + +function Counter() { + const [count, setCount] = useState(0); + + const increment = () => { + setCount(prevCount => prevCount + 1); + }; + + const decrement = () => { + setCount(prevCount => prevCount - 1); + }; + + return ( +
    +

    Count: {count}

    + + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + +### useCallback + +**功能介绍** + +`useCallback` 是一个用于优化性能的钩子函数,它可以用来缓存函数引用,避免在每次渲染时重新创建函数。这对于将函数作为 `props` 传递给子组件时特别有用,可以避免不必要的重新渲染。 + +**接口定义** + +```tsx +const cachedFn = useCallback(callback: T, deps: DependencyList) +``` + +- `callback`:要缓存的回调函数; +- `deps`:一个数组,包含了所有可以作为依赖项的值,当依赖项发生变化时,`callback` 函数会被重新创建。如果依赖项列表为空,那么每次渲染都会返回相同的缓存函数。 + +`useCallback`的返回值: + +- `cachedFn`:若是初次渲染,返回已传入的 `callback` 函数,当依赖项 `deps` 无变化时,返回上次渲染缓存的 `callback` 函数,当依赖项 `deps` 有变化时,则返回这次渲染传入的 `callback` 函数。 + +**示例** + +```jsx +import Inula, { useState, useCallback, render } from 'openinula'; + +function App() { + const [count, setCount] = useState(0); + + // 使用 useCallback 缓存 handleIncrement 函数 + const handleIncrement = useCallback(() => { + setCount(count + 1); + }, [count]); // 仅当 count 发生变化时,才会重新创建函数 + + return ( +
    +

    Count: {count}

    + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + + +> 注意:使用 `useCallback`,可以确保每次渲染时都使用相同的函数引用,从而减少不必要的函数重新创建,提高性能。这在传递回调函数给子组件或在使用 `useEffect` 时尤为有用,因为它可以防止因为函数的重新创建而导致子组件的不必要重新渲染。 + +### useContext + +**功能介绍** + +`useContext` 用于在组件之间共享状态。通过使用 `useContext`,可以避免在组件树中手动传递 `props`,从而更方便地访问共享的数据。 + +**接口定义** + +```tsx +const value = useContext(context: Context) +``` + +- `context`:是 openInula 提供的上下文,可以通过 `createContext` 创建,`useContext` 接收上下文并返回该上下文当前值。 + +`useContext`的返回值: + +- `value`:其返回值是一个包含Provider的值,其中 `value.Provider` 是由最近的上层上下文提供,如果没有找到匹配的上层上下文,则会使用上下文对象的默认值。 + +**示例** + +```jsx +import Inula, { createContext, useContext, useState, render } from 'openinula'; + +// 创建一个上下文对象 +const Context = createContext(); + +// 组件A:向上下文中提供一个共享的数据 +const ComponentA = () => { + const [count, setCount] = useState(0); + + return ( + + + + + ); +} + +// 组件B:从上下文中获取共享的数据 +const ComponentB = () => { + const count = useContext(Context); + return
    当前计数:{count}
    ; +} + +// 主组件 +const App = () => { + return ; +} +render( + , + document.getElementById('root') +); +``` + +在这个示例中,`` 创建了一个共享的数据 `count`,它使用 `useState` 来进行状态管理,并将数据存储在上下文对象` Context.Provider` 中。`` 使用 `useContext` 从 `Context` 中获取共享的数据 `count`。最后,`` 组件作为根组件渲染 ``,这样就能够在整个组件树中共享 `count` 数据。 + +> 说明:在函数组件中,`useContext` 代替了类组件中的 `Consumer`。 + +### useEffect + +**功能介绍** + +`useEffect` 是一个用于处理副作用(如数据获取、订阅、DOM 操作等)的钩子函数。它在组件的生命周期中执行,并且可以用于在组件渲染后执行一些操作,或在组件卸载前执行一些清理工作。 + +**接口定义** + +```tsx +useEffect(create: EffectCallBack, deps?: DependencyList): void +``` + +- `create`:一个函数,用于定义副作用操作。该函数在每次渲染后都会被调用; +- `deps`:一个数组,指定了哪些依赖项的变化会触发 `create` 的重新执行。如果不传递这个数组,那么 `create` 将在每次渲染后都被调用。如果依赖项列表为空,那么 `create` 将只在组件挂载和卸载时执行。 + +**示例** + +- 示例一 + +```jsx +import Inula, { useState, useEffect, render } from "openinula"; + +function App() { + const [count, setCount] = useState(0); + + useEffect(() => { + document.title = `点击次数:${count}`; + }, [count]); + + return ( +
    +

    点击次数: {count}

    + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + +在上述示例中,`useEffect` 可以用于数据的获取,当点击 ` + + ); +} +render( + , + document.getElementById('root') +); +``` + +在示例二中,`useEffect` 可以用于设置和清理定时器。 + +- 示例三: + +```jsx +useEffect(() => { + // 更新元素样式 + document.getElementById('myElement').style.color = 'red'; + + // 添加元素 + const newElement = document.createElement('div'); + document.body.appendChild(newElement); + + // 移除元素 + return () => { + document.body.removeChild(newElement); + }; +}, []); +``` + +上述示例展示 `useEffect` 的DOM操作,可以在 `useEffect` 中进行DOM操作,比如更新元素的样式、添加/移除元素等。 + +- 示例四: + +根据依赖项的变化,`useEffect` 的行为会有所不同。在函数组件中,通常使用 `useEffect` 来模拟组件的生命周期。 + +```jsx +useEffect(() => { + // componentDidMount + console.log('Component mounted'); + + // componentDidUpdate + return () => { + // componentWillUnmount + console.log('Component unmounted'); + }; +}, []); + +useEffect(() => { + // componentDidUpdate + console.log('Component updated'); +}, [data]); +``` + +上述示例中,使用 `useEffect `来模拟组件的生命周期方法,比如 `componentDidMount`、`componentDidUpdate` 和 `componentWillUnmount`。 + +### useLayoutEffect + +**功能介绍** + +`useLayoutEffect` 是一个钩子函数,用于在 DOM 更新完成后同步执行副作用操作。与 `useEffect` 不同,`useLayoutEffect` 会在 DOM 更新之后、浏览器绘制之前同步执行,因此适用于需要立即操作 DOM 的情况。 + +**接口定义** + +```jsx +useLayoutEffect(create: EffectCallBack, deps?: DependencyList): void; +``` + +- `create`:一个函数,用于定义副作用操作。该函数会在 DOM 更新完成后、浏览器绘制之前立即执行; +- `deps`:一个数组,指定了哪些依赖项的变化会触发 `create` 的重新执行。如果不传递这个数组,那么 `create` 将在每次渲染后都被调用。如果依赖项列表为空,那么 `create` 将只在组件挂载和卸载时执行。 + +**示例** + +```jsx +import Inula, { useState, useLayoutEffect, render } from 'openinula'; + +function App() { + const [width, setWidth] = useState(0); + + useLayoutEffect(() => { + const handleResize = () => { + setWidth(window.innerWidth); + }; + + window.addEventListener('resize', handleResize); + handleResize(); // 初始渲染时执行一次 + + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); // 仅在挂载和卸载时执行 + + return ( +
    +

    Window Width: {width}

    +
    + ); +} +render( + , + document.getElementById('root') +); +``` +在上述示例中,`useLayoutEffect` 用于更新页面上窗口的宽度。它添加了一个 `resize` 事件监听器,在窗口大小变化时同步更新 `width` 状态。注意,这里使用了空数组作为依赖项,这意味着 `useLayoutEffect` 只在组件挂载和卸载时执行。 + +> 注意: +> `useEffect` 和 `useLayoutEffect` 都用于在组件渲染时执行副作用操作,但是主要区别与执行的时机。`useEffect` 会在组件渲染完成后异步执行,不会阻塞组件的渲染过程。而 `useLayoutEffect` 会在组件渲染完成后同步执行,会阻塞组件的渲染过程。因此,如果需要在组件渲染完成后立即执行某些操作,可以使用 `useLayoutEffect`,否则可以使用 `useEffect`。 + +```jsx +import Inula, { useState, useEffect, useLayoutEffect, render } from 'openinula'; + +const App = () => { + const [count, setCount] = useState(0); + + useEffect(() => { + console.log('useEffect'); + document.title = `Count: ${count}`; + }, [count]); + + useLayoutEffect(() => { + console.log('useLayoutEffect'); + document.title = `Count: ${count}`; + }, [count]); + + return ( +
    +

    Count: {count}

    + +
    + ); +}; +render( + , + document.getElementById('root') +); +``` + +在上面的例子中,若使用 `useEffect` 来更新页面标题,它会在组件渲染完成后执行,并且只有在 `count` 发生变化时才会执行。若使用 `useLayoutEffect` 来更新页面标题,它会在组件渲染完成后立即执行,并且只有在 `count` 发生变化时才会执行。 + +> 注意: +> 由于 `useLayoutEffect` 是同步执行的,如果操作的是 DOM,可能会影响页面性能。在大多数情况下,使用 `useEffect` 就足够了,因为它会在 DOM 更新完成后异步执行副作用,不会阻塞浏览器的渲染。只有在需要即时操作 DOM 以获取测量值等情况下,才考虑使用 `useLayoutEffect`。 + +### useMemo + +**功能介绍** + +`useMemo` 是一个用于性能优化的钩子函数,它用于在组件重新渲染时,缓存和返回一个计算结果,以避免不必要的重复计算。 + +**接口定义** + +```jsx +const cachedValue = useMemo(create, deps) +``` + +- `create`:一个函数,用于计算需要缓存的值; +- `deps`:一个数组,指定了哪些依赖项的变化会触发 `create` 的重新执行。当依赖项发生变化时,`create` 将会被重新执行,返回一个新的缓存值。如果依赖项列表为空,那么` create` 只在组件挂载时执行。 + +`useMemo` 的返回值: + +- `cachedValue`:要缓存计算值的函数,可以为任意类型,如果 `deps` 没有发生变化,会直接返回相同的值,如果 `deps` 发生变化,则调用 `create`,并返回新的结果,然后缓存这个结果。 + +**示例** + +```jsx +import Inula, { useState, useMemo, render } from 'openinula'; + +function ExpensiveComponent({ number }) { + // 模拟一个昂贵的计算 + const expensiveCalculation = () => { + console.log("Calculating..."); + let result = 0; + for (let i = 0; i < number * 1000000; i++) { + result += i; + } + return result; + }; + + // 使用 useMemo 缓存计算结果 + const memoizedValue = useMemo(() => expensiveCalculation(), [number]); + + return ( +
    +

    Number: {number}

    +

    Calculated Value: {memoizedValue}

    +
    + ); +} + +function App() { + const [count, setCount] = useState(1); + + return ( +
    + + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + +在这个示例中,`ExpensiveComponent` 组件包含一个昂贵的计算操作,该计算在每次渲染时都会执行。通过使用 `useMemo`,可以缓存计算结果,只有在 `number` 发生变化时才重新计算。这可以有效避免在每次渲染时都执行昂贵的计算,从而提高性能。 + +> 注意:`useMemo` 可以在性能优化方面发挥作用,但不应该被滥用。在某些情况下,过度使用 `useMemo` 可能会导致代码更难理解。只有在确实需要避免重复计算的情况下,才应该使用 `useMemo`。 + +### useReducer + +**功能介绍** + +`useReducer` 是一个用于管理状态的钩子函数,它结合了 `useState` 和自定义的状态更新逻辑,通常用于管理复杂的状态逻辑。 + +**接口定义** + +```jsx +const [state, dispatch] = useReducer(reducer, initialState, init?); +``` + +- `reducer`:一个函数,用于定义状态更新逻辑。它接收当前状态 state 和一个表示动作的对象 action,并返回新的状态; +- `initialState`:初始状态的值, 计算逻辑取决于 `init` 参数; +- `init`:可选参数,用于计算初始状态值的函数,如果存在,则使用 `init(initialState)` 的执行结果作为初始值,否则使用 `initialState`。 + +`useReducer` 有两个返回值: + +- `state`:当前状态的值; +- `dispatch`:一个函数,用于触发状态更新。它接收一个表示动作的对象,并将该对象传递给 `reducer`,从而更新状态 `state`。 + +**示例** + +```jsx +import Inula, { useReducer, render } from 'openinula'; + +// 定义 reducer 函数 +const counterReducer = (state, action) => { + switch (action.type) { + case 'INCREMENT': + return { count: state.count + 1 }; + case 'DECREMENT': + return { count: state.count - 1 }; + default: + return state; + } +}; + +function App() { + // 使用 useReducer 来管理状态 + const [state, dispatch] = useReducer(counterReducer, { count: 0 }); + return ( +
    +

    Count: {state.count}

    + + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + +在上述示例中,使用了 `useReducer` 以允许通过 `dispatch` 函数触发 `state` 的更新。在需要更新状态时,可以向 `dispatch` 传递一个表示动作的对象(`action`),随后 `reducer` 函数,即 `counterReducer` 函数将根据动作类型 (`action.type`)为`INCREMENT` 还是 `DECREMENT` 更新状态 `state`。 + +> 注意:相比使用多个`useState`来管理状态,`useReducer` 适用于具有复杂状态逻辑的情况,它能够更好地组织和管理状态变化。 + +### useRef + +**功能介绍** + +`useRef` 用于创建一个引用对象,可以用来存储组件的引用或持久化的值。与 `useState` 不同,`useRef` 创建的引用对象在更新时不会触发组件重新渲染。 + +**接口定义** + +```jsx +const refContainer = useRef(initialValue); +``` + +- `initialValue`:引用对象的初始值,可以是任何值,通常设置为 `null`。 + +`useRef` 的返回值: + +- `refContainer`:一个引用对象,其中的 `current` 属性可以被用于存储和访问值。 + +**示例** + +```jsx +import Inula, { useRef, render } from 'openinula'; + +function RefDemo() { + const inputRef = useRef(null); + + const handleButtonClick = () => { + // 使用 ref 获取 input 元素的引用,并设置焦点 + inputRef.current.focus(); + }; + + return ( +
    + + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + +上面的示例中,创建了一个函数组件 `RefDemo`,使用 `useRef` 钩子创建了一个名为 `inputRef` 的 `ref` 对象,并在 JSX 中将这个 `ref` 对象绑定到输入框元素上。 + +当按钮被点击时,`handleButtonClick` 函数会使用 `inputRef.current` 来获取输入框的 DOM 元素,并调用 `focus()` 方法来设置焦点。这样,点击按钮后,输入框就会自动获得焦点。 + +> 注意:`useRef` 不仅适用于获取 DOM 元素的引用,还可以在函数组件中存储和访问任意可变值。与 `state`一样,`ref` 可以指向任何东西:比如字符串、对象甚至函数。与 `state` 不同的是,`ref` 是一个带有当前属性的普通对象,可以读取和修改。 + +**存储变量** + +```jsx +import Inula, { useState, useRef, useCallback, render } from 'openinula' + +function ClickWatch() { + let ref = useRef(0); + + const handleClick = useCallback(() => { + ref.current = ref.current + 1; + alert('You clicked ' + ref.current + ' times!'); + }, []) + + return ( + + ); +} +render( + , + document.getElementById('root') +); +``` + +在上述示例中,将在每次点击后增加 `ref.current`。 + +> 注意:组件不会在每次递增时都触发重新渲染。 像 `state` 一样,`ref` 在重新渲染时被 openInula 保留。然而,`setState` 将会重新渲染组件,修改 `ref` 则不会。 + +### useImperativeHandle + +**功能介绍** + +`useImperativeHandle` 是一个用于定制在父组件中访问子组件实例方法的钩子函数。通常情况下,openInula 鼓励使用 `props` 和 `state` 来进行组件之间的通信,但在某些情况下,可能需要从父组件中直接调用子组件。 + +**接口定义** + +```jsx +useImperativeHandle(ref, createHandle, deps?):void; +``` + +- `ref`:一个 `ref` 引用对象,通常通过 `createRef()` 创建; +- `createHandle`:一个函数,用于创建子组件实例中需要暴露给父组件的方法或属性; +- `deps`:可选参数,一个依赖数组,当依赖项变化时,会重新计算 `createHandle`。通常在这里指定子组件的内部状态或其他信息,以确保暴露给父组件的方法在这些依赖项变化时得到更新。 + +**示例** + +```jsx +import Inula, { useRef, useImperativeHandle, forwardRef, render } from 'openinula'; + +// 子组件 +const ChildComponent = forwardRef((props, ref) => { + const inputRef = useRef(); + + // 暴露给父组件的方法 + useImperativeHandle(ref, () => ({ + focusInput: () => { + inputRef.current.focus(); + } + })); + + return ; +}); + +// 父组件 +function App() { + const childRef = useRef(); + + const handleFocusInput = () => { + childRef.current.focusInput(); + }; + + return ( +
    + + +
    + ); +} +render( + , + document.getElementById('root') +); +``` + +在这个例子中,`` 使用 `useImperativeHandle` 来创建一个名为 `focusInput` 的方法,父组件可以通过` ref` 调用这个方法来聚焦输入框。通过这种方式,你可以在需要时从父组件中控制子组件的行为。 + +> 注意:`useImperativeHandle` 应该避免过度使用,因为它破坏了组件之间的封装性,通常情况下应该优先考虑使用 `props` 和状态来实现组件之间的通信。 + +## APIs + +### render + +**功能介绍** + +在指定的 DOM 元素下渲染 openInula 组件。 + +**接口定义** + +```tsx +function render(children: any, container: Container, callback?: any): Element | Text | null +``` + +* `children`:需要渲染的 openInula 组件; +* `container`:DOM元素,`children` 将会渲染在该元素中; +* `callback`:挂载后的回调函数。 + +**示例** + +```tsx +import { render } from 'openinula'; + +function App() { + return

    hello

    ; +} + +render(, document.getElementById('root')); +``` + + +上述示例展示在 DOM 元素 `
    ` 下挂载了组件 ``,组件 `` 返回了一个 html 标题元素。 + +### createElement + +**功能介绍** + +当无法使用 JSX 语法时,可以使用 `createElement` 创建一个 openInula 元素。 + +**接口定义** + +```tsx +function createElement(type: any, setting: any, ...children: any[]): { + [x: string]: any; + vtype: number; + src: null; + type: any; + key: any; + ref: any; + props: any; +} +``` + +* `type`:创建的组件类型; +* `setting`:创建元素时传入的 `props` 对象。 +* `...children`:组件的零个或多个子节点。 + +**示例** + +```tsx +import { createElement } from 'openinula'; + +function Welcome() { + return createElement( + 'h1', + { className: 'welcome' }, + '你好' + ); +} +``` + +在上述示例中,创建了一个 `` 函数组件,这个组件返回了一个 `h1` 元素,其中包含了一个 `className` 属性,属性值为 'welcome',并包含文本内容'你好'。 + +### createPortal + +**功能介绍** + +`createPortal` 可以将某些元素的子元素渲染到 DOM 中的不同位置。 + +**接口定义** + +```tsx +function createPortal(children: any, realNode: any, key?: string): PortalType + +type PortalType = { + vtype: number; + key: null | string; + realNode: any; + children: any; +}; +``` + +* `children`:需要渲染的 openInula 组件; +* `readNode`:是某个已经存在的DOM节点,`children` 将会渲染在该元素中; +* `key`:可选参数,用作 portal key 的独特字符串或数字。 + +**示例** + +```jsx +import { createPortal, render } from 'openinula'; + +function Component() { + return ( +
    +

    这个子节点被放置在父节点 div 中

    + {createPortal( +

    这个子节点被放置在 document body 中

    , + document.body + )} +
    + ); +} +render(, document.getElementById('root')); +``` + +在这段代码中,`createPortal` 函数传入的第一个参数是一个 `

    ` 标签,第二个参数是 `document.body`,意味着这个`

    ` 标签将被创建并插入到文档的 `body` 元素中。这样,即使父组件的 `

    ` 被其他元素覆盖,这个 `

    ` 标签也会被放置在 `body` 的最顶层,而不会被覆盖。 + +> 注意:portal 只改变 DOM 元素所处的位置,而不改变组件在 React 树中的位置。子节点仍能访问父节点的上下文,且事件仍将从子节点冒泡到父节点。 + +### createRef + +**功能介绍** + +`createRef` 用于在类组件中声明一个 `ref` 对象,该对象可以用来引用DOM元素或组件实例。 + +**接口定义** + +```tsx +function createRef(): RefType + +type RefType = { + current: any; +}; +``` + +**示例** + +```jsx +import { Component, createRef, render } from 'openinula'; + +class App extends Component { + inputRef = createRef(); + + handleClick = () => { + this.inputRef.current.value++; + } + + render() { + return ( + <> + + + + ); + } +} +render(, document.getElementById('root')); +``` + +上述示例创建了一个 `App` 组件,通过调用 `createRef()` 函数创建一个 `ref` 对象 `inputRef`。在渲染时,`handleClick` 方法会被调用,它会通过 `this.inputRef.current.value++` 来增加 `input` 元素的值。`input` 元素通过 `ref` 属性引用 `inputRef`。这样就可以通过 `this.inputRef` 来操作输入框。 + +### forwardRef + +**功能介绍** + +`forwardRef` 允许组件通过参数中的 `ref` 将一个 DOM 节点暴露给父组件。 + +**类型定义** + +```tsx +function forwardRef(render: Function): { + vtype: number; + $$typeof: number; + render: Function; +} +``` + +* `render`: 是一个组件渲染函数,可以接收 `props` 和 `ref` 作为参数。 + +**示例** + +```tsx +import { forwardRef, useRef, render } from 'openinula'; + +const MyInput = forwardRef(function MyInput(props, ref) { + const { label, ...otherProps } = props; + return ( + + ); +}); + +export default function Form() { + const ref = useRef(null); + + function handleClick() { + ref.current.value++; + } + + return ( + + + + + ); +} +render(

    , document.getElementById('root')); +``` + +上述示例中,`MyInput` 组件通过 `forwardRef` 将 `input` 输入框暴露给父组件 `Form`,这样 `Form` 可以通过该 `ref` 操作该 `inupt`。 + +### lazy + +**功能介绍** + +`lazy` 声明一个懒加载组件,直到该组件第一次被加载前,才会加载该组件的代码。 + +**接口定义** + +```tsx +function lazy(promiseCtor: () => PromiseType<{ + default: T; +}>): LazyComponent> +``` + +* `promiseCtor` 是一个返回 `Promise` 对象的函数,第一次渲染组件前,openInula 才会调用该函数获取组件。 + +**示例** + +```jsx +import { lazy } from 'openinula'; + +const LazyComp = lazy(() => import { App } from './App'); +``` + +在上述示例中,使用`lazy`函数来异步加载``组件。`lazy` 函数接受一个函数,该函数返回一个`import()`语句,用于动态加载组件模块。 + +### memo + +**功能介绍** + +使用 `memo` 函数包裹组件,通常情况下,只要该组件的 props 没有改变,可以防止组件的重新渲染。 + +**接口定义** + +```tsx +function memo(type: any, compare?: ((oldProps: Props, newProps: Props) => boolean) | undefined): { + vtype: number; + $$typeof: number; + type: any; + compare: ((oldProps: Props, newProps: Props) => boolean) | null; +} +``` + +* `type`:需要进行记忆化的组件; +* `compare`:可选参数,是一个函数,接收一对新旧 `props`,判断两者是否完全相同。 + +**示例** + +```jsx +import { memo, useState, render } from 'openinula'; + +const MyComponent = ({ name }) => { + return
    Hello, {name}!
    ; +}; + +// 使用memo将MyComponent包装 +const MemoizedComponent = memo(MyComponent); + +const App = () => { + const [count, setCount] = useState(0); + + const handleClick = () => { + setCount(prevCount => prevCount + 1); + }; + + return ( +
    + {/* 每次更新会重新渲染MyComponent */} + + + {/* 使用MemoizedComponent,只有在name发生变化时才会重新渲染 */} + + +
    + Current count: {count} + +
    +
    + ); +}; +render(, document.getElementById('root')); +``` + +在上述示例中,创建了两个组件,一个是普通 `MyComponent` 组件,一个是使用 `memo` 包装的 `MemoizedComponent`。使用 `memo` 包装的 `MemoizedComponent` 只会在 `props` 的 `name` 属性发生变化时重新渲染。在点击按钮时,由于 `MemoizedComponent` 的 `name` 属性没有变化,所以不会重新渲染。 + +> 注意:在实际场景中,memo可以有效地避免无需更新的组件重新渲染,提高应用的性能。 + +### createContext + +**功能介绍** + +`createContext` 创建一个可供不同组件调用的上下文对象,这样各层组件之间不需要通过逐层传递信息。 + +**接口定义** + +```tsx +function createContext(val: T): ContextType +``` + +* `val`: 是上下文的初始值。 + +**示例** + +```tsx +import { createContext, render, useContext } from 'openinula'; + +const LanguageContext = createContext('zh-cn'); + +function Header() { + const locale = useContext(LanguageContext); + return

    Header {locale}

    ; +} + +function Footer() { + const locale = useContext(LanguageContext); + return

    Footer {locale}

    ; +} + +function Page() { + const locale = useContext(LanguageContext); + return ( +
    +
    +

    Page {locale}

    +
    +
    + ); +} +render(, document.getElementById('root')); +``` + +上述示例展示了 `createContext` 方法的使用方式,可以通过 `createContext` 创建一个供全局组件使用的 `LanguageContext` ,组件可以直接获取,不需要通过逐级传值的方式进行获取。 + +### cloneElement + +**功能介绍** + +`cloneElement` 可以从一个已有元素创建一个新的 Inula 元素。 + +**接口定义** + +```jsx +function cloneElement(element: any, setting: any, ...children: any[]): { + [x: string]: any; + vtype: number; + src: null; + type: any; + key: any; + ref: any; + props: any; +} +``` + +* `element`:需要克隆的 Inula 元素; +* `setting`:克隆后元素的 `props`; +* `...children`:是零个或多个子节点,如果不传入,将使用原始 `element.props.children`。 + +**示例** + +```jsx +import { cloneElement, createElement, render } from 'openinula'; + +function Time({ time }) { + return createElement( + 'h1', + { className: 'clock' }, + 'Time is ', + createElement('i', null, time), + ); +} +function Clock() { + const time = new Date().toLocaleTimeString(); + return cloneElement( +
    }> + + inner loading...
    }> + +
    + +``` +- 外层和内层 Suspense 可分别控制不同异步内容的 loading 状态。 + +## 错误处理 + +- 异步加载失败时可结合 ErrorBoundary 捕获错误。 +- lazy 组件必须返回 Promise,resolve 时需有 default 导出。 + +## 注意事项 + +- Suspense 只对 lazy 组件生效。 +- fallback 必须为有效的 React 元素。 +- 支持多层嵌套,内层优先显示 fallback。 + +## 最佳实践 + +- 推荐为每个异步区域单独设置 Suspense,提升用户体验。 +- fallback UI 应简洁明了。 + +## 相关链接 + +- [React Suspense](https://react.dev/reference/react/Suspense) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/components/composition/page.mdx b/packages/website-next/src/app/docs/components/composition/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..aff7a5dcea4c9b7205dc86fb7948cd3645a994be --- /dev/null +++ b/packages/website-next/src/app/docs/components/composition/page.mdx @@ -0,0 +1,120 @@ +--- +id: composition +title: 组件组合 +sidebar_label: 组件组合 +--- + +# 组件组合 + +组件组合是构建复杂 UI 的基础。openInula 2支持多种组合模式,包括容器组件、复合组件、插槽(children)、高阶组件等。 + +## 容器组件与展示组件 + +将逻辑与展示分离,提升复用性。 + +```tsx filename="UserCardAndList.jsx" +// 展示组件 +function UserCard({ user }) { + return ( +
    +

    {user.name}

    +

    邮箱:{user.email}

    +
    + ); +} + +// 容器组件 +function UserList({ users }) { + return ( +
    + + {(user) => } + +
    + ); +} +``` + +## 插槽(children) + +通过 `children` 实现灵活的内容插入。 + +```tsx filename="PanelWithSlot.jsx" +function Panel({ title, children }) { + return ( +
    +

    {title}

    +
    {children}
    +
    + ); +} + +function App() { + return ( + +

    这是插槽内容

    + +
    + ); +} +``` + +## 复合组件模式 + +将多个子组件组合为一个整体。 + +```tsx filename="TabsComponent.jsx" +function Tabs({ children }) { + // 省略 tab 切换逻辑 + return
    {children}
    ; +} + +function Tab({ label, children }) { + return ( +
    +

    {label}

    +
    {children}
    +
    + ); +} + +function App() { + return ( + + 内容A + 内容B + + ); +} +``` + +## 高阶组件(HOC) + +高阶组件用于复用逻辑或增强组件功能。 + +```tsx filename="HigherOrderComponent.jsx" +function withLogger(Component) { + return function Wrapper(props) { + console.log('props:', props); + return ; + }; +} + +const LoggedPanel = withLogger(Panel); +``` + +## 最佳实践 + +- 组件应职责单一,便于组合和复用 +- 善用 children 和 props 传递内容和行为 +- 复合组件可提升灵活性 + +## 注意事项 + +- 避免过度嵌套,保持结构清晰 +- 插槽内容建议通过 children 传递 + +## 相关链接 + +- [Props 传递](./props) +- [上下文](./context) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/components/context/page.mdx b/packages/website-next/src/app/docs/components/context/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..e7e58765bcc18349c06a3b0eb9ff62e613433133 --- /dev/null +++ b/packages/website-next/src/app/docs/components/context/page.mdx @@ -0,0 +1,90 @@ +--- +id: context +title: 上下文 +sidebar_label: 上下文 +--- + +# 上下文(Context) + +openInula 2(zouyu)支持类似 React 的 Context 机制,用于在组件树中跨层级传递数据,避免 props 层层传递。Context 机制包括 Provider(提供者)和 Consumer(消费者),并且支持响应式更新。 + +## 基本用法 + +### 1. 创建 Context + +```tsx filename="createContext.jsx" +import { createContext } from 'openinula'; + +const UserContext = createContext({ level: 0, path: '' }); +``` + +### 2. Provider(提供者) + +通过将 context 作为组件标签包裹子组件,并传递属性来提供数据: + +```tsx filename="ContextProvider.jsx" +function App() { + let level = 1; + let path = '/home'; + return ( + + + + ); +} +``` + +- context 属性可以是任意响应式变量,变化时会自动通知所有消费组件。 + +### 3. Consumer(消费者) + +在子组件中通过 `useContext` 获取 context 数据: + +```tsx filename="ContextConsumer.jsx" +import { useContext } from 'openinula'; + +function Child() { + const { level, path } = useContext(UserContext); + return
    {level} - {path}
    ; +} +``` + +- 解构 useContext 返回的对象即可获得 context 的所有属性。 +- context 属性变化时,消费组件会自动响应更新。 + +## 响应式原理 + +- context 属性是响应式的,父组件更新属性,所有 useContext 的子组件会自动重新渲染。 +- 编译器会自动为每个属性生成依赖追踪和更新函数。 + +## 只消费部分属性 + +可以只消费 context 的部分属性,只有被消费的属性变化时才会触发更新。 + +```tsx filename="PartialContextConsumer.jsx" +function OnlyLevel() { + const { level } = useContext(UserContext); + return {level}; +} +``` + +## 多层嵌套与多 context + +可以嵌套多个 context,useContext 会自动查找最近的 Provider。 + +## 最佳实践 + +- 用于全局配置、用户信息、主题等场景 +- 避免频繁变化的小数据放入 context +- 推荐解构useContext返回值,帮助响应式系统能够只在对应 key 更新时,仅更新对应 value 的消费组件,提升性能 + +## 注意事项 + +- context 属性必须通过 Provider 传递,且应为响应式变量 +- useContext 只能在函数组件中调用 +- context 变化会导致所有消费组件重新渲染 + +## 相关链接 + +- [组件组合](../composition) +- [官方测试用例参考](https://github.com/openinula/openinula/blob/main/next-packages/compiler/babel-inula-next-core/test/e2e/context.test.tsx) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/components/props/page.mdx b/packages/website-next/src/app/docs/components/props/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..f7c2de62b3501205295c00e35f968f8b51cf8fdb --- /dev/null +++ b/packages/website-next/src/app/docs/components/props/page.mdx @@ -0,0 +1,125 @@ +--- +id: props +title: Props 传递 +sidebar_label: Props 传递 +--- + +# Props 传递 + +在 openInula 2(zouyu)中,props 用于父组件向子组件传递数据和回调函数,语法与 React 类似,但更贴近原生 JS。 + +## 基本用法 + +```tsx filename="Welcome.jsx" +function Welcome({ name }) { + return

    你好,{name}!

    ; +} + +function App() { + return ; +} +``` + +## 默认值与解构 + +可以为 props 设置默认值,并使用解构赋值: + +```tsx filename="UserProfile.jsx" +function UserProfile({ name = '匿名', age = 0 }) { + return ( +
    +

    姓名:{name}

    +

    年龄:{age}

    +
    + ); +} +``` + +## 传递回调函数 + +父组件可以通过 props 向子组件传递事件处理函数,实现子组件向父组件通信: + +```tsx filename="CounterWithCallback.jsx" +function Counter({ onIncrement }) { + return ; +} + +function App() { + let count = 0; + function handleIncrement() { + count++; + } + return ( +
    +

    计数:{count}

    + +
    + ); +} +``` + +## 传递对象和数组 + +可以直接传递对象、数组等复杂数据类型: + +```tsx filename="TodoList.jsx" +function TodoList({ todos }) { + return ( +
      + + {(todo) =>
    • {todo.text}
    • } +
      +
    + ); +} + +function App() { + let todos = [ + { text: '学习 OpenInula' }, + { text: '写文档' } + ]; + return ; +} +``` + +## children 插槽 + +通过 `children` 实现插槽功能: + +```tsx filename="PanelWithChildren.jsx" +function Panel({ title, children }) { + return ( +
    +

    {title}

    +
    {children}
    +
    + ); +} + +function App() { + return ( + +

    这是插槽内容

    +
    + ); +} +``` + +## 最佳实践 + +- 使用解构赋值提升代码可读性,并帮助响应式系统能够只在对应 props key 更新时,更新组件 +- 为 props 设置合理的默认值 +- 只传递必要的数据,避免 props 过多 +- 通过回调函数实现父子通信 + +## 注意事项 + +- props 是只读的,不要在子组件内部修改 props +- children 也是 props 的一部分 +- 复杂数据建议使用不可变数据结构 + +## 下一步 + +- 学习[组件组合](../composition)的高级用法 +- 了解[上下文](../context)的全局数据传递 +- 探索[生命周期](../lifecycle/mounting)的管理 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/conventional/CodeOfConduct/page.mdx b/packages/website-next/src/app/docs/conventional/CodeOfConduct/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..ae57632ebc58f49982b1958d47097b0d4c836bcd --- /dev/null +++ b/packages/website-next/src/app/docs/conventional/CodeOfConduct/page.mdx @@ -0,0 +1,53 @@ +--- +sidebar_position: 6 +--- + +我们有一份 openinula 代码贡献行为准则,希望所有的贡献者都能遵守,请花时间阅读一遍全文以确保你能明白哪些是可以做的,哪些是不可以做的。 + +openinula代码贡献行为准则遵守开源社区[《贡献者公约》](https://contributor-covenant.org/) V1.4 中规定的行为守则,请参考[V1.4版本](https://www.contributor-covenant.org/zh-cn/version/1/4/code-of-conduct.html) + +如需举报侮辱、骚扰或其他不可接受的行为,您可以发送邮件至[team@inulajs.org](mailto:team@inulajs.org),联系 openinula 项目部处理。 + +## 贡献者们的承诺 + +为建设开放友好的环境,我们贡献者和维护者承诺:不论年龄、体型、身体健全与否、民族、性征、性别认同与表征、经验水平、教育程度、社会地位、国籍、相貌、种族、信仰、性取向,我们项目和社区的参与者皆免于骚扰。 + +## 我们的准则 + +有助于创造积极环境的行为包括但不限于: + +* 措辞友好且包容 +* 尊重不同的观点和经验 +* 耐心接受有益批评 +* 关注对社区最有利的事情 +* 与社区其他成员友善相处 + +参与者不应采取的行为包括但不限于: + +* 发布与性有关的言论或图像、不受欢迎地献殷勤 +* 捣乱/煽动/造谣行为、侮辱/贬损的评论、人身及政治攻击 +* 公开或私下骚扰 +* 未经明确授权便发布他人的资料,如住址、电子邮箱等 +* 其他有理由认定为违反职业操守的不当行为 + +## 我们的义务 + +项目维护者有义务诠释何谓“妥当行为”,并妥善公正地纠正已发生的不当行为。 + +项目维护者有权利和义务去删除、编辑、拒绝违背本行为标准的评论(comments)、提交(commits)、代码、wiki 编辑、问题(issues)等贡献;项目维护者可暂时或永久地封禁任何他们认为行为不当、威胁、冒犯、有害的参与者。 + +## 适用范围 + +本行为标准适用于本项目。当有人代表本项目或本社区时,本标准亦适用于此人所处的公共平台。 + +代表本项目或本社区的情形包括但不限于:使用项目的官方电子邮件、通过官方媒体账号发布消息、作为指定代表参与在线或线下活动等。 + +代表本项目的行为可由项目维护者进一步定义及解释。 + +## 贯彻落实 + +可以致信[team@inulajs.org](mailto:team@inulajs.org),向项目团队举报滥用、骚扰及不当行为。 + +维护团队将审议并调查全部投诉,妥善地予以必要的回应。项目团队有义务保密举报者信息。具体执行方针或将另行发布。 + +未切实遵守或执行本行为标准的项目维护人员,经项目负责人或其他成员决议,可能被暂时或永久地剥夺参与本项目的资格。 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/conventional/ContributingGuide/page.mdx b/packages/website-next/src/app/docs/conventional/ContributingGuide/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..132a283920b32a0ed91b6aad5afa7c1da5d1cab0 --- /dev/null +++ b/packages/website-next/src/app/docs/conventional/ContributingGuide/page.mdx @@ -0,0 +1,142 @@ +--- +sidebar_position: 7 +--- + +本指南会指导你如何为 openInula 贡献自己的一份力量,请你在提出 issue 或 pull request 前花费几分钟来了解 openInula 社区的贡献指南。 + +## 行为准则 + +我们有一份 openInula 代码贡献[行为准则](/docs/行为准则),希望所有的贡献者都能遵守,在参与社区贡献之前,请先阅读并遵守 openInula 的[行为准则](/docs/行为准则)。 + +## 参与贡献 + +贡献代码之前,您必须签署一份“openInula贡献者协议,然后才能参与代码贡献。根据您的参与身份,选择签署个人 CLA、员工 CLA 或企业 CLA,请点击**[这里](https://gitee.com/organizations/inula-js/cla/inula-js-contributor-protocol)**签署。 + +* 个人 CLA:以个人身份参与社区,请签署个人 CLA +* 企业 CLA: 以企业身份参与社区,请签署企业 CLA +* 员工 CLA: 以企业员工的身份参与社区,请签署员工 CLA + +#### 贡献流程 + +* 我们所有的工作都会放在 [Gitee](https://gitee.com/openInula) 上。 +* 针对Git的安装、环境配置及使用方法,请参考码云帮助中心的 Git 知识大全:[https://gitee.com/help/categories/43](https://gitee.com/help/categories/43) +* openInula 长期维护 master 分支。如果你要修复一个 Bug 或增加一个新的功能,那么请 Pull Request 到 master 分支上 + +#### 参与贡献 + +openInula 团队会关注所有 Pull Request,我们会经测试与评审后合入你的代码,也有可能要求你做一些修改或者告诉你我们为什么不能接受你的修改。 + +在你发送Pull Request之前,请确认你是按照下面的步骤来做的: + +1. 确保基于正确的分支进行修改。 +2. 在项目根目录下运行了 `npm install`。 +3. 如果你修复了一个bug或者新增了一个功能,请确保新增或完善了相应的测试,这很重要。 +4. 确认所有的测试都是通过的 `npm run test` +5. 确保你的代码通过了lint检查 `npm run lint`. + +#### 贡献流程 + +1. Fork 代码分支 + + 1. 找到并打开对应 Repository 的首页; + 2. 点击右上角的 **Forked** 按钮,按照指引,建立一个属于个人的分支。 + +2. 把 Fork 仓下载到本地 + + 1. 创建本地工作目录; + ```bash + mkdir ${your_working_dir} + cd ${your_working_dir} + ``` + + 2. 复制远程仓库到本地。 + ```bash + git clone {$remote_link} + ``` + +3. 代码修改 + + 1. 根据您的想法,修复bug或者新增功能; + + 2. 推送到您的线上代码仓分支。在此之前,请确认您已完成一下步骤: + 1. 确保基于正确的分支进行修改。 + 2. 在项目根目录下运行了 `npm install`。 + 3. 如果你修复了一个 bug 或者新增了一个功能,请确保新增或完善了相应的测试,这很重要。 + 4. 确认所有的测试都是通过的 `npm run test` + 5. 确保你的代码通过了 lint 检查 `npm run lint`. + + 确认无误后即可推送 + ```bash + git push origin master + ``` + +4. 提交 Pull Request + + 1. 在代码仓首页点击 **+Pull Request**,创建一个新PR + 2. 选择分支为您修改过的分支 + 3. 补充标题与 PR 描述等信息。openInula 库提供 PR 模板,帮助您快速高效的传递 PR 的描述信息。 + 4. 确认无误后,点击**创建 Pull Request** + + 提交完毕后,请耐心等待 openInula 团队完成测试与评审流程。流程通过后,您的代码就会被合入 openInula 的代码仓中。 + + 如果你还不清楚怎么在Gitee上提交 Pull Request,你可以通过[这篇文章](https://oschina.gitee.io/opensource-guide/guide/%E7%AC%AC%E4%B8%89%E9%83%A8%E5%88%86%EF%BC%9A%E5%B0%9D%E8%AF%95%E5%8F%82%E4%B8%8E%E5%BC%80%E6%BA%90/%E7%AC%AC%207%20%E5%B0%8F%E8%8A%82%EF%BC%9A%E6%8F%90%E4%BA%A4%E7%AC%AC%E4%B8%80%E4%B8%AA%20Pull%20Request/#%E4%BB%80%E4%B9%88%E6%98%AF-pull-request)学习 + + +### 门禁构建 + +#### 创建 Issue + +1. 找到并打开对应 Repository 的首页 +2. 选择 Issues 页签。 +3. 在点击右侧 **+新建 Issue** 按钮,建立一个专属的任务,用于相关联的代码(开发特性/修改 bug)执行 CI 门禁。 + +#### 将 Issue 与 PR 关联 + +创建 PR 或编辑已有的 PR 时,描述框输入 `#I[五位 Issue ID]`,例如 `#I12345`,即可将 Issue 与 PR 关联。 + +#### 约束 +- 一个 PR 只允许关联一个 Issue,关联多个 Issue 时无法触发CI。 +- 相关特性开发或 bug 修复涉及多个代码仓联合修改时,多个 PR 可关联同一个 Issue。 +- Issue 关联的 PR 中,不允许存在已被合入或关闭的 PR,否则无法触发 CI。 +- 若 Issue 已被合入或关闭的 PR 关联,则该 Issue 无法被重复使用,需重新创建 Issue 并进行 OPEN 的 PR 关联。 +- 当你想开始处理一个 Issue 时,先检查一下 Issue 下面的留言,确保没有其他人正在处理。如果没有,你可以留言告知其他人你将处理这个 Issue,避免重复劳动。 + + +#### 触发代码门禁 + +在 PR 中评论“start build”即可触发 CI 门禁。 + +多个 PR 关联同一个 Issue 时,在任一 PR 中评论“start build”均可触发该 Issue 的 CI 门禁。 + +门禁执行完成,会在该 Issue 关联的所有 PR 中自动评论门禁执行结果。 + +如果门禁通过,该 Issue 关联的所有PR均会自动标记“测试通过”。 + +#### Bug 提交 + +我们使用 Gitee Issues 来进行 Bug 跟踪。在你发现 Bug 后,请通过我们提供的模板来提 Issue,以便你发现的 Bug 能被快速解决。 + +在你报告一个 bug 之前,请先确保不和已有 Issue 重复以及查阅了我们的用户使用指南。 + +#### 新增功能 + + 如果你有帮助我们改进 API 或者新增功能的想法,我们同样推荐你使用我们提供 Issue 模板来新建一个添加新功能的 Issue。 + +### CI 门户 + +openInula 通过持续集成(CI,Continuous Integration)及时发现代码问题,确保代码质量可靠和功能稳定,包括: + +* 代码门禁:开发者向 openInula 提交代码合入申请后,会触发门禁检查,例如静态检查、代码编译、功能测试等,门禁通过后才能合入代码。 +* 每日构建:openInula 的持续集成流水线每日自动执行,以便提前发现代码静态检查、编译、功能等方面的问题,及时修复问题,确保代码质量。 + +CI 门户是为了便于开发者及时查看、分析每日构建和代码门禁的执行结果的一个可持续集成的门户。 + +## 内容版权 + +用户提交的内容、图片必须是原创内容,不得侵犯他人知识产权。 + +对应采纳的内容,openInula 有权根据相关规范修改用户提交的内容。 + +## License + +openInula 主要遵循 Mulan Permissive Software License v2 协议,详情请参考各代码仓 LICENSE 声明。 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/conventional/FAQ/page.mdx b/packages/website-next/src/app/docs/conventional/FAQ/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..19f2526b79777bd9e11a330adf44affd41e02883 --- /dev/null +++ b/packages/website-next/src/app/docs/conventional/FAQ/page.mdx @@ -0,0 +1,35 @@ +--- +sidebar_position: 5 +--- + +## openInula 支持哪些浏览器? + +最新版的 openInula 支持原生支持 ES2015 的浏览器,不包括 IE 浏览器。 + +--- + +## openInula 可以扩展吗? + +是的,openInula 是一个成熟的完全的前端框架,其不仅可无缝兼容 React 框架,也可以基于 openInula 库,扩展一些生态能力: + + * inula-intl 提供了一个模块化的国际化框架,允许其和 openInula 框架配合使用 + * inula-request 提供了请求能力,允许其和 openInula 框架配合使用 + * inula-router 提供了路由能力,允许其和 openInula 框架配合使用 + +--- + +## openInula 的进入门槛如何? + +openInula 的进入门槛较低,详细的文档以及简洁的代码逻辑能减少新前端开发人员的学习成本。 + +--- + +## openInula 中应该使用 JavaScript 还是 TypeScript? + +openInula 本身是基于TypeScript实现的,提供了一流的 TypeScript 支持,但不会对您是否应该使用 TypeScript 作为用户强制执行意见。在 openInula API 实现中也尽可能在 JavaScript 与 TypeScript 进行折中选择。 + +--- + +## openInula 是轻量级的吗?性能如何? + +openInula 是轻量级的。其提供的响应式 API 性能相比与主流框架 React 的虚拟 DOM 方式,渲染效率提升了30%以上。 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/conventional/QuickStart/page.mdx b/packages/website-next/src/app/docs/conventional/QuickStart/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..81b23bf750eb881cd2abbfea4ffe0c3ca9c5d085 --- /dev/null +++ b/packages/website-next/src/app/docs/conventional/QuickStart/page.mdx @@ -0,0 +1,94 @@ +欢迎学习 openInula 教程。此教程将会指导你使用 openInula 构建快速、轻便的 web 应用程序。 + +## 什么是openInula + +openInula 是一款用于构建用户界面的 JavaScript 库,提供响应式 API 帮助开发者简单高效构建 web 页面,比传统虚拟 DOM 方式渲染效率提升30%以上!同时 openInula 提供与 React 保持一致的 API,并且提供5大常用功能丰富的核心组件:**状态管理器**、**路由**、**国际化**、**请求组件**、**应用脚手架**,以便开发者高效、高质量的构筑基于 openInula 的前端产品。 + +### 在已有项目中安装 openInula + +#### 方式一:使用 `npm` 安装 + +在命令行中运行以下命令来通过 `npm` 安装 openInula: + +```sh filename="install.sh" +npm install openinula +``` + +上述命令会将最新版本的 openInula 包添加到您的项目中,当然,您也可以指定特定版本来安装包。最新版本号请在 npm 官网查看:[访问官网](https://www.npmjs.com/package/openinula) + +#### 方式二:使用 `yarn` 安装 + +openInula 也支持 `yarn` 命令安装,前提已安装了 `yarn`,如未安装,则通过 `npm install -g yarn` 命令来安装(全局安装)。 + +在命令行中运行以下命令来通过 `yarn` 安装 openInula: + +```sh filename="install.sh" +yarn add openinula +``` + +### 直接创建 openInula 项目 + +如果你已经安装了openInula,则可以简单地创建一个新的 JavaScript 文件,尝试使用 openInula,例如 `index.jsx`,并在其中添加以下代码: + +```jsx filename="index.jsx" +import { render } from 'openinula'; + +const HelloWorld = () => { + return ( +
    +

    Hello, World!

    +
    + ); +}; + +render( + , + document.getElementById('root') +); +``` + +上述代码片段主要分为三部分,首先通过 `import` 语法导入 openInula 包,其次构建一个名为 `HelloWorld` 的函数组件,最后将 `HelloWorld` 组件挂载在 HTML 中 id 为 `root` 的 DOM元素上,详细使用请查阅[API参考Inula](https://docs.openinula.net/apis/Inula)。`index.jsx` 经过 babel 编译后,您将看到一个显示 "Hello, World!" 的页面。 + +### 使用脚手架创建openInula项目 + +#### 步骤一: 启动openInula脚手架 + +在您需要创建项目的目录下执行以下命令: + +```sh filename="create.sh" +npx create-inula <项目名> +``` + +#### 步骤二: 选择需要项目模板 + +执行启动命令后,您将收到以下回显信息询问,可根据回显信息进行相应的输入: + +```sh filename="select-template.txt" +Need to install the following packages:create-inula@0.0.2 +Ok to proceed? (y) y +? Please select the template (Use arrow keys) +> Simple-app +``` + +在创建项目过程中脚手架提供 Simple-app 模板供开发者使用: +- Simple-app 已默认安装 openInula,开发者可以直接在项目中专注于核心代码的开发。 + +#### 步骤三:选择打包方式 + +在创建项目过程中有两种打包方式供选择,您可以根据自己使用习惯选择: + +```sh filename="select-build.txt" +? Please select the build type (Use arrow keys) + > webpack + vite +``` + +如果您不知如何选择可分别参考 [Vite 文档](https://cn.vitejs.dev/) 以及 [webpack文档](https://webpack.js.org/)。 + +至此,可以使用 openInula 框架,通过 `npm run start` 命令运行项目,您会看到简单的 openInula 的示例。当然,您也可以基于 openInula 框架构建您的 web 项目。 + +### 开始使用openInula + +恭喜!您已经成功安装了 openInula。现在您可以根据项目需求自由使用 openInula 提供的组件和功能。 + +请查阅[《用户指南》](/docs/用户指南)以了解更多关于如何使用和配置框架的详细信息。 diff --git a/packages/website-next/src/app/docs/conventional/ReleaseNotes/page.mdx b/packages/website-next/src/app/docs/conventional/ReleaseNotes/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..45bd6441baeafc473a6e0c6da11aa6fa1358d70c --- /dev/null +++ b/packages/website-next/src/app/docs/conventional/ReleaseNotes/page.mdx @@ -0,0 +1,24 @@ +--- +sidebar_position: 4 +--- +## 配套关系 + +表1 版本软件和工具配套关系 + +| 软件 | 版本 | 备注 | +|--------------|--------|----| +| inula | 0.0.11 | | +| create-inula | 1.0.11 | | + +## 新特性 + +**openInula** + +* 支持响应式 API(9月底发布β版本) +* 支持状态管理器 inulaX +* 兼容 React API,支持类式组件和函数式组件 + +**create-inula** + +- 支持选择 Simple-app 模板 +- 项目模板支持 webpack 和 vite 两种打包方式 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/conventional/SwitchingGuide/page.mdx b/packages/website-next/src/app/docs/conventional/SwitchingGuide/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..73cf5db79b5ebd6cf30c02c65dcf77e260bcc7df --- /dev/null +++ b/packages/website-next/src/app/docs/conventional/SwitchingGuide/page.mdx @@ -0,0 +1,180 @@ +--- +sidebar_position: 3 +--- + +为了便于开发者使用 openInula 进行页面开发,尤其是已经使用 React 的相关项目,openInula 提供了一种无感切换机制,可以从 React 切换到 openInula。您只需要按照如下的方式进行修改,就可以体验到 openInula 框架所提供的能力。 + +### 使用 React 的项目切换 openInula 步骤 + +- 步骤1:安装 openInula。 + +```bash filename="install.sh" +npm install openinula +``` + +最新版本号请在 npm 官网查看:[访问官网](https://www.npmjs.com/package/openinula) + +- 步骤2:引用切换,修改 openInula 相关 API 的加载方式。 + +```ts +// 修改前: +import React, { useContext, useEffect, Suspense, lazy, useState } from 'react'; +import ReactDOM from 'react-dom'; + +// 修改后: +import React, { useContext, useEffect, Suspense, lazy, useState } from 'openinula'; +import ReactDOM from 'openinula'; +``` +*注意*:修改后可以保留 React 全局变量。 + +- 步骤3:修改 webpack 配置文件中 `alias`,新增 `react`、`react-dom` 等别名,如下: + +```ts filename="webpack.config.js" +alias: { + // 省略其它... + 'react': 'openinula', // 新增 + 'react-dom': 'openinula', // 新增 + 'react-is': 'openinula', // 新增 +}, +``` + +### 切换FAQ + +#### openInula 编译 FAQ + +1. 在切换或者使用 openInula 框架时,`React.createElement` 无法转换成 `openinula.createElement`: + + 请排查编译命令中是否有 `--mode development`,该选项会导致 `React.createElement` 无法转换成 `openinula.createElement`,需要删除。 + +2. 如果在 webpack 配置文件中配置 `externals` 字段,需把 React 相关三方件的 `externals` 都替换,如下: + + ```ts filename="webpack.config.js" + externals: { + 'react': 'openinula', + 'react-dom': 'openinula', + 'react-redux': 'openinula', + 'react-thunk': 'openinula', + }, + ``` + +3、如果使用 babel,则需要修改 `.babelrc` (`babel.config.js`) 或 webpack 配置文件中 `babel-loader` 配置(解决编译后文件存留 `React.createElement` 的问题),如: + +- 如果你使用的是 `@babel/preset-react`,请确保版本号大于 `7.9.0` + + ```jsx + // 修改前: + { + "presets": [ + "@babel/preset-react" + ] + } + + // 修改后 + { + "presets": [ + [ + "@babel/preset-react", + { + "runtime": "automatic", // 新增 + "importSource": "openinula" // 新增 + } + ] + ] + } + ``` + +- 如若使用了 `@babel/plugin-transform-react-jsx`,请确保版本号大于 `7.9.0` + + ```jsx + // 修改前 + { + "plugins": [ + "@babel/plugin-transform-react-jsx" + ] + } + + // 修改后: + { + "plugins": [ + [ + "@babel/plugin-transform-react-jsx", + { + "runtime": "automatic", // 新增 + "importSource": "openinula" // 新增 + } + ] + ] + } + ``` + + > 注意:**`.babelrc` (`babel.config.js`)** 和 **webpack配置文件** 不要重复配置。 + +--- + +#### 不兼容 React 变更 FAQ + +1. openInula 不支持 Legacy Context,如:https://reactjs.org/docs/legacy-context.html ,请修改成new Context API,参考:https://reactjs.org/docs/context.html 。 + +2. openInula 不支持在 Class 组件中使用 `this.refs` + + ```jsx filename="InputFocusExample.jsx" + class InputFocusExample extends Component { + focusInput = () => { + this.refs.myInput.focus(); // 不支持 this.refs + }; + + render() { + return ( +
    + + +
    + ); + } + } + + // 请修改成以下新的 Ref API 方式: + class InputFocusExample extends Component { + constructor(props) { + super(props); + this.myInput = React.createRef(); // 新的 Ref API + } + + focusInput = () => { + this.myInput.current.focus(); // 通过 this.myInput.current 引用 + }; + + render() { + return ( +
    + + +
    + ); + } + } + ``` + +--- + +#### 测试框架 FAQ + +1. openInula 如何与 `@testing-library/react` 配套使用? + + openInula 支持与 React 提供的测试框架配合使用,方法配置简便,需要在 `jest.config.js` 中需要加入如下配置: + + ```js filename="jest.config.js" + module.exports = { + moduleNameMapper: { + "^react$": "/node_modules/openinula", + "^react-dom": "/node_modules/openinula", + "^react/jsx-runtime": "/node_modules/openinula/jsx-runtime" // 非必须,如存在 require("react/jsx-runtime") 这种引入方式才需要 + }, + }; + ``` + + > 注意:`"^react/jsx-runtime": "rootDir/node_modules/openinula/jsx-runtime"`是非必须添加,若存在 `require("react/jsx-runtime")` 这种引入方式才需要 + +2. openInula 项目如何使用 `react-test-renderer` 测试框架? + + openInula 不支持 `react-test-renderer` 这个测试框架,如果使用到需要自行修改。因为 `react-test-renderer` 用到了 React 的 `React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED` 接口,而 openInula 没有该接口。 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/conventional/UserInstruction/figure.png b/packages/website-next/src/app/docs/conventional/UserInstruction/figure.png new file mode 100644 index 0000000000000000000000000000000000000000..ba5a2f6044ecde43edaf33dd100a1d1411a15dbb Binary files /dev/null and b/packages/website-next/src/app/docs/conventional/UserInstruction/figure.png differ diff --git a/packages/website-next/src/app/docs/conventional/UserInstruction/page.mdx b/packages/website-next/src/app/docs/conventional/UserInstruction/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..cb988921ba3c4d2741b3e2025ffc1f29b0d455fa --- /dev/null +++ b/packages/website-next/src/app/docs/conventional/UserInstruction/page.mdx @@ -0,0 +1,745 @@ +--- +sidebar_position: 2 +--- + +# 用户指南 + +openInula 是一款构建用户界面的 JavaScript 前端框架。本篇文章会对 openInula 的组件及生命周期、数据管理、事件绑定等知识进行详细介绍,相信通过本章学习您将掌握到 openinula 的基本知识和使用方法。 + +## 开始使用 + +### JSX + +JSX 是 JavaScript XML 的缩写,是一种用于构建用户界面的语法扩展。在 openInula 中,JSX 被广泛使用。开发者可以使用 JSX 来描述 UI 组件的结构和样式,并将其与 JavaScript 代码逻辑相结合。然后使用转译工具(例如`Babel`)将 JSX 代码转换为普通的 JavaScript 代码,以便浏览器能够理解并渲染。 + +- JSX 是类 HTML 语言,其除了拥有 HTML 的功能外,还可以通过括号`{}`嵌套 JavaScript 表达式,这使得 JSX 更加灵活,可以动态地生成UI组件; +- JSX 支持双向数据绑定,使得数据和界面之间的更新更加简单。当数据发生变化时,会智能地更新必要部分。HTML 没有直接支持数据绑定的功能; +- 每个 JSX 必须返回独有元素。如果要返回多个顶级元素,请使用 `Fragment` 元素或者 <>。 + +```jsx filename="fragment-example.jsx" +<> +

    Hello, {props.name}!

    ; + + + +``` + +### 组件 + +组件是 openInula 的核心概念之一。它们是构建用户界面(UI)的基础,是可重用和独立的代码单元。开发者可以将相关功能、状态以及模板封装在组件中,提高可复用性,使得程序开发具备模块化和可维护特性。下面我们将展开介绍。 + +#### 组件的设计 + +组件不是 openInula 特有的概念,但是组件的设计思想会是优秀应用开发的基础。接下来我们就谈一谈组件设计的奥秘。 + +openInula 组件思想具有普适性,无论是在其他框架还是原生 Web component 都适用。组件与我们之前学到的HTML的元素非常相似,如将一个 UI 界面分成独立的可重复复用的单独的部分,每个部称之为一个组件,各个组件之间相互交互以实现基本功能。 + +![image](./figure.png) + +如果您已经了解使用组件会给您的程序带来的优点,如何设计一个好的组件将是您接下来关注的问题,openInula 框架认为一个好的组件会遵循以下原则: + +1. 单一职责:组件只应该做一件事情。单一职责带来最大好处就是在修改组件时,不必担心对其他组件造成影响。 +2. 开闭原则:一个组件应该对扩展开放,对修改关闭,即通过扩展组件的行为来实现功能的变化,而不是修改组件的源代码。 + +上述原则可以帮助开发者设计出高内聚、低耦合、可扩展、可维护的组件。如下示例是我们展示如何使用设计原则来实现一个安全可靠的组件。 + +```jsx filename="button-form-page.jsx" +import Inula, { render, Component } from 'openinula'; + +// 示例组件 - 按钮组件 +class Button extends Component { + render() { + const { text, onClick } = this.props; + return ( + + ); + } +} + +// 示例组件 - 表单组件 +class Form extends Component { + handleSubmit = (event) => { + event.preventDefault(); + // 处理表单提交逻辑 + } + + render() { + return ( +
    + +
    + + ); + }; + }; + ``` + +2. 函数组件 + + 函数组件是以函数形式呈现,可以接收一个属性(`props`)作为输入,并返回一个 JSX 元素。函数组件的代码量更少,易于阅读和理解。相较于类组件,没有繁琐的类声明和生命周期方法,更加直观和简洁。此外,函数组件没有实例化的过程,在一些情况下,函数组件比类组件具有更好的性能。 + + ```jsx filename="picture-greeting.jsx" + function Picture() { + return ( + + ); + }; + + const Greeting = (props) => { + return ( +
    +

    Hello, {props.name}!

    + +
    + ); + }; + ``` + +此外,无论是函数组件还是类组件,组件之间可以进行嵌套,实现更复杂的代码逻辑。在上述函数组件示例中包含了两个组件,`Greeting`为父组件,`Picture`是它的子组件。 + +> 注意: +> 1. 如果定义组件,则首字母需要大写,以区分 HTML 标签; +> 2. 在渲染JSX元素时,`return` 时需要通过括号`()`包含多个组件,否则 `return` 中除首行代码外都会被忽略。 + +#### 组件的渲染 + +我们已经介绍了函数组件和类组件,下一步我们将思考如何能将创建的组件展示到界面?首先我们创建了一个 `index.jsx` 文件,使用 `document.getElementById('root')` 表示获取HTML文档中具有id为 `root` 的元素作为挂载点,进而在浏览器中展示 `Counter` 组件内容。 + +```jsx filename="app.jsx" +import { render } from 'openinula'; +import { Counter } from './Counter.js' + +function App() { + render( + , + document.getElementById('root') + ); +}; +``` + +### 组件间通信 + +#### Props(属性) + +Props(属性)是组件之间传递数据的一种机制。Props 是从父组件向子组件传递的不可变对象。Props 的参数传递是一种单向传递,即从父组件单向传递子组件,因此 Props 是一种只读属性,子组件只能读取父组件传递的 Props,但却不能修改值。在如下示例中,我们创建一个父组件 `ParentComponent`,通过 Props 机制将参数传递给子组件 `ChildComponent`。 + +```jsx filename="parent-child-component.jsx" +function ParentComponent() { + return ( + + ); +} + +// 类组件 +class ChildComponent extends Component { + render() { + return ( +
    +

    Name: {this.props.name}

    +

    Age: {this.props.age}

    +

    Gender: {this.props.gender || 'Unknown'}

    +
    + ); + } +} + +// 函数组件 +function ChildComponent(props) { + return ( +
    +

    Name: {props.name}

    +

    Age: {props.age}

    +

    Gender: {props.gender || 'Unknown'}

    +
    + ); +} +``` + +在上述代码中,子组件 `ChildComponent` 通过 Props 机制可以获取到父组件传入的 `props` 并获取 `name`、`age` 以及 `gender` 等值。 + +```jsx +

    Name: {props.name}

    +``` + +有些读者可能已经发现,父组件传入的 `props` 中没有 `gender` 属性。但是如果子组件执意使用时,也可传入默认值。在上述例子中,当父组件没有传入对应属性 `props.gender` 时,可以设置默认值为`Unknown`,如果没有设置对应属性的默认值,则获取到的值为 `undefined`。 + +#### State(状态) + +openInula 中 State(状态) 是一种用于存储和管理组件内部数据的机制。它是一个对象,包含了组件的可变数据。当状态发生变化时会自动重新渲染组件,以反映最新的状态。 + +在介绍组件的分类时,我们在[类组件](#组件的分类)中定义了 `Counter` 组件让读者更直观地感受类组件特点,在 `Counter` 类组件中,我们使用 `this.state = { count: 0 }` 定义了计数器的初始状态值,并通过 `setState` 函数进行修改状态。但是这只是针对类组件中的状态的设置以及修改,如果在函数组件中,我们又如何使用呢? + +下面示例中我们将类组件 `Counter` 改写写成函数组件,用 `useState` 钩子函数来声明管理组件的状态,因此代码也可以写为: + +```jsx filename="counter-func.jsx" +import Inula, { useState } from 'openinula'; + +function Counter() { + const [count, setCount] = useState(0); + + const increment = () => { + setCount(count + 1); + }; + + return ( +
    +

    Count: {count}

    + +
    + ); +} +``` + +`useState` 钩子用于定义名为 `count` 的状态变量,并使用初始值0进行初始化。同时返回的 `setCount` 函数用于更新 `count` 的值。当用户点击 `Increment` 按钮时,会触发 `increment` 函数并进一步调用 `setCount` 来增加计数器的值,并更新组件的状态。每次 `setCount` 被调用时会重新渲染 `Counter` 组件,并显示最新的计数值。 + +> Tips: `state` 与 `props`区别 +> `state` 是组件内部管理的可变数据,用于存储和更新组件的私有状态。而 `props` 是由父组件传递给子组件的不可变数据,用于组件之间的数据传递和通信。通过结合使用 `state` 和 `props`,可以实现动态的和可重用的组件,并在应用中管理和传递数据。 + +#### 组件通信的封装性 + +openInula 提倡开发者使用组件,对于单个组件来说,单一职责原则会保证组件的封装性,但是组件之间的应该存在必要的交互通信,才能相互协作协作,完整更复杂的功能逻辑。细心的读者已经发现在上述的例子中,我们已经使用 `props` 和 `state` 来进行组件的交互,但是如何在保证组件交互时同样具备封装性呢?下面我们通过一个错误案例以及对其的修改进行详细说明。 + +```jsx +// ParentComponent.js +import Inula, { Component } from 'openinula'; +import ChildComponent from './ChildComponent'; + +class ParentComponent extends Component { + constructor(props) { + super(props); + this.state = { + message: 'Hello', + }; + } + + handleChange = (e) => { + this.setState({ message: e.target.value }); + }; + + render() { + return ( +
    + + +
    + ); + } +} + +// ChildComponent.js +import Inula, { Component } from 'openinula'; + +class ChildComponent extends Component { + render() { + return
    {this.props.message}
    ; + } +} +``` + +在上述示例中,`ParentComponent` 和 `ChildComponent` 是两个组件。然而,`ParentComponent` 直接将自己的状态(`message`)传递给了 `ChildComponent` 作为 `props` ,这违背了组件封装性的原则。 + +根据组件封装性的原则,一个组件应该尽可能地隐藏其内部实现细节,并通过 `props` 接口与外部进行通信。但在这个示例中,`ParentComponent` 将自己的状态直接传递给了 `ChildComponent`,导致 `ChildComponent` 依赖于 `ParentComponent` 的状态。 + +因此,我们在重构中,首先会考虑到以“粗暴、直接地”方式修改 `message` 值,并且考虑到组件的封装特性,保证组件只感知到自身的 `state`。我们可以将 `ChildComponent` 中的 `message` 属性改为通过 `props` 传递一个回调函数,然后在 `ParentComponent` 中定义这个回调函数,将 `message` 作为参数传递给它,最后在 `ChildComponent` 中调用这个回调函数来获取 `message`。 + +修改后的代码如下: + +```jsx +// ParentComponent.js +import Inula, { Component } from 'openinula'; +import ChildComponent from './ChildComponent'; + +class ParentComponent extends Component { + constructor(props) { + super(props); + this.state = { + message: 'Hello', + }; + } + + handleChange = (e) => { + this.setState({ message: e.target.value }); + }; + + render() { + return ( +
    + + this.state.message} /> +
    + ); + }; +} + + +// ChildComponent.js +import Inula, { Component } from 'openinula'; + +class ChildComponent extends Component { + render() { + return
    {this.props.getMessage()}
    ; + }; +} + +export default ParentComponent; +``` + +这样,我们通过回调函数的方式,将 `message` 的获取封装在了 `ParentComponent` 中,`ChildComponent` 组件就不需要再知道 `ParentComponent` 组件的内部情况,保证了 `ChildComponent` 的封装性。 + +### 条件渲染与列表渲染 + +条件渲染与列表渲染是 openInula 中常用的功能,条件渲染的方式可以根据不同的情况来显示不同的内容,提高用户体验。列表渲染可以简化代码逻辑,更便捷的开发代码。因此,JSX 也满足在 openInula 中可以实现条件渲染以及列表渲染。 + +1. **条件渲染**:使用 if 条件语句或三元表达式来实现条件渲染。 + + ```jsx + function UserGreeting(props) { + return

    Welcome back!

    ; + } + + function GuestGreeting(props) { + return

    Please sign up.

    ; + } + + // 直接使用 if-else 语句 + function Example(props) { + const isLoggedIn = props.isLoggedIn; + if (isLoggedIn) { + return ; + } + return ; + } + + // 使用三元表达式 + function Example(props) { + const isLoggedIn = props.isLoggedIn; + return ( + {isLoggedIn ? : } + ); + } + ``` + + 在这个示例中我们定义了两种问候用户的组件 `` 与 ``,并希望根据用户是否登录 `isLoggedIn` 分别展示前后者。我们可以使用 if-else 语句分别返回不同的组件,也可以通过三元表达式择一返回。 + + +2. **列表渲染**:使用 for 循环或 `map` 来实现组件列表渲染。 + + ```jsx + function List(props) { + const items = props.items.map((item, index) => ( +
  • {item}
  • + )); + + return
      {items}
    ; + } + + function App() { + const items = ['Item 1', 'Item 2', 'Item 3']; + + return ( +
    +

    List Demo

    + +
    + ); + } + ``` + + 在这个示例中,我们定义了一个 `List` 组件,它接收一个 `items` 属性,该属性是一个字符串数组。我们使用 `map` 函数将每个字符串转换为一个 `
  • ` 元素,并将它们存储在一个 `items` 数组中。最后,我们将这个数组作为子元素传递给 `
      ` 元素,以渲染整个列表。 + +### 事件 + +openInula 中支持事件是为了实现交互性和动态性的用户界面,通过在组件中定义事件处理函数,可以将用户的操作与组件的状态和行为关联起来。当用户触发事件时,openInula 会调用相应的事件处理函数,并根据需要更新组件的状态或执行其他操作,从而实现动态的用户界面。 + +openInula组件感知到用户触发事件是通过 `onXxxx` 属性来监听 DOM 事件,并在事件触发时执行事件的处理函数。因此在 openInula 中必须定义一个事件处理函数,在使用时只需要传递事件即可。 + +> 事件的命名规则:on+驼峰形式事件名 = 事件处理函数 + +#### 事件处理函数的定义 + +事件处理函数其实就是一个函数,它被用来响应特定的事件。当事件被处理时,事件函数就会被触发。 + +```jsx +function handleClick() { + // 处理点击事件的逻辑 + console.log('Button clicked!'); +} +``` + +#### 事件处理函数的触发 + +在openInula中,我们使用`onXxxx`属性来绑定事件处理函数,例如,使用`onClick`属性来绑定点击事件。函数绑定为了确保事件处理函数可以正确地访问组件实例的上下文(`this`)。有几种方法可以实现函数绑定: + +1. 在构造函数中使用 `bind` 方法绑定函数 + + ```jsx + class App extends Component { + constructor(props) { + super(props); + this.handleClick = this.onHandleClick.bind(this); + } + + onHandleClick() { + // 处理点击事件的逻辑 + console.log('Button clicked!'); + }; + + render() { + return ; + }; + }; + ``` + +2. 使用箭头函数定义事件处理函数 + + ```jsx + class App extends Component { + handleClick = () => { + // 处理点击事件的逻辑 + console.log('Button clicked!'); + }; + + render() { + return ; + }; + }; + ``` + + > 箭头函数可以避免`this`指向问题,是因为箭头函数没有自己的`this`,它会继承外层函数的`this`。 + +#### openInula支持的事件 + +- Clipboard Events 剪切板事件 + - 事件名: `onCopy`, `onCut`, `onPaste` + - 属性: `DOMDataTransfer`, `clipboardData` +- compositionEvent 复合事件 + - 事件名: `onCompositionEnd`, `onCompositionStart`, `onCompositionUpdate` + - 属性: `string`, `data` +- Keyboard Events 键盘事件 + - 事件名: `onKeyDown`, `onKeyPress`, `onKeyUp` + - 属性: `number`, `keyCode` +- Focus Events 焦点事件 (这些焦点事件在 openinula DOM 上的所有元素都有效,不只是表单元素) + - 事件名: `onFocus`, `onBlur` + - 属性: `DOMEventTarget`, `relatedTarget` +- Form Events 表单事件 + - 事件名: `onChange`, `onInput`, `onInvalid`, `onSubmit` +- Mouse Events 鼠标事件 + - 事件名: `onClick`, `onContextMenu`, `onDoubleClick`, `onDrag`, `onDragEnd`, `onDragEnter`, `onDragExit`, `onDragLeave`, `onDragOver`, `onDragStart`, `onDrop`, `onMouseDown`, `onMouseEnter`, `onMouseLeave`, `, onMouseMove`, `onMouseOut`, `onMouseOver`, `onMouseUp` +- Pointer Events 指针事件 + - 事件名: `onPointerDown`, `onPointerMove`, `onPointerUp`, `onPointerCancel`, `onGotPointerCapture`, `onLostPointerCapture`, `onPointerEnter`, `onPointerLeave`, `onPointerOver`, `onPointerOut` + +### Hook + +Hook 是 openInula 目前提供的一种函数,Hook 函数可以让我们在函数组件中使用状态管理、生命周期方法、副作用等功能。常用的[钩子函数](/apis/Inula#钩子函数)包括 `useState`、`useEffect`、`useContext`、`useReducer`等。 + +当然,当 openInula 提供的 Hook 组件无法满足您的需求时,您可以自定义 Hook。在 openInula 中,自定义 Hook 函数的本质是一种重用状态逻辑思想。每一个 Hook 函数都是普通的函数。主要是其使用了 openInula 自带的 Hook API 等。下面我们就举例说明如何自定义一个 Hook 函数。 + +```jsx +import Inula, { useState, useEffect } from 'openinula'; + +function useFetch(url) { + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + async function fetchData() { + const response = await fetch(url); + const data = await response.json(); + setData(data); + setLoading(false); + } + fetchData(); + }, [url]); + + return { data, loading }; +} +``` + +这个自定义的 Hook 函数 `useFetch` 接收一个URL作为参数,并返回一个包含 `data` 和 `loading` 状态的对象。在 `useEffect` 中,我们使用 `async/await` 语法来获取数据,并在获取数据后更新状态。 + +使用时: + +```jsx +import useFetch from './useFetch'; + +function MyComponent() { + const { data, loading } = useFetch('https://jsonplaceholder.typicode.com/todos/1'); + + if (loading) { + return
      Loading...
      ; + } + + return ( +
      +

      {data.title}

      +

      {data.completed ? 'Completed' : 'Not completed'}

      +
      + ); +} + +export default MyComponent; +``` + +在这个组件中,我们使用 `useFetch` 来获取数据,并根据 `loading` 状态显示不同的内容。这个自定义 Hook 函数可以在多个组件中重复使用,以避免重复的代码。 + +### 组件的生命周期 + +openInula 的组件创建时都会进行初始化步骤,在此过程会运行 openInula 所声明的生命周期钩子函数,便于开发者在特定阶段运行自己的代码,以实现复杂的项目逻辑。我们认为使用一个组件的主要流程遵循:**使用时创建,数据变化时更新,使用完卸载**。 + +#### 类组件的生命周期 + +在介绍类组件时,我们创建了一个 `Counter` 组件,其可以简单的实现计数器功能,但是当我们需要知道之前的值 `prevState` 以及当前的值 `currentState` 时,就需要使用更细节的代码控制,如生命周期。在下面新的 `Counter` 组件中我们调用了一些生命周期钩子函数,包含了组件的挂载、更新、卸载等过程。 + +```jsx +import { Component } from 'openinula'; + +class Counter extends Inula.Component { + constructor(props) { + super(props); + this.state = { + counter: 0 + }; + console.log('Constructor'); + } + + componentDidMount() { + console.log('Component Did Mount'); + } + + componentDidUpdate() { + console.log('Component Did Update'); + } + + componentWillUnmount() { + console.log('Component Will Unmount'); + } + + handleIncrement = () => { + this.setState(prevState => ({ + counter: prevState.counter + 1 + })); + }; + + render() { + console.log('Render'); + return ( +
      +

      Counter: {this.state.counter}

      + +
      + ); + } +} +``` + +**类组件的挂载** + +当 `Counter` 组件第一次通过 `render` 函数渲染在HTML页面时,这个方式被称为“挂载”。`componentDidMount` 钩子函数在组件挂载到 DOM 后被调用,可以用于执行初始化操作,例如发起网络请求、订阅事件等。 + +```jsx +componentDidMount() { + console.log('Component mounted'); +} +``` + +**类组件的更新** + +当组件中的内容变化时,则会触发组件的更新状态,会重新渲染页面。因此在组件挂载的情况存在两种,一种是初始化渲染,另一种是状态更新之后重新挂载。`componentDidUpdate` 在组件更新后被调用,可以用于处理组件的更新逻辑,比较前后状态的变化等。 + +```jsx +componentDidUpdate(prevProps, prevState) { + console.log('Component updated'); +} +``` + +**类组件的卸载** + +`componentWillUnmount` 在组件即将从 DOM 中卸载之前被调用,可以用于清理操作,例如取消网络请求、清除定时器等。 + +```jsx +componentWillUnmount() { + console.log('componentWillUnmount'); +} +``` + +#### 函数组件的生命周期 + +函数组件的生命周期是通过 `useEffect` 钩子函数来模拟的。 + +**函数组件的挂载** + +```jsx +// 模拟 componentDidMount +useEffect(() => { + console.log('Component did mount'); + // 在这里可以执行一些初始化操作 + // 也可以发送网络请求等操作 + // 注意:这个回调函数只会在组件挂载时执行一次 +}, []); +``` + +`useEffect`的第一个参数中的回调函数会被调用,模拟了`componentDidMount`。第二个参数为依赖项,可以控制回调函数的触发时机,这里未指定依赖项,则意味着只会在初次挂载时触发回调函数。 + +**函数组件的更新** + +```jsx +// 模拟 componentDidUpdate +useEffect(() => { + console.log('Component did update'); + // 在这里可以处理一些副作用操作 + // 例如,更新文档标题等 + // 注意:这个回调函数在组件更新时会执行 +}, [count]); +``` + +这里指定参数中的依赖项为 `count`,即只有依赖项 `count` 发生变化时,回调函数才会被调用。 + +**函数组件的卸载** + +```jsx +// 模拟 componentWillUnmount +useEffect(() => { + return () => { + console.log('Component will unmount'); + // 在这里可以执行一些清理操作 + // 例如,取消订阅、清除定时器等 + // 注意:这个回调函数只会在组件卸载时执行 + }; +}, []); +``` + +这里为回调函数设置了返回函数,在函数卸载时将调用这个返回函数中的操作,例如,取消订阅、清除定时器等。 + +## 快速进阶 + +### Ref + +openInula已经提供了两种管理数据的方式(`state` 和 `props`),但是针对一些特殊场景,当您的 openInula 组件需要与外部 API 通信时,通常需要在组件挂载后进行一些 DOM 操作,例如获取元素的尺寸、绑定事件监听器等。这些操作需要直接访问 DOM 元素,而 `props` 和 `state` 主要用于组件之间的数据传递和状态管理,不能达到操作 DOM 的目的,因此,openInula 还提供了 Ref 方式,允许我们直接操作组件的 DOM 元素或者调用组件内的方法,以进行数据交换。 + +#### Refs对象的创建 + +1. 使用 `createRef` 的方式可以创建一个 Ref 对象,可通过附加到 `ref` 属性上访问一个原生 DOM 元素或者组件。这种方式既可以在函数组件中使用,也可以在类组件中使用。 + + ```jsx + const ref = createRef(); + ``` + +2. 使用 `useRef(initialValue)` 创建,这种方式只能在函数组件中使用。 + + ```jsx + const ref = useRef(initialValue); + ``` + +> 上述两种方法的区别:`createRef` 每次渲染都会返回一个新的引用,而 `useRef` 每次都会返回相同的引用。详细请查阅[API参考](/apis/Inula)。 + +#### Ref 的两种使用场景 + +1. 存储变量 + + ```jsx + import Inula, { useState, useRef, useCallback } from 'openinula' + + export default function ClickWatch() { + let ref = useRef(0); + + const handleClick = useCallback(() => { + ref.current = ref.current + 1; + alert('You clicked ' + ref.current + ' times!'); + }, []); + + return ( + + ); + } + ``` + + 在上述示例中,通过使用`useRef(0)`我们创建了 + + ```jsx + { + current: 0 + } + ``` + + 这个对象,当对 `ref.current` 操作时,这个值是可变的,但是对象是不变的,这保证组件不会在每次递增时都触发重新渲染。 + +2. 操作DOM + + 通过使用 Ref,我们能够直接访问和操作 DOM 元素,而无需通过其他方式来获取或修改其值。下面的例子很好展示了 Ref 的用法。 + + ```jsx + import { useRef } from "openinula"; + + function Component() { + const inputRef = useRef(null); + + const handleClick = () => { + alert(`Input value: ${inputRef.current.value}`); + }; + + return ( +
      + + +
      + ); + } + ``` + + 在上述案例中,为了使用 Ref 特性,我们使用 `useRef` 钩子创建了一个 `inputRef` 变量,并将其初始化为 `null`。将 `inputRef` 传递给 `` 元素的 `ref` 属性。当按钮被点击时,则可以通过 `inputRef.current` 访问到DOM节点,并获取输入框的值。 + +> 注意:由于`ref`是可以避免重新渲染,因此,不要在渲染的过程中读取和写入,会导致结果不可控制。 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/introduction/page.mdx b/packages/website-next/src/app/docs/introduction/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..64c47a6032ed85d0e3e79931a0ac17fc683d6d46 --- /dev/null +++ b/packages/website-next/src/app/docs/introduction/page.mdx @@ -0,0 +1,41 @@ +--- +id: introduction +title: 项目介绍 +sidebar_label: 项目介绍 +--- + +# 项目介绍 + +OpenInula 是一个现代化的 JavaScript UI 框架,致力于提供极致性能和开发体验。 + +## 设计理念 + +- 无 API 哲学:只用 JSX + 原生 JS +- 编译优先:大部分逻辑编译期完成 +- 响应式:自动追踪依赖,极致性能 + +## 核心特性 + +- 直观的状态管理 +- 内置模板语法(if/for) +- 计算值与 watch +- 生命周期钩子 +- 兼容 React 生态 + +## 主要模块 + +- runtime:核心运行时 +- shared:通用工具 +- compiler:编译器 +- inula-bridge:兼容层 + +## 未来方向 + +- 更强的类型推导 +- 更丰富的生态组件 +- 更高效的编译优化 + +## 下一步 + +- [快速入门](./getting-started) +- [基础概念](next/core-concepts/introduction) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/layout.tsx b/packages/website-next/src/app/docs/layout.tsx new file mode 100644 index 0000000000000000000000000000000000000000..6eee41789fa2475bc50a2e9f556d1915bc182486 --- /dev/null +++ b/packages/website-next/src/app/docs/layout.tsx @@ -0,0 +1,233 @@ +import { ReactNode } from 'react' +import { Layout } from 'nextra-theme-docs' +/*import { getPageMap } from 'nextra/page-map'*/ +import 'nextra-theme-docs/style.css' + +export default async function RootLayout({children}: Readonly<{ children: ReactNode }>) { + //const allPages = await getPageMap() + + const docsMap = [ + { + name: "概述", + route: '/docs', + title: '概述', + kind: 'MdxPage', + }, + { + name: 'introduction', + route: '/docs/introduction', + title: 'Introduction', + kind: 'MdxPage' + }, + { + name: 'Quick start', + route: '/docs/quick-start', + title: '快速开始', + kind: 'MdxPage' + }, + { + name: 'reactivity', + route: '/docs/reactivity', + title: '响应式系统', + kind: 'Folder', + children: [ + { + name: 'state', + route: '/docs/reactivity/state', + title: '状态管理', + kind: 'MdxPage' + }, + { + name: 'computed', + route: '/docs/reactivity/computed', + title: '计算值', + kind: 'MdxPage' + }, + { + name: 'watch', + route: '/docs/reactivity/watch', + title: '监听系统', + kind: 'MdxPage' + }, + { + name: 'untrack', + route: '/docs/reactivity/untrack', + title: 'untrack(非响应式访问)', + kind: 'MdxPage' + } + ] + }, + { + name: 'template-system', + route: '/docs/template-system', + title: '模板系统', + kind: 'Folder', + children: [ + { + name: 'conditional', + route: '/docs/template-system/conditional', + title: '条件渲染', + kind: 'MdxPage' + }, + { + name: 'event-handling', + route: '/docs/template-system/event-handling', + title: '事件处理', + kind: 'MdxPage' + }, + { + name: 'list-rendering', + route: '/docs/template-system/list-rendering', + title: '列表渲染', + kind: 'MdxPage' + } + ] + }, + { + name: 'lifecycle', + route: '/docs/lifecycle', + title: '生命周期', + kind: 'Folder', + children: [ + { + name: 'mounting', + route: '/docs/lifecycle/mounting', + title: '挂载阶段', + kind: 'MdxPage' + }, + { + name: 'unmounting', + route: '/docs/lifecycle/unmounting', + title: '卸载阶段', + kind: 'MdxPage' + }, + { + name: 'cleanup', + route: '/docs/lifecycle/cleanup', + title: '清理阶段', + kind: 'MdxPage' + } + ] + }, + { + name: 'components', + route: '/docs/components', + title: '组件', + kind: 'Folder', + children: [ + { + name: 'composition', + route: '/docs/components/composition', + title: '组合模式', + kind: 'MdxPage' + }, + { + name: 'context', + route: '/docs/components/context', + title: '上下文', + kind: 'MdxPage' + }, + { + name: 'Dynamic', + route: '/docs/components/Dynamic', + title: '动态组件', + kind: 'MdxPage' + }, + { + name: 'ErrorBoundary', + route: '/docs/components/ErrorBoundary', + title: '错误边界', + kind: 'MdxPage' + }, + { + name: 'Fragment', + route: '/docs/components/Fragment', + title: 'Fragment', + kind: 'MdxPage' + }, + { + name: 'Portal', + route: '/docs/components/Portal', + title: 'Portal', + kind: 'MdxPage' + }, + { + name: 'props', + route: '/docs/components/props', + title: 'Props', + kind: 'MdxPage' + }, + { + name: 'Suspense', + route: '/docs/components/Suspense', + title: 'Suspense', + kind: 'MdxPage' + } + ] + }, + { + name: 'conventional', + route: '/docs/conventional', + title: '传统API文档', + kind: 'Folder', + children: [ + { + name: 'UserInstruction', + route: '/docs/conventional/UserInstruction', + title: '用户指南', + kind: 'MdxPage', + }, + { + name: 'QuickStart', + route: '/docs/conventional/QuickStart', + title: '快速入门', + kind: 'MdxPage' + }, + { + name: 'SwitchingGuide', + route: '/docs/conventional/SwitchingGuide', + title: '切换指导书', + kind: 'MdxPage' + }, + { + name: 'ReleaseNotes', + route: '/docs/conventional/ReleaseNotes', + title: '发行说明', + kind: 'MdxPage' + }, + { + name: 'FAQ', + route: '/docs/conventional/FAQ', + title: '常见问题', + kind: 'MdxPage' + }, + { + name: 'CodeOfConduct', + route: '/docs/conventional/CodeOfConduct', + title: '行为准则', + kind: 'MdxPage' + }, + { + name: 'ContributingGuide', + route: '/docs/conventional/ContributingGuide', + title: '贡献指南', + kind: 'MdxPage' + } + ] + } + ] + + return ( +
      + + {children} + +
      + ) +} \ No newline at end of file diff --git a/packages/website-next/src/app/docs/lifecycle/cleanup/page.mdx b/packages/website-next/src/app/docs/lifecycle/cleanup/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..8611801757462c5802c892e28a94435127ea51a6 --- /dev/null +++ b/packages/website-next/src/app/docs/lifecycle/cleanup/page.mdx @@ -0,0 +1,59 @@ +--- +id: cleanup +title: 清理操作 +sidebar_label: 清理操作 +--- + +# 清理操作 + +清理操作用于移除副作用,如定时器、事件监听、watch 清理函数等。 + +## 定时器清理 + +```tsx filename="TimerCleanup.jsx" +function Timer() { + let timer; + didMount(() => { + timer = setInterval(() => {}, 1000); + }); + willUnmount(() => clearInterval(timer)); + return
      定时器已启动
      ; +} +``` + +## 事件监听清理 + +```tsx filename="EventListener.jsx" +function Listener() { + function onResize() {} + didMount(() => window.addEventListener('resize', onResize)); + willUnmount(() => window.removeEventListener('resize', onResize)); + return
      监听窗口大小
      ; +} +``` + +## watch 清理函数 + +```tsx filename="WatchCleanup.jsx" +function Watcher() { + let timer; + watch(() => { + timer = setInterval(() => {}, 1000); + return () => clearInterval(timer); + }); + return
      watch 清理
      ; +} +``` + +## 最佳实践 + +- 所有副作用都应有清理逻辑 +- 推荐统一在 willUnmount/didUnmount 或 watch 清理函数中处理 + +## 注意事项 + +- 避免遗留定时器、事件监听等,防止内存泄漏 + +## 相关链接 + +- [卸载阶段](../unmounting) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/lifecycle/mounting/page.mdx b/packages/website-next/src/app/docs/lifecycle/mounting/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..2ea05b05178f9a691699a2669953c11388bd7355 --- /dev/null +++ b/packages/website-next/src/app/docs/lifecycle/mounting/page.mdx @@ -0,0 +1,49 @@ +--- +id: mounting +title: 挂载阶段 +sidebar_label: 挂载阶段 +--- + +# 挂载阶段 + +组件挂载时可执行副作用,如数据请求、事件监听等。OpenInula 提供 didMount 钩子。 + +## 基本用法 + +```tsx filename="PageTitle.jsx" +function PageTitle() { + let title = ''; + didMount(() => { + title = document.title; + }); + return

      页面标题:{title}

      ; +} +``` + +## 数据请求 + +```tsx filename="FetchData.jsx" +function FetchData() { + let data = null; + didMount(() => { + fetch('/api/data') + .then(res => res.json()) + .then(d => { data = d; }); + }); + return
      {JSON.stringify(data)}
      ; +} +``` + +## 最佳实践 + +- 只在 didMount 中执行副作用 +- 清理副作用请用 willUnmount/didUnmount + +## 注意事项 + +- didMount 只在组件首次挂载时执行一次 + +## 相关链接 + +- [卸载阶段](../unmounting) +- [清理操作](../cleanup) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/lifecycle/unmounting/page.mdx b/packages/website-next/src/app/docs/lifecycle/unmounting/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..01316bb4e0407fc74744a0b37fe31b6c2802478f --- /dev/null +++ b/packages/website-next/src/app/docs/lifecycle/unmounting/page.mdx @@ -0,0 +1,43 @@ +--- +id: unmounting +title: 卸载阶段 +sidebar_label: 卸载阶段 +--- + +# 卸载阶段 + +组件卸载时需清理副作用,防止内存泄漏。OpenInula 提供 willUnmount/didUnmount 钩子。 + +## 基本用法 + +```tsx filename="Timer.jsx" +function Timer() { + let timer; + didMount(() => { + timer = setInterval(() => {}, 1000); + }); + willUnmount(() => clearInterval(timer)); + // 或 didUnmount(() => clearInterval(timer)); + return
      定时器已启动
      ; +} +``` + +## 副作用清理 + +- 清理定时器、事件监听、watch 副作用等 +- 推荐所有副作用都在卸载时清理 + +## 最佳实践 + +- 所有副作用都应在卸载时清理 +- 推荐用 willUnmount/didUnmount + +## 注意事项 + +- 清理函数只在组件卸载时执行一次 +- 避免遗留定时器、事件监听等,防止内存泄漏 + +## 相关链接 + +- [挂载阶段](../mounting) +- [清理操作](../cleanup) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/page.mdx b/packages/website-next/src/app/docs/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..d606a91294cfe4d40fb7573bc6e968c7640679a4 --- /dev/null +++ b/packages/website-next/src/app/docs/page.mdx @@ -0,0 +1,110 @@ +# openInula 2 + +openInula 2版本是一个现代化的 JavaScript UI 开发库,具有以下特点: + +- **无 API 设计理念**:只需使用 JSX 和原生 JavaScript 即可直观编程 +- **编译优先**:通过编译时分析优化性能 +- **轻量级响应式系统**:高效的运行时更新机制 + +## 核心特性 + +### 直接状态管理 + +```tsx filename="Counter.jsx" +function Counter() { + let count = 0; // 直接声明状态 + + return ( +
      +

      计数: {count}

      + +
      + ); +} +``` + +### 内置流程控制 + +```tsx filename="UserList.jsx" +function UserList({ users }) { + return ( +
        + + {(user) => ( + +
      • {user.name}
      • +
        + )} +
        +
      + ); +} +``` + +### 计算值 + +```tsx filename="DoubleCounter.jsx" +function DoubleCounter() { + let count = 0; + const double = count * 2; // 自动计算的值 + + return
      双倍值: {double}
      ; +} +``` + +### 监听系统 + +```tsx filename="DataFetcher.jsx" +function DataFetcher() { + let data = null; + + watch(() => { + fetch('https://api.example.com/data') + .then(res => res.json()) + .then(_data => { + data = _data; + }); + }); + + return ( +
      + +
      {JSON.stringify(data, null, 2)}
      +
      + +

      加载中...

      +
      +
      + ); +} +``` + +## 快速开始 + +让我们通过以下章节来学习 openInula 2版本: + +1. [基础概念](./core-concepts/introduction) + +- 组件基础 +- JSX 语法 +- 状态管理 +2. [模板系统](./template-system/conditional) + +- 条件渲染 +- 列表渲染 +- 事件处理 +3. [响应式系统](./reactivity/state) + +- 状态声明 +- 计算值 +- 监听系统 +4. [组件开发](./components/props) + +- Props 传递 +- 组件组合 +- 上下文管理 +5. [生命周期](./lifecycle/mounting) + +- 挂载阶段 +- 卸载阶段 +- 清理操作 diff --git a/packages/website-next/src/app/docs/quick-start/page.mdx b/packages/website-next/src/app/docs/quick-start/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..09b2b169570a5021cb5e73d974b98e555d178dc3 --- /dev/null +++ b/packages/website-next/src/app/docs/quick-start/page.mdx @@ -0,0 +1,141 @@ +--- +id: getting-started +title: 快速入门 +sidebar_label: 快速入门 +--- + +# 快速入门 + +欢迎使用 openInula 2!本节将带你完成环境搭建、插件集成、项目初始化和第一个组件。 + +## 环境要求 + +- Node.js >= 16.14 +- 推荐使用 npm 8+ 或 pnpm/yarn + +## 使用 CLI 快速创建项目 + +OpenInula 提供了官方脚手架工具 `create-inula`,可以一键初始化新项目,无需手动配置。 + +### 安装与使用 + +无需全局安装,直接用 npx 或 npm create: + +```bash filename="create-project.sh" +# 推荐方式(无需全局安装) +npm create inula@latest my-app + +# 或者使用 npx +npx create-inula my-app +``` + +执行命令后,CLI 会引导你选择项目模板、打包方式(如 webpack/vite)等,并自动拉取依赖、初始化目录结构。 + +### 典型交互流程 + +1. 选择项目名称(如 my-app) +2. 选择模板(如 Next-app,后续会有更多模板) +3. 选择打包方式(webpack 或 vite) +4. 自动安装依赖并初始化项目 + +### 目录结构示例 + +```text filename="project-structure.txt" +my-app/ +├── src/ +│ └── main.tsx +├── public/ +│ └── index.html +├── package.json +└── ... +``` + +### 启动开发服务器 + +进入项目目录后,运行: + +```bash filename="start-dev.sh" +npm install +npm start +``` + +即可在浏览器中访问本地开发环境。 + +### 更多用法 + +详细参数和高级用法请参考 [create-inula README](https://github.com/openinula/openinula/tree/main/packages/create-inula/README.md)。 + + +## 集成到主流构建工具 + +OpenInula 提供统一的 unplugin 插件,支持 Vite、Rollup、Webpack、Nuxt、Vue CLI、esbuild 等主流工具。 + +### 安装依赖 + + +```bash filename="install-unplugin.sh" +npm i @openinula/unplugin +``` + +### Vite + +```ts filename="vite.config.ts" +import { defineConfig } from 'vite'; +import inulaNext from '@openinula/unplugin/vite'; + +export default defineConfig({ + plugins: [ + inulaNext({ /* 可选配置 */ }), + ], +}); +``` + +### Rollup + +```js filename="rollup.config.js" +import inulaNext from '@openinula/unplugin/rollup'; + +export default { + plugins: [ + inulaNext({ /* 可选配置 */ }), + ], +}; +``` + +### Webpack + +```js filename="webpack.config.js" +// webpack.config.js +module.exports = { + /* ... */ + plugins: [ + require('@openinula/unplugin/webpack')({ /* 可选配置 */ }) + ] +} +``` + + +## 第一个组件 + +```tsx filename="Hello.jsx" +function Hello() { + return

      你好,OpenInula!

      ; +} +``` + +## 目录结构 + +- src/ 代码目录 +- public/ 静态资源 +- package.json 项目配置 + +## 相关链接 + +- [unplugin 官方文档](https://github.com/unjs/unplugin) +- [OpenInula 插件源码](https://github.com/openinula/openinula/tree/main/next-packages/compiler/unplugin-inula-next) +- [更多示例 playground/](https://github.com/openinula/openinula/tree/main/next-packages/compiler/unplugin-inula-next/playground) + +## 下一步 + +- 阅读[项目介绍](./introduction) +- 深入[基础概念](next/core-concepts/introduction) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/reactivity/computed/page.mdx b/packages/website-next/src/app/docs/reactivity/computed/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..f7c455391c0dc33217e876041e9253f2b7791706 --- /dev/null +++ b/packages/website-next/src/app/docs/reactivity/computed/page.mdx @@ -0,0 +1,79 @@ +--- +id: computed +title: 计算值 +sidebar_label: 计算值 +--- + +# 计算值 + +在 openInula 2(zouyu)中,计算值(Computed)是指依赖于其他状态变量的表达式。你只需像写普通 JS 一样声明变量,编译器会自动识别并优化这些依赖关系。 + +## 基本用法 + +```tsx filename="DoubleCounter.jsx" +function DoubleCounter() { + let count = 0; + // 计算值:double 会自动随着 count 变化 + const double = count * 2; + + return ( +
      +

      当前计数:{count}

      +

      双倍值:{double}

      + +
      + ); +} +``` + +## 多重依赖 + +计算值可以依赖多个状态变量: + +```tsx filename="PriceCalculator.jsx" +function PriceCalculator() { + let price = 100; + let quantity = 2; + const total = price * quantity; + + return ( +
      +

      单价:{price}

      +

      数量:{quantity}

      +

      总价:{total}

      + +
      + ); +} +``` + +## 嵌套计算 + +计算值可以嵌套依赖其他计算值: + +```tsx filename="NestedComputed.jsx" +function NestedComputed() { + let a = 1; + const b = a + 2; + const c = b * 3; + + return
      c 的值:{c}
      ; +} +``` + +## 最佳实践 + +- 只需像写普通 JS 一样声明依赖关系,编译器会自动优化。 +- 避免在计算值中产生副作用(如修改外部状态)。 +- 计算值适合用于 UI 展示、派生数据等场景。 + +## 注意事项 + +- 计算值应为纯表达式,不要在其中执行异步操作或副作用。 +- 如果依赖的状态较多,建议提前拆分变量,提升可读性。 + +## 下一步 + +- 了解[监听系统](./watch)的用法 +- 学习[状态管理](./state)的更多技巧 +- 探索[组件组合](../components/composition)的高级用法 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/reactivity/state/page.mdx b/packages/website-next/src/app/docs/reactivity/state/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..dcc8478a4b95df1620ebabfb6c37b073256e84d6 --- /dev/null +++ b/packages/website-next/src/app/docs/reactivity/state/page.mdx @@ -0,0 +1,293 @@ +--- +id: state +title: 状态管理 +sidebar_label: 状态管理 +--- + +# 状态管理 + +OpenInula 的状态管理采用直观的方式,无需特殊的 API 或 Hook,直接使用 JavaScript 变量和赋值即可。 + +## 基础用法 + +### 声明状态 + +在组件中直接声明变量作为状态: + +```tsx filename="Counter.jsx" +function Counter() { + let count = 0; // 直接声明状态 + + return ( +
      +

      计数:{count}

      + +
      + ); +} +``` + +### 对象状态 + +对于复杂的状态,可以使用对象: + +```tsx filename="UserProfile.jsx" +function UserProfile() { + let user = { + name: '张三', + age: 25, + preferences: { + theme: 'dark', + language: 'zh' + } + }; + + function updateTheme(newTheme) { + user.preferences.theme = newTheme; // 直接修改对象属性 + } + + return ( +
      +

      {user.name}

      +

      年龄:{user.age}

      +
      + 主题:{user.preferences.theme} + +
      +
      + ); +} +``` + +### 数组状态 + +处理数组类型的状态: + +```tsx filename="TodoList.jsx" +function TodoList() { + let todos = [ + { id: 1, text: '学习 OpenInula', done: false }, + { id: 2, text: '写文档', done: false } + ]; + + function addTodo(text) { + todos = [ + ...todos, + { + id: todos.length + 1, + text, + done: false + } + ]; + } + + function toggleTodo(id) { + todos = todos.map(todo => + todo.id === id + ? { ...todo, done: !todo.done } + : todo + ); + } + + return ( +
      + +
        + + {(todo) => ( +
      • toggleTodo(todo.id)} + style={{ + textDecoration: todo.done ? 'line-through' : 'none' + }} + > + {todo.text} +
      • + )} +
        +
      +
      + ); +} +``` + +## 状态更新 + +### 直接赋值 + +最简单的状态更新方式是直接赋值: + +```tsx filename="CounterWithMessage.jsx" +function Counter() { + let count = 0; + let message = ''; + + function increment() { + count++; // 直接赋值 + message = `当前计数:${count}`; // 状态之间可以互相依赖 + } + + return ( +
      +

      {message}

      + +
      + ); +} +``` + +### 批量更新 + +当需要同时更新多个状态时: + +```tsx filename="UserForm.jsx" +function UserForm() { + let formData = { + username: '', + email: '', + age: 0 + }; + + function resetForm() { + // 一次性更新多个字段 + formData = { + username: '', + email: '', + age: 0 + }; + } + + function updateField(field, value) { + formData[field] = value; // 更新单个字段 + } + + return ( + + updateField('username', e.target.value)} + /> + updateField('email', e.target.value)} + /> + updateField('age', parseInt(e.target.value))} + /> + + + ); +} +``` + +## 最佳实践 + +### 1. 状态初始化 + +将复杂的初始状态提取为函数: + +```tsx filename="createInitialState.jsx" +function createInitialState() { + return { + user: null, + preferences: { + theme: 'light', + language: 'zh' + }, + todos: [] + }; +} + +function App() { + let state = createInitialState(); + + function reset() { + state = createInitialState(); // 重置为初始状态 + } + + return ( +
      + {/* 使用状态 */} +
      + ); +} +``` + +### 2. 状态组织 + +对于复杂组件,建议将相关状态组织在一起: + +```tsx filename="ShoppingCart.jsx" +function ShoppingCart() { + let cart = { + items: [], + total: 0, + + addItem(product) { + this.items = [...this.items, product]; + this.updateTotal(); + }, + + removeItem(productId) { + this.items = this.items.filter(item => item.id !== productId); + this.updateTotal(); + }, + + updateTotal() { + this.total = this.items.reduce((sum, item) => sum + item.price, 0); + } + }; + + return ( +
      +

      购物车 ({cart.items.length})

      +

      总计:¥{cart.total}

      + {/* 渲染购物车内容 */} +
      + ); +} +``` + +### 3. 派生状态 + +避免重复存储可以从现有状态计算出的值: + +```tsx filename="TodoApp.jsx" +function TodoApp() { + let todos = []; + + // 好的做法:通过计算获得派生状态 + const completedCount = todos.filter(todo => todo.done).length; + const remainingCount = todos.length - completedCount; + + return ( +
      +

      完成:{completedCount}

      +

      剩余:{remainingCount}

      +
      + ); +} +``` + +## 注意事项 + +1. 避免直接修改复杂对象的深层属性,推荐使用不可变更新模式 +2. 确保状态更新是同步的,避免在异步操作中直接修改状态 +3. 对于大型应用,考虑使用状态管理库 +4. 注意状态的作用域,避免全局状态 + +## 下一步 + +学习完状态管理后,你可以: + +1. 了解[计算值](./computed.mdx)的使用 +2. 探索[监听系统](./watch)的功能 +3. 学习[组件组合](../components/composition)的最佳实践 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/reactivity/untrack/page.mdx b/packages/website-next/src/app/docs/reactivity/untrack/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..b96f273f54dda1c76ee7ede24ac64826d59725c0 --- /dev/null +++ b/packages/website-next/src/app/docs/reactivity/untrack/page.mdx @@ -0,0 +1,124 @@ +--- +id: untrack +title: untrack(非响应式访问) +sidebar_label: untrack +--- + +# untrack(非响应式访问) + +`untrack` 是 openInula 2(zouyu)响应式系统中的一个高级工具,用于在响应式计算、watch、或其他依赖收集场景下,临时"跳出"依赖追踪,获取某个状态的当前值但不建立响应式依赖。 + +## 作用 + +- **避免依赖收集**:在 computed、watch、或其他响应式回调中,某些变量的读取不希望被追踪为依赖时使用。 +- **性能优化**:减少不必要的响应式更新,避免副作用函数被频繁触发。 +- **实现只读快照**:获取某一时刻的状态快照,而不关心后续变化。 + +## 基本用法 + +```tsx filename="Example.jsx" +import { untrack } from 'openinula'; + +function Example() { + let count = 0; + let log = []; + + watch(() => { + // 只在 count 变化时触发 + log.push(`count: ${count}, time: ${untrack(() => Date.now())}`); + }); + + return ( +
      + +
        + {(item) =>
      • {item}
      • }
        +
      +
      + ); +} +``` + +## Demo 示例 + +下面是一个最小可运行的 untrack 用法示例: + +```tsx filename="Demo.jsx" +import { watch, untrack } from 'openinula'; + +function Demo() { + let a = 0; + let b = 0; + watch(() => { + // 只依赖 b,a 的变化不会触发 watch + console.log('sum:', untrack(() => a) + b); + }); + return ( + <> + + + + ); +} +``` +点击 a 按钮不会触发 watch,点击 b 按钮会触发 watch 并输出 sum。 + +## 在 computed 中使用 + +```tsx filename="ComputedUntrack.jsx" +import { untrack } from 'openinula'; + +function ComputedUntrack() { + let count = 0; + // 只依赖 count,不依赖 Date.now() + const message = `当前计数:${count},时间:${untrack(() => Date.now())}`; + + return
      {message}
      ; +} +``` + +## 在 watch 中使用 + +```tsx filename="WatchUntrack.jsx" +import { untrack } from 'openinula'; + +function WatchUntrack() { + let count = 0; + let lastTime = 0; + + watch(() => { + // 只在 count 变化时触发 + lastTime = untrack(() => Date.now()); + }); + + return ( +
      + +

      上次更新时间:{lastTime}

      +
      + ); +} +``` + +## 在响应式系统的其他场景 + +- **避免副作用循环**:在副作用函数中读取但不追踪依赖,防止死循环。 +- **只读快照**:在复杂计算或日志记录时,获取当前值但不建立响应式关系。 + +## 最佳实践 + +- 仅在确实不希望建立响应式依赖时使用 `untrack`。 +- 用于性能优化、避免不必要的副作用触发。 +- 保持代码可读性,避免滥用。 + +## 注意事项 + +- `untrack` 只影响其回调函数内部的依赖收集。 +- 不要在 `untrack` 内部修改响应式状态,只做只读访问。 +- 滥用 `untrack` 可能导致响应式失效,需谨慎使用。 + +## 相关链接 + +- [计算值(computed)](./computed.mdx) +- [监听系统(watch)](./watch) +- [状态管理](./state.mdx) \ No newline at end of file diff --git a/packages/website-next/src/app/docs/reactivity/watch/page.mdx b/packages/website-next/src/app/docs/reactivity/watch/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..9e2e4eae40d1d7f1871241daa248b21edc92e853 --- /dev/null +++ b/packages/website-next/src/app/docs/reactivity/watch/page.mdx @@ -0,0 +1,114 @@ +--- +id: watch +title: 监听系统 +sidebar_label: 监听系统 +--- + +# 监听系统(watch) + +openInula 2(zouyu)提供了 `watch` 方法,用于监听状态或计算值的变化,并在变化时执行副作用逻辑。 + +## 基本用法 + +```tsx filename="FetchData.jsx" +function FetchData({ url }) { + let data = null; + + watch(() => { + fetch(url) + .then(res => res.json()) + .then(_data => { + data = _data; + }); + }); + + return ( +
      + +
      {JSON.stringify(data, null, 2)}
      +
      + +

      加载中...

      +
      +
      + ); +} +``` + +## 依赖追踪 + +`watch` 会自动追踪其回调中用到的所有状态和计算值,只要依赖发生变化,回调就会重新执行。 + +```tsx filename="Logger.jsx" +function Logger() { + let count = 0; + watch(() => { + console.log('count 变化为:', count); + }); + + return ; +} +``` + +## 清理副作用 + +可以在 `watch` 回调中返回一个清理函数,用于移除定时器、事件监听等副作用: + +```tsx filename="Timer.jsx" +function Timer() { + let time = Date.now(); + + watch(() => { + const timer = setInterval(() => { + time = Date.now(); + }, 1000); + // 返回清理函数 + return () => clearInterval(timer); + }); + + return
      当前时间:{new Date(time).toLocaleTimeString()}
      ; +} +``` + +## 多个 watch + +可以在同一个组件中使用多个 `watch`,分别监听不同的状态: + +```tsx filename="MultiWatch.jsx" +function MultiWatch() { + let a = 1; + let b = 2; + + watch(() => { + console.log('a 变化:', a); + }); + watch(() => { + console.log('b 变化:', b); + }); + + return ( +
      + + +
      + ); +} +``` + +## 最佳实践 + +- 只在需要副作用(如数据请求、日志、定时器等)时使用 `watch` +- 避免在 `watch` 中直接修改依赖自身的状态,防止死循环 +- 善用清理函数,避免内存泄漏 + +## 注意事项 + +- `watch` 回调应为同步函数,避免直接返回 Promise +- 清理函数只在依赖变化或组件卸载时调用 +- 不要在 `watch` 外部直接调用副作用逻辑 + +## 下一步 + +- 学习[状态管理](./state.mdx)的更多用法 +- 了解[计算值](./computed.mdx)的高级技巧 +- 探索[生命周期](../lifecycle/mounting)的管理 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/template-system/conditional/page.mdx b/packages/website-next/src/app/docs/template-system/conditional/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..677fc7a51a8d34b058c4c488a87aaf475c1dd08a --- /dev/null +++ b/packages/website-next/src/app/docs/template-system/conditional/page.mdx @@ -0,0 +1,208 @@ +--- +id: conditional +title: 条件渲染 +sidebar_label: 条件渲染 +--- + +# 条件渲染 + +OpenInula 提供了内置的条件渲染标签,使得条件渲染变得简单直观。 + +## 基本用法 + +### if 条件 + +最简单的条件渲染使用 `if` 标签: + +```tsx filename="SimpleCondition.jsx" +function Notification({ message }) { + return ( +
      + +

      {message}

      +
      +
      + ); +} +``` + +### if-else 条件 + +使用 `if` 和 `else` 标签处理两种情况: + +```tsx filename="IfElseCondition.jsx" +function LoginStatus({ isLoggedIn }) { + return ( +
      + + + + + + +
      + ); +} +``` + +### 多重条件 + +使用 `else-if` 处理多个条件: + +```tsx filename="MultipleConditions.jsx" +function TrafficLight({ color }) { + return ( +
      + +

      停止

      +
      + +

      注意

      +
      + +

      通行

      +
      + +

      信号灯故障

      +
      +
      + ); +} +``` + +## 条件表达式 + +条件表达式可以是任何返回布尔值的表达式: + +```tsx filename="ComplexConditions.jsx" +function UserProfile({ user }) { + return ( +
      + = 18}> +

      成年用户

      +
      + +

      高级会员

      +
      +
      + ); +} +``` + +## 嵌套条件 + +条件标签可以嵌套使用: + +```tsx filename="NestedConditions.jsx" +function ProductDisplay({ product, user }) { + return ( +
      + + + + + + + + +

      请登录后购买

      +
      +
      + +

      商品不存在

      +
      +
      + ); +} +``` + +## 最佳实践 + +### 1. 提前返回 + +对于简单的条件判断,可以使用提前返回模式: + +```tsx filename="EarlyReturn.jsx" +function AdminPanel({ user }) { + if (!user) { + return

      请先登录

      ; + } + + if (!user.isAdmin) { + return

      权限不足

      ; + } + + return
      管理员面板
      ; +} +``` + +### 2. 条件组合 + +对于复杂的条件逻辑,建议将条件提取为变量: + +```tsx filename="ComplexConditionLogic.jsx" +function UserAccess({ user, resource }) { + const canView = user && user.permissions.includes('view'); + const canEdit = canView && user.permissions.includes('edit'); + const isOwner = resource.ownerId === user.id; + + return ( +
      + +
      {resource.content}
      + + + +
      + +

      无访问权限

      +
      +
      + ); +} +``` + +### 3. 避免过度嵌套 + +当条件逻辑变得复杂时,考虑将其拆分为多个组件: + +```tsx filename="ComponentComposition.jsx" +function UserActions({ user, resource }) { + return ( +
      + + + + + + +
      + ); +} + +function ViewPermission({ user, children }) { + return ( + + {children} + + +

      无访问权限

      +
      + ); +} +``` + +## 注意事项 + +1. 条件标签必须包含 `cond` 属性 +2. `else-if` 和 `else` 标签必须跟在 `if` 或 `else-if` 标签之后 +3. 条件表达式应该返回布尔值 +4. 避免在条件表达式中进行复杂的计算,建议提前计算并存储结果 + +## 下一步 + +学习完条件渲染后,你可以: + +1. 了解[列表渲染](../list-rendering)的使用方法 +2. 探索[事件处理](../event-handling)系统 +3. 学习[组件组合](../../components/composition)的技巧 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/template-system/event-handling/page.mdx b/packages/website-next/src/app/docs/template-system/event-handling/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..6fd5c7f64ff01df0aaf866f347a598a1a98f2071 --- /dev/null +++ b/packages/website-next/src/app/docs/template-system/event-handling/page.mdx @@ -0,0 +1,304 @@ +--- +id: event-handling +title: 事件处理 +sidebar_label: 事件处理 +--- + +# 事件处理 + +OpenInula 提供了简单直观的事件处理机制,使用 `onXxx` 属性来绑定事件处理函数。 + +## 基本用法 + +### 点击事件 + +最常用的事件处理是点击事件: + +```tsx filename="ClickCounter.jsx" +function ClickCounter() { + let count = 0; + + function handleClick() { + count++; + } + + return ( + + ); +} +``` + +### 内联事件处理 + +对于简单的事件处理,可以直接使用内联函数: + +```tsx filename="SimpleButton.jsx" +function SimpleButton() { + let message = ''; + + return ( +
      + +

      {message}

      +
      + ); +} +``` + +## 常用事件 + +### 表单事件 + +处理表单输入和提交: + +```tsx filename="LoginForm.jsx" +function LoginForm() { + let username = ''; + let password = ''; + + function handleSubmit(e) { + e.preventDefault(); + console.log('提交登录:', { username, password }); + } + + return ( +
      + username = e.target.value} + placeholder="用户名" + /> + password = e.target.value} + placeholder="密码" + /> + +
      + ); +} +``` + +### 鼠标事件 + +处理鼠标相关事件: + +```tsx filename="MouseTracker.jsx" +function MouseTracker() { + let position = { x: 0, y: 0 }; + + return ( +
      { + position = { + x: e.clientX, + y: e.clientY + }; + }} + style={{ height: '200px', background: '#f0f0f0' }} + > +

      鼠标位置:{position.x}, {position.y}

      +
      + ); +} +``` + +### 键盘事件 + +处理键盘输入: + +```tsx filename="KeyboardInput.jsx" +function KeyboardInput() { + let pressedKeys = []; + + return ( + { + pressedKeys = [...pressedKeys, e.key]; + }} + onKeyUp={e => { + pressedKeys = pressedKeys.filter(key => key !== e.key); + }} + placeholder="请按键..." + /> + ); +} +``` + +## 事件修饰符 + +OpenInula 支持事件修饰符来简化常见的事件处理场景: + +```tsx filename="EventModifiers.jsx" +function EventModifiers() { + return ( +
      + {/* 阻止默认行为 */} + e.preventDefault()} href="#"> + 阻止默认跳转 + + + {/* 停止事件传播 */} +
      console.log('外层点击')}> + +
      +
      + ); +} +``` + +## 自定义事件 + +在组件间通信时,可以通过 props 传递自定义事件处理函数: + +```tsx filename="CustomButton.jsx" +function CustomButton({ onClick, children }) { + return ( + + ); +} + +function App() { + return ( + console.log('处理点击')}> + 点击我 + + ); +} +``` + +## 最佳实践 + +### 1. 事件处理函数命名 + +建议使用 `handle` 前缀命名事件处理函数: + +```tsx filename="UserForm.jsx" +function UserForm() { + let formData = { + name: '', + email: '' + }; + + function handleNameChange(e) { + formData.name = e.target.value; + } + + function handleEmailChange(e) { + formData.email = e.target.value; + } + + function handleSubmit(e) { + e.preventDefault(); + console.log('提交表单:', formData); + } + + return ( +
      + + + +
      + ); +} +``` + +### 2. 事件参数处理 + +在需要传递额外参数时,使用箭头函数包装: + +```tsx filename="ItemList.jsx" +function ItemList() { + const items = ['项目1', '项目2', '项目3']; + + function handleItemClick(item, index, e) { + console.log('点击项目:', item, '索引:', index, '事件:', e); + } + + return ( +
        + + {(item, index) => ( +
      • handleItemClick(item, index, e)}> + {item} +
      • + )} +
        +
      + ); +} +``` + +### 3. 性能优化 + +对于频繁触发的事件,考虑使用节流或防抖: + +```tsx filename="SearchInput.jsx" +function SearchInput() { + let searchTerm = ''; + let timeoutId; + + function handleInput(e) { + // 使用防抖处理搜索 + clearTimeout(timeoutId); + timeoutId = setTimeout(() => { + searchTerm = e.target.value; + console.log('搜索:', searchTerm); + }, 300); + } + + willUnmount(() => { + clearTimeout(timeoutId); + }); + + return ( + + ); +} +``` + +## 注意事项 + +1. 事件处理函数中的 `this` 绑定 +2. 避免在渲染函数中创建内联函数 +3. 记得清理定时器和事件监听器 +4. 注意事件冒泡和捕获的顺序 + +## 下一步 + +学习完事件处理后,你可以: + +1. 探索[组件组合](../../components/composition)的技巧 +2. 了解[生命周期](../../lifecycle/mounting)的管理 +3. 学习[状态管理](../../reactivity/state)的最佳实践 \ No newline at end of file diff --git a/packages/website-next/src/app/docs/template-system/list-rendering/page.mdx b/packages/website-next/src/app/docs/template-system/list-rendering/page.mdx new file mode 100644 index 0000000000000000000000000000000000000000..8703d13294aa533f42abe1b3eb1ffaaf559f14b7 --- /dev/null +++ b/packages/website-next/src/app/docs/template-system/list-rendering/page.mdx @@ -0,0 +1,257 @@ +--- +id: list-rendering +title: 列表渲染 +sidebar_label: 列表渲染 +--- + +# 列表渲染 + +OpenInula 提供了内置的 `for` 标签来实现列表渲染,使得数组的遍历和渲染变得简单直观。 + +## 基本用法 + +### 简单列表 + +使用 `for` 标签遍历数组: + +```tsx filename="FruitList.jsx" +function FruitList() { + const fruits = ['苹果', '香蕉', '橙子']; + + return ( +
        + + {(fruit) =>
      • {fruit}
      • } +
        +
      + ); +} +``` + +### 带索引的列表 + +通过第二个参数获取索引: + +```tsx filename="NumberedList.jsx" +function NumberedList() { + const items = ['第一项', '第二项', '第三项']; + + return ( +
        + + {(item, index) => ( +
      • #{index + 1}: {item}
      • + )} +
        +
      + ); +} +``` + +## 对象列表 + +渲染对象数组: + +```tsx filename="UserTable.jsx" +function UserList() { + const users = [ + { id: 1, name: '张三', age: 25 }, + { id: 2, name: '李四', age: 30 }, + { id: 3, name: '王五', age: 28 } + ]; + + return ( + + + + + + + + + + + {(user) => ( + + + + + + )} + + +
      ID姓名年龄
      {user.id}{user.name}{user.age}
      + ); +} +``` + +## 列表操作 + +### 列表过滤 + +可以在渲染前对列表进行过滤: + +```tsx filename="ActiveUserList.jsx" +function ActiveUserList() { + const users = [ + { id: 1, name: '张三', active: true }, + { id: 2, name: '李四', active: false }, + { id: 3, name: '王五', active: true } + ]; + + const activeUsers = users.filter(user => user.active); + + return ( +
        + + {(user) =>
      • {user.name}
      • } +
        +
      + ); +} +``` + +### 列表排序 + +可以在渲染前对列表进行排序: + +```tsx filename="SortedUserList.jsx" +function SortedUserList() { + const users = [ + { id: 1, name: '张三', age: 25 }, + { id: 2, name: '李四', age: 30 }, + { id: 3, name: '王五', age: 28 } + ]; + + const sortedUsers = [...users].sort((a, b) => a.age - b.age); + + return ( +
        + + {(user) => ( +
      • {user.name} ({user.age}岁)
      • + )} +
        +
      + ); +} +``` + +## 嵌套列表 + +可以嵌套使用 `for` 标签: + +```tsx filename="NestedList.jsx" +function NestedList() { + const departments = [ + { + name: '技术部', + teams: ['前端组', '后端组', '测试组'] + }, + { + name: '产品部', + teams: ['设计组', '运营组'] + } + ]; + + return ( +
      + + {(dept) => ( +
      +

      {dept.name}

      +
        + + {(team) =>
      • {team}
      • } +
        +
      +
      + )} +
      +
      + ); +} +``` + +## 最佳实践 + +### 1. 列表项组件化 + +对于复杂的列表项,建议将其抽取为单独的组件: + +```tsx filename="UserItemComponent.jsx" +function UserItem({ user }) { + return ( +
      + {user.name} +
      +

      {user.name}

      +

      {user.email}

      +
      +
      + ); +} + +function UserList() { + const users = [/* ... */]; + + return ( +
      + + {(user) => } + +
      + ); +} +``` + +### 2. 列表更新优化 + +当列表项可能发生变化时,建议使用不可变数据操作: + +```tsx +function TodoList() { + let todos = [ + { id: 1, text: '学习 OpenInula', done: false }, + { id: 2, text: '写文档', done: false } + ]; + + function toggleTodo(id) { + todos = todos.map(todo => + todo.id === id + ? { ...todo, done: !todo.done } + : todo + ); + } + + return ( +
        + + {(todo) => ( +
      • toggleTodo(todo.id)} + style={{ textDecoration: todo.done ? 'line-through' : 'none' }} + > + {todo.text} +
      • + )} +
        +
      + ); +} +``` + +## 注意事项 + +1. `for` 标签必须包含 `each` 属性 +2. 回调函数必须返回 JSX 元素 +3. 对于大列表,考虑使用分页或虚拟滚动 +4. 避免在渲染函数中进行复杂计算,建议提前处理数据 + +## 下一步 + +学习完列表渲染后,你可以: + +1. 了解[事件处理](../event-handling)系统 +2. 探索[组件组合](../../components/composition)的技巧 +3. 学习[状态管理](../../reactivity/state)的最佳实践 \ No newline at end of file diff --git a/packages/website-next/src/app/error.tsx b/packages/website-next/src/app/error.tsx new file mode 100644 index 0000000000000000000000000000000000000000..fd91b8bc3a9aa5b85f7d594f308f0e92a4f9f57d --- /dev/null +++ b/packages/website-next/src/app/error.tsx @@ -0,0 +1,16 @@ +'use client'; + +export default function Error({ error, reset }: { error: Error; reset: () => void }) { + return ( +
      +

      出错了

      +

      {error.message}

      + +
      + ); +} \ No newline at end of file diff --git a/packages/website-next/src/app/examples/page.tsx b/packages/website-next/src/app/examples/page.tsx new file mode 100644 index 0000000000000000000000000000000000000000..028441bb27f4907a7c7d00e916a8b56d5996b41e --- /dev/null +++ b/packages/website-next/src/app/examples/page.tsx @@ -0,0 +1,34 @@ +"use client"; + +export default function ExamplesPage() { + return ( +
      +
      +
      +
      +

      + 示例库 +

      +
      +
      +
      + +
      +
      +
      +